单片机课程设计基于STM32F1的频谱分析仪班级:电子信息工程1111班姓名(学号):指导老师:题目:基于STM32F1的频谱分析仪关键词:频谱分析仪,STM32F1,快速傅立叶变换,FFT,双色点阵摘要本设计是基于STM32F1的频谱分析仪。以STM32F103RBT6为控制核心,双色点阵屏为显示器。硬件上由电源管理,通信模块,放大电路,以及单片机最小系统组成。算法上采用简洁稳定的快速傅立叶变换作为主要的核心算法,辅以自动增益控制,实现信号从时域到频域的变换。通过双色点阵屏显示,具有直观,清晰等特点。1.引言目前,由于频谱分析仪价格昂贵,学校里只有少数实验室配有频谱仪。但是电子信息类教学,如果没有频谱仪辅助观察,同学们只能从书本中抽象理解信号的特征,严重影响教学实验效果。正对这种现状,提出了一种基于STM32F1的简易频谱分析仪的设计方案,其优点是成本低,能够直观的反映信号在频域的特征。2.系统方案本设计采用STM32F1作为核心处理器,该处理器内核架构ARMCortex-M3,具有高性能、低成本、低功耗等特点。主控板包括电源模块、红外通信模块、TDA2822放大模块等;信号经过放大电路放大之后,由芯片自带的ADC将模拟信号转换为数字信号,再由主控芯片对数字信号进行快速傅立叶变换,驱动双色点阵屏显示。软件算法的核心内容就是快速傅立叶变换。如下图为本设计总体框图。信号采集↓↓TDA2822信号放大↓↓MAX2756KHz滤波↓↓STM32进行快速傅立叶变换↓↓32*64双色点阵屏显示3.系统硬件设计针对前面提出的整体设计方案,本设计采取模块化策略,将各个功能部分开来设计,最后组合起来。3.1电源管理模块系统的核心芯片为STM32F103,常用工作电压为3.3V,同时内部的ADC工作的参考电压也是3.3V,一般的外部电源的电压都为5V,要使系统正常工作,需要将5V的电源电压稳压到3.3V。常用的78系列稳压芯片已不再适用,必须选择性能更好的稳压芯片。经综合考虑,本电路采用LM1117-3.3作为电源部分的核心芯片。外部电源5V输入LM1117-3.3稳压为3.3V。由于点阵屏显示部分的电流较大,但是不在我们主控板上,所以暂不做考虑。电路图如下。3.2信号放大模块TDA2822是OTL功放,输出电容起耦合作用,因为OTL功放在在静态时输出端都会有Vcc/2伏的输出,这样会搞坏扬声器,所以需要加个电容,隔离。单片机处理的话就不用输出电容了。STM32的AD模拟口输入的电压不能太大,超过了ADC的参考电压可能就直接烧毁了,还好TDA2822的工作电压范围广,直接给它3.3V供电就行。输出的1.6V连到单片机的模拟口。3.3单片机最小系统该部分主要就是复位电路以及晶体振荡器:3.4红外遥控电路3.5PCB设计图4.系统软件设计软件设计上由控制核心STM32F1对采样转换得到的数字信号进行处理,计算出各个频率分量的幅值,驱动点阵屏显示。下图是软件流程:4.1.快速傅立叶变换以及相关原理数字信号的傅里叶变换,通常采用离散傅里叶变换(DFT)方法。DFT存在的不足是计算量太大,很难进行实时处理。计算一个N点的DFT,一般需要2N次复数乘法和N(N-1)次复数加法运算.因此,当N较大或要求对信号进行实时处理时,往往难以实现所需的运算速度。1965年,J.W.Cooly和J.W.Tukey发现了DFT的一种快速算法,经其他学者进一步改进,很快形成了一套高效运算方法,这就是现在通用的快速傅里叶变换,简称FFT(TheFastFourierTransform)。快速傅里叶变换的实质是利用式(1)中的权函数nkNW的对称性和周期性,把N点DFT进行一系列分解和组合,使整个DFT的计算过程变成一系列叠代运算过程,使DFT的运算量大大简化,为DFT及数字信号的实时处理和应用创造了良好的条件。快速傅里叶变换算法如下:错误!未找到引用源。由(1)式可知,对每一个n,计算X(n)须作N次复数乘法及N-1次复数加法,要完成这组变换共需错误!未找到引用源。次乘法及N(N-1)次复数加法。但以下介绍的快速傅里叶变换的算法,可大大减少运算次数,提高工作效率。当2rN时,n和k可用二进制数表示:1212012022rrrrrrnnnnnnn错误!未找到引用源。1212012022rrrrrrkkkkkkk又记NWe,则(1)式可改写为0011011112001200()()rprrrrkkkXnnnxkkkW(2)式中:1212120120(22)(22)rrrrrrrrPnkkkknnn12112212011202(22)2(22)2rrrrrrrrrrrrnnnknnnkP120120(22)rrrrKnnnW(3)因为22[]1rrNNWWe所以(2)可改成0011011112001200()()rrrrrkkkXnnnxkkk12112212120112020120(22)2(22)2(22)rrrrrrrrrrrrrrrrnnnknnnkKnnn(4)201201300020()()rrrkxnnkkxnkk102(2)22rnnrkW(5)120011()()rrrrXnnnxnnn则式(5)即为式(4)的分解形式。将初始数据代入式(5)的第一个等式,可得每一组计算数据,一般将痗L-1组计算数据代入式(5)的第L个等式,计算后可得第L组计算数据(L=1,2,…,γ),计算公式也可表示为10110200120()()rrrrkxnkkxkkk121200(22)rrrrnnnkW=10121201012120(0)(0)PlrrrlrrrxnnnkkkxnnnkkkW(6)式中121120222rrrllPnnn(7)根据式(6),第L个数组中每个120120()()llrrrrxkxnnnkkk的计算只依赖于上一个数组的两个数据这两个数据的标号相差12/2YlN,即/2ljin,而且这两个数据只用于计算第L个数组中标号的数据(等号右端为二进制数)。当1ln分别取0和1时,分别有,/2lkikjin。因此,用上一组的两个数据计算所得的两个新数据仍可储存在原来位置,计算过程中只需要N个存储器。将()lxi与(/2)llxin称为第L个数组中的对偶结点对。计算每个对偶结点对只需一次乘法,事实上由式(6)可得11()()[]2plllNxixiiW211()()[]22plllllNNxixixiW式中:lrlrnP2...22210n;02222...22nnPlrlrlr别为式(7)中1ln取0,1时对应的P值。因2/21112NPPPR,于是对偶结点的pW有如下关系:111222][PNPNNPPWeWW,因此式(6)可表示为1111()()[]2()()[]22pllllplllllNxixixiWNNxixixiWP的求法:在)(ixl中,i写成二进制数01110......kknnnlrl右移lr位,就成为110...0...0lnnn颠倒位序得),...,2,1(0...0...011rlnnnpl式(5)吕,前面的γ个等式,每个等式均对应一组数据进行计算,每组数据都有N/2对结点,根据式(9),每对结点只需作1次乘法和2次加法,因此,每组数据只需N/2次乘法和N次加法,因而完成γ组数据的计算共需Nγ/2次乘法和Nγ次加法。音频的频率范围及表现力度:音频的频率范围、音质的评价标准一般认为20Hz-20kHz是人耳听觉频带,称为“声频”。这个频段的声音称为“可闻声”,高于20kHz的称为“超声”,低于20Hz的称为“次声“。所谓声音的质量,是指经传输、处理后音频信号的保真度。目前,业界公认的声音质量标准分为4级,即:数字激光唱盘CD-DA质量,其信号带宽为10Hz~20kHz;调频广播FM质量,其信号带宽为20Hz~15kHz;调幅广播AM质量,其信号带宽为50Hz~7kHz;电话的话音质量,其信号带宽为200Hz~3400Hz。可见,数字激光唱盘的声音质量最高,电话的话音质量最低。除了频率范围外,人们往往还用其它方法和指标来进一步描述不同用途的音质标准。音频频率范围一般可以分为四个频段,即:低频段(30—150HZ);中低频段(30—150HZ);中低频(150—500HZ);中高频段(500—5000HZ);高频段(5000—20kHZ)。30—150HZ频段:能够表现音乐的低频成分,使欣赏者感受到强劲有力的动感。150—500HZ频段:能够表现单个打击乐器在音乐中的表现力,是低频中表达力度的部分。500—5000HZ频段:主要表达演唱者或语言的清淅度及弦乐的表现力。5000—20kHZ频段:主要表达音乐的明亮度,但过多会使声音发破。由于我们主要是对音频信号进行处理,并且一般音频信号的能量一般集中在低频部分,所以我们选择12KHz的采样频率比较合适。FFT结果的物理意义:一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。程序中,我的采样频率Fs=12KHz,FFT采样点数N=256,分辨率=Fs/N=46.875Hz,也就是说每两个相邻的柱条所代表的频率成分相差46.875Hz。5.测试250Hz正弦波信号测试:600Hz正弦波信号测试:200Hz正弦波信号测试:从图中可以看出,输入信号中含有更高频率成分的杂波,在图中表现为一个低频率的信号成分显示出来,这是因为我们没有滤波的原因。应