摘 要: 雙音多頻信號被廣泛用于音頻電話及交互式控制系統(tǒng)中,正確解碼是這些應用的關(guān)鍵。然而雙音多頻信號解碼因噪音干擾面臨著Talk-off的難題。針對該問題,在Goertzel算法基礎上提出利用頻率分辨率及其倍頻檢測干擾噪音的解決方案。測試結(jié)果表明該方法優(yōu)于二次諧波檢測的解決方案。
關(guān)鍵詞: 雙音多頻;Talk-off;Goertzel算法;二次諧波
雙音多頻DTMF(Dual Tone Multi-Frequency)信號由兩個單頻正弦信號疊加生成,是音頻電話的撥號信號標準[1]。由于具有良好的抗噪特性,已被廣泛用于諸如主叫識別信號傳送及顯示、電話語音服務、遠程控制和ATM終端等通信系統(tǒng)撥號傳輸中[2]。根據(jù)ITU的建議標準Q23[3],構(gòu)成DTMF信號的兩個頻率分別來自行頻組(697 Hz,770 Hz,852 Hz,941 Hz)和列頻組(1 290 Hz,1 336 Hz,1 477 Hz,1 633 Hz),共16種組合,分別表示16個按鍵值,即10個數(shù)字鍵0~9和6個功能鍵*、#、A、B、C、D[4]。
DTMF解碼是指從受干擾的語音信號中檢測出DTMF信號并將其還原成按鍵值。正確的解碼對于基于DTMF的應用至關(guān)重要。DTMF解碼的實質(zhì)是從有噪信號中檢測出兩個正弦波頻率。近年來,已有多個解碼算法被提出。最直接的方法是DFT,通過DFT得到輸入信號的頻域信息,進而分析頻譜確定是否存在DTMF頻率。DFT通常以FFT的運算來實現(xiàn),由于FFT生成從DC到半采樣率頻帶內(nèi)所有頻率信息,因此該方法計算量大,且需要較多的存儲空間用于暫存計算結(jié)果[5]。針對該問題,參考文獻[6]提出基于Goertzel的DFT快速運算。與FFT不同,Goertzel算法只對DTMF的8個頻點計算DFT,因此計算量大大降低。此外,Deosthali等人提出了非均勻DFT算法[7],Popovic在犧牲相位信息的情況下提出了改進的Goertzel算法[8],金鑫春等人研究了Goertzel算法的參數(shù)選擇問題,但這些算法都沒有考慮DTMF的Talk-off錯誤問題。解決該問題的常用方法是檢測二次諧波。由于DTMF信號只包含基因成分,因此只要檢測到較強的二次諧波,就認為該信號不是DTMF信號。但在強噪音環(huán)境下,該方法仍會出現(xiàn)誤判,即發(fā)生Talk-off錯誤。
本文針對Talk-off錯誤問題,在Goertzel算法的基礎上,提出基于頻率分辨率及其倍頻檢測的方案,并利用后續(xù)的判斷邏輯進一步排除虛假DTMF信號。大量真實應用環(huán)境下的語音測試結(jié)果表明,本文方法在強噪音干擾情況下仍能避免Talk-off錯誤問題。
1 DTMF解碼器
1.1 解碼器框架
本文提出的DTMF解碼器如圖1所示,主要包括信號預判、自動增益控制AGC(Auto Gain Control)、基于Goertzel的頻率檢測和判斷邏輯幾個模塊。信號預判模塊根據(jù)輸入信號的能量決定其是否包含DTMF信號;AGC將輸入信號的動態(tài)范圍變換到Goertzel算法可以處理的范圍;基于Goertzel的頻率檢測模塊計算輸入信號在8個DTMF頻點的能量、頻率分辨率及其倍頻的能量,并以此作為下一個模塊的輸入;判斷邏輯模塊根據(jù)前一個模塊的輸入,決定某對DTMF頻率是否存在,并將其翻譯成對應的鍵值。
1.2 信號預判
根據(jù)ITU的建議標準Q23對DTMF信號的規(guī)定,如果輸入信號在8個DTMF頻點的能量均≥-25 dBm且≤9 dBm,則認為可能包括DTMF信號。如果輸入信號在8個DTMF頻點處的能量均≤55 dBm,則認為該信號肯定不存在DTMF音調(diào)。信號預判模塊能夠有效地排除一些虛假DTMF信號,減小后續(xù)模塊誤判的可能性。
1.3 AGC
AGC從一幀輸入數(shù)據(jù)的前若干個樣點中確定幅度模的峰值,將Goertzel 算法所要處理的樣點都乘以一個系數(shù),使得該峰值等于Goertzel 算法所能處理的最大值。
其中fk和fs分別表示待檢測的目標頻率和采樣頻率,floor()表示向下取整運算。本文用14個如圖2所示的IIR濾波器實現(xiàn)14個頻率的檢測,即8個DTMF頻率和6個與頻率分辨率相關(guān)的頻率。這6個頻率檢測主要是為了解決Talk-off問題,其計算如下:
由于現(xiàn)有的語音增強模塊都是一個語音幀(8 kHz時為20 ms,160個采樣點)處理一次。為了便于將DTMF解碼器集成到現(xiàn)有系統(tǒng)中,本文的DTMF解碼器每個語音幀調(diào)用一次Goertzel算法進行頻率檢測。根據(jù)ITU Q24[9],DTMF音調(diào)的持續(xù)時間介于45 ms~55 ms之間,連續(xù)的DTMF信號之間的間隔至少為45 ms。因此一個DTMF音調(diào)由多個語音幀組成。這意味著一個DTMF音調(diào)會被檢測多次。對同一個DTMF音調(diào),理論上每次檢測結(jié)果都應該是一樣的。然而受噪聲影響,前后幾次檢測結(jié)果有可能出現(xiàn)不一致的情況。為解決該問題,本文采用表決方法輸出最可靠的檢測結(jié)果,多次檢測的表決也增強了本文解碼器的抗噪性能。
1.5 判斷邏輯
圖3給出了判斷邏輯模塊的工作流程,根據(jù)前面14個IIR濾波器的檢測結(jié)果判斷檢測到的行頻和列頻是否有效。對于有效的檢測結(jié)果,根據(jù)圖4所示的行頻、列頻與按鍵的對應關(guān)系,輸出按鍵值。
2 實驗結(jié)果與分析
為了驗證本文方法的有效性,用真實使用環(huán)境下的語音數(shù)據(jù)作為測試數(shù)據(jù)。測試數(shù)據(jù)獲取方法是,首先在兩個手機之間建立通信鏈接,然后在其中一個手機上隨機連續(xù)地按下多個按鍵,另一個手機將接收到的語音信號保存成測試用的wav文件。為了測試Talk-off性能,在發(fā)送DTMF信號的手機端分別播放噪音、語音和音樂。在算法實現(xiàn)時,考慮到在定點DSP上的移植,用Q14格式將其定點化(DFT模值用32位表示,其余的均用16位表示)。
程序有3個可調(diào)參數(shù),其中Frames between Successive Dials指兩個連續(xù)按鍵間隔的時間,該參數(shù)用于處理按鍵防抖動,以幀為單位,對于8 kHz采樣率的語音而言,一幀為20 ms。對于真實環(huán)境下的測試數(shù)據(jù),程序中的3個參數(shù)都是固定的,分別設為3、2和5。測試中,將本文方法與參考文獻[2]的方法進行了對比。其中,參考文獻[2]通過二次諧波檢測來排除噪音對檢測結(jié)果的干擾。參考文獻[2]的參數(shù)設置如下:N=201,二次諧波的能量至少比基頻能量小20 dB。
2.1 真實環(huán)境下測試1
在發(fā)送DTMF信號的手機側(cè)播放如圖5所示的噪聲信號。接收側(cè)手機錄制的語音信號如圖6所示。這個測試信號的DTMF按鍵值序列為:123456789*0##0*98765423147856280#963547*。參考文獻[2]的檢測結(jié)果為:1234567899*?##0*98765423147855280#963547*(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),重復檢測一個9,漏檢一個0,誤將6檢測為5;本文方法檢測成功率為100%。
2.2 真實環(huán)境下測試2
在發(fā)送DTMF信號的手機側(cè)播放如圖7所示的音樂信號。接收側(cè)的語音信號如圖8所示,對應的DTMF按鍵值序列為:123456789*0##0*987654321147*2580369##9630852*741。參考文獻[2]的檢測結(jié)果為:123456789*0##0*98765?321147*2580369###963085?*7417(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),漏檢4和2,#被重復檢測一次,結(jié)束時誤檢測出7;本文方法檢測成功率為100%。
2.3 真實環(huán)境下測試3
在發(fā)送DTMF信號的手機側(cè),操作者一邊按鍵一邊發(fā)聲。接收側(cè)的語音信號如圖9所示,對應的DTMF按鍵值序列為:5152535455565758595*505#1525354565758595*505#5。參考文獻[2]的檢測結(jié)果為:511?253545555657585595*505#1525354565758595*5005#5(單下劃線表示誤檢測,雙下劃線表示重復檢測,?表示漏檢),第2個按鍵1被重復檢測1次,第3個按鍵5被漏檢,第10個按鍵、第17個按鍵和第43個按鍵分別被重復檢測1次;本文方法檢測成功率為100%。
上述真實環(huán)境下的測試結(jié)果表明,本文方法在處理Talk-off問題上比傳統(tǒng)的二次諧波檢測更為有效。其原因是,離散域上用Goertzel算法檢測二次諧波的準確性依賴于頻率分辨率的選擇。在強背景噪音環(huán)境下,其檢測結(jié)果更容易受到影響。本文直接利用頻率分辨率及其倍頻進行干擾語音的檢測,可以有效避免該問題。
2.4 ITU標準兼容性測試
ITU對DTMF解碼器的性能規(guī)定主要體現(xiàn)在4個方面,即Talk-off、扭曲(twist)、頻偏和SNR。Talk-off的測試如前文所述。扭曲指的是檢測到的行頻與列頻DFT模值之比,對于有效的DTMF信號,要求在-4 dB~8 dB范圍內(nèi)。扭曲測試是在檢測DTMF之后的邏輯判斷中進行的,目的是用于排除虛假DTMF信號。圖4中判斷行頻、列頻檢測值之間關(guān)系的步驟即為扭曲測試。ITU規(guī)定頻偏的容許范圍為±1.5%,當超過±3.5%時則認為是無效的DTMF信號。在SNR等于或高于15 dB時,ITU要求成功檢測率為100%。按照參考文獻[10]所述的方法對頻偏和SNR進行測試。實驗結(jié)果表明,在SNR為10 dB的情況下,頻偏在±1.5%范圍內(nèi)時,本文解碼器的檢測成功率為100%;當頻偏超過±2.0%,譯碼開始出錯。當SNR在-3.7 dB以上時,本文檢測成功率為100%。其中,測試用的DTMF信號都由Cool Edit Pro軟件生成;實驗中的3個參數(shù)均設為1。
Talk-off是DTMF解碼器的重要性能,然而現(xiàn)有算法對此問題的解決方案主要囿于二次諧波的檢測。本文另辟蹊徑,提出頻率分辨率及其倍頻檢測的解決思路。真實使用環(huán)境下的測試數(shù)據(jù)驗證了該方法的可行性。ITU標準兼容性測試實驗表明本文方法能夠滿足ITU對DTMF解碼器的規(guī)定。
參考文獻
[1] 王乙斐,游舟浩,王穎,等.DTMF信號的合成與識別[J].電子設計工程,2011,19(7):71-73.
[2] 邵明東.改進Goertzel算法的DTMF信號檢測的仿真與應用[J].聲電技術(shù),2009,33(12):65-69.
[3] ITU.ITU-T recommendation Q.23 technical features of pushbutton telephone sets[S].1988.
[4] 金鑫春,汪一鳴.Goertzel算法下DTMF信號檢測及參數(shù)優(yōu)化[J].現(xiàn)代電子技術(shù),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.