DTMF信号产生的Matlab实现
- 格式:doc
- 大小:23.00 KB
- 文档页数:2
DTMF信号产生的Matlab仿真
1、DTMF的相关介绍
DTMF(Dual Tone Multi Frequency,双音多频)由高频群和低频群组成,高低频群各包含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.7 由于fs=8KHz,各信号持续时间为100ms,因此在程序中每个信号取800点,抽样间隔时间为0.125ms,结果存入数组中。 (3)画图并监听产生的DTMF信号。 3、Matlab仿真实现DTMF信号产生的源代码 clc clear fs=8000; flow=[697,770,852,942];fhight=[1209,1336,1477,1633]; telnum=input('input your number:','s'); lengthofnum=length(telnum); tone=[]; tones=[]; n=[0:399] for i=1:lengthofnum if (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)]; end tones=[tones tone] end figure(1) plot(tones) figure(2) freqz(tones) figure(3) plot(abs(fft(tones))) wavwrite(tones,fs,16,'E:\matlab\dtmf.wav') (注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注)