当前位置:首页 期刊杂志

一种基于MATLAB平台的DTMF信号实验系统设计

时间:2024-07-28

龙家辉

(湖南农业大学 信息与智能科学技术学院 信息工程系,湖南 长沙 410128)

0 引 言

双音多频(DTMF)信号是美国贝尔实验室开发的应用于电话网络的音频拨号信号。DTMF拨号系统具有频域分析方便、拨号速度快、强大的抗干扰功能以及自动检测和识别等特性。脉冲拨号和音频拨号是电话信令的两个系统[1]。DTMF用于按键音拨号,使用两种音调代表触摸板上的每个键。DTMF已经被广泛应用于现实生活,如电话系统的远程交换机通过解码DTMF信号中的数码值来获取用户向交换机发送的指令[2]。

DTMF信令通过高频音和低频音之和表示数字或字符,按下任意键会产生列音和行音,对应于该键的DTMF是通过查表或谐振器生成的。信号通过电话线传输到交换中心[3],交换中心对信号采样,使用FFT或Goertzel算法确定接收的频率,从而告知相应的数字[4]。

1 DTMF信号

传统的电话拨号通过脉冲计数确定数字0~9,速度慢且不能扩展电话服务。实际通信过程中,信号在信道传输易受到噪声的干扰,因此双音多频由4个高频和4个低频两个频群组成。4个高频频率分别为1 209 Hz、1 336 Hz、1 477 Hz以及 1 633 Hz,4 个低频频率分别为697 Hz、770 Hz、852 Hz以及941 Hz。DTMF信号组合了低频和高频,这些频率信号间不存在谐波关系,抗干扰能力很强。在DTMF信号拨号方式中,每个号码键都由1个低频段频率的单音信号和1个高频段频率的单音信号组成。1个高频信号和1个低频信号叠加组成1个组合信号,代表号码表上的指定字符,通过字符的组合实现不同的功能。每个按键利用两个不同频率的正弦波编码,选择双音方式能将拨号信息从语音中区分出来。8个频率可以组合成16个不同的双音多频信号,包括数字0~9和控制信号*、#、A、B、C以及D,如表1所示。

表1 DTMF号码表

2 DTMF信号检测

DTMF信号在高低频处的频谱幅度非常大,其他频率处几乎为0。将DTMF信号转换为离散时间序列,然后执行FFT或DFT,检测幅度谱中幅度最大的两个频率。DTMF信号的检测仅需要分析8个低频和8个高频的频谱,采用FFT会造成计算资源的浪费。因此,本实验采用Goertzel算法直接计算指定频率处的傅里叶变换值。Goertzel算法实质是对DFT的快速运算,但可以有选择地计算个别频率点处的DFT值,从而避免造成内存和计算资源的浪费。Goertzel算法的流程如下。

N点时域序列f(n)的N点DFT为F(k):

定义新序列yn(n)为:

u(n)指单位阶跃函数,F(n)表示离散时域序列,令:

yk(n)可看作f(n)和hk(n)的卷积,即:

这意味着f(N)的第K个点DFTF(K)是滤波器Hk(N)滤波器f(N)之后的第N个输出值。将f(N)的N点DFT变换为N个滤波器的第N点输出。该算法称为Goertzel算法,Goertzel算法的滤波器组如图1所示。Goertzel算法实质就是一个两极点的IIR滤波器。

图1 Goertzel算法的滤波器组

滤波器Hk(N)的系统函数:

3 DTMF系统的MATLAB仿真实现

3.1 DTMF信号的产生

根据CCITT的建议,国际上采用从低频群和高频群中各抽出一个频率以叠加组合的方式产生DTMF信号,共可以产生16种组合,代表不同的数字和功能字符。假设Y为DTMF信号,其产生方式为:

其中:f1、f2为低频和高频所对应的频率;fs为信号的采样频率,取8 kHz。DTMF信号的产生流程如图2所示。

图2 DTMF信号生成过程

3.2 DTMF信号的解码

实验的信号检测采用Goertzel算法对8个频率处的信号幅值进行计算,另外取噪声功率作为检测的阈值,排除噪声的影响。

3.3 仿真代码

实验主要采用MATLAB进行仿真处理,仿真代码如下:

3.4 GUI系统的设计

在MATLAB平台中新建1个GUI界面,如图3所示。

图3 新建GUI界面

生成1个fig文件和.m文件,创建静态按钮和静态文本框,共创建16个按钮和3个静态文本框,如图4所示。

图4 建立模型

根据算法原理,搭建一个通过GUI交互的DTMF算法编解码系统。

4 实验结果

以输入数字5632048971为例,输入这几个数字,再按“拨打”按钮,解码框中出现了解码后的电话号码,如图5所示,解码结果正确。

图5 实验结果

点击“查看”按钮,可以显示每个数字对应DTMF信号的频谱,数字0、2、3、5、6的频谱如图6所示,数字1、4、7、8、9的频谱如图7所示。

图6 数字0、2、3、5、6的频谱

图7 数字1、4、7、8、9的频谱

5 结 论

双音多频拨号系统是一种典型的信号处理系统,可实现双音多频信号的生成、检测以及识别。通过MATLAB信号处理工具箱中Goertzel函数模拟双音多频拨号系统,对双音多频信号进行编码和解码,并且编写了GUI界面,可方便直观地进行操作。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!