音频信号分析仪设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音频信号分析仪设计报告
学院:电子信息学院
班级:12电子信息工程
指导老师:***
小组成员:122840112x 程博雅
前言
音频信号是带有语音、音乐和音效的有规律的声波的频率、幅度变化信息载体。
根据声波的特征,可把音频信息分类为规则音频和不规则声音。
其中规则音频又可以分为语音、音乐和音效。
规则音频是一种连续变化的模拟信号,可用一条连续的曲线来表示,称为声波。
声音的三个要素是音调、音强和音色。
声波或正弦波有三个重要参数:频率ω0、幅度A n 和相位ψn ,这也就决定了音频信号的特征。
音频分析仪器是指既能够测量话筒、音频功放、扬声器等各类单一音频设备的各种电声参数,也能测试组合音响、调音台等组合音频设备的整体性能的分析类仪器。
目前市场上已经出现了可用于测量音频设备的各类分析仪器,例如失真度分析器、音频分析仪、频率计数器、交流电压表、直流电压表、音频示波器等。
这些基于各种功能电路的机架式硬件仪器使用简便、测量精度较高,目前己经获得了广泛的应用。
一般说来,一台功能较为齐全的音频分析仪器应能测量信号交直流电压、信号频率、谐波失真、信噪比等参数。
功能强大的音频分析仪器提供频谱分析、倍频程分析、声压级测量等功能。
早期专业的音频分析仪种类很少,在做音频测量时一般是利用万用电表、频率计、示波器及频谱仪等组合成一套音频测试系统。
这种测试系统中间环节多,各环节之间接口匹配较为困难,使用起来比较麻烦,测量结果往往也不精确。
近年来出现的音频分析仪器也与仪器的主流发展趋势一致,朝着高度集成化、智能化的方向发展,这些仪器集成了复杂音频信号发生装置、功率放大装置等,具备了一些初步的图形化分析功能,使用户很容易组建音频测量系统。
目录
前言 (2)
目录 (3)
摘要 (5)
第1章设计方案论证 (5)
1.1语音信号采集模块 (5)
1.2主控芯片的选择 (2)
1.3程控放大器模块 (5)
1.4抗混叠滤波器模块 (6)
1.5模数转换模块 (6)
1.6功率测量模块 (6)
第2章系统设计 (7)
2.1总体方案设计 (7)
2.2硬件电路设计 (7)
2.2.1驻极体放大电路模块 (7)
2.2.2电压跟随电路模块 (8)
2.2.3程控增益放大模块 (8)
2.2.4电压抬升电路模块 (9)
2.2.5抗混叠滤波模块 (10)
2.3软件设计 (11)
2.3.1 程序流程图 (12)
2.3.2 ADC采样程序设计 (12)
2.3.3 快速傅里叶变换模块设计 (13)
2.3.4 功率、失真度计算 (13)
2.3.5 周期性判断 (14)
2.3.6 频谱显示 (15)
2.3.7 按键控制模块 (15)
第3章系统测试 (16)
3.1硬件电路测试 (16)
3.1.1驻极体放大电路模块 (16)
3.1.2电压跟随电路模块 (16)
3.1.3程控增益放大模块 (17)
3.1.4电压抬升电路模块 (17)
3.1.5抗混叠滤波模块 (18)
3.2系统功能测试 (19)
3.2.1确知信号测试 (19)
3.2.2麦克风输入信号测试 (20)
第4章总结 (21)
参考文献 (21)
附录 (21)
附录1 元器件明细表
附录2 仪器设备清单
附录3 测试实物图
附录4 程序主函数
摘要:本系统基于快速傅立叶变换(FFT)算法,以单片机STM32F103ZE为控制与数据处理核心,结合必要的外围电路,实现对频率范围在20Hz~10KHz音频信号频率成分的分析。
系统由控制与运算核心、程控放大器、抗混叠滤波和采样等模块组成。
通过对程控放大器增益的调整将系统可测电压(峰-峰值)的动态范围扩展到100mV~5V;通过改变模数转换器的采样频率,实现频率分辨力100Hz、20Hz两挡可调;频谱分析结果可按序存储,并使用TFTLCD液晶显示屏实时显示;通过对频谱数据特征的提取判断信号的周期性,并实现对信号的失真度分析。
另外,可通过TFTLCD液晶显示屏以图形方式显示信号频谱图。
关键词: 频域分析 FFT STM32F103 周期性
第1章设计方案论证
1.1语音信号采集模块
方案一:驻极体话筒放大电路
用驻极体话筒设计一个语音信号输入电路,以便实现真正的语音信号输入。
驻极体话筒放大电路可以方便的采集人说话的声音、麦克风播放的声音等人耳能听到声音,并通过三极管放大以后接入后级电路进行音频分析。
该方案设计简单,易于实现,但噪声较大且有一定的直流偏置。
方案二:音频口放大接收电路
将电脑或MP3等的音频信号用音频线引出进行放大。
该方案实行方便,电路简单,输入信号容易控制,测试结果容易得知,但是不能验证实际应用效果。
由于以上两种方案各有优缺点,但电路都不复杂,故以上两种方案都进行采用,实现多种音频信号都能采集分析功能。
1.2主控芯片的选择
在处理器的选择上通常可以采用8位,16位或者32位的MCU,但由于在处理信号的过程中,通常会遇到快速傅立叶FFT算法,所以会遇到大量的浮点运算,而且一个要占四个字节,故在处理过程中要占大量的内存,同时浮点运算速度比较慢,所以采用普通的MCU在一定时间难以完成,所以综合考虑运算速度和内存大小,我们选用意法半导体公司的32位MCU STM32F103ZE,该芯片具有64KB SRAM,512KB FLASH。
运行速度72MHz。
在速度和内存上都能满足浮点运算,并且控制方便,成本便宜,所以本系统采用32位
STM32F103ZE。
1.3程控放大器模块
方案一:使用集成可变增益放大器AD603。
只要改变控制端电压就可以控制AD603的增益,但要实现增益的精密控制还必须与位数较高的数模转换器件配合使用。
方案二:使用单刀双掷选择则不同的电阻值,作为放大器的反馈电阻,实现不同量程的放大倍数。
这种方案控制简单,只要运放的增益带宽积和噪声抑制能力足够大,每级的增益是恒定的。
但模拟开关存在一定的导通电阻。
上述方案各有优缺点,考虑到系统成本和精度要求,选择方案二。
模拟开关的导通电阻可与放大器的选通电阻一并看作放大器的反馈电阻。
1.4抗混叠滤波器模块
方案一:使用运算放大器设计设计一个四阶巴特沃斯低通滤波器。
方案二:使用集成滤波芯片,如MAX297。
对于一般的滤波器设计,方案一灵活简单,而且有专门的辅助设计软件可快速进行设计,需要两块集成运放芯片,外围电路较复杂;方案二中使用集成滤波芯片外围电路简单,易实现。
考虑到运放芯片比较常见,且手中没有集成滤波芯片,因此我们选择方案一。
1.5模数转换模块
方案一:采用双极性ADC对信号直接采样,本方案不需要考虑信号电压是否为负,但采样频率不易控制且成本较高。
方案二:直接由STM32内部的ADC对信号进行采样,然后再进行分析。
该方案实现容易,没有外扩的采样电路,同时STM32内部时钟提供精确度很高的时钟,参考电压选用TI公司的线性稳压源REF2033,可直接输出3.3V参考电压,且纹波小,但是采样之前必须将信号抬高至0V-3.3V之间,因此需要一个电压抬升电路。
由于单片机内部的ADC转换容易实现,供电电压要求也容易满足,故采用第二种方案。
1.6功率测量模块
方案一:有效值检波法。
采用专门的真有效值检测芯片AD637,能测量任意交变信号的有效值,精度高,外围电路简单但对单个频率处的功率测量无能为力。
方案二:A/D采样法。
在用FFT得到信号的频谱后可以很方便的得出信号各频率分量的功率及信号的总功率。
经过以上两种方案的论证比较,方案二可以用软件实现,同时本系统要实现20Hz的分辨率,计算误差在可接受范围内,故我们选用方案二
第2章系统设计
2.1总体方案设计
2.2硬件电路设计
2.2.1驻极体放大电路模块
驻极体传声器内部主要包括声电转换和阻抗变换两部分。
声电转换部分包括振膜、极板、空隙三部分。
当声音传入时,振膜随声波的运动发生振动,此时振膜与固定电极间的电容量也随声音而发生变化。
从而产生了随声波变化而变化的交变电压信号,如此就完成了声音转换为电信号的过程。
电压变化的大小,反映了外界声压的强弱,这种电压变化频率反映了外界声音的频率。
驻极体放大电路模块,先由驻极体将音频信号转化为电信号,然后用三极管射级放大器放大100倍左右。
跟随器的作用是阻抗匹配。
仿真电路图如图2.2.1所示:
图2.2.1 驻极体放大电路
2.2.2电压跟随电路模块
如图2.2.2 信号经过50欧姆的电阻和一个高精度、低噪声的运放OPA227实现50的电阻匹配和电压跟随。
图2.2.2 电压跟随电路
2.2.3程控增益放大模块
如图2.2.3.1,程控增益放大模块使用的是高精度低噪声的运放OPA227构成的反相放大器,通过单刀双掷开关ts12a12511选择不同的反馈电阻实现不同的放大倍数。
ts12a12511内部结构图如图2.2.3.2所示,通过单片机对控制IN 端高低电平的输入选择不同的反馈电阻实现不同的放大倍数。
使用时注意ts12a12511的5欧姆的内阻对放大倍数的影响。
图2.2.3.1 程控增益放大模块
图2.2.3.2 ts12a12511内部结构图
2.2.4电压抬升电路模块
电压抬升电路如图 2.2.4.1所示,根据运放的虚短、虚断原理可以求出Vout=2*Vref-Vin。
即此电路可将信号反相后抬升2*Vref,这里我们选择Vref=0.75V,将电压固定抬升1.5V的高度,使得信号在ADC的采样范围内。
0.75V的参考电压由TI公司的线性稳压源芯片REF2033输出的1.65V通过电阻分压得到,纹波小适合作参考源。
图2.2.4.1 电压抬升电路
2.2.5抗混叠滤波模块
信号送到ADC之前要对信号进行抗混叠低通滤波器处理,防止高频分量信号被采样,产生频谱混叠,而影响给定较低频率信号的幅值分析。
为此我们设计了一个截止频率为22KHz的四阶巴特沃斯低通滤波器做为抗混叠滤波器。
元器件参数由滤波器软件Filter wiz PRO设计得到。
图2.2.5.1为电路原理图,下图2.2.5.2为频率特性仿真图。
由仿真结果可以看出在20Hz-10KHz内,增益起伏很小且增益几乎为0。
图2.2.5.1四阶巴特沃斯低通滤波器原理图图2.2.5.2 频率特性仿真图
2.3软件设计
2.3.1 程序流程图
图2.3.1 程序流程图
2.3.1 ADC采样程序设计
本模块采用定时器2的通道2出发ADC1通道1进行采样,由于输入信号20Hz-10kHz,由采样定理知采样频率要大于20KHz。
又由频率分辨率和FFT变换点数可得到采样频率。
分辨率为20Hz时采样频率选为40.96KHz,采样点数为2048点。
分辨率为100Hz时采样频率51.2KHz,采样点为512个。
ADC采样后通过DMA将采样值传输到内存。
这样可以不用CPU参与,提高刷新速率。
程序中将STM32F103ZE的ADC1的通道1配置成定时器触发的单通道连续采样模式,并使能DMA传输。
DMA设置成为单次缓存模式,这样ADC1处于连续采样模式,当系统需要采样时只需使能DMA即可得到连续的采样值。
2.3.2 快速傅里叶变换模块设计
快速傅里叶变换计算过程最重要的是码位变换和蝶形运算。
码位倒序要解决两个问题:将t位二进制数倒序;将倒序后的两个存储单元进行交换。
for(i=0;i<count[n];i++) //码位变换
{
xx=0;
for(j=0;j<n;j++)
x[j]=0;
for(j=0;j<n;j++)
{ x[j]=(i/count[j])&0x01; }
for(j=0;j<n;j++)
{ xx=xx+x[j]*count[n-j-1]; }
dataI[xx]=dataR[i];
}
for(i=0;i<count[n];i++)
{ dataR[i]=dataI[i]; dataI[i]=0; }
N点FFT从左到右共有log2N级蝶形,每级有N/2L组,每组有L个。
所以FFT的C语言编程只需用3层循环即可实现:最外层循环完成每一级的蝶形运算(整个FFT共log2N级),中间层循环完成每一组的蝶形运算(每一级有N/2L 组),j形运算(每一组有L个)。
for(L=1;L<=n;L++) //碟形运算
{
b=1;i=L-1;
while(i>0)
{ b=b*2; i--;}
for(j=0;j<=b-1;j++)
{
p=1;i=n-L;
while(i>0)
{ p=p*2; i--;}
p=p*j;
for(k=j;k<count[n];k=k+2*b)
{
TR=dataR[k];
TI=dataI[k];
temp=dataR[k+b];
qq = p*count[11-n];
dataR[k]=dataR[k]+dataR[k+b]*cos_tab(qq)+dataI[k+b]*sin_tab(qq);
dataI[k]=dataI[k]-dataR[k+b]*sin_tab(qq)+dataI[k+b]*cos_tab(qq);
dataR[k+b]=TR-dataR[k+b]*cos_tab(qq)-dataI[k+b]*sin_tab(qq);
dataI[k+b]=TI+temp*sin_tab(qq)-dataI[k+b]*cos_tab(qq);
}
}
}
2.3.3 功率、失真度计算
快速傅里叶变换可以将一个信号从时域变换到频域。
假设采样频率为fs,采样点数为N,那么FFT结果就是一个N点的复数,每一个点就对应着一个频率点,某一点n(n从1开始)表示的频率为:fn=(n-1)*fs/N。
这个频率点的幅值为:该点复数的模值除以N/2(n=1时是直流分量,其幅值是该点的模值除以N)。
各频率点的功率值为该点幅值的平方除以R,总功率为各频率点功率值之和。
失真度的计算公式为
2.3.4 周期性判断
对于一个周期信号来说它的傅里叶变换得到的频谱是稳定的,理想情况下任意两次的谱线是相同的。
因此可用对两次采样的数据进行傅里叶变换的频谱比较相似度来判断信号的周期性,如果结果稳定且相似,即可认定为周期信号,信号的周期就是基波周期。
周期性判断程序如下:
void panduan_zhouqi(void)
{
u16 cha;
for(i=1;i<=10000/Resolution;i++)
{
if(lBufMagArray1[i]>lBufMagArray[i])
{ cha=lBufMagArray1[i]-lBufMagArray[i]; }
else { cha=lBufMagArray[i]-lBufMagArray1[i]; }
if(cha>20) { t=0; break; }
t=1;
}
for(i=1;i<=10000/Resolution;i++)
{ lBufMagArray1[i]=lBufMagArray[i]; }
}
2.3.5 频谱显示
频谱显示模块主要功能为在TFTLCD液晶显示屏上的指定位置显示信号对应的频谱。
程序流程为先擦去上次显示的频谱图,然后计算每个频率点所对应的幅值的高度依次在LCD液晶显示屏上显示出来,程序设计如下:
void LCD_draw_f_w(void)
{
u16 fdz;
for(i=30;i<=280;i++)
{ POINT_COLOR=BLUE; LCD_DrawLine(i, 70, i, 220); }
for(i=1;i<=10000/Resolution;i++)
{
fdz=220-lBufMagArray[i]*135/3000;
if(fdz>=70 && fdz<=220)
{
POINT_COLOR=RED;
LCD_DrawLine(30+Resolution*i*250/10000, 220,
30+Resolution*i*250/10000, fdz);
}
else if(fdz<70)
{
POINT_COLOR=YELLOW;
LCD_DrawLine(30+Resolution*i*250/10000, 220,
30+Resolution*i*250/10000, 70);
}
}
}
2.3.6 按键控制模块
按键控制模块主要通过两个按键以外部中断的形式来实现暂停和档位切换功能。
当暂停键按下后系统会将暂停标志位翻转,在主程序最后对暂停标志位检测,若置位则进入暂停状态,程序设计如下:
void EXTI3_IRQHandler(void)
{
delay_ms(100)
if( GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
while(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3));
if(st==1) { st=0; }
else{ st=1; }
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
void stop_on_off(void)
{
if(st) { while(st); }
}
当档位切换键按下后,系统将完成20Hz档和100Hz档之间的切换,程序设计如下:
void EXTI0_IRQHandler(void)
{
delay_ms(100);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
if(n==2048)
{ n=256; Resolution=100; m=8;
POINT_COLOR=WHITE; LCD_ShowString(280,160,200,16,16," 100");
POINT_COLOR=RED; Adc1_dma1_Init((u32)&ADCConvertedValue,n);
}
else
{ n=2048; Resolution=20; m=11;
POINT_COLOR=WHITE;LCD_ShowString(280,160,200,16,16," 20");
POINT_COLOR=RED;Adc1_dma1_Init((u32)&ADCConvertedValue,n);
}
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
第3章系统测试
3.1硬件电路测试
3.1.1驻极体放大电路模块
图3.1.1为用cooledit生成的一个5KHz的音频信号经过驻极体放大电路后的测试结果图,由示波器显示图像可看出输出信号有一定的噪声。
图3.1.1
3.1.2电压跟随电路模块
图3.1.2为输入频率为1KHz,幅值为2V的正弦波的测试结果。
图3.1.2
3.1.3程控增益放大模块
图3.1.3为程控放大10倍效果图。
其中黄色曲线是输入信号,绿色曲线为输出曲线。
图3.1.3
3.1.4电压抬升电路模块
图3.1.4为电压抬升电路效果图。
输入信号为黄色曲线,输出曲线为绿色曲线。
可以很清楚的看出电压被抬升了1.5V。
图3.1.4
3.1.5抗混叠滤波模块
图3.1.5.1为抗混叠滤波器通频带内测试图;图3.1.5.2为抗混叠滤波器截止频率处测试图;图3.1.5.3为抗混叠滤波器通频带外测试图。
图3.1.5.1
图3.5.1.2
图3.5.1.3
3.2系统功能测试
3.2.1确知信号测试
用函数发生器输入一个已知的正弦波,将测量结果与理论值比较。
由上表看出本系统可以实现对信号频率的准确测量,分辨率达到20Hz ,功率误差小于5% 。
3.2.2麦克风输入信号测试
用麦克风输入一个频率为5KHz 的音频信号,测试结果如图3.2.2所示。
图3.2.2
输入信号
实际测量
类型 频率(Hz) 幅度(V) 理论功率(mW)
第一功率(mW) 第一频率(Hz) 第二功率(mW) 第二频率(Hz)
周期(ms)
失真度 (%) 正弦
20 1 10 9.860 20 0.000 40 50.00
3.9
正弦 10000
0.05 0.025 0.024
10000
0.000 20 0.020
0.00
方波 1000
1 20 16.002
1000
1.772 3000 50.00
42.87
第4章总结
本设计完成了题目基本部分发挥部分的要求,系统整体性能良好。
另外,系统还可以图形方式显示信号的幅度谱。
利用按键设置了暂停、频谱分析、档位转换、频谱实时刷新等功能,并且通过两个音频信号的产生电路,可实现对现实中的声音和电音频信号进行采集与分析。
参考文献
[1]陈志旺等. STM32嵌入式微控制器快速上手.北京:电子工业出版社,2012.1
[2]俞一彪、孙兵. 数字信号处理.南京:东南大学出版社,2011.7
[3]TI工程师.德州仪器高性能模拟器件高校应用指南. 上海:德州仪器,2014.3
附录
附录1 元器件明细表
STM32F103ZE、OPA227、OPA735、LM741、REF2033、ts12a12511、2.4寸TFT液晶显示屏
附录2 仪器设备清单
(1)函数信号发生器
(2)数字万用表
(3)数字示波器
(4)直流稳压电源
附录3 测试实物图
附录4 程序主函数
int main(void)
{
float lBuf;
delay_init();
NVIC_Configuration();
LCD_all_Init();
EXTIX_Init();
av_control_init();
create_sin_tab(SIN_TAB);
Adc1_dma1_Init((u32)&ADCConvertedValue,n);
while(1)
{
MYDMA_Enable(n);
while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);
DMA_ClearFlag(DMA1_FLAG_TC1);
for(i=0; i<n; i++)
{
if(ADCConvertedValue[i]>2100)
{ x10=0; break; }
else{ x10=1; }
}
if(x10==1)
{
fd_on; delay_us(100); MYDMA_Enable(n);
while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);
DMA_ClearFlag(DMA1_FLAG_TC1);
}
for(i=0; i<n; i++)
{ dataR[i]=ADCConvertedValue[i]*3300/4096; dataI[i]=0; }
FFT(dataR,dataI,m);
for(i=1;i<n/2;i++)
{
lBuf=4*sqrt(dataR[i]* dataR[i] + dataI[i]* dataI[i]) / n;
if(x10==1)
{ lBuf=lBuf/10; }
lBufMagArray[i]=lBuf;
}
LCD_draw_f_w();
panduan_zhouqi();
jisuan_display();
x10=0;
fd_off;
stop_on_off();
}
}。