您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > MATLAB应用课题二GUI拨号实验
《MATLAB基础与应用》课题二:基于MATLAB的双音多频(DTMF)信号的产生、接收以及可视化拨号系统的实现内容一:研究DTMF信号的产生以及基于Goertzel算法的接收原理,并使用MATLAB编程实现DTMF拨号系统的信号发生及接收。双音多频系统,简称为DTMF(DoubleToneMultiFrequency),是用按键进行电话拨号的一种制式,由美国AT﹠T贝尔实验室开发。作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,可广泛应用于电话通信系统中。但绝大部分是用作电话的音频拨号。另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。每个DTMF信号是由2个单频率信号叠加而成的,其中一个频率处于低频段(小于1KHz),另一个频率处于高频段(1KHz~2KHz)。高低频段各有四个频率,四个低频表示四行,四个高频表示四列,高、低频组合可以提供16个字符。第四列的最高频率暂时不用,因此可以提供12个字符,包括0到9中一个特定的十进制数字,或者字符*和#。而其它四个字符保留以备扩展使用。字符分配如表1所示。表1双音多频通信系统编码表(第四列备用)1209Hz1336Hz1477Hz1633Hz697Hz123A770Hz456B852Hz789C941Hz*0#DDTMF是一个典型的小型数字信号处理系统。它既有模拟信号的生成和传输部分,需要使用D/A转换;又有在接收端对它进行A/D转换并进行数字信号处理即检测的部分。而且为了提高系统的检测速度并降低成本,还开发了一种特殊的DFT算法,称为Goertzel算法。这种算法既可以用硬件(专用芯片)也可以用软件实现。所以DTMF系统的设计问题是理论与工程相结合的一个典型范例。1、DTMF信号的产生:每个字符对应的DTMF信号由两个正弦波的数字样本叠加而成。正弦波的采样率为8kHz,硬件必需每125ms输出一个样本。将这个叠加信号送到D/A转换器变换成模拟信号,再通过电话线传送到交换机。2、DTMF信号的接收:在接收端,将接收到的模拟音频信号进行A/D转换,恢复为数字信号,然后检测其频谱以确定所发送的字符。检测算法可以采用FFT算法,对于N个输入样本,FFT算法的输出点数M不能小于N,所以至少需要N个存储单元。而DTMF信号中只包含固定的8个频率,因此在接收端只需检测8个频率(远远小于输入样本数N),因此针对DTMF信号的特点,在检测端开发了一种特殊的DFT算法,称为Goertzel算法,其本质是一种计算DFT的线性滤波法。3、Goertzel算法:(参考资料:【1】数字信号处理教程—MATLAB释义》陈怀琛编著)内容一要求:采用MATLAB程序实现DTMF双频拨号的全过程,包括:1、发生端:编程产生12个号码或字符(0~9、*、#)的DTMF信号,使用INPUT语句由用户输入任意的号码或字符,程序产生对应的双正弦信号,要求绘制出DTMF信号波形并发出对应的双频声音;(提示:发生端为了使信号发出足够长声音,可以将信号长度适当加长,比如2500至3000点)2、接收端:使用Goertzel算法计算接收到的双频信号的8个基频幅度,并根据设置的幅值门限(可根据8个基频幅度自己设置),找出基频中的两个峰值,从而确定接收到的信号对应的号码或字符。要求绘制接受信号的8个基频的DFT幅度分布图,并显示出接收到的号码或字符。(提示:接收端得到的信号频率为Nfkfsk,式中的Hzfs8000,是电话数字系统的采样率,N为接收端进行DFT的点数,kf为检测端得到的信号频率,为使kf尽量接近表1中DTMF信号的8个标准基频,根据经验N应该选择205,此时与8个基频对应的8个K值为:18、20、22、24、31、34、38、42。更多资料参看资料【1】)Goertzel算法参考程序:functionX=gfft(x,k)N=length(x);x1=[x,0];d1=2*cos(2*pi*k/N)v=filter(1,[1,-d1,1],x1);w=exp(-i*2*pi*k/N);x=v(N+1)-w*v(N);Goertzel(戈则尔)算法DTMF检测的原理,是在DTMF频率上,检查接收到的信号能量,以确定是否接收到了正确的DTMF音调对。检测算法可以是利用FFT算法的DFT实现,也可以是滤波器组实现。FFT可以用来计算N个均匀配置的频率的能量。为了获得在1.5%的频率偏差范围内,检测8个DTMF频率所需的频率所需的频率分辨率,对于8KHz的采样率,256点的FFT是必需的。对于要检测的音调数量比较小的情况下,滤波组实现更有效。因为我们关心的频率只有8个,所以用DFT直接计算更有效:10)()(NnknNWnxkX(3.3.1)对于8个不同的K值,它对应于表一的DTMF频率。利用戈则尔算法可以更有效的计算出DFT系数,戈则尔算法可以看作是针对每个频率k的匹配滤波器,如图3所示。其中x(n)为系统的输入信号,)(kHk为第k个频率组件上的滤波器传递函数,而X(k)则为相应的滤波器输出。图3戈则尔算法的流程图由(2.3.3-1)公式我们得到:12)2(eeWkkNNjkNN(3.3.2)用WkNN乘(3.3.2)式右边,我们得到10)(10)()()(NnnNkNNnknNkNN(3.3.3)定义序列10)()()(NmmnkNkWymxn(3.3.4)这个方程可以解释为有限长序列x(n),10Nn,与序列)(nuWknN的卷积。因此)(nyK可以看作是具有冲激响应)(nuWknN的滤波器输出。也就是说,由于有限长输入)(0zH)(zHk)(1zHNX(0)X(k)X(N-1)x(n)x(n),滤波器具有冲激响应)(nhk)(nuWknN(3.3.5)因此方程(3.3.4)可以表示为)(*)()(nunxnyWknNk(3.3.6)根据(3.3.3),(3.3.4)式,以及当n0和nN时x(n)=0这一事实,我们可以证明NnnykXk|)()((3.3.7)即X(k)是滤波器)(zHk在时间n=N时的输出。对(3.3.6)式两边作z变换,我们得到:111)()(zZXzYWkNk(3.3.8)第k个戈则尔滤波器的传递函数定义为111)()()(zzXzYzHWkNkkk=0,1,2,……,N-1(3.3.9)此滤波器有一个极点位于频率NkWk/2的单位圆上,因此可以利用由(3.3.9)式定义的N个滤波器组成平行组合,对输入的数据块进行滤波,计算出整个的DFT,其中每一个滤波器有一个位于DFT的相应频率上的极点。因此戈则尔算法计算出N个DFT系数,所以参数N必须选择得能保证X(k)上靠近DTMF频率kf,这可以通过选择N满足下列关系实现:Nkffsk(3.3.10)式中采样频率sf=8kHz是电信系统中最常用的。图4描绘出了传递函数)(zHk的信号流图。因为系数WkN是复数值,所以下图计算出每个新的)(nyk的值,需要进行四次乘和加。所有的中间值)1(),......1(),0(Nyyykkk都必须计算出来,以便得到最终的输出)()1(kXNyk。因此,图4表明,对于每个频率指标k,计算算法为计算X(k)都需要4N次的复数乘和加。图4X(k)计算的流程图通过组合具有共轭复数极点的滤波器对,可以避免进行复数的乘和加。用因子)1(1ZWKN乘(4.4.2-9)式中)(zHk的分子分母,我们得到:zzzWWzWHNkWzzzkNkNkNkNk211111)/2cos(211)1)(1(1)((3.3.11)由(3.3.11)定义的传递函数的信号流图,利用直接II型实现,表现在图5上,滤波器的递推部分位于延迟元件的左边。而非递推部分则位于延迟软件的右边。因为只是在时间N-1时需要输出量)(nyk,所以我们只是在第(N-1)次的迭代中,才需要计算滤波器的非递推部分。算法的递推部分可表示为)2()1()2cos(2)()(nnNknxn(3.3.12))1(Nyk的非递推算法可以表示为)1()()(nWnwnwykkNkk(3.3.13)图5式3.3.11表示的信号流图对于音调检测,只有X(k)的幅值平方是需要的,通过实现这种需求,可以是算法作进一步简)2(nwk)(nyk)(nwk+++z1z1x(n)-1)2cos(2NkkNWz1)(nyk)(zHk)(nx化,由(3.3.13)式,X(k)的平方幅值可以计算为:)2()2()1()2cos(2)1(222|)(|NNNN(3.3.14)因此(3.3.13)式中的给出的复数运算被免除,而为了计算每一个|)(|2kX,(3.3.14)式中值需要一个系数)2cos(2ffsk,因为这里有8个可能的音调被检测,故我们只需要(3.3.12)式,(3.3.14)式描述的8个滤波器。每个滤波器被调谐到表一中的一个频率上。应当注意,方程(3.3.12)是针对n=0,1,……,N-1进行计算,而方程(3.3.14)则是针对时间n=N-1只计算一次]。
本文标题:MATLAB应用课题二GUI拨号实验
链接地址:https://www.777doc.com/doc-2887472 .html