音频信号分析仪毕业设计论文论文Word文件下载.docx
《音频信号分析仪毕业设计论文论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《音频信号分析仪毕业设计论文论文Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
在这道题目里,需要检测各频率分量及其功率,并且要测量正弦信号的失真度,这就要求在对小信号进行放大时,要尽可能少的引入信号的放大失真。
正弦信号的理论计算失真度为零,对引入的信号失真非常灵敏,所以对信号的放大,运放的选择是个重点。
我们选择的运放是TI公司的低噪声、低失真的仪表放大器INA217,其失真度在频率为1KHz,增益为20dB(100倍放大)时仅为0.004%,其内部原理图如图2-2所示。
图2-2INA217内部原理图
其中放大器A1的输出电压计算公式为
OUT1=1+(R1/RG)*VIN+
同理,OUT2=1+(R2/RG)*VIN--
R3、R4、R5、R6及A3构成减法器,最后得到输出公式
VOUT=(VIN2-VIN1)*[1+(R1+R2)/RG]
R1=R2=5K,取RG=526,从而放大倍数为20。
2.2AD转换及控制模块电路设计
图2-3AD转换及控制模块电路设计
采用12位AD转换器ADS7819进行转换,将转换的数据送32位控制器进行处理。
2.3功率谱测量
功率谱测量主要通过对音频信号进行离散化处理,通过FFT运算,求出信号各个离散频率点的功率值,然后得到离散化的功率谱。
由于题目要求频率分辨力为100Hz和20Hz两个档,这说明在进行FFT运算前必须通过调整采样频率(fK)和采样的点数(N),使其基波频率f为100Hz和20Hz。
根据频率分辨率与采样频率和采样点数的关系:
f=fk/N;
可以得知,fk=N*f;
又根据采样定理,采样频率fk必须不小于信号频率fm的2倍,即:
fk>
=2fm;
题目要求的最大频率为10KHz,所以采样频率必须大于20KHz,考虑到FFT运算在2的次数的点数时的效率较高,所以我们在20Hz档时选择40.96KHz采样率,采集2048个点,而在100档时我们选择51.2KHz采样率,采集512个点。
通过FFT分析出不同的频率点对应的功率后,就可以画出其功率谱,并可以在频域计算其总功率。
3软件设计
主控制芯片为LPC2148,测量周期为Atmega16实现,由于处理器速度较快,所以采用c语言编程方便简单.软件流程图如下:
主流程图周期性分析和测量流程图
图3-1程序流程图
4系统测试
4.1总功率测量(室温条件下)
表4-1总功率测量结果(室温条件下)
输入信号
频率
幅度
测量时域总功率(w)
测量频域总功率(w)
理论值
估算误差
正弦波
100Hz
1Vpp
0.127
0.129
0.125
1.2%
1KH
0.126
0.129
1.3%
音频信号
20Hz-10KHz
20mVpp-5Vpp
0.783
0.761
X
《5%
1.803
1.777
X
结果分析:
由于实验室提供的能够模仿音频信号的且能方便测量的信号只有正弦信号,所以我们用一款比较差点的信号发生器产生信号,然后进行测量,发现误差不达,在+-5%以内。
我们以音频信号进行测量,由于其实际值无法测量,所以我们只能根据时域和频域以及估计其误差,都在5%以内。
4.2单个频率分量测量(室温条件下)
表4-2单个频率分量测量结果(室温条件下)
频率
幅度
最大功率频点
最大功率频点功率
次大功率频点
次大功率频点功率
正弦波
500Hz
100mVpp
500Hz
1.20mw
520Hz
0.04mW
5KHz
1Vpp
5KHz
120mw
5.02KHz
3.56mw
20Hz-10K
880Hz
23mw
600Hz
4.3mw
结果分析:
我们首先以理论上单一频率的正弦波为输入信号,在理想状况下,其频谱只在正弦波频率上有值,而由于有干扰,所以在其他频点也有很小的功率。
音频信号由于有多个频点,所以没有一定的规律性。
由于音频信号波动较大,没有一定的规律,且实验室没有专门配置测量仪器,所以我们只好以正弦波和三角波作为信号进行定量分析测量,以及对音频信号进行定性的分析和测量。
我们发现其数字和用电脑模拟的结果符合得很近。
5结论
由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。
参考文献:
[1]ALANV.OPPENHEIM.信号与系统.西安:
西安交通大学出版社,1997年
[2] 元秋奇.数字图像处理学.北京:
电子工业出版社,2000年
[3] 吴运昌.模拟电子线路基础.广州:
华南理工大学出版社,2004年
[4] 阎石.数字电子技术基础.北京:
高等教育出版社,1997年
[5] 张晓丽等.数据结构与算法.北京:
机械工业出版社,2002年
[6] 马忠梅等.ARM&
Linux嵌入式系统教程.北京:
北京航空航天大学出版社,2004年
[7] 李建忠.单片机原理及应用.西安:
西安电子科技大学,2002年
附录:
附1:
元器件明细表:
1、LPC2148
2、ATMEGA16
3、AD620
4、ADS7819
5、液晶320*240
附2:
仪器设备清单
1、低频信号发生器
2、数字万用表
3、失真度测量仪
4、数字示波器
5、稳压电源
附3:
电路图图纸
电源系统
前级放大和AD转换
Atmega16控制板
附4:
程序清单
/*/////////////////////////////////////////////////////////////////////////////////////////////////
FFT转换函数,dataR:
实部,datai:
虚部,
////////////////////////////////////////////////////////////////////////////////////////////////*/
voidFFT(float*dataR,float*dataI,intn)
{
inti,L,j,k,b,p,xx,qq;
intx[11]={0};
floatTR,TI,temp;
floatQQ;
//////////////////////////////////位倒置////////////////////////////////////////////////////
for(i=0;
i<
count[n];
i++)
{xx=0;
for(j=0;
j<
n;
j++)
x[j]=0;
{x[j]=(i/count[j])&
0x01;
}
{xx=xx+x[j]*count[n-j-1];
dataI[xx]=dataR[i];
{dataR[i]=dataI[i];
dataI[i]=0;
////////////////////////////////////蝶形运算////////////////////////////////////////
for(L=1;
L<
=n;
L++)
{
b=1;
i=L-1;
while(i>
0)
{b=b*2;
i--;
}
for(j=0;
=b-1;
j++)
{p=1;
i=n-L;
{p=p*2;
p=p*j;
for(k=j;
k<
k=k+2*b)
TR=dataR[k];
TI=dataI[k];
temp=dataR[k+b];
QQ=2*pi*p/count[n];
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];
w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
w[i]=w[i]/count[n-1];
w[0]=w[0]/2;
///////////////////////////回放数据/////////////////////////
voidviewdata(void)
unsignedintkey,page,i;
page=0;
LCD_PenColor=0x1F;
//红色
LCD_WriteChineseString(font5,2,40,0);
LCD_PenColor=0xFC;
//蓝色
while
(1){
key=getkey();
if(key!
=0xFF)
if(key==4){SystemState=fft_mode;
return;
}//返回
if(key==2){
LCD_ClearScreen();
LCD_WriteChineseString(font3,2,10,0);
LCD_WriteChineseString(font4,2,60,0);
i=page*4+1;
p3510(Re[i],0,15);
print3510(Im[i]*mode,50,15);
p3510(Re[i+1],0,26);
print3510(Im[i+1]*mode,50,25);
p3510(Re[i+2],0,38);
print3510(Im[i+2]*mode,50,35);
p3510(Re[i+3],0,50);
print3510(Im[i+3]*mode,50,50);
if(page>
0)page--;
delay_nms(8000000);
}//上翻页
if(key==1){
page++;
if(page>
=SampleNum/4)page=0;
}//下翻页
////////////////////////////失真度计算///////////////////////
voiddistortion(void)
LCD_ClearScreen();
LCD_WriteChineseString(font6,3,10,20);
unsignedintkey;
intfr;
while
(1)
////////////获取频率////////////////////
log_2_N=11;
SampleNum=SampleTab[log_2_N];
reset_timer(0);
init_timer0(40960);
New_Flag=0;
enable_timer(0);
////////////////////等待采样完成///////////////////////////
while(!
FFT_Flag);
disable_timer(0);
//关定时器0
//////////////////////FFT运算/////////////////////////////////
FFT(Re,Im,log_2_N);
////////////////频域功率////////////////////////////////////
for(i=1;
SampleNum/2;
i++){Re[i]=Re[i]*Re[i];
Re[i]=Re[i]/2;
////////////////////总功率/////////////////////////////////
Fp=0;
i++)Fp+=Re[i];
sort(&
Re[1],&
Im[1],SampleNum/2-1);
fr=1000000/fre;
if(Tflag){LCD_WriteChineseString(font7,1,50,20);
LCD_WriteEnglishString("
"
0,38);
print3510(fr,10,38);
US"
58,38);
else
{LCD_WriteEnglishString("
LCD_WriteChineseString(font8,1,50,20);
////////////////////按键扫描/////////////////////////////
if(key==1){SystemState=fft_mode;
mode=20;
break;
if(key==2){SystemState=fft_mode;
mode=100;
/////////////////按键扫描//////////////////////////////
unsignedchargetkey(void)
if(IO1PIN_bit.P1_21==0){
delay_nms(200000);
if(IO1PIN_bit.P1_21==0)return1;
}
if(IO1PIN_bit.P1_22==0){
delay_nms(2000000);
if(IO1PIN_bit.P1_22==0)return2;
if(IO1PIN_bit.P1_23==0){
if(IO1PIN_bit.P1_23==0)return3;
if(IO1PIN_bit.P1_24==0){
if(IO1PIN_bit.P1_24==0)return4;
return0xFF;
//////////////////排序处理//////////////////////////////
voidsort(float*a,float*b,intn)//a为待排序的量,b为起位置
inti,j,temp;
i++)b[i]=i+1;
=n-1;
for(i=0;
n-j;
i++)
if(a[i]<
a[i+1])
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
temp=b[i];
b[i]=b[i+1];
b[i+1]=temp;
//////////////////////显示///////////////////
voidp3510(intv,intx,inty)
intx0;
x0=v*157;
x0=x0/100000000;
LCD_WriteEnglishChar(x0+'
0'
x,y);
x0=x0/100;
x0+=1000000;
print3510(x0,x+6,y);
LCD_WriteEnglishChar('
.'
x+6,y);