DTMF信的产生与检测实验报告修订版_第1页
DTMF信的产生与检测实验报告修订版_第2页
DTMF信的产生与检测实验报告修订版_第3页
DTMF信的产生与检测实验报告修订版_第4页
DTMF信的产生与检测实验报告修订版_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】DSP课程设计实验报告1DTMF测指导老师:申艳老师Multie时间:2014年7月18日信号是在按键式电话机上得到广泛一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的的频率组:行频组和列频组。每组分别包括4个频率,据CCITT的频率为697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477HzHz组频率中分别抽出一个频率进行组合就可以组成16种DTMF编码,从ABCD示。掌握DTMF信号的产生和检测的DSP设计可使学生更加透彻的理解和应用奈奎斯特采样定理,与实际应用相结合,提高学生系统地思考问题和解决实际问题的能力。通过对DSP信号处理器及D/A和A/D转换器的编程,可以培养学生C语言编程能力以及使用DSP硬件平台SDSPDTMF功能。改进DTMF信号的规定指标,使每秒内可传送的DTMF编码加倍。础上,我们又完成了发挥部分的全部要求:能够实现在一个DSP实验自收,基本能实现无差错传输。通过改变处理信号的点数N的数值实现DTMF能够在一秒内传送够多的数据。通过gel添加滑动条的方法实现输2.1DTMF信号的的定义VLt构成V(t)的两个信号,则它们应满足关系式(1)。V(t)=VH(t)+VL(t)CCITT697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477HzHz成两个群,即低频群和高频群。从低频群和高频群中任意抽出6种组合形式,让其代表数字和功率,如表3-V(t)=AsinoHt+BsinoLt其中AsinoHt为低频群的值,BsinoLtAB频群样值的量化基线,具体见表2-1。123A456B789C*0#DDTMF其对应的键值2.2DTMF信号生成方法mathh学方法产生DTMF信号(式2-bufferksin2*pi*k*f0/fs)+sin(2*pi*k(式2-利用两个二阶数字正弦波振荡器产生DTMF信号(本课程设计实际采用方法)弦波振荡器,一个用于产生行频,一个用于产生列频。向DSP相应的系数和初始条件,就可以只用两个振荡器产生所需的八个音频信号。典型的DTMF信号频率范围是700~1700Hz,选取8000HzNyquist条件。由数字振荡器对的框图,可以得到该二阶系统函(式2-2)MF送/个数字100ms。代表数字的音频信号必须持续至少45ms,但ms0msT,其一是音频信号任务(音频信号任务或静音任务),都必须复位决定其持续时间的定时器变量。在静音任务结的行频和列频信号,并根据不同频率确定其初始化参数a1=-cosyAsin。该流程图可采用C言实现,双音信号的产生则由54x汇编代码实现。整个程序作为C54x的多通道缓冲串口(McBsp)的发射串口中断服务子程序,由外部送入的16000Hz串口时钟2.3DTMF信号的检测方法DTMF方法可以有多种。主要分为从信号时间域处理和从信号频率域处理两测法、信号峰值位置检测法、过零点位置及信号幅值简单,可以通过MT8880等芯片加上外围电路实现,易于集成化。缺比要求高。现在广泛应用于一般的脉冲拨号电话机。通过神经网络、能量判断两类。频率判断主要通过滤波器提取DTMF相应波器,应用方式可以有并联DTMF进行计算,找出高、低频率群中最强的信号,进行判断,包括有DFT法(DiscreteFourierrierTransformGoertzel设计方案、算法原理说明3.1Goertzel算法原理Goertzel将两个音频信号提取出来,并通过他们的频率,确定所接受的DT零点计数完成对输入信号的频率检测。在数字信号检测电路中,一般使用频域计算技替时域信号处理。我们可以直接通过付立叶变换,直接得到输入的信号频率。信号各率分量的幅值直接计算可以使用DFT。对于N点数据序列{x(n)}的DFT为:N-1N-1n=0如果用FFT算法来实现DFT计算,计算将涉及复数乘法和加法,并且计算量为Nlog2N。虽然我们可以得到DFT的所有N个值,然而,如果希望计算DFT的M个点,并且M<log2NDFT则更加有效。下面我们用到Goertzel法,是一种直接计算DFTGoertzel说,是计算DFT的一种线性滤波算法,它可以通过调整滤波的周期性。我们可以同时将DFT运算表示为线性滤波运算,由于WkN该因子对公式(4)(DFT表达式)两边相乘,得到:n=0m=0列YK(n)为:m=0 与具有如下单位脉冲响应的滤波器的卷积:可以看到,当n=N时,该滤波器的输出就是DFT在频点ok=k值即 我们可以通过比较式(6)和式(7)来验证上式。对于单位脉冲响应为hk(n)的滤波器来说,其系统函数为:Hkz(式3-6)这个滤波器只有一个位于单位圆上的极点,其频率为oK=kN算全部的DFTFT示用式(9)给出的滤波 数乘法,计算量大。由于我们只需要计算幅值信息,而不关心圆上另外引入一个极点,与原有的极点形成一对共扼极点。将两个轭极点的谐振器。原有的单极点滤波器计算方式变成形如式(10)的方式。其系统函数为:cosz上式中:W=ej2"k/N复杂的复数加法和复数显然,对式(10)无法进行直接计算。为了便于计算实现,我们引入中间变量Qk(n):2"kN其中,Wk=e-NN (式3-9)(式3-10)3.2Goertzel算法改进与实现Goertzel傅立叶变换的方法,需要计算的频率点数不超过21092NGoertzel法将比FFT(FastFourier出改进Goertzel算法的模拟框图,如图3-1所示Q(n)z-1++-WK-N)-WK-N)z-1Q(n-2)图2中可看到,整个计算过程分为两部分:前向通路式(11)和反馈通路式(12)。显然系计算需要重复N=1,?,N重复N+1次,但是式(12)中的反向计算只nN计算只需要计算一次实数乘法和两次实数加法。所以,对实kNGoertzel现DTMF解码器了。由于有8种可能的音频信号需我们并不需要相位信息,只需要幅值信息|X(k)|器计算的前向部分的简化表达方式,即滤波表达式的分子项部分:3.3改进Goertzel算法原理小结DFT的改进计算过程总结写为:yk(N)2=A2+B2-ABcoefk(式3-2)可以看到,由于上面两式中:运算。等式右边全部是实数运算,大大提高了4实际实现中误差分析简单地说,在实际的DSP实现中将使用(4)式和(6)式来得到DTMF信号的频谱信息,(4)式实际就是一个递归线性滤波器的表达式,它在n=0…N之间进行循环。每N个样点对公式(6)进行了一次计算。在这个算法中,DTMF频率(fi)变换成了离散傅立叶系数(k),它们之间存在如下关fikfs=N,K值,得到相应的DTMF频率(fi)上的能量幅值。但是,由于k和N是整数,有可能不能取到合适的DTMF频率(fi)。实际上,计算时如FFT长N将被限定为2得n次方,每次计算可以同时得到N/2个频率点的DFTGoertzel法来说,对于N长度的算法,其可以分辨的最高频率为采输出序列为在一定的限制。式(4-12)给出了Goertzel算法的频率分辨率。对于不是正好在输出序列计算点上的信号频率,N出Nk选择不同,计算的误差会有很大不同。缩小N值,将显着减少计算量,所以N值用105字长或205字长完成Goertzel算法完成检测的,由此我们提出这FGoertzel波器的中心频率。通过改变N值,计算出我们感兴趣的对应一组k值,即完成DTMF频率检测。但是,由式(14)可知k取整数,计算中心频率的位置DTMF生一定的舍入误差。我们将Goertzel算法中的中心频率与实际DTMFD可以计算出D的最大值为DTMF计算的信号窗口的边缘”。当N值取较大值时,同时采elN时对应不同的DTMF频率,取相应的k值,通过Goertzel算法,得到相应的ITU建议的满足性。以下讨论在满足ITU要求的情况下,寻找的N值的过程比,因此,可以通过计算点数的误差百分比来估GoertzelN求宽度存在一定的范围之内,同时也和计算窗口中心频率有关elNNfsHz770Hz信号的完成检测,频域分辨率为8000/125=64Hz,ITU规定的对于频率误信号拒识,即对于770Hz信号为中心,宽度为743.05到769.95。39.0Hz的频优据k=NGoertzelk随机和离N同的fi舍入误差是不同的,因此造成的频率的偏移也是不同的。由N125时,不同的频率k值的舍入误差,表3-2列出了当N=205时,不同的频率k值的舍入误差.信号频率(Hz)k相对偏差(%)N5时不同的频率值k的舍入误差信号频率(Hz)k相对偏差(%)N5时不同的频率值k的舍入误差兼顾每个频率,每个频率k舍入误差都比较小,或者尽可能的都取“舍”或者都取“入”较对于每一个k值,需要4N次实数乘法及4N-2)次实数加法,因此,采用直接法计算的计算复杂度为O(N2)。Goertzel入的X(n),Wk,是复数,每计算一个新输出Y值需要做四。由于我们只需要幅值信息,对于相位信息可以忽略,通过变换得到幅值信息。因此,共需要N+l次实数乘法,计算复杂度为O(NM)。,对于每次成功完成DTMF信号解码的时间估计十分重要。通过对计,我们可以得到其处理性能,通过对处理性能评价,就可以预计单承载的最大信道个数。在这里,定义DTMF解码器成功完成两个DTMF信号解码之间所耗费的时间可以这样估算:每处理一个采样样本的时间间隔允许的最大值为:sfsfsN每一个需要检测的频率,都必须进NN)次加法。检测8个DTMF频率需要的总共的计算量为:(8N+算法流程图始化程序**********************初始化**********************************//InitializeCSLlibrary-ThisisREQUIRED!!!CSLinitThemainfrequencyofsystemis240MHz设置IIC模块的需要设置的,为了使用I2C_setup函数PLLsetFreq1,0xC,0,1,3,3,0);fConfigOpenMcBSPportandgetaMcBSPtypehandlehMcbspMCBSPopenMCBSPPORT,MCBSP_OPEN_RESET);ConfigMcBSPport1byusepreviouslydefinedstructureMcbspConfighMcbsp);ODEC二极管闪烁程序************程序正常执行:二极管闪烁两次***********************while(cnt--){asmBCLRXF//;ClearXFasmBSETXF//;SetXF}5.3DTMF信号产生,发送与接收***************DTMF信号产生,发送,接收*************************riii{irowfreqicos(2*pi*f0/fs);rowfreqisin(2*pi*f0/fs);}riii{i低频数据高频数据columnfreqicospiffs;columnfreqisinpiffs;}k字正弦振荡器,产生DTMF信号{xrowfreqkxnrowfreqk][1];ycolumnfreqkyncolumnfreqk1];xn1=0;yn0;orjjj,设产生信号的持续时间为50ms,所以j为200。{xn*ax1*x_n_1-x_n_2;ynay*y_n_1-y_n_2;x_n_2=x_n_1;ny_n_2=y_n_1;in//gain(可变)改变产生信号的幅度,使之在一定范围内可调,while(!MCBSP_xrdy(hMcbsp)){};MCBSPwrite6(hMcbsp,dtmf[j]);前二百个点为双音信号采样值while(!MCBSP_xrdy(hMcbsp)){};MCBSPwrite6(hMcbsp,dtmf[j]);前二百个点为双音信号采样值while!MCBSP_rrdy(hMcbsp)){};MCBSPreadhMcbspwhile!MCBSP_rrdy(hMcbsp)){};MCBSPreadhMcbsp}orjjj设产生信号的持续时间为50ms,所以j为200。{//后二百个点为0(即静音信号)。while(!MCBSP_xrdy(hMcbsp)){};MCBSPwrite6(hMcbsp,0);while(!MCBSP_xrdy(hMcbsp)){};MCBSPwrite6(hMcbsp,0);while!MCBSP_rrdy(hMcbsp)){};mfrjMCBSPreadhMcbspwhile!MCBSP_rrdy(hMcbsp)){};mfrjMCBSPreadhMcbsp}测与显示循环发送}时子程序*************************延时子程序******************************delayintperiod{foriiperiodi++){forjjperiodj++);}}5.5接收信号判决检测与显示子程序****************接收信号判决检测与显示子程序*********************detect{w0]=2*cos(2*pi*K[0]/N);GoertzelDTMT号w1]=2*cos(2*pi*K[1]/N);w2]=2*cos(2*pi*K[2]/N);w3]=2*cos(2*pi*K[3]/N);w4]=2*cos(2*pi*K[4]/N);w5]=2*cos(2*pi*K[5]/N);w6]=2*cos(2*pi*K[6]/N);w7]=2*cos(2*pi*K[7]/N);foriiii个频率点。{bbi0;bbi0;jNj{bbiw[i]*bb[i][1]-bbidtmfr[j+50]/8192.0;//DFT在8个频率点的值bbibbibb[i][2];}resultibbi*bb[i][1]+bb[i][0]*bb[i][0]-wi]*bb[i][1]*bb[i][0];//每一段的8个频率点的幅度平方值}iii{result检测,与域值比较,当超过域值时,判断此频率点上信号存在{printfdtmfdf\r\n",i,result[i]);x{}jy{}}}率点的幅度平方值自适应更新域值{xy则表示低频为697Hz,高频为1209Hz{应的数为"1"}eifXYxy则表示低频为697Hz,高频为1336Hz{应的数为"2"}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}seifXY{}}况,则输出检测的信号{printfTheDTMFsignalis\"%c\".\r\n",ch);}足,则输出错误信息提示{printfThenumberinputtediniswrong!\n");}}.6自适应域值更新子程序***********************自适应域值更新子程序**********************hreshold{ccc率点的幅度平方值,便于自适应域值更新处理{}bbb第二大频点的幅度平方值{baa{{}}}threshthreshlinshi[1]*0.5);//自适应更新域值(原域值30%+0.7倍第二大频点的幅度平方值70%)}6程序设计、调试与结果分析调试过程CSSetupCC运行CCS设置程序。单击ImportConfigurationClear先定义的设置。从AvailableConfigurationsC02SEEDXDS510PLUSEmulator,单击Import,单击save、加载与程序运行Efilenewsourceccmd写完成后保存,然后从project—addfilestoproject添加c程序和cmd文件,库文件,头文件可以通过扫描相关性(ScanAllDependencies)自动加入到工程中。头文件路径可以通过project中buildoptionscompilerprocesses环境如下图所示:图6-6添加头文件(使用浏览文件相关性选项)图6-8设置数据大小端模式(大端模式)选择Project/RebuildAll或单击(RebuildAll单条按钮,CCS重新进行编辑、汇编、连接工程里的所有文件。选择File/LoadogramDTMFDisassemblyDebug/GoMain,从主程序开始执行。最后单击Debug-Run(或按F5键)运行程序。.2实验结果及图像台电脑循环产生0——ABCD另一台电脑上会循环显示检测到的DTMF信号,即循环显示0——BCDCCSGraph发送端的时域图形参数设置及显示结果如下所示:图6-14发送缓存区图形参数设置(时域及频域)检测端的时域图形参数设置及显示结果如下所示:图4-17检测缓存区图形参数设置(时域及频域)虚拟仪器显示到的问题及解决方法【问题一】:在菜单栏中选中Project-BuildOptions-Compiler-preprocessor-Includeh【问题二】ugmap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论