龍家輝
(湖南農業大學 信息與智能科學技術學院 信息工程系,湖南 長沙 410128)
雙音多頻(DTMF)信號是美國貝爾實驗室開發的應用于電話網絡的音頻撥號信號。DTMF撥號系統具有頻域分析方便、撥號速度快、強大的抗干擾功能以及自動檢測和識別等特性。脈沖撥號和音頻撥號是電話信令的兩個系統[1]。DTMF用于按鍵音撥號,使用兩種音調代表觸摸板上的每個鍵。DTMF已經被廣泛應用于現實生活,如電話系統的遠程交換機通過解碼DTMF信號中的數碼值來獲取用戶向交換機發送的指令[2]。
DTMF信令通過高頻音和低頻音之和表示數字或字符,按下任意鍵會產生列音和行音,對應于該鍵的DTMF是通過查表或諧振器生成的。信號通過電話線傳輸到交換中心[3],交換中心對信號采樣,使用FFT或Goertzel算法確定接收的頻率,從而告知相應的數字[4]。
傳統的電話撥號通過脈沖計數確定數字0~9,速度慢且不能擴展電話服務。實際通信過程中,信號在信道傳輸易受到噪聲的干擾,因此雙音多頻由4個高頻和4個低頻兩個頻群組成。4個高頻頻率分別為1 209 Hz、1 336 Hz、1 477 Hz以及 1 633 Hz,4 個低頻頻率分別為697 Hz、770 Hz、852 Hz以及941 Hz。DTMF信號組合了低頻和高頻,這些頻率信號間不存在諧波關系,抗干擾能力很強。在DTMF信號撥號方式中,每個號碼鍵都由1個低頻段頻率的單音信號和1個高頻段頻率的單音信號組成。1個高頻信號和1個低頻信號疊加組成1個組合信號,代表號碼表上的指定字符,通過字符的組合實現不同的功能。每個按鍵利用兩個不同頻率的正弦波編碼,選擇雙音方式能將撥號信息從語音中區分出來。8個頻率可以組合成16個不同的雙音多頻信號,包括數字0~9和控制信號*、#、A、B、C以及D,如表1所示。

表1 DTMF號碼表
DTMF信號在高低頻處的頻譜幅度非常大,其他頻率處幾乎為0。將DTMF信號轉換為離散時間序列,然后執行FFT或DFT,檢測幅度譜中幅度最大的兩個頻率。DTMF信號的檢測僅需要分析8個低頻和8個高頻的頻譜,采用FFT會造成計算資源的浪費。因此,本實驗采用Goertzel算法直接計算指定頻率處的傅里葉變換值。Goertzel算法實質是對DFT的快速運算,但可以有選擇地計算個別頻率點處的DFT值,從而避免造成內存和計算資源的浪費。Goertzel算法的流程如下。
N點時域序列f(n)的N點DFT為F(k):


定義新序列yn(n)為:

u(n)指單位階躍函數,F(n)表示離散時域序列,令:

yk(n)可看作f(n)和hk(n)的卷積,即:

這意味著f(N)的第K個點DFTF(K)是濾波器Hk(N)濾波器f(N)之后的第N個輸出值。將f(N)的N點DFT變換為N個濾波器的第N點輸出。該算法稱為Goertzel算法,Goertzel算法的濾波器組如圖1所示。Goertzel算法實質就是一個兩極點的IIR濾波器。

圖1 Goertzel算法的濾波器組
濾波器Hk(N)的系統函數:

根據CCITT的建議,國際上采用從低頻群和高頻群中各抽出一個頻率以疊加組合的方式產生DTMF信號,共可以產生16種組合,代表不同的數字和功能字符。假設Y為DTMF信號,其產生方式為:

其中:f1、f2為低頻和高頻所對應的頻率;fs為信號的采樣頻率,取8 kHz。DTMF信號的產生流程如圖2所示。

圖2 DTMF信號生成過程
實驗的信號檢測采用Goertzel算法對8個頻率處的信號幅值進行計算,另外取噪聲功率作為檢測的閾值,排除噪聲的影響。
實驗主要采用MATLAB進行仿真處理,仿真代碼如下:


在MATLAB平臺中新建1個GUI界面,如圖3所示。

圖3 新建GUI界面
生成1個fig文件和.m文件,創建靜態按鈕和靜態文本框,共創建16個按鈕和3個靜態文本框,如圖4所示。

圖4 建立模型
根據算法原理,搭建一個通過GUI交互的DTMF算法編解碼系統。
以輸入數字5632048971為例,輸入這幾個數字,再按“撥打”按鈕,解碼框中出現了解碼后的電話號碼,如圖5所示,解碼結果正確。

圖5 實驗結果
點擊“查看”按鈕,可以顯示每個數字對應DTMF信號的頻譜,數字0、2、3、5、6的頻譜如圖6所示,數字1、4、7、8、9的頻譜如圖7所示。

圖6 數字0、2、3、5、6的頻譜

圖7 數字1、4、7、8、9的頻譜
雙音多頻撥號系統是一種典型的信號處理系統,可實現雙音多頻信號的生成、檢測以及識別。通過MATLAB信號處理工具箱中Goertzel函數模擬雙音多頻撥號系統,對雙音多頻信號進行編碼和解碼,并且編寫了GUI界面,可方便直觀地進行操作。