武汉大学教学实验报告电子信息学院专业2012年1月2日实验名称指导教师姓名年级学号成绩一、预习部分1.实验目的2.实验基本原理3.主要仪器设备(含必要的元器件、工具)一、实验目的本实验基于对电话通信系统中拨号音合成与识别的仿真实现,主要涉及到电话拨号音合成的基本原理及识别的主要方法,利用MATLAB软件以及FFT算法实现对电话通信系统中拨号音的合成与识别。并进一步利用MATLAB中的图形用户界面GUI制作简单直观的模拟界面。使其对电话通信系统拨号音的合成与识别有个基本的了解。能够利用矩阵不同的基频合成0-9不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程。进一步利用GUI做出简单的图形操作界面。要求界面清楚,画面简洁,易于理解,操作简单。从而实现对电话拨号音系统的简单的实验仿真。二、实验基本原理双音多频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所示三、主要仪器设备MATLAB软件二、实验操作部分1.实验数据、表格及数据处理2.实验操作过程(可用图表示)3.实验结论一、实验操作过程1.图形电话拨号面板的制作利用GUI图形用户界面设计工具制作电话拨号面板,把DTMF信号和电话机的键盘矩阵对应起来。其中选用我们熟悉的10个数字键0—9,2个功能键“*”、“#”,另四个键省略。按照图1电话机键盘矩阵的排列方式制作四行三列的按键控件。每个按键可用(PushButton)添加。然后,为了更直观的反映对应的按键号码,可以设置一个编辑框,用于动态的显示拨号号码,模拟实际电话的拨号显示窗口。编辑框可用(EditText)添加。另外,为了图形电话拨号面板的简洁美观,可以添加空白区域作为背景,并用静态文本框制作文字信息。背景可用(Frame)添加,静态文本框可用(StaticText)添加。最终利用GUI图形用户界面设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,如下图所示。这里将其保存为tu1.fig文件。2.DTMF信号的产生合成现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对tu1.m文件进行编辑。其主要的功能是使对应的按键,按照表1的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。鉴于CCITT对DTMF信号规定的指标,这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔来模拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键时产生的。程序思想为:定义NUM为全局变量,用于存储连续的拨号音(DTMF)信号,包括数字信号音以及静音信号。d0=sin(0.7217*n)+sin(1.0247*n)中的行频与列频是由表1中0键对应的fL=941HZ,fH=1336HZ计算得出,已知声音取样频率fs=8192HZ,则取样后,。对于其他数字键的功能则可以用类似的方法得到。按键最小值最大值按键最小值最大值00.72171.024750.59061.024710.53460.927360.59061.109820.53461.024770.65350.927330.53461.109880.65351.024740.59060.927390.65351.10983.DTMF信号的检测识要实现电话拨号音(DTMF)信号的检测识别,可以通过直接计算付里叶变换得到输入信号的组成频率。这里采用FFT算法对信号进行解码分析。首先对接收到的数字信号作FFT分析,计算出其幅度谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。对于连续的双音多频(DTMF)信号,需要把有效的数字拨号信号从静音间隔信号中分割提取出来,然后再用FFT算法对信号进行解码分析。程序的思想为:确定行频和列频的数值范围是通过计算得出的:已知输入信号的取样频率fs=8192Hz,而做FFT的N=2048,则频谱分辨率为F=fs/N=8192/2048=4Hz,由此可算出频谱图上任意点对应的频率K=f/F。例如,数字8的高、低端频率为fL=852HZ,fL=1336HZ,则在谱图上对应的点KL=213,KH=334。4.clear全清键的功能实现程序:functionpushbutton14_Callback(hObject,eventdata,handles)set(handles.edit1,'string','');set(handles.edit3,'string','');set(handles.edit2,'string','');globalNUM;NUM=[];globalstring;string='';5.DTMF信号的频谱图要画出电话拨号音信号的频谱图,可以通过采用FFT算法对信号进行分析。对接收到的数字信号作2048点的FFT,计算出其幅度谱,并用plot函数将幅度谱画出。编程实现的MATLAB程序如下:globalNUM;L=length(NUM);n=L/1100;number='';fori=1:n;j=(i-1)*1100+1;d=NUM(j:j+999);f=fft(d,2048);a=abs(f);p=(0:2047)*4;axes(handles.axes1);plot(p,a,'b');axis([1,3000,1,800]);xlabel('频率(HZ)’,’fontsize',12);ylabel('幅度');num=get(handles.edit3,'string');end二、实验数据1.利用GUI界面形成电话拨号面板利用GUI图形用户界面设计工具生成的图形电话拨号面板为下图所示:面板中各个键的功能分别为:数字键0-9:与电话中的0-9功能键相对应。‘*’号键:删除键,将前面拨错的号码删除退回,每次仅删除一位。‘#’号键:确认键,将前面拨过的号码进行确认保留。‘draw’键:点击该键,即可画出接收到的数字信号的幅度谱。‘clear’键:点击该键,即可将所有之前输入的数字进行清空操作,表现为编辑框、NUM框和NAME框全部清空。2.输入数字信号完成拨号功能例如键入号码‘13163293870’:3.号码的确认、存储键入号码后,按‘#’号键,便可对键入的号码进行确认,并存储,在面板上可以看到‘NUM’框内显示之前键入的号码,如下图所示:4.来电识别编程实现来电识别,如已经存储的号码为‘5973’,该号码对应的姓名为“HuangXuepeng”,则可在‘NAME’框内显示姓名,如下图所示:5.各个数字信号的幅度谱编程画出0-9数字信号的幅度谱,分别如下图所示:6.clear键和‘*’号键的功能实现执行一次‘*’号键前后的效果如下图所示:执行一次clear键后前后的效果如下图所示:三、实验结论1.可以从高频群和低频群各取一种频率来组合形成数字拨号音。2.可以对GUI界面中的每个按键通过编程设置其功能和作用。3.通过FFT算法可以得到信号的幅度谱,对幅度谱进行处理后可以得到相应的功率谱,在功率谱中,组成信号的频率对应其峰值,因此可以将信号的组成频率提取出来进而进行比较分析。4.在画相应数字信号的频谱时,由于用的是FFT,所以得到的是数字信号的幅度谱。在信号的幅度谱中,可以看出,一共有四个峰值,在本实验中,我们只取其频率低的两个峰值,并用TEXT函数在相应的幅度谱上标出对应的频率的值。分析可知,得到的连个频率的值正是组成数字信号的行频和列频的值。三、实验效果分析(包括仪器设备等使用效果)在实验过程中,由于将信号的行频和列频写错,导致按键输出的不是正确的数字,进行检查修改后得到正确的结果。‘*’号键的删除只是实现每次仅删除一位,在不小心输错后便于修改;添加了‘clear’键后,可以实现对各个编辑框以及全局变量NUM的全清,便于进行再次输入新的号码,进行存储或查询操作。进行2048点的FFT得到的幅度谱其横坐标对应的是K=f/F,而我们要得到的实际的频率f,所以在用plot函数作图时先对横坐标乘4(F),再作图,这样得到的幅度谱的横坐标就是实际的f,便于检验实验的正确性,分析得出实验结论。四、教师评语指导教师年月日