基于stm32f4的音频信号分析仪

设计要求

基本要求(80分)
(1)输入阻抗:50Ω,输入信号峰-峰值:10mV~10V,频率成分范围:20Hz~
20kHz,频率分辨力:20Hz。
(2)检测输入信号的总功率和各频率分量的频率和功率。
发挥部分(20分)
测量被测正弦信号的失真度。

设计方案

确定mcu

上限频率20kHz,即最低采样频率40kHz。分辨率20Hz,即最少2000点傅里叶变换,取2048点。
51做2048点FFT不现实,FPGA和DSP芯片没用过。而stm32有dsp库,f4硬件支持浮点运算,最后确定用stm32f407zgt6。

前级调理控制方案

stm32的adc输入电压范围是0~3.3v,12位ad即电压分辨率为 3.3v / 4096 = 0.805mV。设计要求的输入信号峰峰值范围是10mv~10v,32自带AD最小分辨率足够。
但电压动态范围太大,必定要对输入衰减或放大,才符合adc的输入要求。

  1. 模拟开关+通用运放
    模拟开关选择不同的电阻接入运放电路,调节放大倍数
    调节范围:与开关个数、电阻数值有关
  2. 电阻网络+通用运放
    用DAC中的权电阻网络降压,再用运放升压。
    调节范围:DAC控制位位数
  3. 程控放大器
    PGA2320直接控制电压幅度
    调节范围:控制电压的范围

方案选择:程控放大与前两个方案相比成本都较高,且不熟悉,优先选前两个。
典型模拟开关CD4051,相当于单刀八掷开关,由三位地址位选通。即三线可控档位数2^3=8
典型DAC DAC0832,八位权电阻网络,由八位控制位控制。即八线可控档位2^8=256
明显,DAC可控的精度更好,难度与模拟开关相差不大,3根线跟8根线是同一数量级。故最后确定选DAC

通用运放电路

运放用于信号放大,及搭建电平抬升电路。
输入信号并不刁钻,我就随意地选择了同相放大和同相加法器,后来得知实际工程中两者都是反相的用得更多。
参考
http://bbs.eeworld.com.cn/thread-643415-1-1.html
https://www.baidu.com/sf_edu_wenku/view/04e571655f0e7cd185253663
电平抬升1.65v,目的是将交流信号抬到32AD输入范围的中值。1.65v是5v电源用电阻分压出来的,而同相加法器的输入电阻较大,直接相连会影响阻值,影响到1.65v

数值计算

image.png

程序

ADC预采样,前级调理,ADC正式采样4096点,FFT运算,对旁瓣进行处理,排序,LCD展示频谱以及功率前五的频率。

低通滤波

本打算对输入信号进行低通滤波,截止频率20kHz。但考虑到通带传递函数不严格=1,会对后续功率计算造成影响,最后还是放弃滤波环节。
关于滤波器的基础知识:
无源低通滤波:RC电路
有源低通滤波:RC电路加上同相放大器
时间常数 tau = RC
上限截止角频率 omegah = 1 / RC
上限截止频率 fh = 1 / 2pi×RC

完整工程

链接:https://pan.baidu.com/s/1rtmtdbbn8hdQXMjOq316NQ
提取码:21ax

你可能感兴趣的:(基于stm32f4的音频信号分析仪)