2007年全国大学生电子设计竞赛
【本科组】
音频信号分析仪(A题)
摘要:本音频信号分析仪由8位MCU为主控制器,通过AD转换,对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域对音频信号各个频率分量以及功率等指标进行分析和处理,然后通过LCD 对信号的频谱进行显示。该系统能够精确测量的音频信号频率范围为100Hz-10KHz,其幅度范围为100mVpp-5Vpp。
关键词:快速傅里叶变换功率谱频谱
Abstract:The audio signal analyzer is based on a 8-bit MCU controller, through the AD converter for audio signal sampling, the continuous signal discrete, and then through the FFT fast Fourier transform computing, in the time domain and frequency domain of the various audio frequency signal weight and power, and other indicators for analysis and processing, and then through the LCD display signals in the spectrum. The system can accurately measure the audio signal frequency range of 100Hz-10KHz, the range of 100mVpp-5Vpp .
Key Word:FFT Power Spectrum Frequency Spectrum
目录
摘要: (1)
1. 系统设计 (1)
1.1设计要求 (1)
1.1.1设计任务 (1)
1.1.2技术指标 (1)
1.2方案比较与选择 (2)
1.2.1采样方法比较与选择 (2)
1.2.3信号功率计算方案比较 (3)
1.3方案论证 (3)
2.单元电路设计及参数计算 (4)
2.1前级阻抗匹配和放大电路设计 (4)
2.2抗混叠低通滤波器设计 (6)
3. 软件设计 (7)
3.1程序总体流程图 (7)
3.2程序清单(见附录2) (7)
4.系统测试 (7)
4.1测试仪器 (7)
4.2测试结果 (8)
5. 结束语 (8)
参考文献 (8)
附录 (9)
附录1 主要元器件清单 (9)
附录2 程序清单 (9)
1.系统设计
1.1设计要求
1.1.1设计任务
设计、制作一个可分析音频信号频率成分,并可测量正弦信号失真度的仪器。
1.1.2技术指标
(1)基本要求
①输入阻抗:50Ω
②输入信号电压范围(峰-峰值):100mV~5V
③输入信号包含的频率成分范围:200Hz~10kHz
④频率分辨力:100Hz(可正确测量被测信号中,频差不小于100Hz的频率分量的功率值。)
⑤检测输入信号的总功率和各频率分量的频率和功率,检测出的各频率分量的功率之和不小于总功率值的95%;各频率分量功率测量的相对误差的绝对值小于10%,总功率测量的相对误差的绝对值小于5%。
⑥分析时间:5秒。应以5秒周期刷新分析数据,信号各频率分量应按功率大小依次存储并可回放显示,同时实时显示信号总功率和至少前两个频率分量的频率值和功率值,并设暂停键保持显示的数据。
(2)发挥部分
①扩大输入信号动态范围,提高灵敏度。
②输入信号包含的频率成分范围:20Hz~10kHz。
③增加频率分辨力20Hz档。
④判断输入信号的周期性,并测量其周期。
⑤测量被测正弦信号的失真度。
⑥其他。
1.2方案比较与选择
1.2.1采样方法比较与选择
方案一:采用DDS芯片
用DDS芯片配合FIFO对信号进行采集,通过DDS集成芯片产生一个频率稳定度和精度相当高的信号作为FIFO的时钟,然后由FIFO对A/D转换的结果进行采集和存储,最后送MCU处理。
方案二:采用单片机
直接由MCU的定时中断进行信号的采集,然后对信号分析。C8051F020的单指令周期为90ns,可实现25.6KHz的采样率,且控制方便成本便宜。
经比较,选用方案二,用单片机进行信号采样。
1.2.2周期性判别与测量方法的比较与选择
方案一:时域测量
在时域分析信号,我们可以先对信号进行处理,然后假定具有周期性,然后测出频率,把采样的信号进行周期均值法和定点分析法的分析后即可以判别出其周期性。
方案二:频域测量
频域测量周期性要求某些频率点具有由规律的零点或接近零点出现,所以对于较为复杂的,频率分量较多且功率分布较均匀且低信号就无法正确的分析其周期性。
综上,我们选择信号在时域进行周期性分析和周期性测量。对于一般的音频信号,其时域变化是不规则的,所以没有周期性。而对于单频信号或者由多个具有最小公倍数的频率组合的多频信号具有周期性。这样我们可以在频域对信号的频谱进行定量分析,从而得出其周期性。而我们通过先假设信号是周期的,然后算出频率值,然后在用此频率对信号进行采样,采取连续两个周期的信号,对其值进行逐次比较和平均比较,若相差太远,则认为不是周期信号,若相差不远(约
5%),则可以认为是周期信号。
1.2.3信号功率计算方案比较
方案一:通过测真有效值的方式实现,应用普通的真有效值检测芯片可以方便的测出信号在一定时间段内的总功率。但对单个频点处的功率测量无能为力。
方案二:在用FFT得到信号的频谱后根据帕斯瓦尔定律可以很方便的得到信号各频率分量的功率及信号的总功率。
本设计中我们可以通过FFT得到信号的频谱,因此选用方案二。
1.3方案论证
音频信号经过一个由运放和电阻组成的50 ?阻抗匹配网络后,经由多路放大模块进行处理,若是一般的1Vpp-5Vpp的电压,我们选择直通,也就是说信号放大倍数为1;在250mVpp-1Vpp之间的话,信号经过4倍增益的放大器后再进行A/D采样;在50mVpp-250Vpp之间的话,信号经过20倍增益的放大器后再进行A/D采样;在10mVpp-50Vpp之间的话,信号经过100倍增益的放大器后再进行A/D采样。
经过单片机12位的ADC0转换后的数字信号经由MCU进行FFT变换和处理,分析其频谱特性和各个频率点的功率值,运算出来后将频率值、功率值、失真度送至液晶屏进行显示。
2.单元电路设计及参数计算
2.1前级阻抗匹配和放大电路设计
图2.1.1 前级阻抗匹配
信号输入后通过R16,R18两个100Ohm 的电阻和一个运放NE5532实现跟随作用。由于理想运放的输入阻抗为无穷大,所以输入阻抗即为:R16//R18=50Ohm,阻抗匹配后通过控制选择信号是直接送给AD 转换还是放大4倍、20倍、100倍后再进行AD 转换。
图2.1.2 放大倍数为1
其中反向比例放大倍数1
4
R R A -
=。类似的,得到放大倍数为4倍、20倍、100倍、0.4倍的放大电路如下图所示。
图2.1.3 放大倍数为4
图2.1.4放大倍数为20
图2.1.5 放大倍数为100
图2.1.6 衰减2.5倍
2.2抗混叠低通滤波器设计
图2.2 抗混叠低通滤波器
3.软件设计
3.1程序总体流程图
图3.1程序总体流程图
3.2程序清单(见附录2)
4.系统测试
4.1测试仪器
台式万用表,型号:UT802
程控直流电源,型号:MPD-3303
任意波形发生器,型号:YB32020
示波器,型号:DXO-X2002A
4.2测试结果
(1)总功率测量(室温条件下)
输入信号频率幅度测量时域总功
率(w)
测量频域总
功率(w)
理论值估算误差
正弦波 100Hz 1 Vpp 0.127 0.129 0.125 1.2% 1KH 1 Vpp 0.126 0.129 0.125 1.3%
(2)单个频率分量测量(室温条件下)
输入信号频率幅度最大功率
频点最大功率
频点功率
次大功率频
点
次大功率频
点功率
正弦波500Hz 100mVpp 500Hz 1.20mw / / 正弦波5KHz 1Vpp 5KHz 120mw / / 正弦波10KHz 1Vpp 10KHz 118mww / / 正弦波 1KHz 1Vpp 1KHz 126mv / / 3KHz 1Vpp / / 3KHz 117mw
5.结束语
本实验方案由于软件难度比较大,于是在完成题目要求的情况下精简硬件电路减少软件的开发复杂程度。本方案的优点就在于用简单低廉的硬件电路以及单片机C8051F020完成音频信号的检测分析并达到很好的效果,可以推广使用。
参考文献
[1] 童诗白,华成英.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2006
[2] 肖看,李群芳.单片机原理、接口及应用——嵌入式系统技术基础(第二版)[M].北京:清华大学出版社,2010
[3] 黄智伟,王彦,陈文光,朱卫华.全国大学生电子设计竞赛训练教程(修订版)[M].北京:电子工业出版社,2010
[4] 周利清,苏菲,罗仁泽.数字信号出来基础(第三版)[M\.北京:北京邮电大学出版
社,2012
附录
附录1 主要元器件清单
(1)C8051F020 1片(2)NE5532 3片(3)电阻电容若干(4)LCD及矩阵键盘1个
附录2 程序清单
fft.c
//dian为点数, dian=pow(2,m)
#include "math.h"
#include "C8051F020.h"
#include "DataType.h"
#include "string.h"
#include "stdio.h"
#define PI 3.1415926
#define G2 1.4142135
float XR[256]={0},XI[256]={0},XX[127]={0},Xu=0; //实部和虚部
float Xa=0;
int Hn=0;
int freq=0;
int freq1=0;
unsigned char m=8; //dian[6]=64; 64点FFT
unsigned int N;
code int dian[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
void butterfly(void); //蝶形运算
int gcd(int m,int n);
void fft(void)
{
//////////////位倒置////////////////
int i,j,k,n,h=0; //i,j为临时变量,k是倒置后的次序
float temp,X,temp1=0;
N=dian[m];
Xu=0;