DTMF信号的产生与检测
图2-1 DTMF编码流程
2.3 DTMF信号的检测方法
DTMF信号的检测方法可以有多种。主要分为从信号时间域处理和从信号频率域处理两大类。
前一种方法包括:过零点位置检测法、信号峰值位置检测法、过零点位置及信号幅值检测法。其特点是实现简单,可以通过MT8880等芯片加上外围电路实现,易于集成化。缺点是易受干扰,对信噪比要求高。现在广泛应用于一般的脉冲拨号电话机。通过神经网络等辅助判别方法可以大大提高信号的识别率。
后一种方法包括:频率判断、能量判断两类。频率判断主要通过滤波器提取DTMF相应的频率信号进行比较判断,滤波器可以用窄带、低通、高通滤波器,应用方式可以有并联、级联、混合联接等方式。能量判断是直接对DTMF信号相应的能量进行计算,找出高、低频率群中最强的信号,进行判断,包括有DFT法(Discrete Fourier Transform)、FFT(Fast Fourier Transform)、Goertzel法等。
本次实验我们采用的是能量判断法,并采用了Goertzel算法。
4
DTMF信号的产生与检测
3 设计方案、算法原理说明
3.1 Goertzel算法原理
Goertzel算法信号解码是将两个音频信号提取出来,并通过他们的频率,确定所接受的DTMF数字。原来使用模拟技术音频信号频率进行检测,一般通过模拟电路进行过零点检测,通过零点计数完成对输入信号的频率检测。在数字信号检测电路中,一般使用频域计算技术代替时域信号处理。我们可以直接通过付立叶变换,直接得到输入的信号频率。信号各个频率分量的幅值直接计算可以使用DFT。对于N点数据序列{x(n)}的DFT为:
nkX?k???x?n?WN,k?0,1,...,N?1
n?0N?1(式 3-1)
如果用FFT算法来实现DFT计算,计算将涉及复数乘法和加法,并且计算量为Nlog2N。虽然我们可以得到DFT的所有N个值,然而,如果希望计算DFT的M个点,并且M Goertzel算法,从根本上说,是计算DFT的一种线性滤波算法,它可以通过调整滤波器的中心频率和带宽,直接计算出DFT的系数。 kGoertzel算法利用相位因子WN的周期性。我们可以同时将DFT运算表示为线性滤波运?kN算,由于WN=1,我们可以用该因子对公式(4) (DFT表达式)两边相乘,得到: N?1n?0N?1??W?kNNX?k??X?k???x?n?W?WnkN?kNN?k?N?m? (式 3-2) ??x?m?WNm?0我们注意到,上式就是卷积形式。可以定义序列YK?n?为: ?k?N?m? (式 3-3) Yk?n???x?m?WNm?0N?1显然,Yk (n)就是长度为N的有限长输入序列YK?n?与具有如下单位脉冲响应的滤波器的卷积: ?knhk?n??WNu?n? (式 3-4) 5 DTMF信号的产生与检测 可以看到,当n=N时,该滤波器的输出就是DFT在频点?k?即 2?k值 NX?k??YK?n?n?N (式 3-5) 我们可以通过比较式(6)和式(7) 来验证上式。对于单位脉冲响应为hk?n?的滤波器来说,其系统函数为: Hk?z??1 (式 3-6) ?k?11?WNz2?k。因此,可以使用输入N这个滤波器只有一个位于单位圆上的极点,其频率为?K?数据块通过N个并行的单极点滤波器或者谐振器组来计算全部的DFT,其中每个滤波器有一个位于DFT响应频率的极点。 因此,对于式(7)的卷积计算,我们可以使用差分方程形式来表示用式(9)给出的滤波器,通过迭代的方法计算YK?n?,从而得出DFT的计算结果: ?k yk?n??WNyk?n?1??x?n?,yk??1??0 (式 3-7) 计算涉及复数加法和复数乘法,计算量大。由于我们只需要计算幅值信息,而不关心相位信息。我们在单位圆上另外引入一个极点,与原有的极点形成一对共扼极点。将两个滤波器组成一对复数共轭极点的谐振器。原有的单极点滤波器计算方式变成形如式(10)的方式。其系统函数为: k?11?WNz (式 3-8) Hz?z???1?21?2cos?2?kN?z?zK上式中:WN?ej2?k/N,为差分方程的系数。由于引入了复数共扼极点,避免了式(9) 中复杂的复数加法和复数乘法。 显然,对式(10)无法进行直接计算。为了便于计算实现,我们引入中间变量Qk?n?,将式(9)表示为差分方程形式: ?2?k?Qk?n??2?cos???Qk?n?1??Qk?n?2??x?n? (式 3-9) N??式中,初始条件为: Qk??1??Qk??2??0,n?0,1,...,N 6 DTMF信号的产生与检测 k X?k??Yk?N??Qk?N??WN?Qk?N?1? (式 3-10) ?2?kN其中,W?ekN 3.2 Goertzel算法改进与实现 Goertzel算法是计算离散傅立叶变换的方法,需要计算的频率点数不超过21092 N时Goertzel算法将比FFT(Fast Fourier Transform)更为有效。Goertzel算法相当于一个二阶IIR滤波器,(10)式是它的转移函数我们可以根据(10)式画出改进Goertzel算法的模拟框图,如图 3-1所示 x?n?+Q(n)+z?1yk?n?+Q(n-1)?2nk?2cos???N?K?WN-z?1Q(n-2)-1 图 3-1 Goertzel算法的模拟框图 图2中可看到,整个计算过程分为两部分:前向通路式(11)和反馈通路式(12)。显然,对于式(11)的递推关系计算需要重复N=1,?,N重复N+1次,但是式(12)中的反向计算只需要在n=N时计算一淡。每次计算只需要计算一次实数乘法和两次实数加法。所以,对实数序列x (n), 由于对称性,用这种算法求出X(k)和X(N-k)的值需要N+1次实数乘法运算。 我们现在可应用Goertzel算法完成实现DTMF解码器了。由于有8种可能的音频信号需要检测。所以需要至少8个由式(9)给出的滤波器,将每个滤波器调谐到这8个频率值上。在完成信号判决时,我们并不需要相位信息,只需要幅值信息|X(k)| 。因此,对式(12)两边进行平方,计算幅度的平方值|X(k)|2。我们将递推方程式(9,11, 12)进一步简化,得到滤波器计算的前向部分的简化表达方式,即滤波表达式的分子项部分: 由于我们只需要幅值信息,不需要相位信息,因此,对前向部分进行改进,输出幅度平 7

