基于STMF的频谱分析仪
音频的频率范围及表现力度:
音频的频率范围、音质的评价标准一般认为20Hz-20kHz是人耳听觉频带,称为“声频”。这个频段的声音称为“可闻声”,高于20kHz的称为“超声”,低于20Hz的称为“次声“。
所谓声音的质量,是指经传输、处理后音频信号的保真度。目前,业界公认的声音质量标准分为4级,即:
数字激光唱盘CD-DA质量,其信号带宽为10Hz~20kHz;
主控板包括电源模块、红外通信模块、TDA2822放大模块等;信号经过放大电路放大之后,由芯片自带的ADC将模拟信号转换为数字信号,再由主控芯片对数字信号进行快速傅立叶变换,驱动双色点阵屏显示。
软件算法的核心内容就是快速傅立叶变换。如下图为本设计总体框图。
信号采集
↓
↓
TDA2822信号放大
↓
↓
MAX2756KHz滤波
[2]杨路明.C语言程序设计教程北京邮电大学出版社
[3]郭天祥.新概念51单片机C语言教程电子工业出版社
*先将lBUFOUT分解成实部(X)和虚部(Y),然后计算幅值(sqrt(X*X+Y*Y)
*********************************************************************************************************
单片机课程设计
基于STM32F1的频谱分析仪
班级:电子信息工程1111班
姓名(学号):
指导老师:
题目:基于STM32F1的频谱分析仪
关键词:频谱分析仪,STM32F1,快速傅立叶变换,FFT,双色点阵
摘要
本设计是基于STM32F1的频谱分析仪。以STM32F103RBT6为控制核心,双色点阵屏为显示器。硬件上由电源管理,通信模块,放大电路,以及单片机最小系统组成。算法上采用简洁稳定的快速傅立叶变换作为主要的核心算法,辅以自动增益控制,实现信号从时域到频域的变换。通过双色点阵屏显示,具有直观,清晰等特点。
if(lX&0x8000)
{
X=(~(lX&0x7fff))+1;
}
else
{
X=lX&0x7fff;
}
if(lY&0x8000)
{
Y=(~(lY&0x7fff))+1;
}
else
{
Y=lY&0x7fff;
}
X/=64;//除以64,要不然数值太大
Y/=64;//除以64,要不然数值太大
Mag=sqrt(X*X+Y*Y)/NPT;//计算幅值
经综合考虑,本电路采用LM1117-3.3作为电源部分的核心芯片。外部电源5V输入LM1117-3.3稳压为3.3V。由于点阵屏显示部分的电流较大,但是不在我们主控板上,所以暂不做考虑。电路图如下。
3.2
TDA2822是OTL功放,输出电容起耦合作用,因为OTL功放在在静态时输出端都会有Vcc/2伏的输出,这样会搞坏扬声器,所以需要加个电容,隔离。单片机处理的话就不用输出电容了。STM32的AD模拟口输入的电压不能太大,超过了ADC的参考电压可能就直接烧毁了,还好TDA2822的工作电压范围广,直接给它3.3V供电就行。输出的1.6V连到单片机的模拟口。
↓
↓
STM32进行快速傅立叶变换
↓
↓
32*64双色点阵屏显示
3.
针对前面提出的整体设计方案,本设计采取模块化策略,将各个功能部分开来设计,最后组合起来。
3.1
系统的核心芯片为STM32F103,常用工作电压为3.3V,同时内部的ADC工作的参考电压也是3.3V,一般的外部电源的电压都为5V,要使系统正常工作,需要将5V的电源电压稳压到3.3V。常用的78系列稳压芯片已不再适用,必须选择性能更好的稳压校里只有少数实验室配有频谱仪。但是电子信息类教学,如果没有频谱仪辅助观察,同学们只能从书本中抽象理解信号的特征,严重影响教学实验效果。
正对这种现状,提出了一种基于STM32F1的简易频谱分析仪的设计方案,其优点是成本低,能够直观的反映信号在频域的特征。
2.
本设计采用STM32F1作为核心处理器,该处理器内核架构ARMCortex-M3,具有高性能、低成本、低功耗等特点。
快速傅里叶变换算法如下:
由(1)式可知,对每一个n,计算X(n)须作N次复数乘法及N-1次复数加法,要完成这组变换共需 次乘法及N(N-1)次复数加法。但以下介绍的快速傅里叶变换的算法,可大大减少运算次数,提高工作效率。
当 时,n和k可用二进制数表示:
又记 ,则(1)式可改写为
(2)
式中:
(3)
因为 所以(2)可改成
式中: ; 别为式(7)中 取0,1时对应的P值。因 ,于是对偶结点的 有如下关系:
,因此式(6)可表示为
P的求法:在 中,i写成二进制数 右移 位,就成为
颠倒位序得 式(5)吕,前面的γ个等式,每个等式均对应一组数据进行计算,每组数据都有N/2对结点,根据式(9),每对结点只需作1次乘法和2次加法,因此,每组数据只需N/2次乘法和N次加法,因而完成γ组数据的计算共需Nγ/2次乘法和Nγ次加法。
运算,通常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结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。
5000—20kHZ频段:主要表达音乐的明亮度,但过多会使声音发破。
由于我们主要是对音频信号进行处理,并且一般音频信号的能量一般集中在低频部分,所以我们选择12KHz的采样频率比较合适。
FFT结果的物理意义:
一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT
程序中,我的采样频率Fs=12KHz,FFT采样点数N=256,分辨率=Fs/N=46.875Hz,也就是说每两个相邻的柱条所代表的频率成分相差46.875Hz。
5.
250Hz正弦波信号测试:
600Hz正弦波信号测试:
200Hz正弦波信号测试:
从图中可以看出,输入信号中含有更高频率成分的杂波,在图中表现为一个低频率的信号成分显示出来,这是因为我们没有滤波的原因。应该对信号先经过6KHz低通滤波器,但考虑到成本,我们舍弃了这一部分。
低频段(30—150HZ);
中低频段(30—150HZ);
中低频(150—500HZ);
中高频段(500—5000HZ);
高频段(5000—20kHZ)。
30—150HZ频段:能够表现音乐的低频成分,使欣赏者感受到强劲有力的动感。
150—500HZ频段:能够表现单个打击乐器在音乐中的表现力,是低频中表达力度的部分。500—5000HZ频段:主要表达演唱者或语言的清淅度及弦乐的表现力。
(4)
(5)
则式(5)即为式(4)的分解形式。将初始数据代入式(5)的第一个等式,可得每一组计算数据,一般将痗L-1组计算数据代入式(5)的第L个等式,计算后可得第L组计算数据(L=1,2,…,γ),计算公式也可表示为
=
(6)
式中 (7)
根据式(6),第L个数组中每个 的计算只依赖于上一个数组的两个数据这两个数据的标号相差 ,即 ,而且这两个数据只用于计算第L个数组中标号的数据(等号右端为二进制数)。当 分别取0和1时,分别有 。因此,用上一组的两个数据计算所得的两个新数据仍可储存在原来位置,计算过程中只需要N个存储器。将 与 称为第L个数组中的对偶结点对。计算每个对偶结点对只需一次乘法,事实上由式(6)可得
//[0]0123...63
//[1]0123...63
//[2]0123...63
//[3]0123...63
//.
//.
//.
//[31]0123...63
u8LED_RRAM[32][8];//红色缓存区
u8LED_GRAM[32][8];//绿色缓存区
5.
[1]李建忠.单片机原理及应用(第二版)西安电子科技大学出版社
lBUFMAG[i]=(u32)(Mag*65536);//存在lBUFMAG中