用matlabGUI功能模拟DTMF拨号系统.docx
- 文档编号:28971721
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:11
- 大小:149.57KB
用matlabGUI功能模拟DTMF拨号系统.docx
《用matlabGUI功能模拟DTMF拨号系统.docx》由会员分享,可在线阅读,更多相关《用matlabGUI功能模拟DTMF拨号系统.docx(11页珍藏版)》请在冰豆网上搜索。
用matlabGUI功能模拟DTMF拨号系统
用matlab-GUI功能模拟DTMF拨号系统
用matlabGUI功能模DTMF拨号系统
双音多频DTMF(DualToneMulti-Frequency)信号,是用两个特定的单音频率信号的组合来代表数字或功能。
在DTMF电话机中有16个按键,其中10个数字键0—9,6个功能键*、#、A、B、C、D。
其中12个按键是我们比较熟悉的按键,另外由第4列确定的按键作为保留,作为功能键留为今后他用。
根据CCITT建议,国际上采用697Hz、770Hz、852Hz、94lHz低频群及1209Hz、1336Hz、1477Hz、1633Hz高频群。
从低频群和高频群任意各抽出一种频率进行组合,共有16种组合,代表16种不同的数字键或功能,每个按键唯一地由一组行频和列频组成如表1所示。
(1).GUI图形电话拨号面板的制作:
利用GUI图形用户界面设计工具制作电话拨号面板,把DTMF信号和电话机的键盘矩阵对应起来。
其中选用我们熟悉的10个数字键0—9,2个功能键“*”、“#”,另四个键省略。
电话机键盘矩阵的排列方式制作四行三列的按键控件。
然后,为了更直观的反映对应的按键号码,可以设置一个编辑框,用于动态的显示拨号号码,模拟实际电话
的拨号显示窗口。
编辑框可用(EditText)添加。
另外,为了图形电话拨号面板的简洁美观,可以添加空白区域作为背景,并用静态文本框制作文字信息。
背景可用(Frame)添加,静态文本框可用(StaticText)添加。
最终利用GUI图形用户界面设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,这里将其保存为tu1.fig文件。
(2).DTMF信号的产生合成:
其主要的功能是使对应的按键,按照表1的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。
此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。
鉴于CCITT对DTMF信号规定的指标,这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔来模拟静音。
以便区别连续的两个按键信号。
间隔的静音信号也是在按键时产生的。
(3)程序段:
按键1:
n=[1:
1000];%每个数字1000个采样点
d1=sin(0.5346*n)+sin(0.9273*n);%对应行列频叠加
n1=strcat(get(handles.edit1,'string'),'1');%获取数字号码
set(handles.edit1,'string',n1);%显示号码
space=zeros(1,100);%100个1模拟静音信号
globalNUM
phone=[NUM,d1];
NUM=[phone,space];%储存连续拨号音信号
wavplay(d1,8192);%拨号音
按键2
n=[1:
1000];%同上
d2=sin(0.5346*n)+sin(1.0247*n);%由(2*pi/8192)*行列频率得到其他按键一样
n2=strcat(get(handles.edit1,'string'),'2');%8192为采样频率
set(handles.edit1,'string',n2);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d2];
NUM=[phone,space];%
wavplay(d2,8192);%
按键3
n=[1:
1000];%
d3=sin(0.5346*n)+sin(1.1328*n);%
n3=strcat(get(handles.edit1,'string'),'3');%
set(handles.edit1,'string',n3);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d3];
NUM=[phone,space];%
wavplay(d3,8192);%
按键4
n=[1:
1000];%
d4=sin(0.5906*n)+sin(0.9273*n);%
n4=strcat(get(handles.edit1,'string'),'4');%
set(handles.edit1,'string',n4);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d4];
NUM=[phone,space];%
wavplay(d4,8192);%
按键5
n=[1:
1000];%
d5=sin(0.5906*n)+sin(1.0247*n);%
n5=strcat(get(handles.edit1,'string'),'5');%
set(handles.edit1,'string',n5);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d5];
NUM=[phone,space];%
wavplay(d5,8192);%
按键6
n=[1:
1000];%
d6=sin(0.5906*n)+sin(1.1328*n);%
n6=strcat(get(handles.edit1,'string'),'6');%
set(handles.edit1,'string',n6);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d6];
NUM=[phone,space];%
wavplay(d6,8192);%
按键7
n=[1:
1000];%
d7=sin(0.6535*n)+sin(0.9273*n);%
n7=strcat(get(handles.edit1,'string'),'7');%
set(handles.edit1,'string',n7);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d7];
NUM=[phone,space];%
wavplay(d7,8192);%
按键8
n=[1:
1000];%
d8=sin(0.6535*n)+sin(1.0247*n);%
n8=strcat(get(handles.edit1,'string'),'8');%
set(handles.edit1,'string',n8);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d8];
NUM=[phone,space];%
wavplay(d8,8192);%
按键9
n=[1:
1000];%
d9=sin(0.6535*n)+sin(1.1328*n);%
n9=strcat(get(handles.edit1,'string'),'9');%
set(handles.edit1,'string',n9);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d9];
NUM=[phone,space];%
wavplay(d9,8192);%
按键C(删除一个数字)
n=[1:
1000];
num=get(handles.edit1,'string');
L=length(num);
nx=strrep(num,num,num(1:
L-1));%
d11=sin(0.7217*n)+sin(0.9273*n);
set(handles.edit1,'string',nx);
set(handles.edit2,'string',nx);
globalNUM
L=length(NUM);
NUM=NUM(1:
L-1100);%
wavplay(d11,8192);
按键0
n=[1:
1000];%
d0=sin(0.7217*n)+sin(1.0247*n);%
n0=strcat(get(handles.edit1,'string'),'0');%
set(handles.edit1,'string',n0);%
space=zeros(1,100);%
globalNUM
phone=[NUM,d0];
NUM=[phone,space];%
wavplay(d0,8192);%
按键D(清除显示屏)
n=[1:
1000];
num=get(handles.edit1,'string');
L=length(num);
nj=strrep(num,num,num(1:
L-1000));%
d11=sin(0.7217*n)+sin(1.1328*n);
set(handles.edit1,'string',nj);
set(handles.edit2,'string',nj);
globalNUM;
L=length(NUM);
NUM=NUM(1:
L-10000);%
wavplay(d11,8192);
接听(相当于解码):
globalNUM%解码程序
wavplay(NUM,2000);
L=length(NUM);%num为全局变量
n=L/1100;
number='';
fori=1:
n
j=(i-1)*1100+1;
d=NUM(j:
j+999);%取出每个数字
f=fft(d,2048);%以n=2048做ffi变换
a=abs(f);
p=a.*a/10000;%计算功率普
num
(1)=find(p(1:
250)==max(p(1:
250)));%找行频
num
(2)=300+find(p(300:
380)==max(p(300:
380)));%找列频
if(num
(1)<180)row=1;%确定行数
elseif(num
(1)<200)row=2;
elseif(num
(1)<220)row=3;
elserow=4;
end
if(num
(2)<320)column=1;%确定列数
elseif(num
(2)<340)column=2;
elsecolumn=3;
end
z=[row,column];%
ifz==[4,2]tel=0;
elseifz==[1,1]tel=1;
elseifz==[1,2]tel=2;
elseifz==[1,3]tel=3;
elseifz==[2,1]tel=4;
elseifz==[2,2]tel=5;
elseifz==[2,3]tel=6;
elseifz==[3,1]tel=7;
elseifz==[3,2]tel=8;
elseifz==[3,3]tel=9;
end
t(i)=tel;
c=strcat(number,int2str(tel));
number=c;
i=i+1;
end
set(handles.edit2,'string',number);
拨号:
globalNUM
wavplay(NUM,8192);
L=length(NUM);
n=L/1100;
number='';
fori=1:
n
j=(i-1)*1100+1;
d=NUM(j:
j+999);%取出每个数字
f=fft(d,2048);%N=2048做ffi变化
a=abs(f);%求模
p=a.*a/10000;%技术功率谱
num
(1)=find(p(1:
250)==max(p(1:
250)));%找行频率
num
(2)=300+find(p(300:
380)==max(p(300:
380)));%找列频
if(num
(1)<180)row=1;%确定行数
elseif(num
(1)<200)row=2;
elseif(num
(1)<220)row=3;
elserow=4;
end
if(num
(2)<320)column=1;%
elseif(num
(2)<340)column=2;
elsecolumn=3;
end
z=[row,column];%
ifz==[4,2]tel=0;
elseifz==[1,1]tel=1;
elseifz==[1,2]tel=2;
elseifz==[1,3]tel=3;
elseifz==[2,1]tel=4;
elseifz==[2,2]tel=5;
elseifz==[2,3]tel=6;
elseifz==[3,1]tel=7;
elseifz==[3,2]tel=8;
elseifz==[3,3]tel=9;
end
t(i)=tel;
c=strcat(number,int2str(tel));%
number=c;%
i=i+1;
end
set(handles.edit1,'string',number);
下面将效果图附上:
其中显示框第一个为拨号显示框
第二个为解码后显示框
时间有点紧,这篇文档做的有点粗糙,望见解,程序参考了网上的一片文档
但效果是出来了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlabGUI 功能 模拟 DTMF 拨号 系统