引言

  DTMF (双音多频)信号是电话网中常用的信令,无论是家用电话、移动电话还是程控交换机上,多采用DTMF信号发送接收号码。DTMF技术广泛地应用于电话机,远程家用电器产品的控制,语音信箱,报警系统等领域。可见,DTMF拨号和解码在通信系统及其它方面有着广泛的应用。通常DTMF信号的检测采用专用芯片,DSP,16位或更高档的MCU来实现,但其成本较高。本文介绍 了一种低成本的基于赛普拉斯的8位PSoC芯片的DTMF解码器实现方案。

  PSoC 简述

  PSoC是Cypress半导体有限公司生产的的可编程片上系统芯片。它主要由8位微处理器,可编程模拟模块和数字模块,外加硬件乘法累加器,I2C,Flash,SRAM等周边外围模块组成,如图2所示。

  因此,PSoC除了能实现一般MCU的功能外,还可通过可编程模拟和数字模块灵活地实现嵌入式系统所需的模拟与数字外围功能。为了方便用户简单而快速地实现模拟数字外围功能的设计,Cypress基于可编程数字模拟模块构建了大量的用户模块,如可编程运算放大器,比较器,6至14位的模数和数模转换器,滤波器,8/16 /24/32位定时器/计数器,脉宽调制器,触摸感应等模块。这些用户模块将PSoC内部的寄存器配置,数字模块和模拟模块之间的内部连线,底层API(Application Program Interface, 应用程序接口)函数都已设计好了。当用户需要某个数字模拟外围功能时,只需要简单地调用相应的用户模块即可实现。

  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解码,首先要将模拟信号转换成数字信号,然后再送入CPU处理。利用PSoC的可编程模拟运算放大器和8位ADC用户模块,加上简单的接口就可以实现DTMF信号的模数转换,ADC接口电路如图3所示。 可编程模拟运算放大器用户模块主要用来实现DTMF输入信号的自动增益控制功能。

  DTMF解码可以通过计算所接收到的信号在8个既定频率点的频谱值来确定是否为有效的DTMF信号及接收到的是哪个号码。另外,需要通过一系列的有效性检验以防止误判。

  FFT可用来计算N点频率处的频谱值,但不适合于此处应用。因为它计算了许多不需要的值,计算量太大;而且为保证频率分辨率,FFT的点数较大。另外,它不能按逐个样点的方式处理,不利于实时实现。

  由于只需要知道8个特定点的频谱值,采用一种称为Goertzel算法的DFT算法可以有效地提高计算效率。它相当于一个含两个极点的IIR滤波器,8个频点对应各自相匹配的滤波器,其传递函数为:

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

  改进的Goertzel算法运算步骤如下:

  1. 对每个采样点递归计算(n=0,1,…,N)

  Si(n)=2cos(2πfi/fs)× Si(n-1)- Si(n-2)+x[n]

  其初始条件是Si[-1]= Si[-2]=0。

  2. 当N个样点采集并计算完成后,计算8个频谱值:

  |Y(i)|2=Si2[N]+ Si2[N-1]- 2cos(2πfi/fs)× Si[N] × Si[N-1]

  在选定采样频率为7.8125Khz基础上,选取N=84个样点即可达到所需的频率分辨率。这对应约11ms信号的采样时间,这足以保证PSOC在100mS的信号码传输周期里的非采样时间里完成DTMF解码和用户应用系统的其它功能。

  当8 个频谱值计算出来后,还要进行DTMF有效性检验,以判定是否为有效的DTMF信号。有效性检验包括以下几项内容:(1)高、低频段的最大幅值都必须大于 某个门限值,而且二者之和也要大于某个门限值。(2)高、低频段的最大幅值与各自频段其它三个幅值相比,其差值必须大于某个门限值。(3)逆向绞度检验即 低频段最大幅值不得超过高频段最大幅值8dB,标准绞度检验即高频段最大幅值不得超过低频段最大幅值4dB。

  若上述检验通过,判定当前周期DTMF信号有效,根据频率组合可确定是对应哪个号码。为了避免重复识别,还需进行静音检测。

  DTMF解码程序流程图如图4所示。

  解码时需要大量的乘法运算,可以通过PSoC内部的8位有符号硬件乘法器完成,从而实现DTMF的实时解码要求。

  结语

  该方案所需PSoC的软硬件资源少,性能可靠,可方便地集成于基于PSOC的单片系统产品实现低成本的远程控制功能。