摘 要:DTMF因具有很強的抗干擾能力以及較快的傳輸速度,被廣泛應(yīng)用于音頻電話系統(tǒng)以及交互式控制系統(tǒng)中,如語音郵件、電話銀行以及ATM終端等。因此對它進行正確的檢測十分關(guān)鍵。這里就DTMF信號檢測中的Goertzel算法原理以及主要參數(shù)的選擇進行詳細(xì)分析,重點對參數(shù)N的選取進行論證。給出DTMF信號的檢測流程及仿真結(jié)果。最后將它與傳統(tǒng)的FFT算法相對比從而得出Goertzel算法的優(yōu)勢。
關(guān)鍵詞:DTMF信號檢測;Goertzel算法;參數(shù)優(yōu)化;FFT算法
中圖分類號:TP391.4文獻標(biāo)識碼:A
文章編號:1004-373X(2010)06-152-04
DTMF Signal Detection and Parameter Optimization Based on Goertzel Algorithm
JIN Xinchun,WANG Yiming
(School of Electronics and Information Engineering,Soochow University,Suzhou,215021,China)
Abstract:Due to a strong anti-interference ability and faster transmission speed,DTMF has been widely used in a touch-tone phone systems and interactive control system.Such as voice mail,telephone banking and ATM terminals.Therefore it is critical to detect it correctly.The principle of Goertzel algorithm for DTMF tone detection as well as how to choose the main parameters are discussed in detail,focusing on the demonstration of the parameter N optimization.Simulation environment of this algorithm is done in MATLAB and results from performance tests are given.Comparing with the traditional FFT algorithm,Goertze algorithm showes its advantages.
Keywords:DTMF signal detection;Goertzel algorithm;parameter optimization;FFT algorithm
0 引 言
雙音多頻信號(Dual Tone Multiple Frequency,DTMF)最初是由美國貝爾實驗室研制。作為實現(xiàn)電話號碼快速可靠傳輸?shù)囊环N技術(shù),它具有很強的抗干擾能力以及較快的傳輸速度,因此被廣泛應(yīng)用于音頻電話系統(tǒng)中。另外,它也可以在數(shù)據(jù)通信系統(tǒng)中被用來實現(xiàn)各種數(shù)據(jù)流和語音等信息的遠(yuǎn)程傳輸。DTMF信令因其能實現(xiàn)更快的撥號速率而逐漸在全世界范圍內(nèi)被廣泛采用,加上它便于自動檢測識別以及電話業(yè)務(wù)的擴展,所以很快取代了傳統(tǒng)轉(zhuǎn)盤式電話機使用的脈沖計數(shù)方式的撥號形式[1]。
由于DTMF信號包含特定的頻率,因此采用像Goertzel算法這樣特定的頻譜分析方法會比傳統(tǒng)的DFT分析在軟硬件實現(xiàn)上具有優(yōu)勢。雖然目前對Goertzel算法的研究已很深入,但對檢測過程中參數(shù)優(yōu)化的詳盡討論不多。本文在DTMF信號特有屬性的基礎(chǔ)上,結(jié)合Goertzel算法具有的遞歸特性實現(xiàn)對雙音多頻信號的正確檢測,并著重對檢測過程中涉及的參數(shù)進行詳細(xì)的討論,給出了參數(shù)N選取的論證,并分析檢測過程中N選取不當(dāng)造成的頻率區(qū)分度差的問題。為DTMF信號檢測時正確選取參數(shù)提供了理論依據(jù)。
1 DTMF信號及其特點
一個DTMF信號由兩個單音頻正弦信號所組成,即每個DTMF信號必須包含一個來自低頻組(697 Hz,770 Hz,852 Hz,941 Hz)的低頻成分和一個來自高頻組(1 209 Hz,1 366 Hz,1 477 Hz,1 633 Hz)的高頻成分。所以共可以有16種不同的組合來代表16個惟一的按鍵信息:10個數(shù)字鍵0~9以及6個功能鍵[2] ,即*,#,A,B,C,D,如圖1所示[3]。
圖1 DTMF鍵盤
組成DTMF信號的頻率有一些特有的屬性[3]:
(1) 所有的音頻都位于人的可聽范圍內(nèi),因此當(dāng)按鍵按下時人可以監(jiān)測到;
(2) 8個頻率中沒有一個頻率是其他任意一個頻率的倍數(shù);
(3) 8個頻率中任意兩個頻率的組合,如相加或相減,都不等于其他任意一個頻率。
這些特性不僅簡化了DTMF信號的解碼同時也降低了DTMF誤檢的概率。這樣便使得接收端幾乎可以立即檢測出按鍵的信息并可以擯棄語音或噪聲的諧波能量。因此語音或者噪聲被誤檢為DTMF信號的概率就大大減小。
設(shè)DTMF信號用下式表示:
x(t)=0.25sin(2πf1t)+0.25sin(2πf2t)(1)
式中:f1是選自低頻組(697 Hz,770 Hz,852 Hz,941 Hz)中的任意一個頻率,f2是選自高頻組(1 209 Hz,1 366 Hz,1 477 Hz,1 633 Hz)中的任意一個頻率,則產(chǎn)生按鍵A所對應(yīng)的DTMF信號如圖2所示。
圖2 DTMF信號
對該DTMF時域信號用8 kHz進行采樣便可以得到DTMF的數(shù)字序列x(n)。
在信號接收端,需要對DTMF信號進行檢測,即尋找信號的行頻和列頻,最后根據(jù)圖1的DTMF鍵盤信息確定相應(yīng)的數(shù)字或符號。對DTMF信號的檢測一般有兩種方法:通過濾波器進行頻率的選擇判定或者通過分析信號的頻譜進行判定。
由于頻譜分析的方法比較靈活,對硬件要求低,本文選擇通過對信號的頻譜進行分析從而判定按鍵信息。對信號頻譜的分析可以采用DFT,F(xiàn)FT以及Goertzel算法。這里主要采用Goertzel算法進行檢測判定。
2 Goertzel算法原理
Goertzel算法實質(zhì)是以一個二階IIR帶通濾波器為基礎(chǔ),該帶通濾波器具有如下的傳遞函數(shù)[4]:
Hk(z)=1-ej2πk/Nz-11-2cos[(2πk)/N]z-1+z-2(2)
利用該算法可以有效地計算DTMF信號的DFT值。以往實驗已經(jīng)表明該算法對于提取DTMF輸入信號既有效又快速。該濾波器的直接Ⅱ型實現(xiàn)可以表述為以下差分方程[5]:
vk=x+2cos(ωk)vk-vk(3)
yk=vk-vkexp(-jωk)(4)
該濾波器所對應(yīng)的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。其中,x是輸入的采樣值,并且vk= vk=0,ωk=2πfk=2πkfs/N。式(3)代表Goertzel算法的遞歸部分,它對每一個輸入樣值進行計算(共計算N次)。式(4)在遞歸結(jié)束后只需計算一次,這樣便可以得到所需要的DFT的信息。由以上分析不難推出計算一個DFT共需N+2次實數(shù)乘和2N+1次加運算[6]。
圖3 Goertzel算法框圖
3 Goertzel算法具體實現(xiàn)及性能分析
首先,由于DTMF信號在時域是模擬的,因此對它的檢測需要先對其采樣形成數(shù)字信號。從組成DTMF信號的高、低頻率組中可以看到其最大頻率為1 633 Hz,采用fs=8 kHz的采樣頻率對其采樣顯然滿足奈奎斯特采樣定律。
此外,N的選取決定了頻率分辨率以及捕捉N個樣值所需要的時間,對基于Goertzel算法的DTMF信號檢測的有效性來說至關(guān)重要。
頻率分辨率被用來選擇IIR濾波器中所需的DTMF信號的頻率,這可以通過計算下式中的k來實現(xiàn):
fk=(kfs)/N(5)
這樣計算出的DTMF信號頻率可能與實際的DTMF信號頻率有一定的差別,但可以通過加大N的選取來減小這種頻率差異。
然而從另外一方面來考慮,雖然加大了N的選取會使頻率的差異減小,但這勢必會帶來捕捉N個樣值所需要的時間的增加,而這個時間的增加勢必會對檢測的效果造成一定的影響。
因此,需要在頻率分辨率和捕捉N個樣值所需要的時間這兩個因素之間做出權(quán)衡。
由DTMF信號頻率所具有的特性不難發(fā)現(xiàn)要選取一定的N值使得計算出的頻率和真實的DTMF信號的頻率相一致幾乎不可能,而實際中也并不需要計算出來的頻率值與其真實頻率相一致,只需偏差保持在±1.5%即可認(rèn)為是DTMF信號的真實頻率。在對DTMF信號采樣以及確定N,k值之后就可以進行檢測。檢測過程如圖4所示。
圖4 DTMF信號檢測流程圖
圖5~7是部分檢測結(jié)果。根據(jù)譜線峰值出現(xiàn)對應(yīng)的k值即可確定對應(yīng)的行頻與列頻,從而辨別出對應(yīng)的按鍵信息。圖5~7分別對應(yīng)數(shù)字(0,1)、字母(A,B)和符號(*,#)的信號頻譜圖(N=205)。
實驗發(fā)現(xiàn),N值的恰當(dāng)選取可以使得X最大峰值遠(yuǎn)遠(yuǎn)大于其他值,特別是與相鄰值可以有盡可能大的幅度差值,有利于在噪聲背景下正確檢出信號。反之,若N值選取不恰當(dāng),會出現(xiàn)誤判的現(xiàn)象。
圖5 檢測的DTMF信號頻譜圖(一)
例如當(dāng)N=225時,判決“#”鍵時得到的結(jié)果如圖8所示。
比較圖8和圖7右側(cè)部分發(fā)現(xiàn),此時的頻率區(qū)分度明顯很差,可見N的取值關(guān)系到檢測DTMF信號的正確概率。由(5)式可知,當(dāng)k的絕對誤差越小時,檢測到的頻率的正確率越高。
圖6 檢測的DTMF信號頻譜圖(二)
圖7 檢測的DTMF信號頻譜圖(三)
下面對k的絕對誤差最小時N的取值進行簡要的論證:
任取一有效頻率進行證明,如941 Hz,令y1表示k的絕對誤差,t表示對x變量替換后的變量,y2是y1的上取整表示。問題便簡化為以下數(shù)學(xué)模型:
x為何值時y1=|-941/8 000×x|可取得最小值?其中N的變化區(qū)間用x表示,160≤x≤250。
證明:
(1)
∵|-941/8 000×x|min=min(y2,-|941/8 000×x|+941/8 000×x)。
其中y2=|941/8 000×x|-941/8 000×x,而-|941/8 000×x|+941/8 000×x=1-y2。
∴|-941/8 000×x|min=min(y2,1-y2),這樣就要求由函數(shù)y2劃分區(qū)間得到的單調(diào)函數(shù)的最大和最小值,從中找到最小的一個。
圖8 N取值不當(dāng)時檢測的DTMF信號頻譜圖
(2) 變量代換:
y2=|941/8 000×x|-941/8 000×x=|941/8 000×(t+160)|-941/8 000×(t+160)=|941/8 000×t+0.82|-941/8 000×t-0.82,其中0≤t≤90。
①t=0時y2=0.18;t=1時y2=0.062 375,然后按941/8 000×t
② 縮小查找y2可能取得最小值的范圍。記ti=,i=1,2,3,…,13。當(dāng)t>10以后發(fā)現(xiàn)每一個分段函數(shù)由常數(shù)項和一次項組成,而常數(shù)項每次增加1,對于一次項941/8 000×t,當(dāng)ti+1-ti>8.5時,才有941/8 000×(ti+1-ti)>1。了解這些之后,只要計算0,1,10,27,44,61,78這些端點的值,找出最小的一個。計算這些點的函數(shù)值,得到:t=10時,y2有最小值,返回原定義域,即x=170時,y2有最小值0.003 75。
依照以上同樣的原理,y2的最大值只可能在以上每一分段區(qū)間的左端點取到,本例中y2取得最大值0.946 625。
∴ x=170時,y1取得最小值,且:
y1 min= min(y2 ,1-y2 ) = 0.003 75。
同理對于其他的頻率可以得到相應(yīng)的x的取值,這樣便得到分別對應(yīng)8個頻率誤差最小的一個最佳N值序列xi=。
(3) 求兼顧所有8個頻率誤差的N值。構(gòu)造y=∑8i=1(x-xi)2,對其求導(dǎo)數(shù)得到極點x=204.625時使得y最小,而x是步長為1的整數(shù),可以得到x=205時使得y最小。
因此,當(dāng)N取值為205時檢測到的頻率對應(yīng)的k的絕對誤差最小,所以此時對應(yīng)的頻率檢測的正確率最高。實驗還發(fā)現(xiàn),采用FFT提取DTMF信號的頻譜與Goertzel算法下的效果相近,但它在運算次數(shù)方面要遠(yuǎn)遠(yuǎn)遜色于Goertzel算法。
對這兩種算法的運算次數(shù)的比較如表1所示。
表1 Goertzel算法與FFT算法運算量比較
FFTGoertzel
加法次數(shù)3N×log2 N(2N+1)×8
乘法次數(shù)2N×log2 N(N+1)×8
總運算次數(shù)5N×log2 N24N+24
總運算次數(shù)(N=64)1 9201 560
總運算次數(shù)(N=128)4 4803 096
本文對DTMF信號的檢測時選取N值為205,按該N值計算此時的FFT,Goertzel檢測算法所對應(yīng)的總運算次數(shù)分別約為7 872,4 944,前者運算次數(shù)比后者多了近60%。
4 結(jié) 語
DTMF信號作為音頻電話系統(tǒng)以及數(shù)據(jù)通信系統(tǒng)等領(lǐng)域中的一項重要技術(shù),對其進行快速正確地檢測顯的尤為重要。本文就DTMF信號檢測中的Goertzel算法原理以及主要參數(shù)的選擇進行了詳細(xì)分析。雖然檢測DTMF信號的算法還有很多,如基于支持向量機的算法[10]。但以往對檢測過程中參數(shù)優(yōu)化的詳盡討論不多,文中特別對N取值的優(yōu)化進行了論證,給出了相應(yīng)的DTMF信號的檢測流程及仿真結(jié)果。并將Goertzel算法與傳統(tǒng)的FFT算法的計算量相對比,得出了在DTMF信號檢測電路設(shè)計中Goertzel算法優(yōu)于傳統(tǒng)FFT的結(jié)論。
參考文獻
[1]呂贊福,孟維曉,李研.基于DSP的DTMF編解碼技術(shù)的實現(xiàn)[J].電子器件,2004,27(4):694-698.
[2]Gunter Schmer,MTSA.DTMF Tone Generation and Detection[R].Application Report,1996.
[3]Milos S Trajkovic,Dusan Radovic.Performance Analysis of the DTMF Detector Based on the Goertzel′s Algorithm.Proc.of 14th Telecommunications Forum[C].Serbia Belgrade,2006.
[4][美]A V 奧本海姆,R W 謝弗,J R 巴克.離散時間信號處理[M].2版.劉樹堂,黃建國,譯.西安:西安交通大學(xué)出版社,2001.
[5]Texas Instruments.DTMF Tone Generation and Detection:An Implimentation Using the TMS320C54x[R].Application Report,SPRA096A,2000.
[6]Li-Te Shen,Shaw-Hwa Hwang.A New Algorithm for DTMF Detection.2009 IFIP International Conference on Wireless and Optical Communications Networks[C].Cairo,Egypt,2009.
[7]Felder M D,Mason J C,Evan B L.Efficient Dualtone Multifrequency Detection Using the Nonuniform Discrete Fourier Transform[J].IEEE Signal Processing Letters,1998,5(7):260-163.
[8]陳泉,胡小龍.基于軟件的DTMF產(chǎn)生器及其性能分析[J].單片機與嵌入式系統(tǒng)應(yīng)用,2004(11):16-18.
[9]Nagi J,Tiong S K,Yap K S,et al.Dual-tone Multifrequency Signal Detection Using Support Vector Machines.Telecommunication Technologies 2008 and 2008 2nd Malaysia Conference on Photonics[C].2008.