專題七-DSP應(yīng)用舉例-DTMF的產(chǎn)生和解碼v1.0_第1頁
專題七-DSP應(yīng)用舉例-DTMF的產(chǎn)生和解碼v1.0_第2頁
專題七-DSP應(yīng)用舉例-DTMF的產(chǎn)生和解碼v1.0_第3頁
專題七-DSP應(yīng)用舉例-DTMF的產(chǎn)生和解碼v1.0_第4頁
專題七-DSP應(yīng)用舉例-DTMF的產(chǎn)生和解碼v1.0_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

DTMF在C5400下的實現(xiàn)講演:管慶

主要內(nèi)容DTMF碼的基本原理DTMF碼的產(chǎn)生DTMF碼的檢測

在DSP/BIOS環(huán)境下實現(xiàn)DTMF的產(chǎn)生和解碼

DTMF產(chǎn)生和解碼演示DSP解決方案案例--DTMF雙音多頻DTMF(DualToneMultiFrequency)信令,逐漸在全世界范圍內(nèi)使用在按鍵式電話機上,因其提供更高的撥號速率,迅速取代了傳統(tǒng)轉(zhuǎn)盤式電話機使用的撥號脈沖信令。近年來DTMF也應(yīng)用在交互式控制中,諸如語音菜單、語音郵件、電話銀行和ATM終端等。 DTMF原理DTMF編碼器:基于兩個二階數(shù)字正弦波振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻,DSP用軟件產(chǎn)生兩個正弦波疊加在一起后發(fā)送。

DTMF解碼器:本質(zhì)是連續(xù)的過程,需要在輸入的數(shù)據(jù)信號流中連續(xù)地搜索DTMF信號頻譜的存在。采用Goertzel算法,這是一種在輸入信號中提取頻譜信息的快速有效方法。DTMF信號的產(chǎn)生

DTMF編碼器基于兩個二階數(shù)字正弦波振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻。DTMF信號的產(chǎn)生H(Z)含有位于單位圓上的復(fù)共扼極點。另外,沖擊響應(yīng)函數(shù)為:二階系統(tǒng)函數(shù)的差分方程為其中,DTMF信號的產(chǎn)生CCITT對DTMF信號規(guī)定的指標是,傳送/接收率為每秒10個數(shù)字,即每個數(shù)字100ms。代表數(shù)字的音頻信號必須持續(xù)至少45ms,但不超過55ms。100ms中的其他時間為靜音,以便區(qū)別連續(xù)的兩個按鍵信號。數(shù)字之間必須有適當長度的靜音,因此編碼器有兩個任務(wù),其一是音頻信號任務(wù),產(chǎn)生雙音樣本,其二是靜音任務(wù),產(chǎn)生靜音樣本。DTMF信號的產(chǎn)生啟動下一個任務(wù)前(音頻信號任務(wù)或靜音任務(wù)),都必須復(fù)位定時器變量。因為音頻信號任務(wù)和靜音任務(wù)都通過定時器變量,決定音頻或靜音的持續(xù)時間。在靜音任務(wù)結(jié)束后,從數(shù)字緩存中調(diào)出下一個數(shù)字,判決該數(shù)字信號所對應(yīng)的行頻和列頻信號,并根據(jù)不同頻率確定其初始化參數(shù)整個程序可以置于DSP發(fā)射串口中斷服務(wù)子程序里,由外部送入的8000Hz串口時鐘觸發(fā)中斷,即可實時處理和恒定樣本輸出。DTMF信號的檢測

在輸入信號中檢測DTMF信號,并將其轉(zhuǎn)換為實際的數(shù)字,這一解碼過程本質(zhì)是連續(xù)的過程,需要在輸入的數(shù)據(jù)信號流中連續(xù)地搜索DTMF信號頻譜的存在。整個檢測過程首先要確定檢測算法,這是最重要的一步。采用Goertzel算法,這是一種在輸入信號中提取頻譜信息的快速有效方法。其次作檢測結(jié)果的有效性檢查。收集頻譜信息

DTMF解碼即是在輸入信號中搜索出有效的行頻和列頻。計算數(shù)字信號的頻譜可以采用DFT及其快速算法FFT,而在實現(xiàn)DTMF解碼時,采用Goertzel算法要比FFT更快。通過FFT計算可以得到信號所有譜線,可以了解信號整個頻域信息,而對于DTMF信號只用關(guān)心其8個行頻/列頻及其二次諧波信息即可(二次諧波的信息用于將DTMF信號與聲音信號區(qū)別開)。此時Goertzel算法則具有更優(yōu)的運算效率。(P425)收集頻譜信息Goertzel算法原理框圖收集頻譜信息DFT計算可以等價為另外,在DTMF檢測中,對于輸入的實數(shù)序列并不需要檢測出8個行頻/列頻的相位,只需要計算出其幅度平方即可。有效性檢查確認可能的DTMF信號對是否有足夠的強度。程序計算出的行頻/列頻成分高于一定的門限因為語音信號總會含有明顯的8個行頻/列頻的偶次諧波。如果行頻/列頻成分二次諧波和基波成分之比低于一定門限,即可肯定檢測到了代表一個數(shù)字信息的有效DTMF信號對將檢測到的數(shù)字與前面最后一個數(shù)字比較,只有當數(shù)字之間是一段靜音信號時,才可判決當前的數(shù)字為有效數(shù)字,區(qū)分開兩次按鍵。

DTMF在DSP/BIOS下的實現(xiàn)

已經(jīng)在CCS下完成DTMF碼的產(chǎn)生和解調(diào)。分析實現(xiàn)過程,主要有以下幾個任務(wù):1.

DTMF碼的產(chǎn)生:分雙音與靜音,分別持續(xù)50ms。2.DTMF的解碼運算:每收到一個A/D數(shù)據(jù)的處理并完成DTMF碼的判別。3.A/D及D/A中斷服務(wù)程序:DA完成雙音碼的數(shù)模轉(zhuǎn)換;AD完成數(shù)據(jù)的接收并設(shè)置數(shù)據(jù)到達標志(全局變量)。4.‘AC01芯片的初始化:設(shè)置采樣率等參數(shù),需要使用串口發(fā)送中斷。DSP/BIOS下線程考慮撥號任務(wù):定義周期性模塊(PRD)每5秒運行一次FXN_Dial_Number()函數(shù)。該函數(shù)將需要撥出的號碼緩沖設(shè)置好,初始化全局計數(shù)變量和指針,并開啟串口發(fā)送中斷,開始撥號。撥號緩沖中的數(shù)字為撥出的號碼,0xff表示靜音期,當遇到0xffff時,撥號結(jié)束,關(guān)閉串口發(fā)送中斷。注意:FXN_Dial_Number將反復(fù)運行!撥號任務(wù)相關(guān)函數(shù)transmit():

串口發(fā)送中斷服務(wù)函數(shù),并完成對發(fā)送數(shù)據(jù)的計數(shù)以便確定撥號音與靜音的時間。set_freq_coff(NowTel):當前撥號數(shù)字所需要的頻率系數(shù)。iir_to_dtmf():根據(jù)前面的頻率系數(shù),產(chǎn)生響應(yīng)的正弦波形。接收任務(wù)的考慮將整個de_dtmf()函數(shù)定義為一個TSK對象(_FXN_TSK_de_dtmf)。該任務(wù)線程由McBSP的接收中斷每收到一個新的數(shù)據(jù)就發(fā)出一個旗語(semaphore)(SEM_New_Sample)觸發(fā)。同時在中斷服務(wù)程序內(nèi)對收到數(shù)據(jù)計數(shù),并使用全局變量IsNew_N,決定是否判斷輸出一個收到的號碼。

接收相關(guān)函數(shù)

de_dtmf():對每個收到的數(shù)據(jù)做DFT,并對N點數(shù)據(jù)做能量累加。receive():接收中斷服務(wù)子程序。choose_code():判斷輸出一個號碼。

init_mem():初始化接收運算的一些變量。該函數(shù)應(yīng)該在FXN_Dial_Number中運行。

初始化AC01的考慮初始化AC01通過串口的發(fā)送中斷,將采樣率、通道設(shè)置等參數(shù)發(fā)到AC01。用匯編代碼完成,并且取代DSP/BIOS的串口發(fā)送中斷,直接完成中斷服務(wù)響應(yīng)。初始化完成后需要恢復(fù),即串口發(fā)送中斷仍然由DSP/BIOS管理,雙音數(shù)據(jù)的發(fā)送程序也是掛接在DSP/BIOS硬件中斷中完成。相關(guān)代碼:

/*ThefollowingcodeareusedtosetupAC01*/C54_plug(20,&_start_ac01);/*changeinterruptvector*/

oldmask=C54_disableIMR(0xffff);/*closeallIMR*/start_ac01();/*indtmf.asm,usedtoinitAC01&McBSP0*/C54_enableIMR(oldmask);/*restoreoldIMR*//*----------EndsetupAC01!-----------------------*/

中斷函數(shù)的插入和打開

DSP/BIOS提供函數(shù)HWI_dispatchPlug(vecid,fxn,attrs)用于中斷服務(wù)函數(shù)的插入。該函數(shù)將使用HWI_dispatch功能,不將函數(shù)fxn直接插入中斷向量表。后者可以使用函數(shù)C54_plug(vecid,fxn)。下面是例子:

#include"DTMF5410_BIOScfg.h"#include<hwi.h>……..HWI_dispatchPlug(20,&pllx100,NULL);C54_enableIMR(0x20);/*#20h:bit5->BXINT0,

bit4->BRINT0,enableBXINT0,其他中斷不影響!*/HWI_enable();……..圖1任務(wù)撥號+解碼任務(wù),采樣頻率f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論