1、摘 要 所谓双音多频(DTMF),就是用两个频率行频和列频来表示电话机键盘上的一个数字。DTMF 电话的指令正在迅速的取代脉冲指令。除了在电话呼叫信号中使用外,DTMF 还广泛的使用在交互式控制应用,例如电话银行、电子邮件甚至家电远程控制等,用户可以从电话机发送DTMF 信号来做菜单选择。本文基于MATLAB的双音多频拨号 系统的仿真实现。主要涉及到电话拨号音合成的基本原理及识别的主要方法,利用MATLAB 软件以及 DFT 算法实现对电话通信系统中拨号音的合成与识别。并进一步利用 MATLAB 中的图形用户界面 GUI 制作简单直观的模拟界面。还能够利用矩阵不同的基频合成 0 9 不同按键的
2、拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程,进一步利用 GUI 做出了简单的图形操作界面。本文具有界面清楚,画面简洁,易于理解,操作简单的优点,从而实现对电话拨号音系统的简单的信号仿真。关键词 :双音多频(DTMF) MATLAB GUI 信号仿真课 程 设 计 学 生 日 志时间设计内容2012.12.212013.1.3五个组员一起查阅资料,商量确定方案2013.1.72013.1.8设计总体方案 负责编程与设计程序, 负责整合资料, 负责记录日常工作及解决课程设计过程中出现的一些意外情况。2013.1.92013.1.10和 负责将各个子模块程序整合起来
3、, 和 负责制作程序的gui界面, 负责总程序的调试2012.1.11五人一起制作课程设计报告,并答辩完成课程设计目 录1 引言 32 双音多频系统MATLAB的设计与实现 43 双音多频(DTMF)信号的产生与检测原理6 31 双音多频信号 6 32 双音多频信号的产生原理733双音多频信号的检测原理 94 双音多频(DTMF)信号的产生与检测94.1双音多频信号的产生94.2双音多频信号的检测9 5 检测(DTMF)信号的DFT参数选择12 5.1 5.2 频谱分析的频率范围 126 详细的设计步骤 12 6.2.1 默认模块 17 6.2.2 按键模块设计 17 63 图形电话拨号面板的
4、制作 22 64 DTMF 信号的检测识别 23 65 DTMF的整体界面设计结果 237 结 论 258 参考文献 261 引言 双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。这些系统中用户可以用电话发送DTMF信号选择语音菜单进行操作。 DTMF信号系统是一个典型的小型信号处理系统,
5、它要用数字方法产生模拟信号并进行传输,其中还用到了D/A变换器;在接收端用A/D变换器将其转换成数字信号,并进行数字信号处理与识别。为了系统的检测速度并降低成本,还开发一种特殊的DFT算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。下面先介绍电话中的DTMF信号的组成。在电话中,数字09的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336
6、Hz,1477Hz和1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用 表示,其中 ,这样8个频率形成16种不同的双频信号。具体号码以及符号对应的频率如表1所示。表中最后一列在电话中暂时未用。 表1 双频拨号的频率分配 1209Hz1336Hz 1477Hz633Hz 697Hz 1 2 3 A770Hz 4 5 6 B852Hz 7 8 9 C942Hz * 0 # D DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。2双音多频系统的MATLAB
7、设计与实现MATLAB工具简介MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。13MATLAB 产品族可以用来进行以下各种工作: 数值分析 数值和符号计算 工程与科学绘图 控制系统的设计与仿真数字图像处理技术数字信号处理技术
8、 通讯系统设计与仿真 财务与金融工程MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。它有如下的特点:1.功能强的数值运算 在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用,函数的标示自然,使得问 题和解答像数学式子一般简单明了,让使用者可全力发挥在解题方面,而非浪费在电脑操作上。2.先进的资料视觉化功能 MATLAB的物件导向图形架构让使用者可执行视觉数据分,并制作高品质的图
9、形,完成科学性或工程 性图文并茂的文章。3.高阶但简单的程式环境 作为一种直译式的程式语言,MATLAB容许使用者在短时间内写完程式,所花的时间约为用 FORTRAN 或 C 的几分之一,而且不需要编译(compile)及联结 (link) 即能执行,同时包含了更多及更容易使用的内建功能。4.开放及可延伸的架构 MATLAB容许使用者接触它大多数的数学原始码,检视运算法,更改现存函数,甚至加入自己的函数使 MATLAB成为使用者所须要的环境。5.丰富的程式工具箱 MATLAB的程式工具箱融合了套装前软体的优点,与一个灵活的开放但容易操作之环境,这些工具箱提 供了使用者在特别应用领域所需之许多函
10、数。现有工具箱有:符号运算(利用Maple V的计算核心执行 )、影像处理、统计分析、讯号处理、神经网路、模拟分析、控制系统、即时控制、系统确认、强建控 制、弧线分析、最佳化、模糊逻辑、mu分析及合成、化学计量分析。因为有了这些工具箱,大量繁杂的数学运算和分析可通过调用MATLAB函数直接求解,大大提高了编程效率,其程序编译和执行速度远远超过了BASIC、FORTRAN和C等语言。在欧美的大学和研究机构中,MATLAB是一种非常流行的计算机语言,许多重要的学术刊物上发表的论文均是用MATLAB来分析计算和绘制各种图形。它还是一种有力的教学工具,它在大学的线性代数、自动控制理论、数理统计、数字信
11、号处理、动态系统仿真等课程的教学中,已成为标准的教学工具。3 双音多频(DTMF)信号的产生与检测原理31双音多频信号DTMF,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信令有16个编码。利用DTMF信令可选择呼叫相应的对讲机同时,双音多频信号是电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。在使用双音多频信号之前,电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。脉冲拨号需要电信局中的操作员手工完成长途接续。 双音多频的拨号键盘是44的矩阵,每一行代表一个低频,每一列代表一个高频。每按一个键
12、就发送一个高频和低频的正弦信号组合,比如1相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。表2-1 数字或功能键组合表 行频列频1209Hz1336Hz1477Hz1633Hz697Hz123A770Hz456B852Hz789C941Hz*0#DDTMF 是用两个特定的单音频组合信号来代表数字信号以实现其功能的一种编码技术。两个单音频的频率不同,代表的数字或实现的功能也不同。这种电话机中通常有16 个按键, 其中有10 个数字键09 和6 个
13、功能键*、#、A、B、C、D。由于按照组合原理,一般应有8 种不同的单音频信号。因此可采用的频率也有8 种,故称之为多频,又因它采用从8 种频率中任意抽出2 种进行组合来进行编码,所以又称之为“8 中取2”的编码技术。根据 CCITT 的建议,国际上采用的8个频率为:687Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz 和1633Hz。用这8 个频率可形成16 种不同的组合,从而代表16 个不同的数字或功能键,具体组合见表2-1。3. 2.1双音多频信号的产生原理DTMF信号包含两组音频信号,解码器的任务是通过数学变换把它从时域转化到频域,然后得出对应的数字
14、信息。在接收端,将收到的模拟音频信号进行A/D变换,恢复为数字信号,然后检测其中的音频频谱来确定所发送的数字。检测算法可以是快速傅立叶变换(FFT)算法的DFT,或是用一组滤波器来提取所需频率。以下章节对两种方法进行分析并对GOERTZEL算法进行详细的推导。由上面可以知道一个DTMF信号是由两个不通频率和的正弦波组成,它可以用下式表示 (2-1)我们可以考虑通过离散傅立叶变换进行信号的频谱分析来检测离散的双音多频码。这是因为只有时域及频域都是离散的情况下,才能适合于在计算机上运算;也就是周期的离散时间信号与离散频率间的变换对。周期性离散时间信号x(n)的离散傅立叶变换周期性离散频率函数X(k
15、)两相邻谱线分量之间的角频率增量与周期之间的关系可表示为, 代表信号的基频。取样频率与取样周期T的关系是 取样角频率 T为时域取样间隔为,在一个周期内取样点数为N。在自变量为t及f的情况下,在一个时域中对函数进行取样,两取样点间增量的倒数,必是另一个域中函数的周期。现序列的周期为NT,所以对频谱取样的间距是。以数字频率表示时,则频谱间距是 令并称之为因子。离散傅立叶变换(DFT)可写成如下形式: (2-2)离散傅立叶变换(DFT)在有关频率检测数字信号处理系统的设计和实现方面起着非常重要的作用。DFT的表达式可以直接写成: (2-3) 一般来说,x(n)和都是复数,X(k)也是复数,每计算一个
16、X(k)值,需要N次复数乘法x(n)与相乘以及N1次复数加法。而X(k)一共有N个点(k从0取到N1),所以完成整个DFT运算总共需要次复数乘法及N(N1)次复数加法。复数运算实际上是由实数运算来完成的,因此上式可写成: (2-4) 由此可见,一次复数乘法需用四次实数乘法和两次实数加法;一次复数加法则需两次复数加法。因而每运算一个需要4N次复数乘法和2N2(N-1)=2(2N-1)次实数加法。所以,直接计算DFT,乘法次数和加法次数都是和成正比的,当N很大时,运算量是很可观的,例如,当N8时,DFT需64次复数乘法,而当N1024时,DFT所需复数乘法为1,048,576次,即一百多万次复数乘
17、法运算,这对实时性很强的信号处理来说,对计算速度的要求太高了。因而需要改进对DFT的计算方法,以大大减少运算次数。仔细观察DFT的运算量可以看出,利用系数的以下固有特性,可以减少DFT的运算量。1.的对称性: 2.的周期性: 由此得出,。这样,(1)利用这些特性,使DFT运算中有些项可以合并;(2)利用的周期性和对称性,可以将长序列的DFT分解为短序列的DFT。而前面已经说到,DFT的运算量使与成正比的,所以N越小越有利,因而小点数的DFT比大点数的DFT的运算量要小。基于这样的思路,快速傅立叶变换(FFT)发展起来了。如果按时间抽取的FFT算法,系统的运算量是,运算量明显比DFT运算量减少。
18、但它有一个缺点,需要全部抽样数据到达时,才能进行计算;不适合双音多频信号频谱的计算,满足不了双音拨号系统实时性的要求。假设时间连续的DTMF信号用x(t)=sin(2*pi*n*f1)+sin(2*pi*n*f2)表示,式中的f1和f2是按照表2-1中的两个频率,f1代表低频带频率中的一个,f2代表高频带频率中的一个。显然采用数字的方法产生DTMF信号,方便而且体积小。下面介绍用数字方法产生DTMF信号。规定用8kHz对DTMF信号进行采样,采样后得到的时域离散信号为:x(t)=sin(2*n*f1/8000)+sin(2*n*f2/8000) (3-1)形成上面序列有两种方法,一种是计算法,
19、另一种是查表法。用计算法求正弦波序列值容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,存放在存储器中,运行时只要按顺序和一定的速度取出即可。这种方法要占用一定的存储空间,但是速度快。采样频率是8kHz,因此要求每125ms输出一个样本,得到的序列再送到D/A变换器,它的输出经过平滑滤波便是连续时间的DTMF信号。DTMF信号再送到交换机。3.2.2双音多频信号的检测原理检测中采用了频域的方法,N 点数据的DFT公式为:(2-5) 它的好处是可以得到DFT的所有N 点的值。也就是通过DFT可以计算出信号中所包含的频率成分。具体实现时,由于它的计算量非常大,
20、因而主要使用它的快速算法快速傅立叶变换(FFT)。对上述产生的DTMF信号,经过200点FFT运算得到DTMF信号的频谱X(K)(如图2-1所示)。根据结果中两条谱线的位置K值可知其频率分别为820Hz和1290Hz,即对应了电话号码盘的数字“7”。从图中可以看出,FFT运算中出现了两个问题:1、由于数据的截断,带来了频谱泄漏误差;2、通过FFT运算,计算出了200点的频谱,而DTMF信号只需8个频率点,计算效率大大降低。 在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续 DTMF信
21、号经过A/D变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提取所关心的频率,根据有输出信号的2个滤波器判断相应的数字或符号。另一种是用DFT(FFT)对双音多频信号进行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字或符号。本设计采用的是后者。DTMF信号的产生、检测4 双音多频(DTMF)信号的产生与检测4.1双音多频信号的产生假设时间连续的DTMF信号用x(t)=sin(2*pi*n*f1)+sin(2*pi*n*f2)表示,式中的f1和f2是按照表2-1中的两个频率,f1代表低频带频率中的一个,f2代表高频带频率中的一个。显然采用数字的方法产生DTMF信
22、号,方便而且体积小。下面介绍用数字方法产生DTMF信号。规定用8kHz对DTMF信号进行采样,采样后得到的时域离散信号为:x(t)=sin(2*n*f1/8000)+sin(2*n*f2/8000) (3-1)形成上面序列有两种方法,一种是计算法,另一种是查表法。用计算法求正弦波序列值容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,存放在存储器中,运行时只要按顺序和一定的速度取出即可。这种方法要占用一定的存储空间,但是速度快。采样频率是8kHz,因此要求每125ms输出一个样本,得到的序列再送到D/A变换器,它的输出经过平滑滤波便是连续时间的DTMF信号
23、。DTMF信号再送到交换机。4.2 双音多频信号的检测在接收端,要对收到的双音多频信号进行检测,即检测两个正弦波频率,以判读对应的十进制数字或符号。显然这里可以用数字方法进行检测,因此要将收到的时间连续DTMF信号经过A/D变换,变成数字信号再进行检测。在这里我们用戈泽尔算法对信号进行检测。5 检测DTMF信号的DFT参数选择 用DFT检测模拟DTMF信号所含有的两个音频频率,是一个用DFT对模拟信号进行频谱分析的问题。根据第三章用DFT对模拟信号进行谱分析的理论,确定三个参数:(1)采样频率 ,(2)DFT的变换点数N,(3)需要对信号的观察时间的长度 。这三个参数不能随意选取,要根据对信号
24、频谱分析的要求进行确定。这里对信号频谱分析也有三个要求: (1)频率分辨率,(2)谱分析的频谱范围,(3)检测频率的准确性。5.1频谱分析的分辨率 观察要检测的8个频率,相邻间隔最小的是第一和第二个频率,间隔是35Hz,要求DFT最少能够分辨相隔35Hz的两个频率,即要求 。DFT的分辨率和对信号的观察时间 有关 。考虑到可靠性,留有富裕量,要求按键的时间大于100ms。5.1频谱分析的频率范围要检测的信号频率范围是6971633Hz,但考虑到存在语音干扰,除了检测这8个频率外,还要检测它们的二次倍频的幅度大小,波形正常且干扰小的正弦波的二次倍频是很小的,如果发现二次谐波很大,则不能确定这是D
25、TMF信号。这样频谱分析的频率范围为6973266Hz。按照采样定理,最高频率不能超过折叠频率,即由此要求最小的采样频率应为7.24KHz。因为数字电话总系统已经规定H8KHz,因此对频谱分析范围的要求是一定满足的。按照 ,H8KHz,算出对信号最少的采样点数为100。6 详细的设计步骤GUI界面如下:(说明构成)按下”A”运行如下图: 观察产生的信号和频率写说明检测如下图:说明正确性2 具体实现:因为数字和字母按键实现的方式基本相同,区别在于每个按键的行、列的频率不同。因此调用一样的模块函数来实现达到简化程序;% PressKeyDown.mfunction Signal = PressKe
26、yDown(handles,key)实现输出和画出时域及频域的波形,并播放出声音。%dtmf.mfunction x = dtmf(key); 根据不同的按键选择不同的频率画出两个cos相加。% wav_gener.mfunction h = wav_gener(R,omega,N)产生两个cos信号相加% FindLowerFreq.mDesignLowerFilter.m设计低频带通找出低频的列% FindHigherFreq.m% DesignHigherFilter.m设计高频带通找出高频的行3 主要按键的Callback 函数如下按键“1”的Callback 函数function p
27、ushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton21 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)set(handles.DecodeText,string,); %清空解码显示文本框 Signal = PressKeyDown(handles,1);handle
28、s.DTMFSignal = Signal;handles.TelNumber=strcat(handles.TelNumber,1);guidata(hObject, handles);set(handles.CodeText,string,handles.TelNumber);% - Executes on button press in pushbutton2.按键”解码检测”的Callback function pushbutton17_Callback(hObject, eventdata, handles)% hObject handle to pushbutton17 (see
29、GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)keys = 1,2,3,A;4,5,6,B;7,8,9,C;*,0,#,D;for i=1 : length(handles.TelNumber) Signal = dtmf(handles.TelNumber(i); RowNumber = FindLowerFreq(Signal); ColumnNumber = FindHigh
30、erFreq(Signal); ResultKey = keys(RowNumber,ColumnNumber); handles.DecodeTelNumber=strcat(handles.DecodeTelNumber,ResultKey); set(handles.DecodeText,string,handles.DecodeTelNumber);endhandles.TelNumber=; %解码完成后,拨号变量清空,方便下一次拨号。按键“回删”的Callbackfunction pushbutton21_Callback(hObject, eventdata, handles)%
31、 hObject handle to pushbutton21 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)set(handles.CodeText,string,);set(handles.DecodeText,string,); axes(handles.axes1);plot(1,1) axes(handles.axes2); plot(1,1)h=msgbox(请重新输入一次号码,温馨提示,Help kon)按键“退出”的Callbackfunction pushbutton19_Callback(hObject, eventdata, handles)% hObject handle to pushbutton21 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)close(gcf);- 16 -