双音多频拨号系统仿真设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于MATLAB的双音多频拨号系统仿真设计学院:信息与通信工程学院课程:信号处理课程设计姓名:班级:学号:指导老师:目录摘要.....................................................................................................1一、MATLAB及GUI介绍.......................................................................2二、双音多频拨号系统设计方案..........................................................32.1双音多频拨号原理....................................................................32.2MATLABGUI设计.......................................................................42.3双音多频信号产生与检测原理.................................................5三、程序设计与结果分析......................................................................63.1产生双音多频信号....................................................................63.2检测双音多频信号(FFT).......................................................73.2模块函数代码............................................................................83.3仿真结果..................................................................................103.4程序详解..................................................................................14四、总结...............................................................................................16五、参考文献........................................................................................171摘要本设计基于MATLAB平台采用GUI(图形用户界面GraphicalUserInterfac)搭建模拟按键(pushbotton)来实现DTMF(双音多频拨号系统)仿真设计,其主要思想是以不同的行频率与列频率来定位一个按键表示的数字,并通过MATLAB软件以及FFT(快速傅里叶变换)算法实现对电话通信系统中拨号音的合成与识别。并进一步利用MATLAB中的图形用户界面GUI制作简单直观的模拟界面来进行仿真。关键字:DTMF(双音多频拨号系统)MATLABGUI(MATLAB图形用户界面)FFT(快速傅里叶变换)信号仿真2一、MATLAB及GUI介绍MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,势必得比简单的消息呈现花上更多的计算能力。3二、双音多频拨号系统设计方案2.1双音多频拨号原理双音多频DTMF(DualToneMultiFrequency),双音多频,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码。双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。42.2MATLABGUI设计设计思想:DTMF采用16键矩阵用于拨号和识别,所以GUI需要创建16个PushBotton来模拟按键,分别是十个数字按键0~9,六个功能按键DELETE,FFT,CLEAR,CALL,#,@_@共16个按键,除按键之外还需要显示界面,本设计用StaticText添加。初步效果图如下:按键功能:0~9对应数字0~9,录入程序并显示在屏幕上DELETE删除屏幕上最后一位数字CLEAR清除信息,退出仿真CALL模拟拨号系统FFT快速傅立叶变换,解码,得出拨号的值,并显示在屏幕上#清除左侧绿色屏幕上数据信息@_@显示左侧绿色屏幕为录入数据右侧粉色屏幕为FFT后得到的数据52.3双音多频信号产生与检测原理产生原理:DTMF编码器基于两个二阶数字正弦波振荡器,一个用于产生行频,一个用于产生列频。向DSP装入相应的系数和初始条件,就可以只用两个振荡器产生所需的八个音频信号。典型的DTMF信号频率范围是700~1700Hz,选取8000Hz作为采样频率,即可满足Nyquist条件。DTMF双音频信号由两个二阶数字正弦振荡器产生,一个用来产生行音频信号,另一个产生列音频信号。检测原理:DTMF仿真系统中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477Hz和1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用表示,这样8个频率形成16种不同的双频信号。6三、程序设计与结果分析3.1产生双音多频信号functionpushbutton1_Callback(hObject,eventdata,handles)x=get(handles.text1,'string');%把数字显示在屏幕上if(length(x)15)errordlg('Sorry.Thenumberyouhaveinputistoolong!','InputError?','modal')elsen=[1:1000];%每个数字1000个采样点y=sin(0.5345*n)+sin(0.9272*n);%对应行频列频时域叠加,数字1的低频697Hz和高频1209Hz叠加wavplay(y,8192)%产生拨号音space=zeros(1,100);%100个0模拟静音信号globalNUMphone=[NUM,y];%循环储存NUM=[phone,space];%储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'1'];set(handles.text1,'string',[NoCtrl]);end73.2检测双音多频信号(FFT)functionpushbutton14_Callback(hObject,eventdata,handles)globalNUML=length(NUM);n=L/1100;number='';fori=1:nj=(i-1)*1100+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;elserow=4;endif(num(2)320)column=1;%确定列数elseif(num(2)340)column=2;elsecolumn=3;endz=[row,column];%确定数字ifz==[4,2]tel=0;%0在4行2列elseifz==[1,1]tel=1;%1在1行1列elseifz==[1,2]tel=2;%2在1行2列elseifz==[1,3]tel=3;%3在1行3列elseifz==[2,1]tel=4;%4在2行1列elseifz==[2,2]tel=5;%5在2行2列elseifz==[2,3]tel=6;%6在2行3列elseifz==[3,1]tel=7;%7在3行1列elseifz==[3,2]tel=8;%8在3行2列elseifz==[3,3]tel=9;%9在3行3列endclose(h);set(handles.text2,'string',number);t(i)=tel;c=strcat(number,int2str(tel));number=c;i=i+1;endh=waitbar(0,'Decoding...Pleasewait...');steps=1500;forstep=1:steps%computationstakeplaceherewaitbar(step/steps)end83.2模块函数代码DELETE模块CALL模块x=get(handles.text1,'string');%把数字显示在屏幕上xx=str2num(x);globalNUMif(isempty(NUM))errordlg('PleaseinputthephoneNo.','Inputerror','modal')elsewavplay(NUM,8192);msgbox('拨号成功!若需再次拨号请按#号复位!','Done','help')set(handles.tbutton,'visible',['on']);set(handles.text1,'string',['DielingDone.']);endx=get(handles.text1,'string');%把数字显示在屏幕上if(isempty(x))errordlg('PleaseinputthephoneNo.','Inputerror','modal')elsexll=length(x);x(xll)=[];%去掉末尾号在面板上的显示set(handles.text1,'string',[x]);globalNUMll=length(NUM);%删除末尾号码

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功