DSP_DTMF信號(hào)產(chǎn)生于檢測(cè)_第1頁(yè)
DSP_DTMF信號(hào)產(chǎn)生于檢測(cè)_第2頁(yè)
DSP_DTMF信號(hào)產(chǎn)生于檢測(cè)_第3頁(yè)
DSP_DTMF信號(hào)產(chǎn)生于檢測(cè)_第4頁(yè)
DSP_DTMF信號(hào)產(chǎn)生于檢測(cè)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DSP課程設(shè)計(jì) DTMF信號(hào)的產(chǎn)生與檢測(cè)DSP課程設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告DTMF信號(hào)的產(chǎn)生及檢測(cè)院(系): 電子信息工程學(xué)院自動(dòng)化0704指導(dǎo)教師: 高海林設(shè)計(jì)人員: 賈 瑞 07212100 張 原 07212120日期:2010年1月18日目 錄一、設(shè)計(jì)任務(wù)書3二、設(shè)計(jì)內(nèi)容3三、設(shè)計(jì)方案、算法原理說明3四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析6 五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)21 六、參考文獻(xiàn)22一、 設(shè)計(jì)任務(wù)書要求完成的任務(wù):(1)編寫C語(yǔ)言程序,并在CCS集成開發(fā)環(huán)境下調(diào)試通過。(2)實(shí)現(xiàn)設(shè)計(jì)所要求的各項(xiàng)功能。(3)按要求撰寫設(shè)計(jì)報(bào)告。要求達(dá)到的目的: (1) 熟悉CCS的編程環(huán)境和基本試驗(yàn)調(diào)試流程和方

2、法; (2) 熟悉并掌握使用C語(yǔ)言編寫較為復(fù)雜的程序并用CCS實(shí)現(xiàn); (3) 了解并掌握DTMF信號(hào)的產(chǎn)生和檢測(cè)遠(yuǎn)離核試驗(yàn)流程; (4) 熟練使用軟件CCS5000對(duì)程序的完整調(diào)試過程。二、設(shè)計(jì)內(nèi)容基本部分:(1)使用C語(yǔ)言編寫DTMF信號(hào)的發(fā)生程序,要求循環(huán)產(chǎn)生09、*、#、A、B、C、D對(duì)應(yīng)的DTMF信號(hào),并且符合CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)。(2)使用C語(yǔ)言編寫DTMF信號(hào)的檢測(cè)程序,檢測(cè)到的DTMF編碼在屏幕上顯示。發(fā)揮部分:通過修改程序模擬電話通訊的過程。三、設(shè)計(jì)方案、算法原理說明雙音多頻DTMF(Dual Tone Multi Frequency)是在按鍵式電話機(jī)上得到廣泛應(yīng)

3、用的音頻撥號(hào)信令,一個(gè)DTMF 信號(hào)由兩個(gè)頻率的音頻信號(hào)疊加構(gòu)成。這兩個(gè)音頻信號(hào)的頻率分別來(lái)自兩組預(yù)定義的頻率組:行頻組和列頻組。每組分別包括4 個(gè)頻率,分別抽出一個(gè)頻率進(jìn)行組合就可以組成16 種DTMF 編碼,分別記作09、*、#、A、B、C、D。如右圖所示。要用DSP 產(chǎn)生DTMF 信號(hào),只要產(chǎn)生兩個(gè)正弦波疊加在一起即可;DTMF 檢測(cè)時(shí)采用改進(jìn)的Goertzel 算法,從頻域搜索兩個(gè)正弦波的存在。(一)DTMF信號(hào)的產(chǎn)生DTMF編碼器基于兩個(gè)二階數(shù)字正弦波振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。向DSP裝入相應(yīng)的系數(shù)和初始條件,就可以只用兩個(gè)振蕩器產(chǎn)生所需的八個(gè)音頻信號(hào)。典型的DTM

4、F信號(hào)頻率范圍是7001700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。正弦波是任何波形構(gòu)成的基本單元,產(chǎn)生正弦波的方法一般有:采樣回放法、查表法、泰勒級(jí)的數(shù)展開法、數(shù)字正弦振蕩器法。這里使用的是數(shù)字正弦振蕩器計(jì)算法產(chǎn)生正弦波,DTMF解碼器基于兩個(gè)二階數(shù)字正弦波振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。使用相應(yīng)的系數(shù)和初始條件,就可以只用兩個(gè)數(shù)字正弦振蕩器產(chǎn)生所需的八種音頻信號(hào)。典型的DTMF信號(hào)頻率范圍為700HZ1700HZ,選取8000HZ作為采樣頻率,即可以滿足nyquist條件。數(shù)字振蕩器的二階系統(tǒng)函數(shù)的差分方程為:yn=a1yn-1-a2y(n-2) 其中

5、a1=2cos0,a2=1,0=2f0/fs,fs為采樣率,f0為輸出正弦波的頻率。該式初值為y-1=0, y-2=-Asin0,A為輸出正弦波的幅度。DTMF產(chǎn)生程序中的算法很簡(jiǎn)單,通過初始設(shè)置,然后迭代,便能產(chǎn)生需要的樣點(diǎn)值。此方法計(jì)算時(shí)所需的計(jì)算量小,但如果用來(lái)長(zhǎng)時(shí)間連續(xù)的正弦信號(hào)和余弦信號(hào),則累計(jì)誤差較大。CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)是,傳送/接收率為每秒10個(gè)數(shù)字,即每個(gè)數(shù)字100ms。代表數(shù)字的音頻信號(hào)必須持續(xù)至少45ms,但不超過55ms。100ms內(nèi)其他時(shí)間為靜音,以便區(qū)別連續(xù)的兩個(gè)按鍵信號(hào)。我們使用8000Hz的采樣頻率,即1秒采樣8000個(gè)點(diǎn),則100ms采樣800個(gè)

6、點(diǎn),我們?cè)O(shè)置800個(gè)點(diǎn)的緩存,其中用400個(gè)存產(chǎn)生的DTMF信號(hào)值,即音頻信號(hào)必須持續(xù)50ms,另外400個(gè)存0值,即靜音信號(hào)。 (二)DTMF信號(hào)的檢測(cè)DTMF檢測(cè)是對(duì)進(jìn)入解碼端的信號(hào)進(jìn)行檢測(cè),并把雙音頻信號(hào)轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字信息。它是一個(gè)比DTMF產(chǎn)生更加復(fù)雜過程。由于數(shù)據(jù)流是連續(xù)的,為了保證DTMF檢測(cè)的實(shí)時(shí)性,因此要求檢測(cè)過程必須是實(shí)時(shí)連續(xù)的。在輸入信號(hào)中檢測(cè)DTMF 信號(hào),需要在輸入的數(shù)據(jù)信號(hào)流中連續(xù)地搜索DTMF 信號(hào)頻譜的存在。整個(gè)檢測(cè)過程分兩步:首先采用Goertzel 算法在輸入信號(hào)中提取頻譜信息;接著作檢測(cè)結(jié)果的有效性檢查。DTMF 解碼時(shí)在輸入信號(hào)中搜索出有效的行頻和列頻。

7、計(jì)算數(shù)字信號(hào)的頻譜可以采用DFT 及其快速算法FFT,而在實(shí)現(xiàn)DTMF 解碼時(shí),采用Goertzel 算法要比FFT 更快。通過FFT 可以計(jì)算得到信號(hào)所有譜線,了解信號(hào)整個(gè)頻域信息,而對(duì)于DTMF 信號(hào)只需關(guān)心其8 個(gè)行頻/列頻及其二次諧波信息即可,二次諧波的信息用于將DTMF 信號(hào)與聲音信號(hào)區(qū)別開。此時(shí)Goertzel 算法能更加快速的在輸入信號(hào)中提取頻譜信息。Goertzel 算法實(shí)質(zhì)是一個(gè)兩極點(diǎn)的IIR 濾波器。Goertzel算法簡(jiǎn)介DTMF檢測(cè)器的核心是Goertzel算法。該算法利用二極點(diǎn)的IIR濾波器計(jì)算離散傅立葉變換值,能夠快速高效地提取輸入信號(hào)的頻譜信息。由于IIR濾波器是

8、一個(gè)遞歸結(jié)構(gòu),它利用只有一個(gè)實(shí)系數(shù)的差分方程進(jìn)行操作,并不像DFT或FFT算法那樣需要計(jì)算數(shù)據(jù)塊,而是每輸入一個(gè)樣值就執(zhí)行一次算法。 完成時(shí)域到頻域的變換可以用離散傅立葉變換(DFT)或快速傅立葉變(FFT)FFT計(jì)算出所有點(diǎn)頻率,而DFT可以只計(jì)算感興趣的頻率點(diǎn)如果要計(jì)算的頻率點(diǎn)數(shù)少于log 2N(N為輸入信號(hào)點(diǎn)數(shù)),采用DFT的計(jì)算速度比FFT更快,Matlab模擬的結(jié)果能很好地說明這個(gè)問題。直接計(jì)算DFT,需要很多復(fù)系數(shù),即使只計(jì)算一點(diǎn)的DFT也需要N個(gè)復(fù)系數(shù)采用數(shù)字信號(hào)處理中的Goertzel算法,則可明顯地提高速度。利用二階復(fù)共軛極點(diǎn)可以得到只有一個(gè)實(shí)系數(shù)的差分方程:(1)在實(shí)際的D

9、TMF檢測(cè)中,只需DFT的幅度(本算法為平方幅度)信息就足夠了,因此在Goertzel濾波器中,當(dāng)N點(diǎn)(相當(dāng)于DFT數(shù)據(jù)塊的長(zhǎng)度)樣值輸入濾波器后,濾波器輸出偽DFT值vk(n),由vk(n)即可確定頻譜的平方幅度。(2)其中k的取值可由下表得到:1st Harmonics (N = 125) fs = 8 ksps2nd Harmonics (N=125) fs = 8 kspskfrequency (k/N)fs/Hzcoefficient cos(2pi k/N)kfrequency (k/N)fs/Hzcoefficient cos(2pi k/N)117040.85099 22140

10、80.44838 127680.82353 2415360.35641 138320.79399 2717280.21201 159600.72897 2918560.11286 1912160.57757 382432-0.33282 2113440.49273 422688-0.51444 2314720.40291 462944-0.67533 2616640.26084 513264-0.83753 有效性檢測(cè)一旦得到行/列頻率的頻譜平方幅度信息,就可以通過一系列的判決來(lái)確定音頻及數(shù)字結(jié)果的有效性。首先,檢測(cè)可能DTMF信號(hào)的強(qiáng)度是否足夠大。行頻率分量和列頻率分量的平方幅度和應(yīng)高于某一

11、確定門限THR_SIG。注意與DTMF頻率相符的正弦波的能量集中在頻域內(nèi)一段很窄的范圍當(dāng)中,所以門限取值應(yīng)占動(dòng)態(tài)范圍的大部分。第二,如果DTMF信號(hào)存在,由于構(gòu)成DTMF信號(hào)的行頻都低于列頻,因此從小到大依次判斷各個(gè)頻率點(diǎn)的頻譜幅度,得到的第一個(gè)達(dá)到門限要求的的頻率點(diǎn)即為行頻,第二個(gè)即為列頻,綜合行頻和列頻即可得出檢測(cè)到的是哪個(gè)數(shù)據(jù)。四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析我們?cè)O(shè)計(jì)的程序是將DTMF信號(hào)的產(chǎn)生與檢測(cè)分別建立工程,期望在兩個(gè)DSK板可以實(shí)現(xiàn)通信。(一) DTMF信號(hào)的產(chǎn)生程序流程包含兩個(gè)任務(wù),即音頻任務(wù)和靜默任務(wù)。在一段時(shí)間間隔后兩個(gè)任務(wù)需要進(jìn)行互換。音頻任務(wù)的作用是產(chǎn)生雙音頻采樣值,靜默任

12、務(wù)的作用是產(chǎn)生靜默采樣值。每個(gè)任務(wù)被分配一定的持續(xù)時(shí)間。源程序代碼如下:#include <type.h>#include <board.h>#include <codec.h>#include <mcbsp54.h>#include <math.h>void delay(s16 period);HANDLE hHandset; /Codec句柄變量 s16 buffer400; /輸出緩沖區(qū),用于圖形窗口觀察輸出信號(hào) #definePI3.1415926float fs = 8000;/取樣頻率/DTMF按鍵緩沖區(qū),為字符變量s16

13、 tele_number16='1','2','3','4','5','6','7','8','9','0','A','B','C','D','*','#'float dtmf_freq162= 941,1336, /鍵值0對(duì)應(yīng)的行頻和列頻 697,1209, /鍵值1對(duì)應(yīng)的行頻和列頻 697,1336, /鍵值2對(duì)應(yīng)的行頻和列頻 697,1

14、477, /鍵值3對(duì)應(yīng)的行頻和列頻 770,1209, /鍵值4對(duì)應(yīng)的行頻和列頻 770,1336, /鍵值5對(duì)應(yīng)的行頻和列頻 770,1477, /鍵值6對(duì)應(yīng)的行頻和列頻 852,1209, /鍵值7對(duì)應(yīng)的行頻和列頻 852,1336, /鍵值8對(duì)應(yīng)的行頻和列頻 852,1477, /鍵值9對(duì)應(yīng)的行頻和列頻 697,1633, /鍵值A(chǔ)對(duì)應(yīng)的行頻和列頻 770,1633, /鍵值B對(duì)應(yīng)的行頻和列頻 852,1633, /鍵值C對(duì)應(yīng)的行頻和列頻 941,1633, /鍵值D對(duì)應(yīng)的行頻和列頻 941,1209, /鍵值*對(duì)應(yīng)的行頻和列頻 941,1477 /鍵值#對(duì)應(yīng)的行頻和列頻 ;f32 ro

15、w_freq162=0;/09,*,#各鍵值的行頻系數(shù)cos(2*pi*f0/fs)和初始條件sine(2*pi*f0/fs)f32 column_freq162=0;/09,*,#各鍵值的列頻系數(shù)和初始條件f32 ax1,ay1;/行頻、列頻的系數(shù)f32 x_n,x_n_1,x_n_2;/行頻的二階差分方程x(n)=-ax1*x(n-1)-ax2*x(n-2)樣點(diǎn)f32 y_n,y_n_1,y_n_2;/列頻的二階差分方程y(n)=-ay1*y(n-1)-ax2*y(n-2)樣點(diǎn)f32 z_n;/雙音多頻樣點(diǎn)/*/* DTMF發(fā)送程序 */*/void main() s16 cnt=2; f

16、32 f0; s16 num; s16 i=0,n=0; if (brd_init(100) /初始化DSK板 return; /* 發(fā)光二極管閃爍兩次,表明程序正在正常運(yùn)行 */ while ( cnt- )brd_led_toggle(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000);/* 打開codec,獲取句柄 */ hHandset = codec_open(HANDSET_CODEC); /* 對(duì)D/A轉(zhuǎn)換器進(jìn)行初始化參數(shù)設(shè)置 */ code

17、c_dac_mode(hHandset, CODEC_DAC_15BIT); / D/A工作在15比特模式 codec_aout_gain(hHandset, CODEC_AOUT_MINUS_12dB); / 模擬輸出增益為-6dB codec_sample_rate(hHandset,SR_8000); / D/A轉(zhuǎn)換速率為8KHz SWWSR=0X7249;/* 計(jì)算各鍵值的行頻系數(shù)cos(2*pi*f0/fs)和初始條件sin(2*pi*f0/fs) */for (i=0;i<16;i+)f0=dtmf_freqi0;row_freqi0=cos(2*PI*f0/fs);row_

18、freqi1=sin(2*PI*f0/fs);/* 計(jì)算各鍵值的列頻系數(shù)cos(2*pi*f0/fs)和初始條件sin(2*pi*f0/fs) */for (i=0;i<16;i+)f0=dtmf_freqi1;column_freqi0=cos(2*PI*f0/fs);column_freqi1=sin(2*PI*f0/fs);/*/* 發(fā)送DTMF按鍵緩沖區(qū)中的鍵值 */*/while(1)for (i=0;i<16;i+)num=tele_numberi;/取出當(dāng)前要發(fā)送的DTMF按鍵號(hào)碼/* 將DTMF按鍵號(hào)碼轉(zhuǎn)化為數(shù)組下標(biāo) */switch (num)case '

19、0' : num=0; break;case '1' : num=1; break;case '2' : num=2; break;case '3' : num=3; break;case '4' : num=4; break;case '5' : num=5; break;case '6' : num=6; break;case '7' : num=7; break;case '8' : num=8; break;case '9' : num

20、=9; break;case 'A' : num=10; break;case 'B' : num=11; break;case 'C' : num=12; break;case 'D' : num=13; break;case '*' : num=14; break;case '#' : num=15; break; ax1=row_freqnum0;/行頻的系數(shù)x_n_2=row_freqnum1;/行頻的初始條件,即x(-2)ay1=column_freqnum0;/列頻的系數(shù)y_n_2=co

21、lumn_freqnum1;/列頻的初始條件,即y(-2)x_n_1=0;/即x(n-1)y_n_1=0;/即y(n-1)/* 輸出DTMF信號(hào),持續(xù)時(shí)間定為50ms */n=0;cnt=0; /計(jì)算一個(gè)信號(hào)所需400點(diǎn)的值while(cnt<400) /* 計(jì)算輸出的樣點(diǎn)值z(mì) */x_n=2*ax1*x_n_1 - x_n_2;/行頻值y_n=2*ay1*y_n_1 - y_n_2;/列頻值z(mì)_n=x_n+y_n;/DTMF樣點(diǎn)值/* 更新x(n-1),x(n-2)的值 */x_n_2=x_n_1;x_n_1=x_n;/* 更新y(n-1),y(n-2)的值 */y_n_2=y_n_1

22、;y_n_1=y_n; buffercnt=4096.0*z_n; /16384的0.25倍,防止模擬輸出失真 cnt+; /循環(huán)發(fā)送DTMF信號(hào) while(n<400) /* 等待D/A轉(zhuǎn)換器準(zhǔn)備好發(fā)送 */ while(!MCBSP_XRDY(HANDSET_CODEC); *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=buffern; n+; /* 輸出靜音信號(hào),持續(xù)時(shí)間定為50ms */cnt=400;/發(fā)送的靜音信號(hào)樣點(diǎn)數(shù) while(cnt-) /* 等待D/A轉(zhuǎn)換器準(zhǔn)備好發(fā)送 */ while (!MCBSP_XRDY(HANDSET_

23、CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=0; void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period>>1; j+); 22窗口可以看到動(dòng)態(tài)顯示時(shí)域和頻域波形: 時(shí)域: 頻域:(二) DTMF信號(hào)的檢測(cè)程序DTMF檢測(cè)是對(duì)進(jìn)入解碼端的信號(hào)進(jìn)行檢測(cè),并把雙音頻信號(hào)轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字信息。它是一個(gè)比DTMF產(chǎn)生更加復(fù)雜過程。由于數(shù)據(jù)流是連續(xù)的,為了保證DTMF檢測(cè)的實(shí)時(shí)性,因此要求檢測(cè)過程必須是實(shí)時(shí)連續(xù)的。檢測(cè)源程序?yàn)椋?*/

24、* DTMF 信號(hào)檢測(cè)程序 */*/#include <stdio.h>#include <type.h>#include <board.h>#include <codec.h>#include <mcbsp54.h>#include <math.h>#definePLL150x0e007#definePLL100x9007#define PLL50x4007#define PLL20x1007#define PLL10x0f007#define DIV20x0000#define DIV40xf000HANDLE hHa

25、ndset;float buffer125; /DTMF樣點(diǎn)緩沖區(qū)float pi=3.1415926;s16 data;int k=0;/* Description:* vk(n) = 2*coef*vk(n-1) - vk(n-2) + x(n)* Coefficients are in w8* x(n) is in buffer256* vk(n-2) is ai0 * vk(n-1) is ai1 .* vk(n) is ai2 */ float w8,a83;float amp8;/頻譜的平方幅度int i,j,x,y;int dtmf_flag=0;/DTMF檢測(cè)進(jìn)程,=0檢測(cè)到靜

26、音信號(hào),=1檢測(cè)到1次DTMF信號(hào)int detect_result128=0;int l=0;void delay(int period);void dtmf_detect(void);/*/* 主程序 */*/void set_clock(u16 plldiv);/set system clock modevoid set_wait_states(void);/set wait state registervoid init_io_reg(void);/initialize CPLD I/O control registervoid main() int cnt=2; asm("

27、 SSBX INTM ");/disable all interrupt/*initialize 5402 dsk board*/set_clock(PLL10);/clkout=10*10=100Mhzset_wait_states();init_io_reg();/* 初始化各行頻列頻的系數(shù) */ w0=2*cos(2*pi*11/125);w1=2*cos(2*pi*12/125);w2=2*cos(2*pi*13/125);w3=2*cos(2*pi*15/125);w4=2*cos(2*pi*19/125);w5=2*cos(2*pi*21/125);w6=2*cos(2*

28、pi*23/125);w7=2*cos(2*pi*26/125); /* 初始化 vk(n-1)、vk(n-2) */for(i=0;i<8;i+)ai0=0;ai1=0;if(brd_init(100)/初始化DSK板 return; /* 發(fā)光二極管閃爍兩次,表明程序正在正常運(yùn)行 */while ( cnt- )brd_led_toggle(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED2);delay(1000); /* 打開codec,獲取句柄 */ hHandse

29、t = codec_open(HANDSET_CODEC);/* 對(duì)A/D轉(zhuǎn)換器進(jìn)行初始化參數(shù)設(shè)置 */ codec_adc_mode(hHandset, CODEC_ADC_15BIT);/* ADC in 15-bit mode */ codec_ain_gain(hHandset, CODEC_AIN_0dB);/* 0dB gain on analog input to ADC */ codec_sample_rate(hHandset,SR_8000);/* 8KHz sampling rate */SWWSR=0X7249;while(1)/* 等待A/D轉(zhuǎn)換器輸出數(shù)據(jù)準(zhǔn)備好 */

30、 while (!MCBSP_RRDY(HANDSET_CODEC) ; data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);bufferk=data/4096.0;/增益控制,防止后續(xù)運(yùn)算溢出k+;if(k=125) dtmf_detect(); k=0;/* 初始化 vk(n-1)、vk(n-2) */ for(i=0;i<8;i+)ai0=0;ai1=0; /*/* Goertzel算法程序 */*/void dtmf_detect(void)/* 計(jì)算|x(n)|頻譜的平方幅度ampi,i=07 */for(i=0;i<8;i+)

31、/* 計(jì)算vk(n)-ai2,i=07 */for (k=0;k<125;k+)/* 計(jì)算vk(n)、vk(n-1)、vk(n-2)*/ai2=wi*ai1-ai0+bufferk;ai0=ai1;ai1=ai2;/* 計(jì)算|x(n)|頻譜的平方幅度 */ampi=ai1*ai1+ai0*ai0-wi*ai1*ai0; / printf("The amplitude %d is %f.rn",i,ampi);j=0;/* 搜索幅度大于門限的行頻和列頻,搜索結(jié)果存放在變量x y中 */for(i=0;i<8;i+) if(ampi>4000)j+;if(j=

32、1)x=i;else if(j=2)y=i;/* 如果在靜音信號(hào)之后檢測(cè)到兩個(gè)幅度達(dá)到門限的頻率,則進(jìn)行按鍵數(shù)字判決,判決結(jié)果存儲(chǔ)在變量i中 */i=-1;if (dtmf_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='4'else if(x=1 && y=5)i='5'els

33、e 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=3 && y=4)i='*'else if(x=3 && y=6)i='#'else if(x=0 &&

34、y=7)i='A'else if(x=1 && y=7)i='B'else if(x=2 && y=7)i='C'else if(x=3 && y=7)i='D'if(i!=-1)detect_resultl=i;l+;if (l=128)for (l=0;l<128;l+)printf("The DTMF signal is %c.rn ",detect_resultl); /顯示判決結(jié)果dtmf_flag+;/已經(jīng)檢測(cè)到一次DTMF信號(hào)else if (

35、j=0)dtmf_flag=0;/檢測(cè)到靜音信號(hào)void delay(int period) int i, j; for(i=0; i<period; i+) for(j=0; j<period>>1; j+); void set_clock(u16 plldiv)if (CLKMD&0x0001)/if clock generator is PLL modeif (plldiv=DIV2)|(plldiv=DIV4)/PLL mode to DIV modeCLKMD=plldiv;else/PLL mode to PLL modeCLKMD=DIV2;/tu

36、rn to DIV modewhile (CLKMD&0x0001);/check CLKMD PLL status bitCLKMD=plldiv|0x07f8;while (!(CLKMD&0x0001);/check CLKMD PLL status bitelse/else clock generator is DIV modeif (plldiv=DIV2)|(plldiv=DIV4)/DIV mode to DIV modeCLKMD=PLL1|0x07f8;/turn to PLL modewhile(!(CLKMD&0x0001);/check CLKM

37、D PLL status bitCLKMD=plldiv;elseCLKMD=plldiv|0x07f8;/DIV mode to PLL modewhile (!(CLKMD&0x0001);/check CLKMD PLL status bitvoid set_wait_states(void)SWWSR=0x7249;void init_io_reg(void)port0=0x10;port4=0x03;port2=0x00;port3=0x30;port5=0x00;port6=0x00;(三)調(diào)試結(jié)果下圖為輸入和輸出時(shí)的時(shí)域、頻域波形對(duì)比。發(fā)送端: 時(shí)域: 頻域:檢測(cè)端: 時(shí)域: 頻域:實(shí)現(xiàn)功能:1.基于CCS5000Simulator環(huán)境下的DTMF產(chǎn)生及檢測(cè); 2.輸入用信號(hào)源合成的DTMF信號(hào),能夠正確檢測(cè); 3.雙機(jī)情況下符合CCITT標(biāo)準(zhǔn)連續(xù)產(chǎn)生特定的DTMF信號(hào),接收端連續(xù)檢測(cè)出相應(yīng)的DTMF信號(hào)。五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)做這個(gè)課題之前,DTMF對(duì)我們來(lái)說是個(gè)完全陌生的概念,同時(shí),由于DSP實(shí)驗(yàn)的課程時(shí)間短暫,并沒有掌握設(shè)計(jì)及應(yīng)用DSP的方法。在真正著手設(shè)計(jì)這個(gè)課題之前,我們花費(fèi)了大量的時(shí)間通過課本和上網(wǎng)查資料自學(xué)DSP的理論知識(shí)以及了解DTMF這一概念。由于時(shí)間有限,我們并沒有完全掌握課本上的知識(shí),知識(shí)著重對(duì)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論