新闻中心

EEPW首页>嵌入式系统>设计应用> DSP的DTMF信令的产生分析与检测

DSP的DTMF信令的产生分析与检测

作者: 时间:2012-07-02 来源:网络 收藏

编程的流程如图3所示,由CCITT的规定,数字之间必须有适当长度的静音,因此编码器有两个任务,其一是音频信号任务,双音样本,其二是静音任务,静音样本。每个任务结束后,启动下一个任务前(音频信号任务或静音任务),都必须复位决定其持续时间的定时器变量。在静音任务结束后,从数字缓存中调出下一个数字,判决该数字信号所对应的行频和列频信号,并根据不同频率确定其初始化参数a1=-2cosω0与y(-2)=-Asinω0。

本文引用地址: //m.amcfsurvey.com/article/148824.htm

  该流程图可采用C语言实现,双音信号的则由54x汇编代码实现。整个程序作为C54x的多通道缓冲串口(McBsp)的发射串口中断服务子程序,由外部送入的8000Hz串口时钟触发中断,可实时处理并通过D/A转换器输出信令信号。

  2信号的

  在输入信号中信号,并将其转换为实际的数字,这一解码过程本质是连续的过程,需要在输入的数据信号流中连续地搜索DTMF信号频谱的存在。整个过程分两步:首先采用Goertzel算法在输入信号中提取频谱信息;接着作检测结果的有效性检查。

  2.1 Goertzel算法

  DTMF解码即是在输入信号中搜索出有效的行频和列频。计算数字信号的频谱可以采用DFT及其快速算法FFT,而在实现DTMF解码时,采用Goertzel算法要比FFT更快。通过FFT可以计算得到信号所有谱线,了解信号整个频域信息,而对于DTMF信号只用关心其8个行频/列频及其二次谐波信息即可(二次谐波的信息用于将DTMF信号与声音信号区别开)。此时Goertzel算法能更加快速的在输入信号中提取频谱信息。

  图 4

  Goertzel算法实质是一个两极点的IIR滤波器,其算法原理框图如图4。由于在DTMF检测中,输入的信号是实数序列,并不需要检测出8个行频/列频的相位,只需要计算出其幅度平方即可。

  2.2 DTMF检测器流程

  检测流程可参照图5,把检测程序作为C54x的McBsp接收中断服务子程序,在每一个接收中断到来时,表明采到一个新样点。样点值代入式(2),迭代计算8个行频/列频的中间变量vk(n)(k为8个行频/列频分别对应的数字频率),直到采到N=125个样点(在8kHz采样频率下,约为15ms)。此时再按式(4)计算8个行频/列频的幅度平方|X(k)|2。接下来将|X(k)|2与门限作比较,并作二次谐波检测,判决出有效的音频信号。将音频信号映射为数字信号后,再与上一个检测到的数字信号比较,最终判决出有效的数字信号。

  图 5

  按图5所示流程得到DTMF信令检测程序。整个程序作为C54x的McBsp接收串口中断服务子程序,从而可以实时来自A/D转换器的DTMF信令信号。

  3 性能

  基于上述原理与算法代码,在TI公司的开发环境Code Composer Studio(CCS)下,上述整个DTMF信令的产生与检测方案的性能。

  (1)由CCS给出的如下内存印象文件报告,DTMF的产生(gen_dtmf.obj)与DTMF的检测(de_dtmf.obj)这两段核心代码分别占用3e6H和1e0H个字(16bit word),即约占1K字的存储器空间,消耗系统资源极低;

  (2)DTMF信令的产生与检测程序均放置于C54x的McBSP中断服务子程序内,由CCS的代码剖析工具分析代码执行时间,当 C54x 运行在主频100MHz时,DTMF产生中断服务子程序interrupt transmit()最大消耗283个时钟周期,即2.83μs,DTMF检测中断服务子程序interrupt receive()最大消耗6148个时钟周期,约61μs。因此该方案能够实时产生与检测DTMF信令,还可保证有时间冗余度,与其他程序在用户系统中并发执行。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭