您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > DTMF信号产生的Matlab实现
DTMF信号产生的Matlab仿真1、DTMF的相关介绍DTMF(DualToneMultiFrequency,双音多频)由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码,。利用DTMF信令可选择呼叫相应的对讲机,因而作为电话系统中电话机与交换机之间的一种用户信令,用于发送被叫号码。双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频(如上图),在双音多频电话机中,有16个按键,其中10个数字键(0~9)6个功能键(*、#、A、B、C、D)。每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。2、DTMF信号实现方法由于语音频率范围为300—3400Hz,根据奈奎斯特取样定理,取样频率fs应大于或等于原信号最高频率fc的两倍,即fs≥2fc才能保证取样后的信号不失真,此处fc通常取为4KHz,所以电话音频信号在数字信号处理时,取样频率fs为2×fc=8KHz。CCITT规定每秒最多按10个键,即每个键时隙最短为100ms,其中音频实际持续时间至少为45ms,不大于55ms,时隙的其他时间内保持静默,因此按键产生双音频信号时,相继的两个信号间隔一段时间;而解码器则是利用这个时间识别出双音频信号,并转换成对应的数字信息。这里,每个数字信号持续时间为100ms,后面加上100ms的间隔时间(用0表示)。DTMF的编译码定义可用式f(t)=Asin(2*pi*fh*i/fs)+Bsin(2*pi*fl*i/fs)表示,式中两项分别表示i时刻高、低音频的幅值,A和B分别表示高音群和低音群的样值量化基线,而且两者幅值比为K=B/A(0.7K0.9)。因此,上述DTMF信号产生方法可描述为:(1)建立拨号数字的表矩阵,用查表法求用户所按数字键对应的高、低频音。(2)产生相应的DTMF信号及间隔时间。由于fs=8KHz,各信号持续时间为100ms,因此在程序中每个信号取800点,抽样间隔时间为0.125ms,结果存入数组中。(3)画图并监听产生的DTMF信号。3、Matlab仿真实现DTMF信号产生的源代码clcclearfs=8000;flow=[697,770,852,942];fhight=[1209,1336,1477,1633];telnum=input('inputyournumber:','s');lengthofnum=length(telnum);tone=[];tones=[];n=[0:399]fori=1:lengthofnumif(str2num(telnum(i))==0);tone=[sin(2*pi*flow(4)*n/fs)+sin(2*pi*fhight(2)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==1);tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(1)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==2);tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(2)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==3);tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(3)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==4);tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(1)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==5);tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(2)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==6);tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(3)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==7);tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(1)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==8);tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(2)*n/fs)zeros(1,400)];elseif(str2num(telnum(i))==9);tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(3)*n/fs)zeros(1,400)];endtones=[tonestone]endfigure(1)plot(tones)figure(2)freqz(tones)figure(3)plot(abs(fft(tones)))wavwrite(tones,fs,16,'E:\matlab\dtmf.wav')
本文标题:DTMF信号产生的Matlab实现
链接地址:https://www.777doc.com/doc-3935596 .html