0DSP系统课程设计设计题目:电话拨号声音检测任课老师:李居朋学院:电子信息工程学院班级:电子1401班姓名:刘广康学号:14213012同组成员班级:电子1401班同组成员姓名:卢思霖同组成员学号:142130132017年4月20日1目录一.设计背景........................................................................................2二.设计要求........................................................................................2三.设计思路及原理................................................................................2四.matlab仿真........................................................................................31.运行结果...........................................................................................32.Matlab主要代码段:(以第一个号码为例)................................5五.DSP设计程序运行及结果.................................................................61.总体流程图.......................................................................................62.c程序运行结果分析........................................................................7六.DSP主要程序段及说明.....................................................................81.端点检测...........................................................................................82.切割音频...........................................................................................93.号码识别...........................................................................................93.1双峰检测.....................................................................................93.2频偏矫正和字符识别.................................................................9七.设计过程中遇到的问题及解决方法...............................................10八.DSP设计感想..................................................................................10九.参考文献..........................................................................................112一.设计背景现有一个犯罪的场景,嫌疑人在作案后给他的上级头目打电话,拨号声被现场的录音设备记录了下来,录音文件为dial_motor.wav(见附件。时域波形图如图1所示)。除了电话拨号声,还有周围环境的噪声。请你根据录音文件,将电话号码分析出来,协助警方破案。二.设计要求1、利用Matlab进行仿真分析(1)对录音文件分别进行时域和频域分析,判断在哪个域可以更好地分析出电话号码;(2)设计对录音文件中所含噪声进行分析,利用Matlab设计滤波器将噪声滤除;(3)利用Matlab语言设计程序,实现电话号码的检测。2、利用C语言设计DSP程序,在BJTUDSP5502信号处理平台上实现电话号码的检测识别。三.设计思路及原理按键电话号码通常使用双音多频(DTMF)技术,即每个按键对应着两个不同的频率,电话号码检测与识别即将电话拨号音频的一对频率检测出来,然后和电话按键频率对应的表格进行对比,编程找出相应的按键。整体思路详见后面的流程图。3四.matlab仿真1.运行结果452.Matlab主要代码段:(以第一个号码为例)fs=8000;[a,fs]=audioread('s1.wav');subplot(3,4,1);af1=abs(fft(a,8000));plot(af1);AM=40;forn=1:1000cj1(n)=af1(n);end[ma1,frequency1]=max(cj1);forn=1000:1600cj2(n)=af1(n);end[ma2,frequency2]=max(cj2);fprintf('号码为');if(abs(frequency2-1209)=AM&&abs(frequency1-697)=AM)fprintf('1');elseif(abs(frequency2-1209)=AM&&abs(frequency1-770)=AM)fprintf('4');elseif(abs(frequency2-1209)=AM&&abs(frequency1-852)=AM)fprintf('7');elseif(abs(frequency2-1209)=AM&&abs(frequency1-941)=AM)fprintf('*');elseif(abs(frequency2-1366)=AM&&abs(frequency1-697)=AM)fprintf('2');elseif(abs(frequency2-1366)=AM&&abs(frequency1-770)=AM)fprintf('5');elseif(abs(frequency2-1366)=AM&&abs(frequency1-852)=AM)fprintf('8');elseif(abs(frequency2-1366)=AM&&abs(frequency1-941)=AM)fprintf('0');elseif(abs(frequency2-1477)=AM&&abs(frequency1-697)=AM)fprintf('3');elseif(abs(frequency2-1477)=AM&&abs(frequency1-770)=AM)fprintf('6');elseif(abs(frequency2-1477)=AM&&abs(frequency1-852)=AM)fprintf('9');elseif(abs(frequency2-1477)=AM&&abs(frequency1-941)=AM)fprintf('#');end6五.DSP设计程序运行及结果1.总体流程图72.c程序运行结果分析8最后一个按键的频谱双峰对应780,1480.查表后此键为6。用watchwindow观察第一个按键的双峰,对比得此键为1。六.DSP主要程序段及说明1.端点检测for(i=0;iSIGNAL_LISTEN_LENGTH;i++){while(!MCBSP_rrdy(hMcbsp)){};DataTemp=MCBSP_read16(hMcbsp);TField_Listen[i]=DataTemp;}Energy=Signal_Energy(TField_Listen,SIGNAL_LISTEN_LENGTH);/*----------FFTProcess----------*/if((EnergySIGNAL_ENERGY_TOP)&&Signal_Enable){/*----------FFTProcess----------*/for(i=0;iSIGNAL_SAMPLE_LENGTH;i++)9{while(!MCBSP_rrdy(hMcbsp)){};DataTemp=MCBSP_read16(hMcbsp);TField_Amplitude[i]=DataTemp;}2.切割音频for(i=0;isignal_single;i++){TField_Amplitude1[i]=(TField_Amplitude[i]);}for(i=0;isignal_single;i++){TField_Amplitude2[i]=(TField_Amplitude[1600*2+i]);}for(i=0;isignal_single;i++){TField_Amplitude3[i]=(TField_Amplitude[1600*4+i]);}………………for(i=0;isignal_single;i++){TField_Amplitude11[i]=(TField_Amplitude[1600*20+i]);}3.号码识别3.1双峰检测for(i=1;i1000;i++){if(FField_Magnitude[i]=max1);else(max1=FField_Magnitude[i],j=i);}for(i=1000;i1600;i++){if(FField_Magnitude[i]=max2);else(max2=FField_Magnitude[i],v=i);}frequency1=j;frequency2=v;3.2频偏矫正和字符识别char*Table_KeyName[16]={1,2,3,4,5,6,7,8,9,0,A,B,C,D,*,#};10if(abs(frequency2-1238)=AM&&abs(frequency1-713)=AM)Print_Key_Name=Table_KeyName[0];elseif(abs(frequency2-1238)=AM&&abs(frequency1-788)=AM)Print_Key_Name=Table_KeyName[3];elseif(abs(frequency2-1238)=AM&&abs(frequency1-872)=AM)Print_Key_Name=Table_KeyName[6];elseif(abs(frequency2-1238)=AM&&abs(frequency1-963)=AM)Print_Key_Name=Table_KeyName[14];elseif(abs(frequency2-1398)=AM&&abs(frequency1-713)=AM)Print_Key_Name=Table_KeyName[1];elseif(abs(frequency2-1398)=AM&&abs(frequency1-788)=AM)Print_Key_Name=Table_KeyName[4];elseif(abs(frequency2-1398)=AM&&abs(frequency1-872)=AM)Print_Key_Name=Table_KeyName[