吳澤偉,袁紅星,吳少群,余輝晴
(寧波工程學院 電子與信息工程學院,浙江 寧波315016)
雙音多頻DTMF(Dual Tone Multi-Frequency)信號由兩個單頻正弦信號疊加生成,是音頻電話的撥號信號標準[1]。由于具有良好的抗噪特性,已被廣泛用于諸如主叫識別信號傳送及顯示、電話語音服務、遠程控制和ATM終端等通信系統撥號傳輸中[2]。根據ITU的建議標準Q23[3],構成DTMF信號的兩個頻率分別來自行頻組(697 Hz,770 Hz,852 Hz,941 Hz)和列頻組(1 290 Hz,1 336 Hz,1 477 Hz,1 633 Hz),共16種組合,分別表示16個按鍵值,即10個數字鍵0~9和6 個功能鍵*、#、A、B、C、D[4]。
DTMF解碼是指從受干擾的語音信號中檢測出DTMF信號并將其還原成按鍵值。正確的解碼對于基于DTMF的應用至關重要。DTMF解碼的實質是從有噪信號中檢測出兩個正弦波頻率。近年來,已有多個解碼算法被提出。最直接的方法是DFT,通過DFT得到輸入信號的頻域信息,進而分析頻譜確定是否存在DTMF頻率。DFT通常以FFT的運算來實現,由于FFT生成從DC到半采樣率頻帶內所有頻率信息,因此該方法計算量大,且需要較多的存儲空間用于暫存計算結果[5]。針對該問題,參考文獻[6]提出基于Goertzel的 DFT快速運算。與FFT不同,Goertzel算法只對DTMF的8個頻點計算DFT,因此計算量大大降低。此外,Deosthali等人提出了非均勻DFT算法[7],Popovic在犧牲相位信息的情況下提出了改進的Goertzel算法[8],金鑫春等人研究了Goertzel算法的參數選擇問題,但這些算法都沒有考慮DTMF的Talk-off錯誤問題。解決該問題的常用方法是檢測二次諧波。由于DTMF信號只包含基因成分,因此只要檢測到較強的二次諧波,就認為該信號不是DTMF信號。但在強噪音環境下,該方法仍會出現誤判,即發生Talk-off錯誤。
本文針對Talk-off錯誤問題,在Goertzel算法的基礎上,提出基于頻率分辨率及其倍頻檢測的方案,并利用后續的判斷邏輯進一步排除虛假DTMF信號。大量真實應用環境下的語音測試結果表明,本文方法在強噪音干擾情況下仍能避免Talk-off錯誤問題。
本文提出的DTMF解碼器如圖1所示,主要包括信號預判、自動增益控制AGC(Auto Gain Control)、基于Goertzel的頻率檢測和判斷邏輯幾個模塊。信號預判模塊根據輸入信號的能量決定其是否包含DTMF信號;AGC將輸入信號的動態范圍變換到Goertzel算法可以處理的范圍;基于Goertzel的頻率檢測模塊計算輸入信號在8個DTMF頻點的能量、頻率分辨率及其倍頻的能量,并以此作為下一個模塊的輸入;判斷邏輯模塊根據前一個模塊的輸入,決定某對DTMF頻率是否存在,并將其翻譯成對應的鍵值。

圖1 DTMF解碼器框架
根據ITU的建議標準Q23對DTMF信號的規定,如果輸入信號在8個DTMF頻點的能量均≥-25 dBm且≤9 dBm,則認為可能包括DTMF信號。如果輸入信號在8個DTMF頻點處的能量均≤55 dBm,則認為該信號肯定不存在DTMF音調。信號預判模塊能夠有效地排除一些虛假DTMF信號,減小后續模塊誤判的可能性。
AGC從一幀輸入數據的前若干個樣點中確定幅度模的峰值,將Goertzel算法所要處理的樣點都乘以一個系數,使得該峰值等于Goertzel算法所能處理的最大值。
由于Goertzel算法簡單、易于實現,本文采用Goertzel算法進行頻率檢測。Goertzel算法的處理對象是數據塊,一個數據塊由N個樣本構成,每個數據塊輸出一個檢測結果。數據塊的大小,即N決定了頻率分辨率fk:

其中fs表示采樣頻率,對于語音信號,fs一般取8 kHz。
Goertzel算法利用一個雙極點的二階IIR濾波器來估計DFT值,其結構如圖2所示。離散域上的Goertzel算法如下:
對于n=0…N,遞歸計算:

其中 vk(-1)=0,vk(-2)=0,x(n)表示 n時刻輸入信號的采樣值。
每N個樣本估計一次DFT模值:

k由下式確定:

其中fk和fs分別表示待檢測的目標頻率和采樣頻率,floor()表示向下取整運算。本文用14個如圖2所示的IIR濾波器實現14個頻率的檢測,即8個DTMF頻率和6個與頻率分辨率相關的頻率。這6個頻率檢測主要是為了解決Talk-off問題,其計算如下:

圖2 Goertzel算法的IIR結構

當N=102,采樣率為8 kHz時,這6個頻率分別為78 Hz、235 Hz、314 Hz、392 Hz、549 Hz和 1 098 Hz。為了與 DTMF頻率區別開來,本文將這6個頻率稱為輔頻。
由于現有的語音增強模塊都是一個語音幀(8 kHz時為20ms,160個采樣點)處理一次。為了便于將DTMF解碼器集成到現有系統中,本文的DTMF解碼器每個語音幀調用一次Goertzel算法進行頻率檢測。根據ITU Q24[9],DTMF音調的持續時間介于45ms~55 ms之間,連續的DTMF信號之間的間隔至少為45ms。因此一個DTMF音調由多個語音幀組成。這意味著一個DTMF音調會被檢測多次。對同一個DTMF音調,理論上每次檢測結果都應該是一樣的。然而受噪聲影響,前后幾次檢測結果有可能出現不一致的情況。為解決該問題,本文采用表決方法輸出最可靠的檢測結果,多次檢測的表決也增強了本文解碼器的抗噪性能。
圖3給出了判斷邏輯模塊的工作流程,根據前面14個IIR濾波器的檢測結果判斷檢測到的行頻和列頻是否有效。對于有效的檢測結果,根據圖4所示的行頻、列頻與按鍵的對應關系,輸出按鍵值。
為了驗證本文方法的有效性,用真實使用環境下的語音數據作為測試數據。測試數據獲取方法是,首先在兩個手機之間建立通信鏈接,然后在其中一個手機上隨機連續地按下多個按鍵,另一個手機將接收到的語音信號保存成測試用的wav文件。為了測試Talk-off性能,在發送DTMF信號的手機端分別播放噪音、語音和音樂。在算法實現時,考慮到在定點DSP上的移植,用Q14格式將其定點化(DFT模值用32位表示,其余的均用16位表示)。
程序有3個可調參數,其中Frames between Successive Dials指兩個連續按鍵間隔的時間,該參數用于處理按鍵防抖動,以幀為單位,對于8 kHz采樣率的語音而言,一幀為20ms。對于真實環境下的測試數據,程序中的3個參數都是固定的,分別設為3、2和5。測試中,將本文方法與參考文獻[2]的方法進行了對比。其中,參考文獻[2]通過二次諧波檢測來排除噪音對檢測結果的干擾。參考文獻[2]的參數設置如下:N=201,二次諧波的能量至少比基頻能量小20 dB。

在發送DTMF信號的手機側播放如圖5所示的噪聲信號。接收側手機錄制的語音信號如圖6所示。這個測試信號的DTMF按鍵值序列為:123456789*0##0*9876542 3147856280#963547*。參考文獻[2]的檢測結果為:123456 789?##0*9876542314785280#963547*(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),重復檢測一個9,漏檢一個0,誤將6檢測為5;本文方法檢測成功率為100%。
在發送DTMF信號的手機側播放如圖7所示的音樂信號。接收側的語音信號如圖8所示,對應的DTMF按鍵值序列為:123456789*0##0*987654321147*2580369##96 30852*741。參考文獻[2]的檢測結果為:123456789*0##0*98765?321147*2580369##963085?*741(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),漏檢 4和2,#被重復檢測一次,結束時誤檢測出7;本文方法檢測成功率為100%。

在發送DTMF信號的手機側,操作者一邊按鍵一邊發聲。接收側的語音信號如圖9所示,對應的DTMF按鍵值序列為:5152535455565758595*505#152535456575859 5*505#5。參考文獻[2]的檢測結果為:51?25354555657 58595*505#1525354565758595*505#5(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),第 2個按鍵 1被重復檢測1次,第3個按鍵5被漏檢,第10個按鍵、第17個按鍵和第43個按鍵分別被重復檢測1次;本文方法檢測成功率為100%。


上述真實環境下的測試結果表明,本文方法在處理Talk-off問題上比傳統的二次諧波檢測更為有效。其原因是,離散域上用Goertzel算法檢測二次諧波的準確性依賴于頻率分辨率的選擇。在強背景噪音環境下,其檢測結果更容易受到影響。本文直接利用頻率分辨率及其倍頻進行干擾語音的檢測,可以有效避免該問題。
ITU對DTMF解碼器的性能規定主要體現在4個方面,即 Talk-off、扭曲(twist)、頻偏和 SNR。Talk-off的測試如前文所述。扭曲指的是檢測到的行頻與列頻DFT模值之比,對于有效的 DTMF信號,要求在-4 dB~8 dB范圍內。扭曲測試是在檢測DTMF之后的邏輯判斷中進行的,目的是用于排除虛假DTMF信號。圖4中判斷行頻、列頻檢測值之間關系的步驟即為扭曲測試。ITU規定頻偏的容許范圍為±1.5%,當超過±3.5%時則認為是無效的DTMF信號。在SNR等于或高于15 dB時,ITU要求成功檢測率為100%。按照參考文獻[10]所述的方法對頻偏和SNR進行測試。實驗結果表明,在SNR為10 dB的情況下,頻偏在±1.5%范圍內時,本文解碼器的檢測成功率為100%;當頻偏超過±2.0%,譯碼開始出錯。當SNR在-3.7 dB以上時,本文檢測成功率為100%。其中,測試用的DTMF信號都由Cool Edit Pro軟件生成;實驗中的3個參數均設為1。
Talk-off是DTMF解碼器的重要性能,然而現有算法對此問題的解決方案主要囿于二次諧波的檢測。本文另辟蹊徑,提出頻率分辨率及其倍頻檢測的解決思路。真實使用環境下的測試數據驗證了該方法的可行性。ITU標準兼容性測試實驗表明本文方法能夠滿足ITU對DTMF解碼器的規定。
[1]王乙斐,游舟浩,王穎,等.DTMF信號的合成與識別[J].電子設計工程,2011,19(7):71-73.
[2]邵明東.改進 Goertzel算法的 DTMF信號檢測的仿真與應用[J].聲電技術,2009,33(12):65-69.
[3]ITU.ITU-T recommendation Q.23 technical features of pushbutton telephone sets[S].1988.
[4]金鑫春,汪一鳴.Goertzel算法下DTMF信號檢測及參數優化[J].現代電子技術,2010(6):152-155.
[5]MILOS S T,DUSAN R.Performance analysis of the DTMF detector based on the Goertzel’s algorithm[C].Proc.of 14th Telecommunications Forum,2006.
[6]POPOVIC M.Digital signal processing[M].Belgrade:Academic mind,2003:100-120.
[7]DEOSTHALI S,MCCASLIN R,EVANS B.A low-complexity ITU-compliant dual tone multiple frequency detector[J].IEEE Trans.on Signal Processing,2000,48(5):1-20.
[8]POPOVIC M.Efficient decoding of digital DTMF and R2 tone signalization[J].Factual Univ.Ser.,Elec.Energ,2003,16(3):389-399.
[9]ITU.ITU-T recommendation Q.24 multifrequency push buton signal reception[S].1989.
[10]陳通,曹小強.基于 NDFT Goertzel濾波器的 DTMF信號檢測的改進方法[J].西南大學學報,2008,30(1):152-155.