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')

(注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注)