DSP課程設(shè)計報告DTMF_第1頁
DSP課程設(shè)計報告DTMF_第2頁
DSP課程設(shè)計報告DTMF_第3頁
DSP課程設(shè)計報告DTMF_第4頁
DSP課程設(shè)計報告DTMF_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DTMF信號的產(chǎn)生與檢測 DSP課程設(shè)計實驗報告DTMF信號的產(chǎn)生及檢測院 系:電子信息工程學(xué)院 電子系指導(dǎo)老師:錢滿義時 間:2014年7月成績:工程設(shè)計50報告20答辯30總分評語:指導(dǎo)教師簽字: 日期:目 錄一、設(shè)計任務(wù)書- 1 -1. 設(shè)計題目:- 1 -2. 實驗?zāi)康模? 1 -3. 實驗要求:- 1 -二、設(shè)計內(nèi)容- 1 -1. 基本部分:- 1 -2. 發(fā)揮部分:- 1 -三、設(shè)計方案、原理及說明- 1 -1. 關(guān)于DTMF信號:- 1 -2. 設(shè)計思路:- 2 -2.1 DTMF信號的產(chǎn)生:- 3 -2.2 DTMF信號的檢測:- 6 -3. 有效性檢測:- 9 -四、程序設(shè)計

2、、調(diào)試與分析:- 10 -1. 基本部分:- 10 -1.1 DTMF信號的發(fā)送:- 11 -1.2 DTMF信號的接收:- 17 -1.3 cmd文件:- 25 -2.發(fā)揮部分:- 27 -2.1 自發(fā)自收:- 27 -2.2 cmd文件:- 38 -2.3 編碼加倍:- 39 -五、設(shè)計(安裝)與調(diào)試的體會:- 53 -六、參考文獻:- 53 - 52 -一、設(shè)計任務(wù)書1. 設(shè)計題目:DTMF信號的產(chǎn)生及檢測2. 實驗?zāi)康模赫莆誅TMF信號的產(chǎn)生和檢測的DSP設(shè)計可使學(xué)生更加透徹的理解和應(yīng)用奈奎斯特采樣定理,與實際應(yīng)用相結(jié)合,提高學(xué)生系統(tǒng)地思考問題和解決實際問題的能力。通過對DSP信號處理

3、器及D/A和A/D轉(zhuǎn)換器的編程,可以培養(yǎng)學(xué)生C語言編程能力以及使用DSP硬件平臺實現(xiàn)數(shù)字信號處理算法的能力。3. 實驗要求:(1)掌握CCS的安裝、設(shè)置,工程的建立、打開以及編譯運行和調(diào)試方法。(2)編寫C語言程序?qū)崿F(xiàn)設(shè)計要求,并在CCS集成開發(fā)環(huán)境下調(diào)試通過,實現(xiàn)設(shè)計所要求的各項功能。(3)按要求撰寫課程設(shè)計報告。二、設(shè)計內(nèi)容1. 基本部分:(1)使用C語言編寫DSP下DTMF信號的產(chǎn)生程序,要求循環(huán)產(chǎn)生09、A、B、C、D、*、#對應(yīng)的DTMF信號,并且符合CCITT對DTMF信號規(guī)定的指標。(2)使用C語言編寫DSP下DTMF信號的檢測程序,檢測到的DTMF編碼在CCS調(diào)試窗口中顯示,要

4、求既不能漏檢,也不能重復(fù)檢出。(3)DTMF信號的發(fā)送與接收分別使用不同的實驗板完成。2. 發(fā)揮部分:(1)使用一個DSP工程同時實現(xiàn)DTMF信號的發(fā)送和檢測功能。(2)改進DTMF信號的規(guī)定指標,使每秒內(nèi)可傳送的DTMF編碼加倍。(3)發(fā)送的DTMF信號的幅度在一定范圍內(nèi)可調(diào),此時仍能完成DTMF信號的正常檢測。三、設(shè)計方案、原理及說明1. 關(guān)于DTMF信號:雙音多頻DTMF(Dual Tone Multi Frequency)信號是在按鍵式電話機上得到廣泛應(yīng)用的音頻撥號信令,一個DTMF信號由兩個頻率的音頻信號疊加構(gòu)成。這兩個音頻信號的頻率分別來自兩組預(yù)定義的頻率組:行頻組和列頻組。每組分

5、別包括4個頻率,據(jù)CCITT的建議,國際上采用的這些頻率為697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8種。在每組頻率中分別抽出一個頻率進行組合就可以組成16種DTMF編碼,從而代表16種不同的數(shù)字或功能鍵,分別記作09、*、#、A、B、C、D。如下圖所示。圖301 DTMF的頻率及其對應(yīng)的鍵值要用DSP產(chǎn)生DTMF信號,只要產(chǎn)生兩個正弦波疊加在一起即可;DTMF檢測時采用改進的Goertzel算法,從頻域搜索兩個正弦波的存在。2. 設(shè)計思路:DTMF發(fā)生器基于兩個二階數(shù)字正弦振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻。DSP只要裝載

6、相應(yīng)的系數(shù)和初始條件,就可以只用兩個振蕩器產(chǎn)生所需的八種音頻信號。典型的DTMF信號頻率范圍是7001700Hz,選取8000Hz作為采樣頻率,即可滿足奈奎斯特定理。DTMF數(shù)字振蕩器對的二階系統(tǒng)函數(shù)的差分方程為:其中 , , , 為采樣頻率, 為輸出正弦波的頻率, 為輸出正弦波的幅度。該式初值為 , 。下面以770Hz為例,詳細說明方程中系數(shù)的計算方法:f/fs=770/8000,0 =2*pi*f/fs, cos0 =0.8226, sin0=-0.5686。f/HZa1Y(-1)Y(-2)/A6970.853820-0.520477700.822630-0.568578520.78433

7、0-0.620339410.739110-0.6735812090.582060-0.8131413360.498200-0.8670614470.399320-0.9168016330.284240-0.95874在輸入信號中檢測DTMF信號,需要在輸入的數(shù)據(jù)信號流中連續(xù)地搜索DTMF信號頻譜的存在。整個檢測過程分兩步:首先采用Goertzel算法在輸入信號中提取頻譜信息;接著作檢測結(jié)果的有效性檢查。DTMF解碼時在輸入信號中搜索出有效的行頻和列頻。計算數(shù)字信號的頻譜可以采用DFT及其快速算法FFT,而在實現(xiàn)DTMF解碼時,采用Goertzel算法要比FFT更快。通過FFT可以計算得到信號所

8、有譜線,了解信號整個頻域信息,而對于DTMF信號只需關(guān)心其8個行頻/列頻及其二次諧波信息即可,二次諧波的信息用于將DTMF信號與聲音信號區(qū)別開。此時Goertzel算法能更加快速的在輸入信號中提取頻譜信息。Goertzel算法實質(zhì)是一個兩極點的IIR濾波器。2.1 DTMF信號的產(chǎn)生:DTMF發(fā)生器基于兩個二階數(shù)字正弦振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻。DSP只要裝載相應(yīng)的系數(shù)和初始條件,就可以只用兩個振蕩器產(chǎn)生所需的八種音頻信號。典型的DTMF信號頻率范圍是7001700Hz,選取8000Hz作為采樣頻率,即可滿足奈奎斯特定理(Nyquist定理:為了正確判定信號頻率,信號在一個周期

9、內(nèi)至少被采樣兩次)。具體來說DTMF編碼是將撥號盤上的09,AD,*、#,共 16個字符,用音頻范圍 (小于3400 Hz) 的8個頻率表示出來。具體來說,將8個頻率分為高頻群和低頻群2組,分別作為列頻組和行頻組,總共可構(gòu)成4×4共16種不同組合,代表16個符號。具體表示方法如圖所示。頻率1209Hz1336Hz1477Hz1633Hz697Hz123A770Hz456B852Hz789C941Hz*0#D表3-1 DTMF頻率表DTMF雙音頻可以由2個可編程的二階數(shù)字正弦振蕩器產(chǎn)生,如圖所示,圖3-2 產(chǎn)生DTMF的數(shù)字正弦信號振蕩器分別用于產(chǎn)生行音頻和列音頻。由于DTMF 頻率范

10、圍在6971633 Hz之間,根據(jù)Nyquist定理可知,用8kHz速率抽樣對DTMF信號沒有影響。CCITT對DTMF信號規(guī)定的指標是,傳送/接收率為每秒10個數(shù)字,即每個數(shù)字100ms。代表數(shù)字的音頻信號必須持續(xù)至少45ms,但不超過55ms。100ms內(nèi)其他時間為靜音,以便區(qū)別連續(xù)的兩個按鍵信號。我們使用8000Hz的采樣頻率,即1秒采樣8000個點,則100ms采樣800個點,我們設(shè)置800個點的緩存,其中用400個存產(chǎn)生的DTMF信號值,即音頻信號必須持續(xù)50ms,另外400個存0值,即靜音信號。圖3-3 信號發(fā)送流程開始任務(wù)標志=0?靜音任務(wù)雙音任務(wù)持續(xù)時間完畢?持續(xù)時間完畢?持續(xù)

11、時間變量-1產(chǎn)生靜音樣本產(chǎn)生雙音樣本持續(xù)時間變量-1變量復(fù)位任務(wù)標志=1裝入下一數(shù)字初始化新數(shù)字的振蕩器系數(shù)與初始條件變量復(fù)位任務(wù)標志=0返回另外,需要注意的是,由于本實驗需要用到DSP板上的CODEC模塊,因此在編寫的程序中還需要寫入AD/DA轉(zhuǎn)換部分。圖3-02 AD/DA轉(zhuǎn)換流程2.2 DTMF信號的檢測:DTMF信號包含兩組音頻信號,解碼器的任務(wù)是通過數(shù)學(xué)變換把它從時域轉(zhuǎn)換到頻域,然后得出對應(yīng)的數(shù)字信息由于DSP芯片處理的是數(shù)字信號,所以必須把輸入信號數(shù)字化,再用DSP芯片進行處理在信號接收端,需要對DTMF信號進行檢測,即尋找信號的行頻和列頻,最后根據(jù)DTMF鍵盤信息確定相應(yīng)的數(shù)字或

12、符號。DTMF檢測是對進入解碼端的信號進行檢測,并把雙音頻信號轉(zhuǎn)換成對應(yīng)的數(shù)字信息。它是一個比DTMF產(chǎn)生更加復(fù)雜過程。由于數(shù)據(jù)流是連續(xù)的,為了保證DTMF檢測的實時性,因此要求檢測過程必須是實時連續(xù)的。2.2.1 關(guān)于Goertzel算法:DTMF檢測器的核心是Goertzel算法。該算法利用二極點IIR濾波器計算離散傅立葉變換值,能夠快速高效地提取輸入信號的頻譜信息。由于IIR濾波器是一個遞歸結(jié)構(gòu),它利用只有一個實系數(shù)的差分方程進行操作,并不像FFT算法那樣需要計算數(shù)據(jù)塊,而是每輸入一個樣值就執(zhí)行一次算法。完成時域到頻域的變換可以用DFT或FFT。FFT計算出所有點頻率,而DFT可以只計算

13、感興趣的頻率點。如果要計算的頻率點數(shù)少于log 2N(N為輸入信號點數(shù)),采用DFT的計算速度比FFT更快。直接計算DFT,需要很多復(fù)系數(shù),即使只計算一點的DFT也需要N個復(fù)系數(shù)。采用數(shù)字信號處理中的Goertzel算法,則可明顯地提高速度。圖3-03 Goertzel算法原理框圖利用二階復(fù)共軛極點可以得到只有一個實系數(shù)的差分方程:在實際的DTMF檢測中,只需DFT的幅度(本算法為平方幅度)信息就足夠了,因此在Goertzel濾波器中,當N點(相當于DFT數(shù)據(jù)塊的長度)樣值輸入濾波器后,濾波器輸出偽DFT值vk(n),由vk(n)即可確定頻譜的平方幅度。DTMF信號包含兩組音頻信號,解碼器的任

14、務(wù)是通過數(shù)學(xué)變換把它從時域轉(zhuǎn)換到頻域,然后得出對應(yīng)的數(shù)字信息由于DSP芯片處理的是數(shù)字信號,所以必須把輸入信號數(shù)字化,再用DSP芯片進行處理頻率檢測時,檢測出DTMF信號的基波及二次諧波,DTMF信號只在基波上有較高能量,而話音信號則在基波上疊加有較強的二次諧波,檢測二次諧波的作用是用來區(qū)分DTMF信號與語言和音樂信號。用DFT檢測模擬DTMF信號所含有的兩個音頻頻率,是一個用DFT對模擬信號進行頻譜分析的問題。確定三個參數(shù):(1)采樣頻率,(2)DFT的變換點數(shù)N,(3)需要對信號的觀察時間的長度。這三個參數(shù)不能隨意選取,要根據(jù)對信號頻譜分析的要求進行確定。這里對信號頻譜分析也有三個要求:

15、(1)頻率分辨率,(2)譜分析的頻譜范圍,(3)檢測頻率的準確性。2.2.2 頻譜分析的分辨率:觀察要檢測的8個頻率,相鄰間隔最小的是第一和第二個頻率,間隔是73Hz,要求DFT最少能夠分辨相隔73Hz的兩個頻率,即要求。DFT的分辨率和對信號的觀察時間有關(guān), 。考慮到可靠性,留有富裕量,要求按鍵的時間大于45ms。2.2.3 頻譜分析的頻率范圍要檢測的信號頻率范圍是6971633Hz,但考慮到存在語音干擾,除了檢測這8個頻率外,還要檢測它們的二次倍頻的幅度大小,波形正常且干擾小的正弦波的二次倍頻是很小的,如果發(fā)現(xiàn)二次諧波很大,則不能確定這是DTMF信號。這樣頻譜分析的頻率范圍為6973266

16、Hz。按照采樣定理,最高頻率不能超過折疊頻率,即,由此要求最小的采樣頻率應(yīng)為7.24KHz。因為數(shù)字電話總系統(tǒng)已經(jīng)規(guī)定8KHz,因此對頻譜分析范圍的要求是一定滿足的。按照,8KHz,算出對信號最少的采樣點數(shù)為。2.2.4 檢測頻率的準確性這是一個用DFT檢測正弦波頻率是否準確的問題。序列的N點DFT是對序列頻譜函數(shù)在0區(qū)間的N點等間隔采樣,如果是一個周期序列,截取周期序列的整數(shù)倍周期,進行DFT,其采樣點剛好在周期信號的頻率上,DFT的幅度最大處就是信號的準確頻率。分析這些DTMF信號,不可能經(jīng)過采樣得到周期序列,因此存在檢測頻率的準確性問題。DFT的頻率采樣點頻率為(k=0,1,2,-,N-

17、1),相應(yīng)的模擬域采樣點頻率為(k=0,1,2,-,N-1),希望選擇一個合適的N,使用該公式算出的能接近要檢測的頻率,或者用8個頻率中的任一個頻率代入公式中時,得到的k值最接近整數(shù)值,這樣雖然用幅度最大點檢測的頻率有誤差,但可以準確判斷所對應(yīng)的DTMF頻率,即可以準確判斷所對應(yīng)的數(shù)字或符號。經(jīng)過分析研究認為N205是最好的。按照8KHz,N205,算出8個頻率及其二次諧波對應(yīng)k值,和k取整數(shù)時的頻率誤差見下表。8個基頻Hz最近的整數(shù)k值DFT的k值絕對誤差二次諧波Hz對應(yīng)的k值最近的整數(shù)k值絕對誤差69717.861180.139139435.024350.02477019.531200.2

18、69154038.692390.30885221.833220.167170442.813430.18794124.113240.113188247.285470.285120930.981310.019241860.752610.248133634.235340.235267267.134670.134147737.848380.152295474.219740.219163341.846420.154326682.058820.058表3-2 K取值表通過以上分析,確定8KHz,N205。3. 有效性檢測:得到了DTMF信號的基波及二次諧波的頻譜平方幅度信息后,需要通過一系列檢測才能確定信

19、號的有效性:1)DTMF信號的強度是否足夠大,行列頻率分量平方幅度和是否高于規(guī)定的門限值。2)如果DTMF信號存在,比較行列頻率的最大頻率分量差值,因為電話線具有低通特性,列頻比行頻衰減得要厲害,因此要設(shè)置一門限值。 3)分別在行列頻率組比較頻譜分量,最強的譜線至少要比其他音頻信號高一個門限值。 4)二次諧波分量是否小于某個值。 5)判斷DTMF信號是否包含穩(wěn)定的數(shù)字信息,只有數(shù)字信息被連續(xù)檢測到兩次,才認為數(shù)字信息是穩(wěn)定的。 6)最后要檢測數(shù)字信息之后是否有停頓狀態(tài),只有這樣才將當前的數(shù)字作為有效數(shù)字。 在每一個接收中斷到來時,表明采到一個新樣點,迭代計算8個行頻列頻的中間變量v (n)(k

20、為8個行頻列頻分別對應(yīng)的數(shù)字頻率),直到采到N=125個樣點(在8kHz采樣頻率下,約為15ms)。此時再按式計算8個行頻列頻的幅度平方 。接下來將|X(k)|2與門限作比較,并作二次諧波檢測,判決出有效的音頻信號。將音頻信號映射為數(shù)字信號后,再與上一個檢測到的數(shù)字信號比較,最終判決出有效的數(shù)字信號。 與發(fā)生部分原理相似,我們也需要在檢測程序中加入AD/DA轉(zhuǎn)換部分。圖3-6 信號發(fā)送流程四、程序設(shè)計、調(diào)試與分析:1. 基本部分:設(shè)計的總體思路是將DTMF信號的產(chǎn)生與檢測分別建立工程,期望在兩個DSP板可以實現(xiàn)雙機通信。發(fā)送部分程序需要設(shè)置8KHz 的采樣頻率,因而在AIC23.c 文件中必須

21、對寄存器參數(shù)進行設(shè)置。參考采樣頻率選擇表: 表4-1 采樣頻率選擇表對應(yīng)8KHz 的寄存器的參數(shù)設(shè)置應(yīng)為SR3-SR0:0011,也就是在AIC23.c 中設(shè)置如下圖:圖4-1 寄存器參數(shù)設(shè)置1.1 DTMF信號的發(fā)送:/*-頭文件-*/#include <math.h>#include <stdio.h>#include <csl.h>#include <csl_chip.h>#include <csl_i2c.h>#include <csl_pll.h>#include <csl_mcbsp.h>#incl

22、ude <csl_emif.h>#include <csl_emifBhal.h>#include <stdio.h>#include "CODEC.h"#include "volume.h"#undef CODEC_ADDR#define CODEC_ADDR 0x1A / 定義McBSP的句柄MCBSP_Handle hMcbsp;/*-*/ / 主函數(shù) / /*-*/*-定義變量-*/ Int16 buffer800; /float buffer1800;float A=16; /產(chǎn)生信號的幅度int gain

23、= MINGAIN; float x,y; int k=0; int i=0; int num=0;/int count=0;float freq162= 941,1336, /0 697,1209, /1 697,1336, /2 697,1477, /3 770,1209, /4 770,1336, /5 770,1477, /6 852,1209, /7 852,1336, /8 852,1477, /9 697,1633, /A 770,1633, /B 852,1633, /C 941,1633, /D 941,1209, /* 941,1477 /# ;float pi=3.141

24、5926;/*-定義"發(fā)射400個有效點、400個靜音點"的子程序-*/void generate(int num) float x,y; int k=0;while(1)for(k=0;k<800;k+)while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, bufferk);/左聲道輸出while(!MCBSP_xrdy(hMcbsp) ;MCBSP_write16(hMcbsp, bufferk);/右聲道輸出if(num=17) /依次輸出"0-#"等16個音num=0;x=freqnum0/800

25、0; /f/fsam 行頻y=freqnum1/8000; /f/fsam 列頻num+;for(k=0;k<400;k+)bufferk=(sin(2*pi*y*k)+sin(2*pi*x*k)*(A+gain);/把有用信號擴大到16位bufferk+400=0;/靜音信號/*- FUNCTION: MAIN -*/void main()/ CSL初始化 CSL_init(); / 該頻率是為了設(shè)置IIC模塊的需要設(shè)置的,為了使用I2C_setup函數(shù),頻率設(shè)置為240MHz PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);/EMIF初始化 Emif_Confi

26、g(); /打開McBSP port 1 產(chǎn)生 McBSP 句柄hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by use previously defined structureMcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*

27、/*x=freq00/8000;y=freq01/8000;for(k=0;k<400;k+)bufferk=(sin(2*pi*y*k)+sin(2*pi*x*k)*A;bufferk+400=0;*/*-循環(huán)產(chǎn)生16個符號值-*/generate(num);1.1.1 發(fā)送端的時域波形: 圖4-2 發(fā)送端的時域參數(shù)設(shè)置圖4-3 發(fā)送端的時域波形(1)圖4-4 發(fā)送端的時域波形(2)圖4-5 觀察變量圖1.1.2 發(fā)送端的頻域波形:圖4-6 發(fā)送端的頻域參數(shù)設(shè)置圖4-7 發(fā)送端的頻域波形1.2 DTMF信號的接收:/*-頭文件-*/#include <math.h>#inc

28、lude <stdio.h>#include <csl.h>#include <csl_chip.h>#include <csl_i2c.h>#include <csl_pll.h>#include <csl_mcbsp.h>#include <csl_emif.h>#include <csl_emifBhal.h>#include <stdio.h>#include "CODEC.h" #undef CODEC_ADDR#define CODEC_ADDR 0x1A

29、 / 定義McBSP的句柄MCBSP_Handle hMcbsp; float test2256;/右聲道數(shù)據(jù)存儲區(qū)float pi=3.1415926;Int16 test1256;/左聲道數(shù)據(jù)存儲區(qū)Int16 dacdata;int k=0;int i,j;int x;int y;int flag=0;int l=0;int detect_result150=0;/*-定義檢測用的子程序-*/void detect()/Goertzel 算法/int x,y;float w8,a83,amp8;w0=2*cos(2*pi*18/205);w1=2*cos(2*pi*20/205);w2=2

30、*cos(2*pi*22/205);w3=2*cos(2*pi*24/205);w4=2*cos(2*pi*31/205);w5=2*cos(2*pi*34/205);w6=2*cos(2*pi*38/205);w7=2*cos(2*pi*42/205);for(i=0;i<8;i+)ai0=0;ai1=0;for(j=1;j<=205;j+)/計算buffer中的205點 ai2=wi*ai1-ai0+test2j-1;ai0=ai1;ai1=ai2; ampi=ai1*ai1+ai0*ai0-wi*ai1*ai0;/計算頻譜的幅度平方值/printf("The amp

31、 %d is %f.rn",i,ampi);j=0;for(i=0;i<8;i+)if(ampi>0.1) /門限值 j+;if(j=1)x=i; /行頻else if(j=2)y=i; /列頻/*-判斷并打印輸出-*/i=-1; if(flag=0) if(j=2)if(x=0 && y=4) i='1' else if(x=0 && y=5) i='2' else if(x=0 && y=6) i='3' else if(x=1 && y=4) i='

32、;4' else if(x=1 && y=5) i='5' else if(x=1 && y=6) i='6' else if(x=2 && y=4) i='7' else if(x=2 && y=5) i='8' else if(x=2 && y=6) i='9' else if(x=3 && y=5) i='0' else if(x=0 && y=7) i='A'

33、;else if(x=1 && y=7) i='B' else if(x=2 && y=7) i='C' else if(x=3 && y=7) i='D' else if(x=3 && y=4) i='*' else if(x=3 && y=6) i='#' if(i!=-1) detect_resultl=i; l+; if(l=150) for(l=0;l<150;l+) printf("The DTMF sign

34、al is %c.rn ",detect_resultl); l=0; flag+; else if(j=0) flag=0; /*if(j=2)if(x=0&&y=4)printf("The DTMF signal is 1n");/i=1;else if(x=0&&y=5)printf("The DTMF signal is 2n");/i=2;else if(x=0&&y=6)printf("The DTMF signal is 3n");/i=3;else if(x=1

35、&&y=4)printf("The DTMF signal is 4n");/i=4;else if(x=1&&y=5)printf("The DTMF signal is 5n");/i=5;else if(x=1&&y=6)printf("The DTMF signal is 6n");/i=6;else if(x=2&&y=4)printf("The DTMF signal is 7n");/i=7;else if(x=2&&y=

36、5)printf("The DTMF signal is 8n");/i=8;else if(x=2&&y=6)printf("The DTMF signal is 9n");/i=9;else if(x=3&&y=5)printf("The DTMF signal is 0n");/i=0;else if(x=0&&y=7)printf("The DTMF signal is An");/i='A'else if(x=1&&y=7)p

37、rintf("The DTMF signal is Bn");/i='B'else if(x=2&&y=7)printf("The DTMF signal is Cn");/i='C'else if(x=3&&y=7)printf("The DTMF signal is Dn");/i='D'else if(x=3&&y=4)printf("The DTMF signal is *n");/i='*'el

38、se if(x=3&&y=6)printf("The DTMF signal is #n");/i='#'*/*-主函數(shù)-*/void main()/初始化 CSL library CSL_init(); / The main frequency of system is 240MHz/頻率為240MHz 該頻率是為了設(shè)置IIC模塊的需要設(shè)置的,為了使用I2C_setup函數(shù) PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);/EMIF初始化 Emif_Config(); / 打開McBSP port 1 hMcbsp =

39、 MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ 配置 McBSPport 1 Mcbsp_Config(hMcbsp);/I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /*-*/ / Receive the ADC output data of CODEC / Then output the received data to DAC of CODEC /*-*/while(1)while(!MCBSP_rrdy(hMcbsp) ;dacdata=MCBSP_read16(hMcbsp);/左聲道數(shù)據(jù)輸入test1k

40、=dacdata;while(!MCBSP_rrdy(hMcbsp) ;dacdata=MCBSP_read16(hMcbsp);/右聲道數(shù)據(jù)輸入test2k=dacdata/2100.0;k+;if(k=205)k=0;detect();/一共抽取205個點,然后開始檢測1.2.1 接收端時域波形圖4-8 接收端的時域參數(shù)設(shè)置圖4-9 接收端的時域波形1.2.2 接收端頻域波形:圖4-10 接收端頻域參數(shù)設(shè)置圖4-11 接收端頻域波形圖4-11 接收端數(shù)據(jù)1.3 cmd文件:/*/* */* LINKER command file for SDRAM memory map */* */*/

41、MEMORY MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040 VECS : origin = 0000100h, length = 0000100h DARAM0 : origin = 0000200h, length = 0007E00h DARAM1 : origin = 0008000h, length = 0008000h CE0 : origin = 0010000h, length = 03f0000h /* 對應(yīng)ZBTRAM空間 */ FLASH : or

42、igin = 0400000h, length = 0100000h/* Flash 空間 */* FLASH : origin = 0410000h, length = 00f0000h*/ EXTEND: origin = 0500000h, length = 0300000h/* 狀態(tài)控制寄存器、UARTA、UARTB、USB、和擴展總線所對應(yīng)的空間 */ SDRAM : origin = 0800000h, length = 03FFFFCh/* SDRAM 空間*/ CE3 : origin = 0c00000h, length = 03f8000h/* SDRAM 空間*/ PDR

43、OM : origin = 0ff8000h, length = 07f00h RESET_VECS : origin = 0ffff00h, length = 000ffh /* reset vector */ SECTIONS .vectors : > VECS /* interrupt vector table */ .cinit : > DARAM1 .text : > DARAM1 .Audio_in_data1: > SDRAM .Audio_in_data2: > SDRAM .Audio_in_data3: > SDRAM .Audio_ou

44、t_data1: > SDRAM .Audio_out_data2: > SDRAM .Audio_out_data3: > SDRAM data_out : > SDRAMdata_out1 : > SDRAM .stack : > DARAM0 .sysstack: > DARAM0 .sysmem : > DARAM0 .cio : > DARAM1 .data : > DARAM1 .bss : > DARAM1 .const : > DARAM1 .csldata: > DARAM0 dmaMem: > DARAM02.發(fā)揮部分:2.1 自發(fā)自收:使用一個DSP工程同時實現(xiàn)DTMF信號的發(fā)送和檢測功能。#include <csl.h>#include <csl_chip.h>#include <csl_i2c.h>#include <csl_pll.h>#include <csl_mcbsp.h>#include <csl_emif.h>#include <csl_emifBhal.h>#include <stdio.h>#include

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論