计算机与信息工程学院综合性、设计性实验报告专业:通信工程专业年级/班级:2013级2015—2016学年第一学期课程名称数字信号处理指导教师范海菊学号姓名13082240XXXXX实验地点计算机楼216实验时间第7-15周项目名称双音频电话拨号实验实验类型设计性一、实验目的理解双音频电话拨号系统的相关知识;熟悉面向对象的Matlab仿真(GUI);基于matlab的双音频电话拨号系统的功能完善(声音等);总结并分析本课题主要解决的问题及存在的问题二、实验原理在双音频(DTMF)电话机中,包括DIMF发送器和DIMF接收器,是广泛用于快速按键话机和无线通信设备中的专用集成电路。DTMF发送器能根据不同的按键号码发出相应的一组双音频信号,如图所示(其中f1、f2、f3、f4为低频群,f5、f6、f7为高频群):基本原理是由3.58Mhz的晶体振荡器分频后,得到四个高频和四个低频,在高、低频中各取一个频率合成后,就得到双音频信号。考虑到双音频信号有两个正弦信号组合而成,可假设双音频信号时域表达形式如下:()0.25sin(2)0.25sin(2)LHxtftft其中假设每个正弦信号电压为0.25V,Lf为低频信号的频率,Hf为高频信号的频率。信号每个数码发号时间大于0.04s,两个数码之间间隔时间大于0.05s,DTMF接收器对输入信号进行分离、译码、缓冲恢复为对应于16种DIMF信号。在电话机面板上4*4组合的按键组与相应的信号的表达式一一对应,当按下一个数据键时,例如“5”时,则产生频率为770HZ和1336HZ的两个正弦波,并叠加成相应的双音频信号。国际电报电话咨询委员会和我国标准都规定拨号数字与高低频的组合关系如下表所示:利用MATLAB中的图形户界面GUI进行仿真双音频拨号电话在实际拨号时对应的时域波形,并利用Matlab库函数中提供的相应频域变换函数fft、abs做出每一按键时域信号的功率谱。电话拨号盘上的A、B、C、D键为保留拨号键,在本课题仿真中不对其进行仿真设计。三、实验内容GUI的基本知识在MATLAB中,图形用户界面GUI包含多种对象的图形窗口。用户必须对每一个对象进行界面布局和编程,从而使用户激活GUI每个对象时都能够执行相应的行为。另外,用户必须保存和发所创建的GUI,使得GUI能够真正得到应用。MATLAB为用户开发图形界面提供了一个方便高效的集成环境:MATLAB图形用户界面开发环境GUIDE。GUIDE主要是一个界面设计工具集,MATLAB将所有GUI支持的用户控件都集成在这个环境中提供界面外观、属性和行为响应方式的设置方法。GUIDE将用户保存设计好的GUI界面保存在一个FIG资源文件中,同时还能生成包含GUI初始化和组件界面布局控制代码的M文件。这个M文件为实现回调函数(当用户激活GUI某已组件时执行的函数)提供了一个参考框架。虽然使用用户自己编写的、包含GUI所有发布命令的M文件也能够实现一个GUI,但是GUIDE执行效率更高:使用GUIDE不但能够交互式地进行组件界面布局,而且能够生成两个用来保存和发布GUI的文件。GUI界面设计图形界面(GUI)就是通过窗口、选单、按钮、文字说明等构成一个美观的界面,提供用户利用鼠标或键盘方便地实现操作。Matlab设计图形用户界面的方法有两种:使用可视化的界面环境和通过编写程序,本课题采用可视化的界面环境仿真双音频拨号电话。通过打开MATLAB的菜单File/New/GUI即可打开如下的窗口,选择CreateNewGUI选单中的“BlankGUI(Default)”后设置相应的存储位置,单击OK即可得到如下未命名的图形用户界面“untitled.fig”编辑器外观:在弹出的“untitled.fig”的图形对象面板中选择可用来仿真双音频电话面板的各个控件,并设置各个控件的属性值以便在编写回调函数(Callback)时有效利用各个控件的属性值,使编写的函数易于读懂。单击运行后的得到如下的图像界面:实现GUI的基本机制是对控件的Callback属性编程以期实现界面上各个控件的功能。在本课题中对各个控件的Callback进行编程后再次运行时,用鼠标单击‘15516595587’后出现的界面如下。同时可实现语音报号的功能。可实现对输入的按键音响声。点击“拨号”按键,可出现快速拨号的拨号音,并在“您拨的号码是”的显示框显示,得到的图形界面如下:点击“清除”按键即可实现,对所有显示框内容的清除功能。进一步说明当单独拨号“*、#”按键时,无法显示对应的字符,只能显示数字字符;如果混合拨号时,则“*、#”自动译成临近的数字,已临近的数字代替显示,具体情况如下图显示:针对这种情况的有关程序有待进一步完善,在此不做深入解决,基本已经实现双音频的合成与重现,并以较为友好的GUI界面显示出来,基本达到实验要求目的。四、实验源程序段展示functionvarargout=T1(varargin)%T1MATLABcodeforT1.fig%T1,byitself,createsanewT1orraisestheexisting%singleton*.JJ%%H=T1returnsthehandletoanewT1orthehandleto%theexistingsingleton*.%%T1('CALLBACK',hObject,eventData,handles,...)callsthelocal%functionnamedCALLBACKinT1.Mwiththegiveninputarguments.%%T1('Property','Value',...)createsanewT1orraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforeT1_OpeningFcngetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.AllinputsarepassedtoT1_OpeningFcnviavarargin.%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@T1_OpeningFcn,...'gui_OutputFcn',@T1_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT%---ExecutesjustbeforeT1ismadevisible.functionT1_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstoT1(seeVARARGIN)%ChoosedefaultcommandlineoutputforT1handles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);set(handles.edit1,'string','');set(handles.edit2,'string','');globalNUMNUM=NUM(1:0);%UIWAITmakesT1waitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=T1_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;%---Executesonbuttonpressinpushbutton2.%functionpushbutton2_Callback(hObject,eventdata,handles)functionvarargout=pushbutton2_Callback(h,eventdata,handles,varargin)n=[1:1000];fh4=1209;fl4=770;fs=8192;d0=sin(2*pi*fh4/fs*n)+sin(2*pi*fl4/fs*n);n0=strcat(get(handles.edit1,'string'),'4');set(handles.edit1,'string',n0);space=zeros(1,100);globalNUMphone=[NUM,d0];NUM=[phone,space];wavplay(d0,8192);%hObjecthandletopushbutton2(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%---Executesonkeypresswithfocusonpushbutton2andnoneofitscontrols.functionpushbutton2_KeyPressFcn(hObject,eventdata,handles)%hObjecthandletopushbutton2(seeGCBO)%eventdatastructurewiththefollowingfields(seeUICONTROL)%Key:nameofthekeythatwaspressed,inlowercase%Character:characterinterpretationofthekey(s)thatwaspressed%Modifier:name(s)ofthemodifierkey(s)(i.e.,control,shift)pressed%handlesstructurewithhandlesanduserdata(seeGUIDATA)%---Executesonbuttonpressinpushbutton3.%funct