基于STM32的音频信号分析设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于STM32的音频信号分析设计与实现

作者:梁方舟李金泉黄训磊王玉花

来源:《现代电子技术》2014年第01期

摘要:基于ARM Cortex⁃M3内核的32位处理器STM32F103和快速傅里叶变换(FFT)算法实现了音频信号频谱的分析。整个系统由前级信号调理、A/D采样电路、CPU运算电路和LCD显示电路等组成。实验表明,系统能够检测20 Hz~10 kHz范围内的频率成份并显示音频信号频谱,该方案成本低,具有一定的应用价值。

关键词:音频信号; FFT; STM32;基⁃4时间抽取

中图分类号: TN911.7⁃34 文献标识码: A 文章编号: 1004⁃373X(2014)01⁃0019⁃03

音频信号分析应用于音频制作、信号分析等领域,如音频设备的研发与生产、低频信号的综合分析等。本设计利用频谱分析原理来分析被测音频信号的频率、频谱,传统的频谱分析方法有扫频法、数字滤波法。采用STM32实现快速傅里叶变换(FFT)设计方案,通过FFT把被测的音频信号由时域信号转换为频域信号,将其分解成分立的频率分量。

1 系统设计

音频信号通过前级信号处理电路放大和滤波及模数转换,经STM32进行FFT运算后获得信号的频谱,单片机控制A/D转换器实时采集信号,频谱在液晶屏扫描显示。单片机采用ST 公司的低功耗STM32F103ZET6 32位单片机,其内部含有3个12位16通道A/D转换模块和2个12位D/A转换模块。系统框图如图1所示。

1.1 信号调理与采集

设计思想:为满足输入信号较大的动态范围,必须在信号进行A/D转换前进行合理的处理,使其在A/D量化范围内达到量化精度最高,该方法相当于AD位数的增加。本设计要求输入信号幅度范围(峰⁃峰值)为0.01 mV~10 V,即100 dB的输入信号动态范围。设定ADC 芯片的最小输入信号峰⁃峰值为500 mV,再设定ADC的输入动态范围为20lg(10 V/500 mV),即26 dB,故需要5路放大电路,每一路放大倍数固定,分别为62 400,8 000,400,20,1倍。由于设计小信号放大的增益较大,放大器的选择尤为关键,根据影响放大器输出的主要参数:运放的增益带宽积、噪声电压密度、噪声电流密度、失调电流和失调电压等,选择TI公司生产的运放OPA637,该运放增益带宽积约800 MHz,输入换算电压噪声密度为[4.5 nVHz,]输入偏置电流2 pA,输入失调电压130 μV。具体电路如图2所示。

图1 系统框图

抗混叠滤波器设计:信号送到ADC之前要对信号进行抗混叠低通滤波器处理,防止高频分量信号被采样,产生频谱混叠,而影响给定较低频率信号的幅值分析。为此设计了一个截止频率为15 kHz的四阶巴特沃斯低通滤波器作为抗混叠滤波器。

1.2 基⁃4时间抽取FFT

基⁃4时间抽取(Radix⁃4 Decimation In Time,DIT4)的FFT 算法思想是将长序列逐次分解为4个短序列,最后由短序列的DFT逐次合成长序列的DFT。基⁃4时间抽取相比于基⁃2时间抽取,复数乘法的运算量减少,随之而来运算速度加快,因此这里采用基⁃4时间抽取。基⁃4时间抽取FFT是将时域序列[x[k]]以前后两部分按奇偶顺序逐级抽取重新排列形成4个短序列,由此4个短序列的DFT合成的频域序列[X[k]]按自然顺序排列,故称为基⁃4时间抽取FFT。设序列[x[k]]的长度为[N=4M,][M]为正整数。则基⁃4时间抽取FFT计算公式为:

[Xm=X1m+WmNX2m+W2mNX3m+W3mNX4mXm+N4=X1m-jWmNX2m-

W2mNX3m+jW3mNX4mXm+2N4=X1m-WmNX2m+W2mNX3m-

W3mNX4mXm+3N4=X1m+jWmNX2m-W2mNX3m-jW3mNX4m]

式中:[m=0,1,2,…,N4-1;][X1m,X2m,X3m和X4m]分别是与[x[k]]按对4的余数顺序重新排列后的序列[x1k,][x2k,x3k]和[x4k]对应的[N4]点DFT。

由此可以得出DIT4⁃FFT的蝶形运算的信号流图,如图3所示。

图3 基⁃4时间抽取蝶形运算的信号流图

设采样率为[fs,]则第[fi=ifsN]频率点[Xi=ai+jbi,][i=0,1,2,…,N2-1],则原信号所含该频率的分量[Si]为:

[Si=ai2+bi2N,i=0Si=Aicos2πfit+θi=2ai2+bi2Ncos2πifsNt+arctanbia i,]

[i=1,2,…,N2-1]

通过上式,可从采集的信号中提取出各频率点的幅度值,作为音频信号的分析结果。

1.3 软件设计和流程图

系统软件设计分为采样、量化、基⁃4 FFT、各频率分量幅值计算和液晶屏显示共5个部分。其中片上ADC完成采样与量化,MCU完成基⁃4 FFT及幅值计算,液晶屏完成最终显示。软件流程图如图4所示。

图4 软件流程图

软件采用“STM32F10xxx DSP Lib”的1 024点基⁃4 时间抽取FFT,该库的核心FFT算法采用的是汇编语言,速度快、效率高,一次1 024点FFT最快运算时间能达到1.768 ms,因此对整个系统影响很小,故采用之。

通过对基⁃4 FFT的分析,便可设计出幅值计算的算法。模块代码如下:

ADC_Sample[count_flag++]=ADC_GetConversionValue(ADC1); //转换结果存储

ft_asm_test(ADC_FFT_Out,ADC_Sample);

//调用基⁃4 FFT 变换和幅值计算函数

void fft_asm_test(vu32 *OUT,vu32*IN)

{

cr4_fft_1024_stm32(OUT, IN, NPT); //DSP LIB 1 024点FFT

fft_asm_powerMag(OUT); //计算幅值

}

void fft_asm_powerMag(vu32*p)

{

for(i=0;i

{

AX=(*(p+i)>16; //复数实部

AY=(*(p+i)>>16); //复数虚部

相关文档
最新文档