ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:90.04KB ,
资源ID:7128127      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7128127.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(双音多频拨号系统DTMF的实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

双音多频拨号系统DTMF的实验报告.docx

1、双音多频拨号系统DTMF的实验报告双音多频拨号系统DTMF的实验报告 双音多频拨号系统DTMF的实验设计报告 所谓双音多频(DTMF),就是用两个频率行频和列频来表示电话机键盘上的一个数字。DTMF 电话的指令正在迅速的取代脉冲指令。除了在电话呼叫信号中使用外,DTMF 还广泛的使用在交互式控制应用,例如电话银行、电子邮件甚至家电远程控制等,用户可以从电话机发送DTMF 信号来做菜单选择。本文基于MATLAB的双音多频拨号系统的仿真实现。主要涉及到电话拨号音合成的基本原理及识别的主要方法,利用 MATLAB 软件以及 DFT 算法实现对电话通信系统中拨号音的合成与识别。并进一步利用 MATLA

2、B 中的图形用户界面 GUI 制作简单直观的模拟界面。还能够利用矩阵不同的基频合成 0 9 不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程,进一步利用 GUI 做出了简单的图形操作界面。本文具有界面清楚,画面简洁,易于理解,操作简单的优点,从而实现对电话拨号音系统的简单的信号仿真。关键词 :双音多频(DTMF) MATLAB GUI 信号仿真 在电话中,数字09的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477

3、Hz和1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用 表示,其中 , 。这样8个频率形成16种不同的双频信号。一,利用GUI 作图(简单的电话界面)如下:利用 GUI 图形用户界面设计工具制作电话拨号面板,把 DTMF 信号和电话机的键盘矩阵对应起来。其中选用我们熟悉的 10 个数字键 0 9 , 3 个功能键“ 回删 ”、“拨号”,“解码”。按照图 电话机键盘矩阵的排列方式制作五行三列的按键控件。每个按键可用 ( Push Button )添加。静态文本框可用 ( Static Text )添加,如图再加个解码键( Push But

4、ton )二,再点运行,得出与上图对应的m文件,再用鼠标右击上图的每个键,点callback导入每个键的编译程序如下:1,按键1的程序:% - Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)x=get(handles.text1,string); % 把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal

5、)else n=1:1000;%每个数字1000个采样点y=sin(0.5345*n)+sin(0.9272*n);%对应行频列频时域叠加,数字1的低频697Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);%100个0模拟静音信号global NUM phone=NUM,y;% 循环储存NUM=phone,space; % 储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,1;set(handles.text1,string,NoCtrl);end2,按键2的程序:function pushbutton5_Callb

6、ack(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字2的低频697Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 10

7、0个0模拟静音信号global NUM phone=NUM,y; %循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,2;set(handles.text1,string,NoCtrl);end 3按键3的程序: % - Executes on button press in pushbutton6.function pushbutton6_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) erro

8、rdlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字3的低频697Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUM phone=NUM,y; %循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,

9、3;set(handles.text1,string,NoCtrl);end4,按键4的程序:% - Executes on button press in pushbutton10.function pushbutton10_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数

10、字1000个采样点y=sin(0.5905*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字4的低频770Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUM phone=NUM,y; %循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,4;set(handles.text1,string,NoCtrl);end5,按键5的程序:% - Executes on button press in pushbutton9

11、.function pushbutton9_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上 if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;%每个数字1000个采样点vy=sin(0.5905*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字5的低频770Hz和高频1336Hz叠加wavplay(y,8192) %

12、产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUM phone=NUM,y;% 循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,5;set(handles.text1,string,NoCtrl);end6,按键6的程序: % - Executes on button press in pushbutton8.function pushbutton8_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把

13、数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.5905*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字6的低频770Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUM phone=NUM,y;% 循环储存 NUM=phone,space; %储存连续的拨

14、号音信号 NoCtrl=x;NoCtrl=NoCtrl,6;set(handles.text1,string,NoCtrl);end 7,按键7的程序:% - Executes on button press in pushbutton13.function pushbutton13_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上 if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input E

15、rror,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.6534*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字7的低频852Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUM phone=NUM,y;% 循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,7;set(handles.text1,string,NoCtrl);end8,按键8的程序:% - Executes

16、on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字8的低频85

17、2Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUM phone=NUM,y; %循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,8;set(handles.text1,string,NoCtrl);end 9,按键9的程序:% - Executes on button press in pushbutton14.function pushbutton14_Callback(hObject, eventdata, handle

18、s)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you have input is too long !,Input Error,modal)else n=1:1000;% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字9的低频852Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUM phone=NUM,

19、y;% 循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,9;set(handles.text1,string,NoCtrl);end10,按键0的程序:% - Executes on button press in pushbutton17.function pushbutton17_Callback(hObject, eventdata, handles)x=get(handles.text1,string); %把数字显示在屏幕上if(length(x)15) errordlg(Sorry . The number you

20、have input is too long !,Input Error,modal)else n=1:1000; 每个数字1000个采样点y=sin(0.7217*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字0的低频941Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUM phone=NUM,y;% 循环储存 NUM=phone,space; %储存连续的拨号音信号 NoCtrl=x;NoCtrl=NoCtrl,0;set(handles.text1,string,No

21、Ctrl);end11,按键#号程序: % - Executes on button press in pushbutton16.function pushbutton16_Callback(hObject, eventdata, handles)set(handles.text1,string,);set(handles.tbutton,visible,off);set(handles.tbutton,value,0); clear all12,按键*的程序:% - Executes on button press in pushbutton18.function pushbutton18_

22、Callback(hObject, eventdata, handles)set(handles.text1,string,);set(handles.tbutton,visible,off);set(handles.tbutton,value,0); clear all13,回删键的程序:% - Executes on button press in pushbutton20.function pushbutton20_Callback(hObject, eventdata, handles)x=get(handles.text1,string);% 把数字显示在屏幕上if(isempty(

23、x) errordlg(Please input the phone No.,Input error,modal)elsexll=length(x);x(xll)=;%去掉末尾号在面板上的显示set(handles.text1,string,x);global NUMll=length(NUM);%删除末尾号码在拨号音信号中的储存for i=ll-1100+1:ll NUM(ll)=; ll=length(NUM);endend14,拨号键的程序:% - Executes on button press in pushbutton21.function pushbutton21_Callbac

24、k(hObject, eventdata, handles)x=get(handles.text1,string); % 把数字显示在屏幕上xx=str2num(x);global NUM if(isempty(NUM) errordlg(Please input the phone No.,Input error,modal)else wavplay(NUM,8192); msgbox(拨号成功!若需再次拨号请按#号复位!,Done,help) set(handles.tbutton,visible,on); set(handles.text1,string,Dieling Done.);e

25、nd14,关闭键的程序:% - Executes on button press in pushbutton22.function pushbutton22_Callback(hObject, eventdata, handles)clear allclose all 15,解码的程序:% - Executes on button press in tbotton.function tbotton_Callback(hObject, eventdata, handles)global NUML=length(NUM);n=L/1100;number=;for i=1:nj=(i-1)*1100

26、+1;d=NUM(j:j+999); %截取出每个数字f=fft(d,2048); %以N=2048作FFT变换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; else row=4; end if (nu

27、m(2) 320) column=1; %确定列数 elseif (num(2) 340) column=2; else column=3; endz=row,column; % 确定数字 if z=4,2 tel=0; %0在4行2列 elseif z=1,1 tel=1; %1在1行1列 elseif z=1,2 tel=2; %2在1行2列 elseif z=1,3 tel=3; %3在1行3列 elseif z=2,1 tel=4; %4在2行1列 elseif z=2,2 tel=5; %5在2行2列 elseif z=2,3 tel=6; %6在2行3列 elseif z=3,1

28、tel=7; %7在3行1列 elseif z=3,2 tel=8; %8在3行2列 elseif z=3,3 tel=9; %9在3行3列 endt(i)=tel;c=strcat(number,int2str(tel);number=c;i=i+1;end set(handles.text1,string,解码中.);h = waitbar(0,Decoding.Please wait.);steps = 1500;for step = 1:steps % computations take place here waitbar(step / steps)endclose(h);set(h

29、andles.text1,string,number); % hObject handle to tbotton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)三,运行以上程序调出如下图界面:即可以进行仿真拨号。 四,程序具体说明: 1. 按下任意09键就可以实现仿真拨号:这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔模拟静音,间隔也是在按键时产生的。如:按键1 y=sin(0.5345*n)+sin(0.9272*n)算法,sin(低频*2pi/采样频率8192*采样点n)+sin(高频*2pi/采样频率8192*采样点n); 2.*号和#号功能一样,清空文本框确定保留号码,实现从新拨号;即将前面拨过的号码进行确认保留,意味着此时连续拨号音信息的储存单元NUM中的信号即为最后用于识别的连续拨号音DTMF信号,并在显示窗口中显示“#”号作为标记3.回删键的作用:是将前面拨错的号码删除退回,表现为将显示窗口已

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1