|
摘 要: 本文介绍了一种基于 MSP430 的嵌入式 DTMF 拨号解码器实现方案。 DTMF 拨号部分使用 4 根 I/O 线的电阻网络,配合软件产生 DTMF 信号。利用 MSP430F133 内置的 ADC ,并采用改进的 Goertzel 算法,实现 DTMF 信号的实时解码。该方案成本低、性能可靠,已经得到了实际应用。
关键词: DTMF 拨号 DTMF 解码 改进的 Goertzel 算法 MSP430F133
引言
DTMF (双音多频)信号是电话网中常用的信令,无论是家用电话、移动电话还是程控交换机上,多采用 DTMF 信号发送接收号码。 DTMF 技术还可以用于电力线载波通信等场合。可见, DTMF 拨号和解码在通信系统及其它方面有着广泛的应用。通常 DTMF 信号的检测采用专用芯片或 DSP 来实现,但其成本较高。本文介绍了一种低成本的基于 MSP430F133 的 DTMF 拨号解码器实现方案。 MSP430F133 是 TI 的一款 16 位 RISC 结构 MCU ,最短指令周期为 150ns ,含有 8KB Flash ROM , 256B RAM 并内置 12 位 ADC 。
DTMF 信号
DTMF 信号是将拨号盘上的 0~9 、 A~D 及 */E 、 #/F 共 16 个字符,用音频范围的 8 个频率来表示的一种编码方式。 8 个频率分为高频群和低频群两组,分别作为列频和行频。每个字符的信号由来自列频和行频的两个频率的正弦信号叠加而成。频率组合方式如图 1 所示。

根据 CCITT Q.23 建议, DTMF 信号的技术指标是:传送 / 接收率为每秒 10 个号码,或每个号码 100ms 。每个号码传送过程中,信号存在时间至少 45ms ,且不多于 55ms , 100ms 的其余时间是静音。在每个频率点上允许有不超过± 1.5% 的频率误差。任何超过给定频率 ± 3.5% 的信号,均被认为是无效的,拒绝承认接收。另外,在最坏的检测条件下,信噪比不得低于 15dB 。
DTMF 拨号
DTMF 拨号部分的电路原理图如图 2 所示。电路主要由 4 根 I/O 线构成的电阻网络和滤波器组成。电阻网络构成 4 位的 DAC ,高通滤波器和低通滤波器组成一个带通滤波器用来滤除双音频的谐波信号。在输出端采用 600 Ω的 1:1 变压器与电话线接口,电话线的输出电平可通过改变 Rx 来进行调节。


软件上使用查表方式模拟产生两个不同频率的正弦波。首先确定一个合适的采样间隔,对每个频率的正弦波进行采样并规格化成 0~7 ( 3 位数据) , 制成相应的正弦表。正弦表的制定要保证合成信号的频率误差在± 1.5% 以内,同时使采样点数尽量少。为使波形失真度小,正弦表记录的总信号时间对应原始信号的整数个周期,并且采样起点选在正波形的峰值上。本设计采样间隔选定为 122us ,保证频率误差均在± 1% 以内,各个频率信号的采样点数及频率误差见图 3 所示。
DTMF 拨号程序流程图如图 4 所示。
DTMF 解码
采用软件方式进行 DTMF 解码,首先要将模拟信号转换成数字信号,然后再送入 CPU 处理。利用 MSP430F133 内置的 12 位 ADC 加上简单的接口就可以实现模数转换, ADC 接口电路如图 5 所示。其中 应选 1% 精度的金属膜电阻。 ADC 参考电压选内部 2.5V : 

DTMF 解码可以通过计算所接收到的信号在 8 个既定频率点的频谱值来确定是否为有效的 DTMF 信号及接收到的是哪个号码。另外,需要通过一系列的有效性检验以防止误判。
FFT 可用来计算 N 点频率处的频谱值,但不适合于此处应用。因为它计算了许多不需要的值,计算量太大;而且为保证频率分辨率, FFT 的点数较大。另外,它不能按逐个样点的方式处理,不利于实时实现。
由于只需要知道 8 个特定点的频谱值,采用一种称为 Goertzel 算法的 DFT 算法可以有效地提高计算效率。它相当于一个含两个极点的 IIR 滤波器, 8 个频点对应各自相匹配的滤波器,其传递函数为

然而 Goertzel 算法还是有一个缺点,那就是它计算的是频率 处的频谱值,而精确的频率值 通常只能对应某个近似的整数 k ,为了达到要求的分辨率,就需要较大的样点数 N 。改进的方法是:修改传递函数,不计算角频率 处的频谱值,而计算精确角频率 处的频谱值。这样分辨率能达到数据自然加窗(矩形窗)的分辨率。它的传递函数为

改进的 Goertzel 算法运算步骤如下:
1. 对每个采样点递归计算( n=0,1, … ,N )

其初始条件是 
2. 当 N 个样点采集并计算完成后,计算 8 个频谱值: 
在选定采样频率为 6Khz 基础上,选取 N=86 个样点即可达到所需的频率分辨率。这对应约 15ms 信号,可以保证一位号码能接收到两个完整的 DTMF 信号周期。
当 8 个频谱值计算出来后,还要进行 DTMF 有效性检验,以判定是否为有效的 DTMF 信号。有效性检验包括以下几项内容:( 1 )高、低频段的最大幅值都必须大于某个门限值,而且二者之和也要大于某个门限值。( 2 )高、低频段的最大幅值与各自频段其它三个幅值相比,其差值必须大于某个门限值。( 3 )逆向绞度检验即低频段最大幅值不得超过高频段最大幅值 8dB ,标准绞度检验即高频段最大幅值不得超过低频段最大幅值 4dB 。( 4 )高、低频段最大幅值之和与其它 6 个幅值之和之比,必须大于某个门限值。
若上述检验通过,判定当前周期 DTMF 信号有效,根据频率组合可确定是对应哪个号码。但要确认接收到一个有效的号码,还要满足两个条件,一是要有两个以上连续周期的有效且相同的 DTMF 信号,以保证信号持续时间,二是前面有足够的静音时间,以避免重复识别。
DTMF 解码程序流程图如图 6 所示。

解码时每次迭代需要八次乘法,由于 F133 没有硬件乘法器,要用 " 移位加 " 做乘法,因此优化乘法运算将大大提高计算效率。优化从几个方面考虑:尽量使用寄存器寻址方式,充分利用 150ns 指令;另外每个频点的乘数 是固定已知的,因此 " 移位加 " 可以不用逐位循环并判断的方式,而用按位完全展开的方式以省去判断动作;此外,在前端增加简单的增益控制可以保证后续运算不发生溢出,省去溢出处理。经过上述优化,实现了 DTMF 的实时解码。
结语 该 DTMF 拨号解码器方案成本低、性能可靠,已经得到了实际应用。
参考文献
1. Oppenheim A.V. 等著,刘树棠等译 . 离散时间信号处理(第二版),西安交通大学出版社, 2001
2. DTMF Tone Generation and Detection: An Implementation Using the TMS320C54x , Texas Instruments , 2000
3. MSP430x1xx Family User's Guide, Texas Instruments , 2003
附作者简介:
李锋垚:硕士,研究方向信号与信息处理;
文敏: 工程师,主要从事通信设备的研发;
牛王强:硕士,研究方向检测技术与自动化装置;
谢明果:硕士,研究方向通信与信息系统。
联系方式:
联系人:李锋垚
地址:西安市劳动南路 88 号旺园公寓 2 栋 1918 室
邮编: 710068
电话: 029-2374742 手机: (0)13570241965
电子邮件: sunto.lee@163.com |