雙音多頻DTMF(Dual Tone Multi-Frequency)信令,逐漸在全世界范圍內使用在按鍵式電話機上,因其提供更高的撥號速率,迅速取代了傳統轉盤式電話機使用的撥號脈沖信令。近年來DTMF也應用在交互式控制中,諸如語言菜單、語言郵件、電話銀行和ATM終端等。將DTMF信令的產生與檢測集成到任一含有數字信號處理器(塑封電感DSP)的系統中,是一項較有價值的工程應用。
DTMF編解碼器在編碼時將擊鍵或數字信息轉換成雙音信號并發送,解碼時在收到的DTMF信號中檢測擊鍵或數字信息的存在性。電話機鍵盤上每一個鍵通過由圖1所示的行頻與列頻唯一確定。DTMF的編解碼方案無需過多的計算量,可以很容易的在DSP系統里與其他任務并發執行。
圖 1
由圖1可知,一個DTMF信號由兩個頻率的音頻信號疊加構成。這兩個音頻信號的頻率來自兩組預分配的頻率組:行頻組或列頻組。每一對這樣的音頻信號唯一表示一個數字或符號。為了產生DTMF信號差模電感,DSP用軟件產生兩個正弦波疊加在一起后發送,解碼時DSP則采用改進的Goertzel算法,從頻域搜索兩個正弦波的存在。本文即討論DTMF編解碼在TI公司定點DSP芯片TMS320C54x(以下簡稱為C54x)系列上的實現。
1、 DTMF信號的產生
DTMF編碼器基于兩個二階數字正弦波振蕩器,一個用于產生行頻,一個用于產生列頻。向DSP裝入相應的系數和初始條件,就可以只用兩個振蕩器產生所需的八個音頻信號。典型的DTMF信號頻率范圍是700~1700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。
圖 2
由圖2數字振蕩器對的框圖,可以得到該二階系統函數的差分方程為:
y(n) = -a1y(n-1) - a2y(n-2) (1)
其中a1=-2cosω0,a2=1,ω0=2πf0 /fs,fs為采樣頻率,f0為輸出正弦波的頻率,A為輸出正弦波的幅度。該式初值為y(-1)=0,y(-2)=-Asinω0。
CCITT對DTMF信號規定的指標是,傳送/接收率為每秒10個數字,即每個數字100ms。代表數字的音頻信號必須持續至少45ms,但不超過55ms。100ms內其他時間為靜音,以便區別連續的兩個按鍵信號。
圖 3
編程的流程如圖3所示,由CCITT的規定,數字之間必須有適當長度的靜音,因此編碼器有兩個任務,其一是音頻信號任務,產生雙音樣本,其二是靜音共模電感器任務,產生靜音樣本。每個任務結束后,啟動下一個任務前(音頻信號任務或靜音任務),都必須復位決定其持續時間的定時器變量。在靜音任務結束后,DSP從數字緩存中調出下一個數字,判決該數字信號所對應的行頻和列頻信號,并根據不同頻率確定其初始化參數a1=-2cosω0與y(-2)=-Asinω0。
該流程圖可采用C語言實現,雙音信號的產生則由54x匯編代碼實現。整個程序作為C54x的多通道緩沖串口(McBsp)的發射串口中斷服務子程序,由外部送入的8000Hz串口時鐘觸發中斷,可實時處理并通過D/A轉換器輸出DTMF信令信號。
2 DTMF信號的檢測
在輸入信號中檢測DTMF信號,并將其轉換為實際的數字,這一解碼過程本質是連續的過程,需要在輸入的數據信號流中連續地搜索DTMF信號頻譜的存在。整個檢測過程分兩步:首先采用Goertzel算法在輸入信號中提取頻譜信息;接著作檢測結果的有效性檢查。 大功率電感廠家 |大電流電感工廠