DTMF信號(hào)的產(chǎn)生及檢測(cè) 通信0802 程志超-崔航_第1頁(yè)
DTMF信號(hào)的產(chǎn)生及檢測(cè) 通信0802 程志超-崔航_第2頁(yè)
DTMF信號(hào)的產(chǎn)生及檢測(cè) 通信0802 程志超-崔航_第3頁(yè)
DTMF信號(hào)的產(chǎn)生及檢測(cè) 通信0802 程志超-崔航_第4頁(yè)
DTMF信號(hào)的產(chǎn)生及檢測(cè) 通信0802 程志超-崔航_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DSP課程設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告DTMF信號(hào)的產(chǎn)生及檢測(cè)學(xué)院:電子信息工程學(xué)院設(shè)計(jì)人員:程志超 學(xué)號(hào):08211028崔航 08211029目 錄一、設(shè)計(jì)任務(wù)書(shū)2二、設(shè)計(jì)內(nèi)容3三、設(shè)計(jì)方案、算法原理說(shuō)明3四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析5 五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)13 六、參考文獻(xiàn)21一、 設(shè)計(jì)任務(wù)書(shū)簡(jiǎn)介雙音多頻 (DTMF)技術(shù),是用兩個(gè)特定的單音頻組合信號(hào)來(lái)代表數(shù)字信號(hào)以實(shí)現(xiàn)其功能,已被廣泛用于電話的音頻撥號(hào),實(shí)現(xiàn)電話號(hào)碼快速可靠的傳輸。此外,DTMF撥號(hào)和解碼也廣泛應(yīng)用在通信系統(tǒng)其他方面,如語(yǔ)言郵件、電話銀行和ATM終端等。同時(shí),隨著數(shù)字信號(hào)處理芯片 (DSP)硬件結(jié)構(gòu)和性能的不斷完善,DS

2、P嵌入式系統(tǒng)已在工業(yè)控制、影像視頻、寬帶、無(wú)線通信、圖像采集等方面得到了廣泛而有效地應(yīng)用,已成為電子產(chǎn)品更新?lián)Q代的決定因素。因此,開(kāi)發(fā)基于DSP的DTMF實(shí)驗(yàn)系統(tǒng)有其重大的現(xiàn)實(shí)意義,而DTMF的編解碼方案無(wú)需過(guò)多的計(jì)算量 ,可以很容易在DSP系統(tǒng)中與其他任務(wù)并發(fā)執(zhí)行。雙音多頻DTMF(Dual Tone Multi Frequency)是在按鍵式電話機(jī)上得到廣泛應(yīng)用的音頻撥號(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、

3、C、D。如下圖1所示。圖1DTMF信令的編碼要用DSP產(chǎn)生DTMF信號(hào),只要產(chǎn)生兩個(gè)正弦波疊加在一起即可;DTMF檢測(cè)時(shí)采用改進(jìn)的Goertzel算法,從頻域搜索兩個(gè)正弦波的存在。l 設(shè)計(jì)要求及目標(biāo) 基本部分:(1)使用C語(yǔ)言編寫(xiě)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ǔ)言編寫(xiě)DTMF信號(hào)的檢測(cè)程序,檢測(cè)到的DTMF編碼在屏幕上顯示。 發(fā)揮部分:利用DTMF信號(hào)完成數(shù)據(jù)通訊的功能,并試改進(jìn)DTMF信號(hào)的規(guī)定指標(biāo),使每秒內(nèi)傳送的DTMF編碼越多越好。 要求完成的任務(wù)(1)編寫(xiě)C語(yǔ)言程序,并在CCS

4、集成開(kāi)發(fā)環(huán)境下調(diào)試通過(guò)。(2) 實(shí)現(xiàn)設(shè)計(jì)所要求的各項(xiàng)功能。(3)按要求撰寫(xiě)設(shè)計(jì)報(bào)告。二、設(shè)計(jì)內(nèi)容使用C語(yǔ)言編寫(xiě)DTMF信號(hào)的發(fā)生程序,通過(guò)發(fā)送端實(shí)現(xiàn)0-9、*、#、A、B、C、D對(duì)應(yīng)的DTMF信號(hào)的產(chǎn)生,并且符合CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo),再由接收端接收到發(fā)送端所發(fā)送的相應(yīng)信號(hào),實(shí)現(xiàn)雙機(jī)通信。三、設(shè)計(jì)方案、算法原理說(shuō)明 DTMF信號(hào)的產(chǎn)生DTMF發(fā)生器基于兩個(gè)二階數(shù)字正弦振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。DSP只要裝載相應(yīng)的系數(shù)和初始條件,就可以只用兩個(gè)振蕩器產(chǎn)生所需的八種音頻信號(hào)。典型的DTMF信號(hào)頻率范圍是7001700Hz,選取8000Hz作為采樣頻率,即可滿足奈奎斯特

5、定理。在100ms內(nèi)采樣800個(gè)點(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)。方案一:數(shù)字正弦振蕩產(chǎn)生DTMF信號(hào)DTMF信號(hào)的數(shù)學(xué)表達(dá)式可寫(xiě)為:S(t) =Asin()+ Asin() (1)式中,A為低頻信號(hào)振幅;為低頻信號(hào)頻率,選自低頻組(697 Hz,770 Hz,852 Hz,941 Hz)中的任意一個(gè)頻率;A為高頻信號(hào)振幅; 為高頻信號(hào)頻率,選自高頻組(1209 Hz,1366 Hz,1477 Hz,1633 Hz)中的任意一個(gè)頻率,對(duì)該DTMF時(shí)域信號(hào)用8 kHz進(jìn)行采樣便可以得到DTMF的數(shù)字序列

6、。方案二: DTMF數(shù)字振蕩器對(duì)的二階系統(tǒng)函數(shù)的差分方程為:,其中, , , 為采樣頻率, 為輸出正弦波的頻率, 為輸出正弦波的幅度。該式初值為 ,。得到振蕩器系統(tǒng)的差分方程為: 。DTMF信號(hào)的接收在輸入信號(hào)中檢測(cè)DTMF信號(hào),需要在輸入的數(shù)據(jù)信號(hào)流中連續(xù)地搜索DTMF信號(hào)頻譜的存在。整個(gè)檢測(cè)過(guò)程分兩步:首先采用Goertzel算法在輸入信號(hào)中提取頻譜信息;接著作檢測(cè)結(jié)果的有效性檢查。DTMF解碼時(shí)在輸入信號(hào)中搜索出有效的行頻和列頻。計(jì)算數(shù)字信號(hào)的頻譜可以采用DFT及其快速算法FFT,而在實(shí)現(xiàn)DTMF解碼時(shí),采用Goertzel算法要比FFT更快。通過(guò)FFT可以計(jì)算得到信號(hào)所有譜線,了解信號(hào)

7、整個(gè)頻域信息,而對(duì)于DTMF信號(hào)只需關(guān)心其8個(gè)行頻/列頻及其二次諧波信息即可,二次諧波的信息用于將DTMF信號(hào)與聲音信號(hào)區(qū)別開(kāi)。此時(shí)Goertzel算法能更加快速的在輸入信號(hào)中提取頻譜信息。Goertzel算法原理框圖Goertzel算法實(shí)質(zhì)是以一個(gè)二階IIR帶通濾波器為基礎(chǔ),利用該算法可以有效地計(jì)算DTMF信號(hào)的DFT值。以往實(shí)驗(yàn)已經(jīng)表明該算法對(duì)于提取DTMF輸入信號(hào)既有效又快速。該濾波器的直接型實(shí)現(xiàn)可以表述為以下差分方程 :在實(shí)際的DTMF檢測(cè)中,只需DFT的幅度(本算法為平方幅度)信息就足夠了,因此在Goertzel濾波器中,當(dāng)N點(diǎn)(相當(dāng)于DFT數(shù)據(jù)塊的長(zhǎng)度)樣值輸入濾波器后,濾波器輸出

8、偽DFT值,由即可確定頻譜的平方幅度。其中N的選取決定了頻率分辨率以及捕捉N 個(gè)樣值所需要的時(shí)間,對(duì)基于Goertzel算法的DTMF信號(hào)檢測(cè)的有效性來(lái)說(shuō)至關(guān)重要。頻率分辨率被用來(lái)選擇IIR濾波器中所需的DTMF信號(hào)的頻率,這可以通過(guò)計(jì)算下式中的k來(lái)實(shí)現(xiàn):,這樣計(jì)算出的DTMF信號(hào)頻率可能與實(shí)際的DTMF信號(hào)頻率有一定的差別,但可以通過(guò)加大N的選取來(lái)減小這種頻率差異。然而從另外一方面來(lái)考慮,雖然加大了N的選取會(huì)使頻率的差異減小,但這勢(shì)必會(huì)帶來(lái)捕捉N個(gè)樣值所需要的時(shí)間的增加,而這個(gè)時(shí)間的增加勢(shì)必會(huì)對(duì)檢測(cè)的效果造成一定的影響。因此,需要在頻率分辨率和捕捉N個(gè)樣值所需要的時(shí)間這兩個(gè)因素之間做出權(quán)衡。

9、由DTMF信號(hào)頻率所具有的特性不難發(fā)現(xiàn)要選取定的N值使得計(jì)算出的頻率和真實(shí)的DTMF信號(hào)的頻率相一致幾乎不可能,而實(shí)際中也并不需要計(jì)算出來(lái)的頻率值與其真實(shí)頻率相一致,只需偏差保持在1.5% 即可認(rèn)為是DTMF信號(hào)的真實(shí)頻率。在對(duì)DTMF信號(hào)采樣以及確定N,k值之后就可以進(jìn)行檢測(cè)。如下表所示: 1st Harmonics(N = 205) fs = 8 ksps2nd Harmonics(N=201) fs = 8 kspskfrequency(k/N)fs/Hzcoefficientcos(2pi k/N)kfrequency(k/N)fs/Hzcoefficientcos(2pi k/N)1

10、86970.851623513930.45886207700.817933915520.34445228520.781154317110.22470249410.741424718710.101413112090.58157612428-0.329743413360.50442672667-0.500003814770.39505742945-0.676064216330.27972823264-0.83740一旦得到行/列頻率的頻譜平方幅度信息,就可以通過(guò)一系列的判決來(lái)確定音頻及數(shù)字結(jié)果的有效性。首先,檢測(cè)可能DTMF信號(hào)的強(qiáng)度是否足夠大。行頻率分量和列頻率分量的平方幅度和應(yīng)高于某一確定門(mén)限

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

12、每個(gè)任務(wù)被分配一定的持續(xù)時(shí)間。發(fā)送程序代碼: #include /*程序用到的頭文件*/#include #include type.h#include board.h#include codec.h#include mcbsp54.hvoid delay(int period);void generate(int num);HANDLE hHandset;s16 out_buffer256; /*定義緩沖區(qū),其中S16為自定義類型名*/float buffer256;s16 num=0;int count=0;char num_112;float freq162= 941,1336, /0

13、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.1415926;void main() int cnt=2;/*控制亮燈次數(shù)*/ if(brd_init(100) return; /* blink the leds a couple t

14、imes 通過(guò)觀察LED指示燈的閃動(dòng)頻率來(lái)驗(yàn)證程序運(yùn)行*/while ( cnt- )brd_led_toggle(BRD_LED0);/brd_delay_msec(1000); delay(1000);brd_led_toggle(BRD_LED1);/brd_delay_msec(1000); delay(1000);brd_led_toggle(BRD_LED2);/brd_delay_msec(1000);delay(1000); / 獲取設(shè)置DAC的句柄 hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec

15、獲句柄 */ /設(shè)置DAC的工作參數(shù)/工作模式,15+1bit或16bit codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */模擬輸出增益 codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */codec_aout_gain(hHandset, CODEC_AOUT_MINUS_

16、12dB); /* -12dB gain on analog output from DAC */ 轉(zhuǎn)換速率 codec_sample_rate(hHandset,SR_8000); /* 8KHz sampling rate */ gets(num_1); /*彈出輸入框*/ generate(num); void generate(int num)f32 x,y;int k=0;int i;int j;switch(num_10) /*先對(duì)第一個(gè)輸入值進(jìn)行num_10的數(shù)值化轉(zhuǎn)換*/ case 1:num=1;break; case 2:num=2;break; case 3:num=3;

17、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=9;break; case A:num=10;break; case B:num=11;break; case C:num=12;break; case 0:num=0;break; case D:num=13;break; case *:num=14;break; case #:num=15;break; x=freqnum0/8000;y=freqnum1/

18、8000;for(k=0;k=255;k+) bufferk=(0.65*sin(2*pi*y*k)+0.8*sin(2*pi*x*k)*16384;/*定點(diǎn)處理,將數(shù)擴(kuò)大16384=214且規(guī)定為Q15格式*/ out_bufferk=bufferk; /強(qiáng)制類型轉(zhuǎn)換 i=0;j=0;/發(fā)送 while(1)/ Wait for sample from handset while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=bufferi; i+; if(i=256) /采足256個(gè)值點(diǎn),完成第

19、一次發(fā)送 i=0; count+; if(count=30) /控制發(fā)送30次 count=0; j+; if(j=12) return; switch(num_1j) 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=9;break; case A:num=10;break; case B:num=11;

20、break; case C:num=12;break; case 0:num=0;break; case D:num=13;break; case *:num=14;break; case #:num=15;break; x=freqnum0/8000; y=freqnum1/8000; for(k=0;k=255;k+) bufferk=(0.65*sin(2*pi*y*k)+0.8*sin(2*pi*x*k)*16384; out_bufferk=bufferk; void delay(int period) int i, j; for(i=0; iperiod; i+) for(j=0;

21、 j1; j+); DTMF信號(hào)的接收程序: #include #include #include type.h#include board.h#include codec.h#include mcbsp54.hHANDLE hHandset;float buffer256; float pi=3.1415926; s16 test256; s16 dacdata; int k=0;void delay(int period);void detect();void main() int cnt=2; /*控制亮燈次數(shù)*/if(brd_init(100) return;/ blink the l

22、eds a couple timeswhile ( cnt- )brd_led_toggle(BRD_LED0);/brd_delay_msec(1000); delay(1000);brd_led_toggle(BRD_LED1);/brd_delay_msec(1000); delay(1000);brd_led_toggle(BRD_LED2);/brd_delay_msec(1000);delay(1000);/* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec

23、 */* Set codec parameters */ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */ codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */ codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB

24、 gain on analog output from DAC */ codec_sample_rate(hHandset,SR_8000); /* 8KHz sampling rate */ while(1) while (!MCBSP_RRDY(HANDSET_CODEC) ; dacdata = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);testk=dacdata;bufferk=dacdata/16384.0; k+;if(k=256) k=0; detect(); /delay(100); void detect() int i,j,x,y;

25、float w8,a83,amp8; w0=2*cos(2*pi*18/205);w1=2*cos(2*pi*20/205);w2=2*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;i8;i+)ai0=0;ai1=0;for(j=1;j=205;j+)ai2=wi*ai1-ai0+bufferj-1;ai0=ai1;ai1=ai2;/計(jì)算頻譜的幅度平方值ampi=ai1*

26、ai1+ai0*ai0-wi*ai1*ai0;/printf(The amplitude %d is %f.rn,i,ampi);j=0;for(i=0;i3000) /門(mén)限設(shè)為3000 /printf(The amplitude %d is %f.rn,i,ampi);j+;if(j=1) /第一個(gè)達(dá)到門(mén)限要求的的頻率點(diǎn)為行頻附給xx=i; else if(j=2)y=i; /第二個(gè)達(dá)到門(mén)限要求的的頻率點(diǎn)為列頻附給yi=-1;/printf(The available amplitude is %d.rn ,j);if(j=2)if(x=0 & y=4) i=1; else if(x=0 &

27、 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; 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) printf(The DTMF signal is An);else if(x=1 & y=7) printf(The DTMF signal is Bn)

28、; else if(x=2 & y=7) printf(The DTMF signal is Cn); else if(x=3 & y=7) printf(The DTMF signal is Dn); else if(x=3 & y=4) printf(The DTMF signal is *n); else if(x=3 & y=6) printf(The DTMF signal is #n); if(i!=-1) printf(The DTMF signal is %d.rn ,i); /打印輸出所收到的撥號(hào)void delay(int period) int i, j; for(i=0

29、; iperiod; i+) for(j=0; j1; j+); CMD程序(接口文件)-stack 400MEMORY PAGE 0:VECS: origin=0080h,length=0080h /*中斷向量表*/ PRAM: origin=0100h,length=3700h /*內(nèi)部程序RAM*/ PAGE 1:SCRATCH: origin=0060h,length=0020h /*便箋式數(shù)據(jù)RAM*/ EXRAM: origin=3200h,length=4000h /*外部數(shù)據(jù)RAM*/SECTIONS .cinit PRAM PAGE 0 .text PRAM PAGE 0 .vectors VECS PAGE 0 init_var PRAM PAGE 0 detect PRAM PAGE 0 vrcprg PRAM PAGE 0 matprg PRAM PAGE 0 .stack EXRAM PAGE 1 .trap SCRATCH PAGE 1 .const EXRAM PAGE 1 .data EXRAM PAGE 1 .bss EXRAM PAGE 1 .cio EXRAM PAGE 1 .switch EXRAM PAGE 1五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)軟件調(diào)試安裝完驅(qū)動(dòng)后打開(kāi)setup CCS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論