基于DSP的數(shù)字濾波器的設(shè)計(jì)與仿真及利用DSP實(shí)現(xiàn)自適應(yīng)濾波_第1頁(yè)
基于DSP的數(shù)字濾波器的設(shè)計(jì)與仿真及利用DSP實(shí)現(xiàn)自適應(yīng)濾波_第2頁(yè)
基于DSP的數(shù)字濾波器的設(shè)計(jì)與仿真及利用DSP實(shí)現(xiàn)自適應(yīng)濾波_第3頁(yè)
基于DSP的數(shù)字濾波器的設(shè)計(jì)與仿真及利用DSP實(shí)現(xiàn)自適應(yīng)濾波_第4頁(yè)
基于DSP的數(shù)字濾波器的設(shè)計(jì)與仿真及利用DSP實(shí)現(xiàn)自適應(yīng)濾波_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DSP課程設(shè)計(jì) 利用DSP實(shí)現(xiàn)自適應(yīng)濾波 自動(dòng)化0806 林星河 王曉晶 2.1系統(tǒng)功能介紹一個(gè)實(shí)際的應(yīng)用系統(tǒng)中,總存在各種干擾。數(shù)字濾波器在語(yǔ)音信號(hào)處理、信號(hào)頻譜估計(jì)、信號(hào)去噪、無(wú)線(xiàn)通信中的數(shù)字變頻以及圖像信號(hào)等各種信號(hào)處理中都有廣泛的應(yīng)用,數(shù)字濾波器也是使用最為廣泛的信號(hào)處理算法之一。在本設(shè)計(jì)中,使用MATLAB模擬產(chǎn)生合成信號(hào),然后利用CCS進(jìn)行濾波。設(shè)定模擬信號(hào)的采樣頻率為48000Hz,。設(shè)計(jì)一個(gè)FIR低通濾波器,其參數(shù)為:濾波器名稱(chēng): FIR低通濾波器采樣頻率: Fs=48000Hz通帶截止頻率: 15000Hz阻帶截止頻率: 16000Hz通帶最大衰減: 0.1dB阻帶最少衰減:

2、 80dB濾波器系數(shù): 由MATLAB根據(jù)前述參數(shù)求得。2.2 總體設(shè)計(jì)方案流程圖 圖1 總體設(shè)計(jì)方案 主要內(nèi)容和步驟3.1 濾波器原理對(duì)于一個(gè)FIR濾波器系統(tǒng),它的沖擊響應(yīng)總是又限長(zhǎng)的,其系統(tǒng)函數(shù)可記為: 其中是FIR的濾波器的階數(shù),為延時(shí)結(jié),為端口信號(hào)函數(shù)。最基本的FIR濾波器可用下式表示: 其中輸入采樣序列,是濾波器系數(shù),是濾波器的階數(shù)表示濾波器的輸出序列,也可以用卷積來(lái)表示輸出序列與、的關(guān)系,如下: 3.2 操作步驟(1)打開(kāi)FDATOOL,根據(jù)濾波要求設(shè)置濾波器類(lèi)型、通帶截止頻率、指定階數(shù)、采樣頻率等。指定完設(shè)計(jì)參數(shù)后單擊按鈕Design Filter,生成濾波器系數(shù)。(2)把生成的

3、濾波器系數(shù)傳到目標(biāo)DSP。選擇菜單Targets->Export to Code Composer Studio(tm)IDE,打開(kāi)Export to C Header File對(duì)話(huà)框,選擇C header file,指定變量名(濾波器階數(shù)和系數(shù)向量),輸出數(shù)據(jù)類(lèi)型可選浮點(diǎn)型或32 b,16 b整型等,根據(jù)自己安裝選擇目標(biāo)板板號(hào)和處理器號(hào),單擊OK,保存該頭文件,需指定文件名(filtercoeffh)和路徑(保存在c:timyprojectsfir工程中)。(3)修改CCS匯編程序,刪掉數(shù)據(jù)前的所有文字,在開(kāi)頭加上.data,第二行加coeff .word,在每行的前面加上.word,

4、比且把每行的最后的逗號(hào)去掉。(4)編譯匯編程序,如果有錯(cuò)誤,按錯(cuò)誤進(jìn)行修改;沒(méi)錯(cuò)誤,則往下執(zhí)行。(5)加載初始化DATA數(shù)據(jù)。運(yùn)行程序,查看輸入輸出波形,修改相應(yīng)參數(shù)進(jìn)行調(diào)試第4章 詳細(xì)設(shè)計(jì)在本實(shí)驗(yàn)中使用MATLAB模擬產(chǎn)生信號(hào),觀察濾波前的時(shí)域波形和頻域波形。MATLAB仿真后,使用得到的濾波器參數(shù),進(jìn)行DSP編程,在DSP中實(shí)現(xiàn)帶通濾波,并使用CCS的頻譜分析功能,查看DSP的濾波效果。MATLAB程序流程圖如圖4.1所示圖4.1 MATLAB程序流程圖CCS匯編程序流程圖如圖4.2所示圖4.2 CCS匯編程序流程圖第5章 實(shí)驗(yàn)過(guò)程5.1 匯編語(yǔ)言實(shí)驗(yàn)步驟與內(nèi)容Error! No book

5、mark name given.MATLAB輔助DSP 實(shí)現(xiàn)FIR ,其總體過(guò)程為在DSP 中編寫(xiě)處理程序,在MATLAB中利用濾波器設(shè)計(jì)、分析工具( FDATOOL) ,根據(jù)指定的濾波器性能快速設(shè)計(jì)一個(gè)FIR ,然后把濾波器系數(shù)以頭文件形式導(dǎo)入CCS 中,頭文件中MATLAB 輔助DSP 實(shí)現(xiàn)FIR 數(shù)字濾波器含濾波器階數(shù)和系數(shù)數(shù)組,在MATLAB中調(diào)試、運(yùn)行DSP 程序并顯示、分析處理后的數(shù)據(jù)。使用該方法,便于采用匯編語(yǔ)言來(lái)實(shí)現(xiàn)程序。頭文件名不變,當(dāng)MATLAB中設(shè)計(jì)的濾波器系數(shù)改變時(shí),相應(yīng)頭文件中系數(shù)也改變,方便了程序調(diào)試、仿真。(1)在MATLAB中先編寫(xiě)程序,查看待濾波和已濾波的信號(hào)

6、的時(shí)域和頻域波形,如圖5.1和圖5.2所示。 圖5.1 待濾波信號(hào)的時(shí)域圖 圖5.2 待濾波信號(hào)的頻域圖利用FDA TOOL 設(shè)計(jì)FIR 濾波器的參數(shù),操作步驟如圖5.3所示。圖5.3 FIR濾波器的參數(shù)打開(kāi)Export,把Numerator改為B,如圖5.4所示。圖5.4 Export設(shè)置已濾波的信號(hào)的時(shí)域和頻域波形,如圖5.5和圖5.6所示。圖5.5 已濾波信號(hào)時(shí)域波形圖 圖5.6 已濾波信號(hào)頻域波形圖MATLAB濾波器設(shè)計(jì)工具在完成FIR設(shè)計(jì)后,如圖5.7所示,在Export as中選擇16bit符號(hào)整數(shù)輸出,然后單擊OK按鈕。生成fir.h C語(yǔ)言頭文件。將系數(shù)稍作修改,調(diào)整后拷貝到程

7、序的系數(shù)初始化空間即可。圖5.7 MATLAB輸出數(shù)值轉(zhuǎn)換圖(2)在CCS中編寫(xiě)匯編語(yǔ)言程序,進(jìn)行調(diào)試,實(shí)現(xiàn)帶通濾波的功能。在CCS IDE 中建立LHM.pjt工程,用匯編語(yǔ)言編寫(xiě)處理主程序fir.asm。另外根據(jù)板上的存儲(chǔ)器配置方式,編寫(xiě)存儲(chǔ)器配置文件fir.cmd文件,將MATLAB生成的LHM.h和input1.dat文件拷貝到LHM.pjt工程文件夾下,進(jìn)行編譯、鏈接,生成可執(zhí)行文件LHM.out。 (3)加載初始化data數(shù)據(jù),圖5.8所示。圖5.8 data初始化圖運(yùn)行程序,查看輸入輸出波形,修改相應(yīng)參數(shù)進(jìn)行調(diào)試。5.2 實(shí)驗(yàn)過(guò)程中出現(xiàn)的錯(cuò)誤及解決的辦法(1)在MATLAB程序設(shè)

8、計(jì)中,采樣頻率設(shè)置的過(guò)小,截止頻率大于采樣頻率的一半,運(yùn)行的時(shí)候圖形出現(xiàn)錯(cuò)誤。(2)FIR.m中的采樣頻率要和開(kāi)始設(shè)置時(shí)的采樣頻率一致,否則結(jié)果會(huì)出現(xiàn)偏差。(3)在CCS中未定義標(biāo)號(hào),程序運(yùn)行錯(cuò)誤。(4)在.h文件中未把coeff頂格寫(xiě),編譯時(shí)出現(xiàn)錯(cuò)誤。(5)未將fir.h和input.dat文件考入工程文件中。(6)間接尋址過(guò)程中,程序中丟失。 (7) 在View的Graph中單擊Time/frequency出現(xiàn)graph property dialog框,未修改抽樣點(diǎn)數(shù)。顯示的圖形出現(xiàn)差異5.3 CCS程序運(yùn)行后的各種輸出結(jié)果在View的Graph中單擊Time/frequency出現(xiàn)gr

9、aph property dialog框。將顯示類(lèi)型,圖形名稱(chēng),起始地址,抽樣點(diǎn)數(shù),數(shù)據(jù)類(lèi)型等分別進(jìn)行設(shè)置,輸出各種波形。輸出濾波前的信號(hào)時(shí)域波形。首先,設(shè)置如圖5.9所示,輸出濾波前的信號(hào)時(shí)域波形。圖5.9 Graph property dialog設(shè)置框圖單擊OK后生成如下圖5.10波形。圖5.10濾波前信號(hào)波形圖圖5.10為濾波前的信號(hào),波形很雜亂,從時(shí)域上很難看出信號(hào)的周期性。修改相應(yīng)設(shè)置,輸出如圖5.11所示濾波前信號(hào)頻譜。圖5.11濾波前信號(hào)頻譜波形圖經(jīng)過(guò)濾波后,時(shí)域波形頻譜波形如圖5.12和5.13所示。圖5.12 濾波后信號(hào)時(shí)域波形圖圖5.13 濾波后信號(hào)頻譜圖由上述的所有截圖

10、可知,輸入?yún)?shù)中,通帶截止頻率和阻帶截止頻率是比較重要的兩個(gè)參數(shù),不宜過(guò)小,過(guò)小濾掉的高頻成分太多,很難還原出遠(yuǎn)波形的形狀,也不宜過(guò)大,過(guò)大濾波效果欠佳。在本課程設(shè)計(jì)中,通帶截止頻率選用4000Hz,阻帶截止頻率選用4500Hz,因此,顯示圖形時(shí)的,時(shí)域顯示的抽樣點(diǎn)數(shù)為1024,頻域顯示的帶寬為0.5Hz。對(duì)比濾波前后信號(hào)的時(shí)域圖5.10和5.12、頻譜波形圖5.11和5.13可以知道,濾波前的時(shí)域信號(hào)的波形圖的波形很雜亂,很難看出信號(hào)的周期性,濾波后周期性也相對(duì)的明顯起來(lái)了;濾波前信號(hào)分布在整個(gè)頻帶上,濾波后阻帶范圍內(nèi)的基本被濾掉,這些都可以從上述截圖看出。附件:源程序清單用線(xiàn)性緩沖區(qū)實(shí)現(xiàn)F

11、IR濾波器程序清單: .title “FIR1.ASM” .mmregs .def start x .usect “x”,8 PA0 .set 0 PA1 .set 1 .data COEF: .word 1*32768/10 .word 2*32768/10 .word -4*32768/10 .word 3*32768/10 .word -4*32768/10 .word 2*32768/10 .word 1*32768/10 .textstart: SSBX FRCT STM #x+7,AR2 STM #6,AR0 LD #x+1,DP PORTR PA1,x+1FIR1: RPTZ A

12、,#6 MACD *AR2-,COEF,A STH A,*AR2 PORTW *AR2+,PA0 BD FIR1 PORTR PA1,*AR2+0 .end 用循環(huán)緩沖區(qū)實(shí)現(xiàn)FIR濾波器程序清單: .title “FIR2.ASM” .mmregs .def start .bss y,1xn .usect “xn”,7b0 .usect “b0”,7PA0 .set 0PA1 .set 1 .datatable: .word 1*32768/10 .word 2*32768/10 .word 3*32768/10 .word 4*32768/10 .word 5*32768/10 .word

13、6*32768/10 .word 7*32768/10 .text start: SSBX FRCT STM #b0,AR1 RPT #6 MVPD table,*AR1+ STM #xn+6,AR2 STM #b0+6,AR3 STM #7,BK STM #-1,AR0 LD #xn,DP PORTR PA1,xnFIR2: RPTZ A,#6 MAC *AR2+0%,*AR3+0%,A STH A,y PORTW y,PA0 BD FIR2 PORTR PA1,*AR2+0% .end 匯編程序清單lhm.h文件內(nèi)容: .datacoeff .word -85, -64, -61, -36

14、, 8, 62, 110, 136, 131 .word 96, 42, -11, -44, -44, -11, 39, 85, 106 .word 88, 37, -29, -83, -101, -73, -7, 70, 124 .word 131, 82, -5, -96, -151, -144, -72, 37, 140 .word 191, 162,61, -76, -191, -231, -174, -35, 132 .word 256, 278, 180, -7, -208, -337, -330, -176, 72 .word 316, 445, 392, 156, -178,

15、-475, -599, -470, -108 .word 361, 745, 857, 594, -6, -748, -1336, -1456, -893 .word 386, 2192, 4154, 5816, 6768, 6768, 5816, 4154, 2192 .word 386, -893, -1456, -1336, -748, -6, 594, 857, 745 .word 361, -108, -470, -599, -475, -178, 156, 392, 445 .word 316, 72, -176, -330, -337, -208, -7, 180, 278 .w

16、ord 256, 132, -35, -174, -231, -191, -76, 61, 162 .word 191, 140, 37, -72, -144, -151, -96, -5, 82 .word 131, 124, 70, -7, -73, -101, -83, -29, 37 .word 88, 106, 85, 39, -11, -44, -44, -11, 42 .word 96, 131, 136, 110, 62, 8, -36, -61, -64 .word -85Fir.asm內(nèi)容:.title"fir.asm".mmregs.global_c_

17、int00ORDER .set154D_LEN.set1024; The Length of Input Dataxn.usect"xn",(ORDER-1)a0.usect"a0",(ORDER-1)input.usect"input",D_LENoutput.usect"output",D_LEN.copy "HM.h" Get coefs from "coef.h".text.asgAR0, FIR_INDEX.asgAR2, FIR_DATA.asgAR3, FIR_

18、COEF.asgAR5, DATA_IN.asgAR6, DATA_OUT_c_int00:SSBX FRCT STM #a0,FIR_COEF; Copy a0(coefs) to FIR_COEF(AR3) RPT #ORDER-1 MVPD #coeff,*FIR_COEF+ STM#1, FIR_INDEX STM#xn, FIR_DATA; Copy xn(data) to FIR_DATA(AR2) RPTZA,#ORDER-1 STLA, *FIR_DATA+STM #(xn+ORDER-1), FIR_DATASTM #(a0+ORDER-1), FIR_COEFSTM#inp

19、ut, DATA_IN; Get data from "input"STM#output, DATA_OUT; Write data to "output"STM#D_LEN-1, BRCRPTBDnext-1STM#ORDER, BKLD*DATA_IN+, AFIR:STLA, *FIR_DATA+%RPTZA, (ORDER-1)MAC*FIR_DATA+0%, *FIR_COEF+0%, A; FIRSSTHA, *DATA_OUT+nextFIR_END:B FIR_END.endFIR.m的程序如下:fs=40000; %/采樣HzN=102

20、4 %數(shù)據(jù)個(gè)數(shù)T=1/fs; %采樣周期n=0:N-1;df=n*(fs/N)%待濾波信號(hào)波形xin=randn(1,1024)figure(1)plot(xin)%待濾波信號(hào)頻譜xinff=abs(fft(xin);figure(2)plot(df,xinff)%濾波后信號(hào)波形y_filter_out=filter(B,1,xin)% Y = FILTER(B,A,X)figure(3)plot(y_filter_out)%濾波后信號(hào)頻譜yff=fft(y_filter_out);figure(4)plot(df,yff)xin=xin/max(xin);%歸一化xto_ccs=round(

21、32767*xin)%取整fid=fopen('input1.dat','w');%打開(kāi)文件fprintf(fid,'1651 1 0 0 0n');%輸出文件頭fprintf(fid,'%dn',xto_ccs);%輸出fclose(fid);DSP課程設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告利用DSP實(shí)現(xiàn)自適應(yīng)濾波目 錄一、設(shè)計(jì)任務(wù)書(shū)2二、設(shè)計(jì)內(nèi)容2三、設(shè)計(jì)方案、算法原理說(shuō)明4四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析5 五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)17 六、參考文獻(xiàn)18一、 設(shè)計(jì)任務(wù)書(shū)自適應(yīng)濾波不僅能夠選擇信號(hào),而且能夠控制信號(hào)的特性。自適應(yīng)濾波器具有跟蹤信號(hào)

22、和噪聲變化的能力,它的系數(shù)能夠被一種自適應(yīng)算法所修改。利用DSP可以實(shí)時(shí)地對(duì)信號(hào)進(jìn)行自適應(yīng)濾波。DSP利用直接存儲(chǔ)器訪(fǎng)問(wèn)方式DMA采集數(shù)據(jù)時(shí)不打擾CPU,因此CPU可以對(duì)信號(hào)進(jìn)行實(shí)時(shí)地濾波。本設(shè)計(jì)要求利用DSP的DMA方式進(jìn)行信號(hào)采集和信號(hào)輸出,同時(shí)對(duì)外部輸入的信號(hào)進(jìn)行數(shù)字濾波。1設(shè)計(jì)要求及目標(biāo)基本部分:(1)對(duì)DMA進(jìn)行初始化;(2)對(duì)A/D、D/A進(jìn)行初始化;(3)編寫(xiě)DMA通道傳輸程序,實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)采集和實(shí)時(shí)地輸出;(4) 設(shè)計(jì)子自適應(yīng)濾波算法,或調(diào)用DSPLIB中的自適應(yīng)函數(shù),實(shí)現(xiàn)對(duì)信號(hào)的自適應(yīng)濾波。發(fā)揮部分:(1)濾波后信號(hào)實(shí)時(shí)輸出的同時(shí),將數(shù)據(jù)存放在數(shù)據(jù)文件中;(2)利用自適應(yīng)濾波

23、實(shí)現(xiàn)語(yǔ)音信號(hào)回波對(duì)消。2設(shè)計(jì)思路 首先利用DSP的DMA方式對(duì)外部信號(hào)進(jìn)行實(shí)時(shí)采集,外部模擬信號(hào)先進(jìn)行A/D轉(zhuǎn)換,利用MCBSP的接收寄存器接收數(shù)據(jù)。編寫(xiě)自適應(yīng)濾波算法程序,或調(diào)用DSPLIB中的lms濾波函數(shù),對(duì)信號(hào)進(jìn)行自適應(yīng)濾波。濾波后信號(hào)存放數(shù)據(jù)區(qū)滿(mǎn)發(fā)出中斷,請(qǐng)求信號(hào)輸出。利用DMA方式將傳輸輸出數(shù)據(jù),經(jīng)D/A轉(zhuǎn)換后輸出。3要求完成的任務(wù)(1) 編寫(xiě)C語(yǔ)言程序,并在CCS集成開(kāi)發(fā)環(huán)境下調(diào)試通過(guò);(2) 利用信號(hào)發(fā)生器產(chǎn)生輸入信號(hào),經(jīng)DSP運(yùn)算后正確地在示波器上顯示;(3) 按要求撰寫(xiě)設(shè)計(jì)報(bào)告。二、 設(shè)計(jì)內(nèi)容按照實(shí)驗(yàn)要求,本實(shí)驗(yàn)與老師上課講過(guò)是FIR濾波器實(shí)驗(yàn)有很多共同點(diǎn)。我們從上課做過(guò)的

24、實(shí)驗(yàn)的FIR_DMA.pjt出發(fā),使其完成自適應(yīng)濾波的功能。1DMA部分:本實(shí)驗(yàn)利用DMA直接傳輸數(shù)據(jù),利用DMA完成數(shù)據(jù)傳輸而不影響CPU,因此數(shù)據(jù)傳輸速度快。C5402有6個(gè)可獨(dú)立編程的DMA通道:DMA0DMA5,允許6個(gè)不同的DMA操作。每個(gè)DMA通道受各自的5個(gè)16位寄存器控制:l 源地址寄存器DMSRC和目的地址寄存器DMDST :指明了數(shù)據(jù)傳輸讀取和寫(xiě)入的位置l 單元計(jì)數(shù)寄存器DMCTR :規(guī)定DMA傳送數(shù)據(jù)的個(gè)數(shù)(DMCTR值減1)l 同步事件和幀計(jì)數(shù)寄存器DMSEFC:規(guī)定DMA傳送數(shù)據(jù)的同步事件類(lèi)型和傳送一塊數(shù)據(jù)所含幀信號(hào)的個(gè)數(shù)。l 傳輸模式控制寄存器DMMCR:規(guī)定了DM

25、A通道的傳輸模式。2.自適應(yīng)算法部分:DSPLIB庫(kù)是一個(gè)為C語(yǔ)言程序員開(kāi)發(fā)TMS320C54x而建立的經(jīng)過(guò)優(yōu)化的DSP函數(shù)庫(kù)。包含50多采用匯編語(yǔ)言編寫(xiě)的常用信號(hào)處理程序,可以由C語(yǔ)言調(diào)用。調(diào)用DSPLIB庫(kù)函數(shù)時(shí),在工程中要添加庫(kù)文件54xdsp.lib,在C源程序中要包含dsplib.h頭文件。我們應(yīng)用通過(guò)DSPLIB中的自適應(yīng)函數(shù)dlms實(shí)現(xiàn)濾波,下面是dlms函數(shù)的相關(guān)描述。short oflag = dlms (DATA *x, DATA *h, DATA *r, DATA *d, DATA *des, DATA step, ushort nh, ushort nx)Argumen

26、ts xnx Pointer to input vector of size nxhnh Pointer to filter coefficient vector of size nhh is stored in reversed order: h(n1), . h(0) where hn is at the lowest memory address. Memory alignment: h is a circular buffer and must start in a k-bit boundary (that is, the k LSBs of the starting address

27、must be zeros) where k =log2(nh)rnx Pointer to output data vector of size nx. r can be equal to xdbuffernh Pointer to location containing the address of the delay bufferMemory alignment: the delay buffer is a circular buffer and muststart in a k-bit boundary (that is, the k LSBs of the starting addr

28、essmust be zeros) where k = log2(nh)desnx Pointer to expected output arraystep Scale factor to control learning curve rate = 2*munh Number of filter coefficients. Filter order = nh1. nh >=3nx Length of input and output data vectorsoflag Overflow flag If oflag = 1 a 32-bit overflow has occurred If

29、 oflag =0 a 32-bit overflow has not occurred其中x指向輸入向量,r指向輸出向量,h為濾波向量,d指向延遲緩沖區(qū),des指向期望輸出向量,step為歸一化因素,nh為濾波系數(shù)個(gè)數(shù),nx為輸出向量長(zhǎng)度。oflag=1表示有溢出;oflag=0表示無(wú)溢出。三、 設(shè)計(jì)方案、算法原理說(shuō)明在許多DSP的應(yīng)用場(chǎng)合,由于無(wú)法預(yù)先知道信號(hào)和噪聲的特性或者它們是隨時(shí)間變化的,僅僅用FIR和IIR兩種具有固定濾波系數(shù)的濾波器無(wú)法實(shí)現(xiàn)最優(yōu)濾波。在這種情況下,必須設(shè)計(jì)自適應(yīng)濾波器,以跟蹤信號(hào)和噪聲的變化。自適應(yīng)濾波器的特性變化是由自適應(yīng)算法通過(guò)調(diào)整濾波器系數(shù)來(lái)實(shí)現(xiàn)的。一般而言

30、,自適應(yīng)濾波器由兩部分組成,一是濾波器結(jié)構(gòu),二是調(diào)整濾波器系數(shù)的自適應(yīng)算法。圖1示出了自適應(yīng)濾波器的一般結(jié)構(gòu)。自適應(yīng)濾波器的結(jié)構(gòu)采用FIR或IIR結(jié)構(gòu)均可,由于IIR濾波器存在穩(wěn)定性問(wèn)題,因此一般采用FIR濾波器作為自適應(yīng)濾波器的結(jié)構(gòu)。由于FIR 濾波器橫向結(jié)構(gòu)的算法具有容易實(shí)現(xiàn)、計(jì)算量少等優(yōu)點(diǎn),在對(duì)線(xiàn)性相位要求不嚴(yán)格、收斂速度不是很快的場(chǎng)合,多采用FIR作為自適應(yīng)濾波器結(jié)構(gòu)。圖二為FIR橫向?yàn)V波器結(jié)構(gòu)。上圖中,x(n)為輸入信號(hào),y(n)為輸出信號(hào),d(n)為參考信號(hào)或期望信號(hào),e(n)則是d(n)和y(n)的誤差信號(hào)。自適應(yīng)濾波器的濾波器系數(shù)受誤差信號(hào)e(n)控制,根據(jù)e(n)的值和自適應(yīng)

31、算法自動(dòng)調(diào)整。自適應(yīng)濾波器除包括一個(gè)按照某種結(jié)構(gòu)設(shè)計(jì)的濾波器外,還有一套自適應(yīng)的算法。自適應(yīng)算法是根據(jù)某種判斷來(lái)設(shè)計(jì)濾波器的。該算法包括最小均方算法LMS、最小高階均方算法LMF、最小平方算法OLS、遞推最小算法RLS 等等。由Widrow 和Hoff 提出來(lái)的最小均方誤差(LMS)算法,因具有計(jì)算量小、易于實(shí)現(xiàn)、不依賴(lài)模型、性能穩(wěn)健等優(yōu)點(diǎn)而被廣泛采用. 本次實(shí)驗(yàn)采用的就是這種最小均方誤差(LMS)算法?;镜腖MS 算法如下:e(n)=d(n)-XT(n)h(n)h(n+1) = h(n)+2u*e(n)*X(n)其中,h(n)和h(n+1)分別是迭代前后的系數(shù)值,n和n+1表示前后兩個(gè)時(shí)刻

32、,k=0N-1,N為濾波器的階數(shù),為步長(zhǎng)因子或收斂因子,e(n)為誤差信號(hào),x(n)是輸入信號(hào)。步長(zhǎng)決定了自適應(yīng)濾波器的收斂性能。衡量自適應(yīng)濾波算法優(yōu)劣的3個(gè)重要指標(biāo)是初始收斂速度、時(shí)變系統(tǒng)跟蹤能力和穩(wěn)態(tài)失調(diào)。自適應(yīng)步長(zhǎng)是表征迭代快慢的物理量,越大,自適應(yīng)時(shí)間越短,自適應(yīng)過(guò)程越快,但引起的失調(diào)也越大,當(dāng)大于1 /max時(shí),系統(tǒng)發(fā)散;越小,系統(tǒng)越穩(wěn)定,失調(diào)越小,但自適應(yīng)過(guò)程也相應(yīng)加長(zhǎng)。欲使其收斂,則自適應(yīng)步長(zhǎng)的取值范圍為:0<<1 /max。四、 程序設(shè)計(jì)、調(diào)試與結(jié)果分析1.程序程序流程圖:主程序dlms.c: /*/* Include Files */*/#include <

33、type.h>#include <board.h>#include <codec.h>#include <firlab.h>#include <string.h>/*/* Function Prototypes */*/void delay(s16 period);extern void DMAC2ISR();/*/* Global Variables */*/HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, d

34、msrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/* Create specific data section for buffer (symbol, section_name) */#pragma DATA_SECTION(inp_buffer,"audio_buffer");int inp_buffer0x200;/* Create specific data section for buffer (symbol, section_name) */#pragma DATA

35、_SECTION(out_buffer,"outt_buffer");int out_buffer0x200;/* Create specific data section for coeffiecients */#pragma DATA_SECTION(coeffs,"coefficients");int coeffs16=0;/* Create specific data section for delay buffer */#pragma DATA_SECTION(delaybuff,"delayb");int delaybuf

36、f16=0; /* declare and initialize two variables for DMAC ISRs */int frame=0; int flag=0;int temp; int currbuff = 0;/* delayptr holds the address of the start of the delay buffer */ int *delayptr1 = &(delaybuff0); interrupt void DMAC2ISR();/*/* MAIN */*/void main() s16 cnt=2;/* These are the items

37、 that BIOS will set when we use it */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_freq(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0;/禁止所有中斷/* - */if(brd_init_bios() return; while(cnt-)brd_led_toggle(BRD_LED0);/切換LED指示燈0的顯示狀態(tài)delay(1000);brd_led_toggle(BRD_LED1);/切換LED

38、指示燈1的顯示狀態(tài)delay(1000);brd_led_toggle(BRD_LED2);/切換LED指示燈2的顯示狀態(tài)delay(1000); /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */* Set codec parameters */ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */ codec_adc_mode(hHandset, CODEC_ADC_15BIT

39、); /* 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 gain on analog output from DAC */ codec_sample_rate(hHandset,SR_16000); /* 16KHz sampling rate */* Clear IFR */ INTR_CLR_FLAG(DMAC2);/*

40、Reset all DMA channels */ dma_reset_all();/* Initialize DMA channel 2 */ dmsefc = (DSYNC_REVT1 <<12);/與McBSP1接收事件同步 dmmcr = (AUTOINIT_ENABLE << 15) | (DINM_ENABLE << 14) | (IMOD_HALFBLOCK <<13) | (CTMOD_DEC <<12) | (INDEXMODE_NOMOD << 8) | (SPACE_DATA << 6)

41、| (INDEXMODE_INC << 2) | (SPACE_DATA);/設(shè)置傳輸控制模式寄存器DMMCR/15bit AUTOINIT_ENABLE=1 使能自動(dòng)初始化/14bit DINM_ENABLE=1 根據(jù)IMOD位產(chǎn)生中斷/13bit IMOD_HALFBLOCK=1 幀和塊結(jié)束時(shí)都產(chǎn)生中斷/12bit CTMOD_DEC=0 減量計(jì)數(shù)模式(多幀模式)/10-8bit INDEXMODE_NOMOD=000 源地址模式No modify /7-6bit SPACE_DATA=01 源地址空間為數(shù)據(jù)空間/4-2bit INDEXMODE_INC=01 目的地址模式,

42、傳輸之后加1/1-0bit SPACE_DATA=01 目的地址空間為數(shù)據(jù)空間 dmctr = 0xFF;/單元記數(shù) src_addr = DRR1_ADDR(HANDSET_CODEC);/設(shè)置源地址 dst_addr = (unsigned int) &inp_buffer;/設(shè)置目的地址 dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);/* Set number of frames for channel 2 */ DMA_FRAMECOUNT(DMA_CH2,

43、 1); /* Set up global autoinit registers for DMA CH2 Input */ dmgsa = src_addr; dmgda = dst_addr; dmgcr = 0xFF; dmgfr = 1; /* Set up global priority and enable control register for Ch2 */ dmpre = (HIGH_PRIORITY << 10) | (INTSEL_01 << 6); dmsrcp = SPACE_DATA; dmdstp = SPACE_DATA; dmidx0 =

44、 0; dmidx1 = 0; dmfri0 = 0; dmfri1 = 0; dma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* Enable channel 2 */ DMA_ENABLE(DMA_CH2); /* prime the serial port to begin input buffer stream */ temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /* Enable D

45、MAC2 interrupt */ INTR_ENABLE(DMAC2); /* Enable Global Interrupts */ INTR_GLOBAL_ENABLE;/* Endless loop waiting for DMAC2 interrupt */ for(;);/*/* delay() */*/void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period; j+); 中斷程序dmac2isr.C:#include <codec.h>#include <fir

46、lab.h>extern void delay(s16 period);externunsigned int channel; /*IN: DMA channel number */externunsigned int dmsefc; /*IN: Value to set sync & fr reg */externunsigned int dmmcr; /*IN: Value to set mode control reg */externunsigned int dmctr; /*IN: Value to set element count reg */externunsigned int src_page; /*IN: Value to set source page reg */externunsigned int src_addr; /*IN: Value to set source addr reg */externunsigned int dst_page; /*IN: Value to set dest page reg */externunsigned int dst_addr; /*IN: Value to set dest

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論