您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 用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模拟静音信号globalNUMphone=[NUM,d1];NUM=[phone,space];%储存连续拨号音信号wavplay(d1,8192);%拨号音按键2n=[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);%globalNUMphone=[NUM,d2];NUM=[phone,space];%wavplay(d2,8192);%按键3n=[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);%globalNUMphone=[NUM,d3];NUM=[phone,space];%wavplay(d3,8192);%按键4n=[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);%globalNUMphone=[NUM,d4];实用标准文案大全NUM=[phone,space];%wavplay(d4,8192);%按键5n=[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);%globalNUMphone=[NUM,d5];NUM=[phone,space];%wavplay(d5,8192);%按键6n=[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);%globalNUMphone=[NUM,d6];NUM=[phone,space];%wavplay(d6,8192);%按键7n=[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);%globalNUMphone=[NUM,d7];NUM=[phone,space];%wavplay(d7,8192);%按键8n=[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);%实用标准文案大全globalNUMphone=[NUM,d8];NUM=[phone,space];%wavplay(d8,8192);%按键9n=[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);%globalNUMphone=[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);globalNUML=length(NUM);NUM=NUM(1:L-1100);%wavplay(d11,8192);按键0n=[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);%globalNUMphone=[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:nj=(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;endif(num(2)320)column=1;%确定列数elseif(num(2)340)column=2;elsecolumn=3;endz=[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;endt(i)=tel;c=strcat(number,int2str(tel));number=c;i=i+1;endset(handles.edit2,'string',number);拨号:globalNUMwavplay(NUM,8192);L=length(NUM);n=L/1100;number='';fori=1:nj=(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;endif(num(2)320)column=1;%elseif(num(2)340)column=2;elsecolumn=3;endz=[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;endt(i)=tel;c=strcat(number,int2str(tel));%number=c;%i=i+1;endset(handles.edit1,'stri
本文标题:用matlab-GUI功能模拟DTMF拨号系统
链接地址:https://www.777doc.com/doc-3935606 .html