音频信号分析仪实验报告Word格式文档下载.docx
- 文档编号:21763949
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:1.15MB
音频信号分析仪实验报告Word格式文档下载.docx
《音频信号分析仪实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《音频信号分析仪实验报告Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
五、总结…………………………………………………………21
参考文献……………………………………………………………22
附录…………………………………………………………………22
摘要
本文主要论述了基于STM32单片机的音频信号分析仪的具体实现。
设计的关键部分是快速傅里叶变换(FastFourierTransform,FFT)。
通过使用定点运算及FFT算法,该仪器每秒可完成115次1024点32位精度的FFT运算,可满足信号带宽20Hz~10KHz、频率分辨力20Hz的要求。
结果通过触屏LCD显示,显示出时域和频域波形并能进行两者切换,调整波形位置、大小,可以显示出测量的峰峰值、周期,可以判断输入是否为周期信号。
系统采用程控放大器PGA202KP,通过STM32内部的ADC检测输人信号幅度控制放大器放大倍数,实现了自动检测放大输入信号;
采用两种频率控制ADC交替采样完成信号幅和频率的准确测量。
Abstract
ThisarticlemainlyelaboratedbasedontheSTM32monolithicintegratedcircuittonictrainsignalinganalyzerconcreterealization.ThisanalyzerusestheFFTfastalgorithmicanalysistonic12trainsignaling,theresultthroughtheoscilloscopedemonstrationfrequencyspectrumandtheLCDdemonstration.Andjoinstheadjustmentfunction.SystemuseprogramcontrolamplifierPGA202,throughtheADCexaminationinputsignalscopecontrolamplifierenlargementfactor,realizestheentireautomaticdetectionenlargementinputsignalsystemalsotousetwokindoffrequencycontrolsADCsamplingtocompletethesignalscopeandthefrequencyaccuratesurveyinturn.
关键字
STM32PGA202频域分析FFT失真度
一、方案比较论证
1.1控制器选择
在数字信号处理中,常用的控制器有FPGA、DSP及STM32。
FPGA和DSP都有较快的数据处理速度,能实时地、快速地监测信号量的变化。
考虑到价格、功耗及本题目的要求,选择STM32作为系统的主控芯片。
1.2放大器设计方案
方案一:
电阻网络程控放大器
使用运算放大器对信号进行放大,用微处理器控制模拟开关或继电器来切换不同的增益电阻,从而实现放大增益的软件控制。
此方案理论上可以通过选择高精度的电阻和高性能的模拟开关(继电器)来达到信号的精密放大,但是运算放大器存在温漂,而且电路也比较复杂。
方案二:
集成程控运算放大器
直接选用集成程控运算放大器,如BURR-BROWN公司的PGA系列的PGA101、PGA103、PGA203、PGA206等,它们具有低漂移、低非线性、髙共模抑制比和宽通频带等优点,同时使用方便。
但通常增益数量有限,只能在特定的几个增益间切换。
而多增益量程的PGA往往在精度、噪声等方面性能较低等特点。
通过对比发现,方案二使用集成程控运算放大器,获得了较好的精度、噪声性能,通过精密电阻分压,扩大了增益范围。
通过设置集成程控放大器的控制电平来选择放大倍数,精密电阻分压可获得较大的增益范围,为了尽量减少开关电阻引人误差,使用继电器进行分压选择。
同时在校准时,将A/D测量输出值与参考值相比较,通过D/A输出调节放大器精度,从而进一步提高系统精度,所以选择方案二。
1.3主控芯片的选择
在处理音频信号时,对ADC采样的精度要求较高。
并且需要对信号做傅里叶变换以及控制LCD显示时,这对主控芯片的工作速度有一定的要求。
综合考虑,我们采用了STM32F103作为主控芯片,该芯片是基于32位的Cortex-M3内核,其最高工作频率可达72MHz,其内部集成了2个12位模数转换器,转换范围0至3.6V。
采用STM32F103可以满足系统对MCU工作频率的要求,同时省去了外部ADC模块,但是对外部调理电路有一定的要求。
1.4FFT计算方式选择
方案一:
使用VHDL硬件实现。
FFT的VHDL程序编写难度大,短时内不易实现。
方案二:
利用STM32通过软件实现。
STM32支持C语言编程方式,普通的C语言版的FFT稍加改正即可应用到本方案中。
从时间上考虑,短期内我们不可能实现一个用硬件实现的FFT算法,因此我们选用方案二来实现FFT的计算。
二、硬件设计
2.1总体设计
总体设计思路:
信号经过电压跟随器后进入峰值检测然后经过两个电压比较器把输入信号分为三段,然后分别进入不同的增益放大电路进行放大,然后进入ADC进行采样,然后利用STM32进行软件编程来进行FFT计算,然后在同步显示在液晶屏上。
2.2模块单元设计
2.2.1电压跟随
针对音频信号的特点以及题目中对精度的要求,我们选用了特别适合音频信号处理的经典运放NE5532。
信号进入后首先经过一与50欧姆精密电阻并联的跟随器,以满足题目中的50欧姆输入阻抗的要求,同时增强带后级带负载的能力。
然后经过隔直电容进入后级放大电路。
图2电压跟随电路设计图
输入信号经过电压跟随电路得到更稳定输出:
图3电压跟随电路仿真效果
2.2.2放大模块
因为STM32内置的A/D对1〜2V的信号能做出精度较高的A/D转换,所以设计放大倍数时,通过STM32增益控制和电阻分压后的PGA202输出电压信号在此范围内最佳。
因此将输入信号电压分为三块放大,保证其输入STM32的电压在1-2v左右,获得相对精确的A/D转换。
想才序号
输入输入电压范围
放大倍数选择
输出电压范围
1
0-500mv
5
0-2.5v
2
500mv-2.5v
1
3
2.5v-5v
0.5
1.25v-2.5v
表1电压放大分组
同时通过峰值保持电路记录一个FFT运算周期内的信号峰值,通过与设定的参考电压进行比较以确定信号的峰峰值范围,以作为下一次采样时放大通道的选择参考;
控制器通过模拟开关来选择不同的放大通道。
2.2.2.15倍放大电路
图45倍放大电路设计图
图55倍放大电路仿真效果
2.2.2.21倍放大电路
图61倍放大电路设计图
图71倍放大电路仿真效果
5倍放大和一倍放大电路,利用的是最基本的运算电路,同相比例运算电路。
2.2.2.30.5倍放大电路
0.5倍的电压放大是为了满足后端电路ADC模块的输入范围0到3.3v的需要,0.5倍不能用同相比例运算电路,我们选择的是两路反向比例运算电路级联,前一级是放大一倍,为了使信号相位反相,以便于在下一级0.5倍放大后与输入信号同相,电路图如下所示:
图80.5倍放大电路设计图
图90.5倍放大电路仿真效果
2.2.3峰值检测电路
为了很好的实现不同信号的不同放大倍数,在比较电路前加了一峰值检测电路,如图所示,利用的是二极管的单向导电性和电容的充放电特性来检测并保持峰值的。
当输入信号大于二极管的导通电压时,二极管导通给电容充电,当信号达最大后开始变小时,利用电容的电压不突变特性保持峰值且输出到后级电路,利用场效应管和三极管电路在一定时间内释放掉所保持的峰值,接着检测随后的峰值。
图10峰值检测电路设计图
图11峰值检测电路仿真效果
2.2.4滤波模块
虽然由集成运放和R、C组成的有源滤波电路,具有不用电感、体积小、重量轻,集成运放的开环电压增益和输入阻抗均很高,输出阻抗又低,构成有源滤波电路后还具有一定的电压放大和缓冲作用等优点。
但是因其品质因素Q值无法做的很大,也就导致其通频带宽度无法做的很窄,造成了该滤波器对频率的选择性不是很好,对干扰信号的抑制能力也不是很强,所以在选择设计滤波器方案的同时,要注意结合实际情况,在满足实际要求的状态下合理选用滤波器的设计方案。
图12滤波电路设计图
图13滤波电路仿真效果
2.2.5电压抬高模块
由于STM32的输入电压为0-3.3v,输入语音信号时处在X轴下半部分的信号会被滤掉,引起失真,所以应该将输入信号X轴上拉,让整个语音信号处在STM32的输入范围内。
由于输入信号在0-3v,所以应将整体抬升1.5v,考虑误差情况,将信号抬升1.6v就可以满足条件。
图14电压抬高电路设计图
图15电压抬高电路仿真效果
2.2.6模拟开关、比较器模块
模拟开关采用CD4015芯片,将3个放大信号输入芯片,通过STM32芯片内部控制选择一条通路输出相应放大信号。
比较器通过对峰值检测输出信号与标准电压的比较给出相应电平,通过PD8,PD9两个输出信号的控制,组合成00、01、10、11四种控制情况,在STM32中参与FFT算法的选择,并通过PD0、PD1口控制模拟开关的选择。
三、软件设计
系统程序设计的核心是FFT算法。
本设计采用时间抽取基4定点FFT算法。
使用基4算法,在进行蝶形单元运算时可以充分利用芯片内核的寄存器和乘法累加器。
由于STM32内核不含浮点运算单元,软件模拟浮点运算效率较低,而STM32是32位内核,使用定点数计算,既可以减少运算又能保证计算精度。
由于FFT算法是对复数进行的,在处理输人数据时,将1024点纯实数采样数据转换成512点复数再迸行运算,可使运算量减少近一半。
图16系统工作流程图
3.1ADC采样程序设计
本系统设计实现20Hz档和100Hz档的精度。
当选用20Hz档时,利用定时器2设置ADC采样时钟为40.96K,采样2048点;
当选用100Hz档时,设计采样时钟为51.2K,采样512点。
定时器计预分频因子计算,可设置定时周期为5,则20Hz档时count=72M/6/40.96K=293,50Hz档时,count=72M/6/51.2K=233。
图17ADC采样模块流程图
3.2快速傅里叶变换程序设计
采用FFT实现采集的音频信号频域分析,得到音频信号中各频率分量的大小。
FFT运算主要分为位倒置和蝶形运算两个功能部分。
其中位倒置程序流程如图7所示。
蝶形运算设计:
由X1(k)、X2(k)表示X(k)的运算是一种特殊的运算-蝶形运算
实现上式运算的流图称作蝶形运算(N/2个蝶形)。
由上式可以看出蝶形运算主要是系数
的确定。
而第L级的系数因子为(L=1,2,3...,M)。
,(J=0,1,2,...,
)
即第L级的蝶形运算系数因子类型数为
个。
设系统共有M级,可得
即有
,
。
图18位倒置程序框图
四、硬件调试及系统测试
4.1分模块焊接仿真
图19放大模块实物图
图200.5倍放大实物仿真图
图211倍放大实物仿真
图225倍放大实物仿真
图23峰值检测电路实物仿真
4.2模块组合联调
采用模拟电路由前端到后段,数字电路先仿真再试测,先逐个模块测试再连调的办法。
经过整体调试,发现此次的测量范围在2KHZ到15KHZ,在这个频率范围内,误差的范围不超过5%,因此整体调试完成。
图24各模块连接实物图
输入2kHZ方波:
图25输入2KHZ方波后液晶显示
输入2KHZ正弦波:
图26输入2KHZ正弦波液晶显示
本系统在前端使用程控放大器和电压偏置电路对输入信号进行调整,最终使系统达到了较宽的动态范围,带宽达到20Hz~10kHz,频率分辨率达到20Hz,有效地优化了FFT算法,能对输入音频信号频率成分及功率进行较高精度的分析,且能测量其失真度,判断输入信号的周期性,对周期进行测量整体。
五、总结
本系统是基于STM32单片机的音频信号分析仪。
该仪器每秒可完成115次1024点32位精度的FFT运算,可满足信号带宽10Hz~25KHz、频率分辨力5Hz的要求。
结果通过触屏LCD显示,显示出时域和频域波形并能进行两者切换,并且具有调整波形位置、大小,缩放波形的功能。
同时可以显示出测量的峰峰值、周期、输入信号总功率、各频率分量功率之和、相对误差,以及可以判断输入是否为周期信号。
由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标,对频率分辨力、动态范围及精度都做了较大的扩展但是由于硬件电路简单,成本低,实验误差较大。
其实本设计还有很大的提升空间,但由于我们的动手能力以及理论水平有限,没能很好的达到。
通过本次设计,我们的动手能力以及处理问题的能力都有了很大的提高,并加深了对信号处理的理解,我们的收获很大!
参考文献:
《信号与系统》,ALANV.OPPENHEIM著,西安交通大学出版社
《模拟电子线路基础》,吴运昌著,广州:
华南理工大学出版社
《数字电子技术基础》,阎石著,北京:
高等教育出版社,1997年;
《stm32嵌入式微控制器快速上手》,陈志旺著,电子工业出版社
《C程序设计》,谭浩强著,清华大学出版社
附录一:
元器件
1.STM32核心板及扩展板
2.op07芯片若干
3.电阻若干
4.继电器一个
附录二:
仪器及设备
1.PC一台
2.信号发生器一台
3.稳压电源一台
附录三:
程序
1.主程序:
intmain(void)
{
inttemp,k;
floatnow;
u16sum;
Stm32_Clock_Init(9);
delay_init(72);
My_Display_Init();
ADC1_Init();
delay_ms(20);
Data_Prograss_Init();
temp=mode_100_20;
while
(1)
{
if(display_mode==TIMEWAVE)
{
Display_Time();
My_TimeWave_Init();
TimeWave_Valus(period,vpp,T);
}
else
Display_FFT();
My_FFTWave_Init();
now=0;
for(k=0;
k<
N;
k++)
now=now+s_display[k].real*s_display[k].real;
sum=now*200-6;
FFT_Valus(total,sum,per);
if(temp!
=mode_100_20)
temp=mode_100_20;
Data_Prograss_Init();
}
}
2.FFT核心程序:
#include<
stdio.h>
math.h>
stdlib.h>
#definesize_xN
typedefstruct
doublereal;
doubleimg;
}complex;
complexW[size_x/2];
complexx[size_x];
doublePI;
voidfft();
voidinitW();
voidchange();
voidadd(complexa,complexb,complex*c);
voidmul(complexa,complexb,complex*c);
voidsub(complexa,complexb,complex*c);
voiddivi(complexa,complexb,complex*c);
voidoutput();
intmain()
system("
cls"
);
PI=atan
(1)*4;
initW();
fft();
output();
return0;
voidfft()
inti=0,j=0,k=0,l=0;
complexup,down,product;
change();
for(i=0;
i<
(int)(log(size_x)/log
(2));
i++)
l=(1<
<
i);
for(j=0;
j<
size_x;
j+=(1<
l))
l;
{
mul(x[j+k+l],W[size_x*k/2/l],&
product);
add(x[j+k],product,&
up);
sub(x[j+k],product,&
down);
x[j+k]=up;
x[j+k+l]=down;
}
}
voidinitW()
inti;
size_x/2;
W[i].real=cos(2*PI/size_x*i);
W[i].img=-1*sin(2*PI/size_x*i);
voidchange()
complextemp;
inti=0,j=0,k=0,t;
k=i;
j=0;
t=(unsigned)(log(size_x)/log
(2));
while(t--)
j=j<
1;
j|=(k&
1);
k=k>
>
if(j>
i)
temp=x[i];
x[i]=x[j];
x[j]=temp;
voidoutput()
printf("
Theresultareasfollows\n"
printf("
%.4f"
x[i].real);
if(x[i].img>
=0.0001)printf("
+%.4fj\n"
x[i].img);
elseif(fabs(x[i].img)<
0.0001)printf("
\n"
elseprintf("
%.4fj\n"
voidadd(complexa,complexb,complex*c)
c->
real=a.real+b.real;
img=a.img+b.img;
voidmul(complexa,complexb,complex*c)
real=a.real*b.real-a.img*b.img;
img=a.real*b.img+a.img*b.real;
voidsub(complexa,complexb,complex*c)
real=a.real-b.real;
img=a.img-b.img;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音频 信号 分析 实验 报告