基于STM32的FFT频谱分析+波形识别

您所在的位置:网站首页 噪声频谱分析实验报告 基于STM32的FFT频谱分析+波形识别

基于STM32的FFT频谱分析+波形识别

2024-07-16 18:32| 来源: 网络整理| 查看: 265

一.硬件部分

信号发生器,正点原子精英板,3.5’TFTLCD,两根杜邦线(接PC1和GND)

二.基本思路

1.使用ADC采集音频信号

2.使用官方提供的FFT函数(1024点)对采集到的信号进行处理

3.量化、频谱图显示

采样频率:Fs = 2400Hz(触摸版本可以根据实际情况调整)

样本数量:NPT = 1024

三.程序编写

1.ADC采样 这次用到的是ADC的DMA传输,这可以减少对程序的占用。这里着重关注这几行代码:

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1 工作在独立模式 ADC_InitStructure.ADC_ScanConvMode =DISABLE; //模数转换工作在非扫描模式 ADC_InitStructure.ADC_ContinuousConvMode =DISABLE; //模数转换工作在不连续转换模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; //Timer1触发转换开启(定时器T1的CC1通道,控制采样频率)

假设有ADC1有四个通道需要转换(本例中只有一个通道):

连续转换单次转换扫描模式开始转换CH0、CH1、CH2、CH3转换完成后,继续转换CH0开始转换CH0、CH1、CH2、CH3转换完成后停止,等待ADC的下一次启动非扫描模式开始转换CH0,转换完成后,继续转换CH0转换完成后停止,等待ADC的下一次启动

我的代码就是按这个写的,不这样写应该也可以,不过我认为还是要多注意细节,不然根本不知道问题出在哪儿。

DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA 外设 ADC 基地址 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_Value; //DMA 内存基地址

DMA传输注意这两句,存放地址。

2.FFT频谱分析 先下载一个FFT官方库,添加这几个文件 在这里插入图片描述 主要就是这几个函数

for(i=0;ia[i+1]&&a[i]>a[i-1]) { aThirdMax = a[i]; nThirdMax=i; fThirdMax=f[nThirdMax]; } } for ( i=1; i aFourthMax&&a[i]>a[i+1]&&a[i]>a[i-1]) { aFourthMax = a[i]; nFourthMax=i; fFourthMax=f[nFourthMax]; } } k=fabs(2*fMax-fSecondMax); k1=fabs(3*fMax-fSecondMax); m=fabs((float)(aMax-3.0*aSecondMax)); if(k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3