IIR與FIR濾波器設(shè)計(jì)與比較_第1頁
IIR與FIR濾波器設(shè)計(jì)與比較_第2頁
IIR與FIR濾波器設(shè)計(jì)與比較_第3頁
IIR與FIR濾波器設(shè)計(jì)與比較_第4頁
IIR與FIR濾波器設(shè)計(jì)與比較_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、ds裸程設(shè)計(jì)實(shí)驗(yàn)報(bào)告fir與iir濾波的dsp實(shí)現(xiàn)以及二者的比較指導(dǎo)教師:高海林院(系):電信學(xué)院設(shè)計(jì)人員: 白雪學(xué)號(hào):07211225邵辰雪學(xué)號(hào):07211243成績(jī):工程設(shè)計(jì)50報(bào)告20答辯30總分評(píng)語:指導(dǎo)教師簽字: 日期:一、設(shè)計(jì)任務(wù)書 2二、設(shè)計(jì)內(nèi)容 2三、設(shè)計(jì)方案、算法原理說明 2四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析 11五、設(shè)計(jì)(安裝)與調(diào)試的體會(huì)32六、參考文獻(xiàn) 34一、設(shè)計(jì)任務(wù)書在信號(hào)與信息處理中,提取有用信息就要對(duì)信號(hào)進(jìn)行濾波。利用dspt以實(shí)時(shí)地對(duì)信號(hào)進(jìn)行數(shù)字濾波。本設(shè)計(jì)要求利用dspdmat式進(jìn)行信號(hào)采集和信號(hào)輸 出, 同時(shí)對(duì)外部輸入的信號(hào)進(jìn)行數(shù)字濾波。 在濾波時(shí)同時(shí)用 fir

2、 與 iir 濾波器進(jìn)行 濾波,并比較二者的區(qū)別。二、設(shè)計(jì)內(nèi)容(1) 對(duì)dm進(jìn)行初始化;(2) 對(duì)a/d、d/a進(jìn)行初始化;(3) 編寫dm沖斷服務(wù)程序,實(shí)現(xiàn)信號(hào)的實(shí)時(shí)濾波;(4) 利用ccs9號(hào)分析工具分析信號(hào)的頻譜成分, 確定濾波器的參數(shù),利用matlab計(jì)數(shù)字濾波器,提取濾波器參數(shù);(5) 設(shè)計(jì)數(shù)字濾波算法,或調(diào)用dsplim的濾波函數(shù),實(shí)現(xiàn)對(duì)信號(hào)的fir濾波。(6) 6) 比較加不同窗和階數(shù)時(shí)fir 濾波器的濾波效果;(7) 設(shè)計(jì)數(shù)字濾波算法,或調(diào)用dsplim的濾波函數(shù),實(shí)現(xiàn)對(duì)信號(hào)的iir 濾波。(8) 8) 比較 fir 數(shù)字濾波器與iir 數(shù)字濾波器的效果 三、設(shè)計(jì)方案、算法原理

3、說明(一) 硬件原理 :mcbsp1多通道緩沖用行口,他支持全雙工通信,雙緩沖數(shù)據(jù)寄存器,允許連 續(xù)的數(shù)據(jù)流。支持傳輸?shù)臄?shù)據(jù)字長(zhǎng)可以是8 位、 12 位、 16 位、 20 位、 24 位或32 位。并且內(nèi)置u 律和 a 律壓擴(kuò)硬件。mcbsp在結(jié)構(gòu)上可以分為一個(gè)數(shù)據(jù)通道和一個(gè)控制通道。數(shù)據(jù)通道完成數(shù)據(jù)的 發(fā)送和接受。 控制通道完成的任務(wù)包括內(nèi)部時(shí)鐘的產(chǎn)生、 幀同步信號(hào)產(chǎn)生、 對(duì)這 些信號(hào)的控制及多通道的選擇等??刂仆ǖ肋€負(fù)責(zé)產(chǎn)生接口信號(hào)送往cpu產(chǎn)生同步事件通知dma空制器。在ccs#成開發(fā)環(huán)境中,與mcbspf關(guān)的頭文件有:regs54xx.h、mcbsp54.h。 在這兩個(gè)頭文件中,定義

4、了 mcbspm亍口的寄存器資源及使用方法。tlc320ad50c是ti公司生產(chǎn)的sigma-delt即的16位a/d、d/a轉(zhuǎn)換電路, 他的采樣速率最高可達(dá)22.05kb/s ,內(nèi)涵抗混疊濾波器和重構(gòu)濾波器,屬于模擬接口芯片(aic),它有一個(gè)能與多種昂dsp5片相連的同步串行通信接口,具采 樣速率課通過ds喻程來設(shè)置。在dad前有一個(gè)插值濾波器一保證輸出信號(hào)平滑,在ad之后有一個(gè)抽取濾波器以提高輸入信號(hào)的信噪比。ad50ct內(nèi)還包括一個(gè)定時(shí)器(調(diào)整采樣率和幀同步延時(shí))和控制器(可編程的增益放大器,鎖相 環(huán)pll,通信協(xié)議等)。ad50有28腳的塑料so小裝(帶d所綴)和48腳的塑 料扁平q

5、fpm裝(帶pt后綴),體積較小,適用于便攜設(shè)備。ad50c勺工作溫度 范圍是0-70攝氏度,單一 5v電源供電或5v模擬電源和3.3v數(shù)字電源供電,最 大功耗為120mw在ccs#成開發(fā)環(huán)境中,與 tlc320ad50c codec關(guān)的頭文件是 codec.h。 在這個(gè)頭文件中,定義了與ad50codec關(guān)的枚舉變量和庫(kù)函數(shù)。除了可以調(diào)用 codec.h中提供的庫(kù)函數(shù)之外,還可以利用這些枚舉變量自己重新編寫 codec函 數(shù),使用枚舉變量相互產(chǎn)生所需要的 ad50寄存器的初始化值。codec.h中的庫(kù) 函數(shù)位于函數(shù)庫(kù)dsk5402.lib 和drv5402.lib 中。(二)濾波器的理論設(shè)計(jì)

6、分析1.直接存儲(chǔ)器訪問dma直接存儲(chǔ)器訪問(direct memory access ,簡(jiǎn)稱dma是c54x dspt常重要的 片上外設(shè),dma空制器可以完成數(shù)據(jù)傳輸而不影響 cpu因此數(shù)據(jù)傳輸速度快。在要求信號(hào) 實(shí)時(shí)采集和處理的系統(tǒng)中常采用 dmat式進(jìn)行信號(hào)采集與傳輸。本實(shí)驗(yàn)利用dmas道2與mcbsp11道結(jié)合來讀取ad轉(zhuǎn)換數(shù)據(jù),利用dma 通道3與mcbsp通道結(jié)合來將處理后的數(shù)據(jù)發(fā)送至 da。當(dāng)一組數(shù)據(jù)處理完后,將數(shù)據(jù)存放在存儲(chǔ)區(qū) out_buffer+frame*0x100 中, 選才? out_bufer+frame*0x100 為dma1道3傳送數(shù)據(jù)首地址,并選擇源地址工 作在

7、不ml模式。2.iir濾波原理:iir數(shù)字濾波器差分方程的一般形式為:m用 b,x(n-i)+n-i)式中ai、bi為濾波系數(shù)。當(dāng)bi全為零時(shí),該濾波器為fir數(shù)字濾波器;當(dāng)bi 不全為零時(shí),則為iir濾波器。iir數(shù)字濾波器可用直接型、級(jí)聯(lián)型和并聯(lián)型三種 基本結(jié)構(gòu)實(shí)現(xiàn),具基本組成單元如圖1所示。s,i桐弟讓出的二命結(jié)構(gòu)鳳舒=他他吃對(duì)于二階iir數(shù)字濾波器,其傳遞函數(shù)為:n時(shí)刻iir數(shù)字濾波器輸出和輸入關(guān)系為:用也僅用油,如f血如南其中x(n)是輸入序列,y(n)是輸出序列,ai、bi為濾波 器系數(shù)。因此濾波器的輸出可以用硬件乘法器和加法器實(shí)現(xiàn)。在本實(shí)馬中將iir濾波器的系統(tǒng)函數(shù)h (z)分解

8、為n個(gè)二階iir濾波器級(jí)聯(lián)的 形式進(jìn)行運(yùn)算,這樣可以減小量化誤差。3.iir濾波函數(shù)本實(shí)驗(yàn)信號(hào)濾波算法是直接從 tms320c54xdsplib中調(diào)用iir函數(shù)。iir函數(shù)調(diào)用格式:iircas4(data *x,data *h,data *r,data *d, ushort nbiq, ushort nx);iircas5(data *x,data *h,data *r,data *d, ushort nbiq, ushort nx);iircas51(data *x,data *h,data *r,data *d, ushort nbiq, ushort nx);iir32(data *x

9、,ldata *h,data *r,ldata *d, ushort nbiq, ushort nx);其中,iircas32 函數(shù)用于雙精度iir濾波器;iircas4 函數(shù)用于二階級(jí)聯(lián)直 接ii型濾波器,每項(xiàng)含4個(gè)系數(shù);iircas5函數(shù)用于二階級(jí)聯(lián)直接ii型濾波器, 每項(xiàng)含5個(gè)系數(shù);iircas51 二階級(jí)聯(lián)直接i型濾波器,每項(xiàng)含五個(gè)系數(shù)。調(diào)用matlab產(chǎn)生濾波器系數(shù)時(shí),由于a0始終為1,所以可以產(chǎn)生二階級(jí)聯(lián) 型系數(shù),每項(xiàng)調(diào)用a1,a2,b0,b1,b2五個(gè)系數(shù)。iircas5用于通過各部分的放縮系 數(shù)使各部分增益小于1的情況同時(shí)防止溢出的情況。在iir數(shù)字濾波器的實(shí)現(xiàn) 中,直接ii型

10、相比直接i型節(jié)省了一半的延遲單元,因而成為 iir濾波器實(shí)現(xiàn) 最常用的形式。綜上所述,我們采用irrcas5函數(shù)實(shí)現(xiàn)信號(hào)的濾波。調(diào)用參數(shù)說明:iircas5(data *x, data *h, data *r, data *dbuffer, ushort nbiq,ushort nx)xk為輸入數(shù)組,hk為h(s)系數(shù)數(shù)組,按照 a11 a21 b21 b01 b11 .a1i a2i b2i b0i b1i的順序輸入,其中i為biquad的個(gè)數(shù);rnx為輸出數(shù)組,dbuffer為延遲數(shù)據(jù)區(qū),nbiq為h (s)分成二階濾波器的個(gè)數(shù)nx為輸入長(zhǎng)度.相比較與其他幾種調(diào)用函數(shù),4 .fir濾波原理

11、:假設(shè)fir濾波器的單位脈沖響應(yīng)為 h0、h1、hn-1,xk為待濾波 的輸入信號(hào),則濾波器輸出為yk=hk*xk= 力k一i|進(jìn)行信號(hào)濾波實(shí)際上師計(jì)算序列的線性卷積。 在實(shí)驗(yàn)中濾波器單位脈沖響應(yīng) hk是有限長(zhǎng)n,而xk 一般是外部輸入的長(zhǎng)序列,因而采用重疊像假發(fā)計(jì)算卷 積。重疊相加法是求解段序列與長(zhǎng)序列卷積的一種方法。首先將輸入長(zhǎng)序列分解 為短序列,這些短序列分別于 hk卷積,將每段計(jì)算結(jié)果中后 n-1個(gè)數(shù)據(jù)保留 在一個(gè)緩沖區(qū)中,以便于下一段卷積結(jié)果進(jìn)行重疊相加。5 .fir濾波函數(shù)本實(shí)驗(yàn)信號(hào)濾波算法是直接從tms320c54xdsplib中調(diào)用fir函數(shù) fir函數(shù)調(diào)用格式:oflag =

12、 short fir(data *x, data *h, data *r, data *dbuffer, ushort nh, ushort nx)功能 用fir濾波器對(duì)信號(hào)濾波調(diào)用參數(shù)說明:xnx表示含有nx個(gè)實(shí)數(shù)的實(shí)輸入信號(hào)向量;hnh表示含有nh個(gè)實(shí)數(shù)的系數(shù)向量,按自然順序排列,即濾波器的單位脈沖響應(yīng)。rnx表示含有nx個(gè)實(shí)數(shù)的輸出向量;允許原位運(yùn)算,即r=x。dbuffernh延遲緩沖區(qū);對(duì)存儲(chǔ)器的要求同 hnhnx向量x中實(shí)數(shù)的個(gè)數(shù);nh向量h中系數(shù)的個(gè)數(shù);oflag=1有溢出;oflag=0無溢出(三)設(shè)計(jì)流程圖:利用硬件實(shí)現(xiàn)濾波器的信號(hào)濾波,就是將matla所產(chǎn)生的系數(shù),與被取樣

13、的 實(shí)時(shí)信號(hào)進(jìn)行運(yùn)算。將濾波器系數(shù)導(dǎo)入程序當(dāng)中一般有兩種方式:一、是將matla/生的系數(shù),生成頭文件,在程序中進(jìn)行調(diào)用。二、將matlab生的系數(shù)寫入數(shù)據(jù)段中,在程序中調(diào)用,此過程涉及到 iir濾波器的系數(shù)被截取,量化,調(diào)整和量化誤差的產(chǎn)生。信號(hào)與濾波器系數(shù)的運(yùn)算也有兩種方法:一、調(diào)用dsplib中的iir、fir調(diào)用函數(shù)。二、利用c語言,編輯一段程序進(jìn)行運(yùn)算。(四)系數(shù)的導(dǎo)入與量化1 .頭文件方式導(dǎo)入在matlab利用fdatool生所需濾波器,選擇菜單 targets export to codecomposerstudio ? ide.打開 export to c header fil

14、e 對(duì)話框,選擇c header file,指定變量名(濾波器階數(shù)和系數(shù)向量),輸出數(shù)據(jù)類型可選浮點(diǎn)型或32b、16b 整型等。根據(jù)自己安裝選擇目標(biāo)板板號(hào)和處理器號(hào)。單擊 ok保存該頭文件,需指定文件名和路徑,打開iir工程文件夾,該濾波器系數(shù) 頭文件已含在工程中。該頭文彳用到matlab中的tmwpytes.h ,需把該文件也包含 在工程中.還要在原文件中聲明包含濾波器參數(shù)頭文件.即: #include頭文件名稱include tmwpytes.h然后編譯、鏈接工程.添加的頭文件自動(dòng)在工程目錄中顯示.目標(biāo) dsp!動(dòng) 為濾波器系數(shù)分配相應(yīng)的存儲(chǔ)空間。打開系數(shù)文件查看生成的濾波器系數(shù),可看 到

15、系數(shù)是對(duì)稱的,這由所選濾波器類型而定。由于本次的設(shè)計(jì)的拓展部分主要以設(shè)計(jì)iir濾波器為主要目標(biāo),iir濾波器系 數(shù)存在著格式轉(zhuǎn)換和量化的問題,不能夠直接導(dǎo)入到cc外直接去進(jìn)行硬件實(shí)現(xiàn), 這樣會(huì)導(dǎo)致濾波器系數(shù)的信息被截?cái)?,信息丟失,導(dǎo)致濾波器無法實(shí)現(xiàn)。所以我采用第二種方法。2 .直接寫入存儲(chǔ)器濾波器的系數(shù)可以用fdatog4行計(jì)算出來,也可以導(dǎo)出到 matlab workspace中去計(jì)算量化。我們所使用的dsk5402;驗(yàn)板是16位定點(diǎn)運(yùn)算,而matlab產(chǎn)生的系數(shù),并 不是定點(diǎn)數(shù)而是浮點(diǎn)數(shù)。所以需要將matlab產(chǎn)生的浮點(diǎn)數(shù)進(jìn)行轉(zhuǎn)化,使其轉(zhuǎn)換 為浮點(diǎn)數(shù),浮點(diǎn)數(shù)格式的導(dǎo)出:上ajj 川ter

16、oevwjn & *口耳”舊 iqd - unoeld.md -fie etm anahits 時(shí)第抬 miew 岫xfow he忖mew sm sonqrhw7國(guó)應(yīng)1名臺(tái)山廠日11。田回應(yīng)open season. sveser$ionctrt*oart+sne(db)sew seston asstore fw“port f4cf frojs 哂espaeeqrwctrhpfre5uerk:y(me)iihwt filer from xilbix cwliicim ( coe1 fieexpoit to sitijlnfc mmmexportprrl previewprrt.clomphoto

17、bucket - videc and inage hostingrtipome typeordrsfneik atwif.und廣 spech-r orctermrwum orderophorisvhefienbatartertmyufi erworth3事石! kiui加15!作 bempws38 / 36pesigning fitter . doneexport-gj囚_ export tocoeffictent fite (ascii)optionsformat becirnhok |crn匚i | appty 一般在fir濾波器中這種定點(diǎn)的轉(zhuǎn)化都是使用 matlab fdatoolex

18、port to c header file 方式來進(jìn)行轉(zhuǎn)化。但是與fir不同的是iir不一定是穩(wěn)定的系統(tǒng),即使穩(wěn)定,也未必能夠達(dá)到硬 件實(shí)現(xiàn)。matlab供的轉(zhuǎn)化方法并沒有對(duì)于越界的系數(shù)進(jìn)行量化。例如: sos=1,2,1,1,-1.19,0.45本是一個(gè)穩(wěn)定的高階iir濾波器的系數(shù)矩陣中的一維向量,表示直接ii型級(jí) 聯(lián)形式的一部分。經(jīng)過matlab16位定點(diǎn)量化后成為了 sos=32767,32767,32767,32767,-32768,14715 成為了一個(gè)不穩(wěn)定的系統(tǒng),從而硬件實(shí)現(xiàn)就不可能了。a.系數(shù)的轉(zhuǎn)化matlab帶符號(hào)定點(diǎn)16位轉(zhuǎn)化是,將所有大于1,小于-1的數(shù)值全部歸一化, 造

19、成了巨大的量化誤差,眾所周知,iir濾波器的實(shí)現(xiàn)過程中存在著反饋,于是 累進(jìn)量化誤差越來越大造成了系統(tǒng)的不穩(wěn)定。量化問題中不得不提的還有一個(gè)標(biāo)準(zhǔn)格式問題。由于matlab產(chǎn)生的浮點(diǎn)系數(shù)并沒有依照cc阱dsplibiir能夠調(diào) 用的數(shù)據(jù)格式。經(jīng)過查閱資料以及多次的失敗嘗試積累出的經(jīng)驗(yàn),了解到我所要設(shè)計(jì)的iir濾波器所需使用的iircas剛用命令使用的是q1嗷據(jù)格式,而matlab 所產(chǎn)生的7?點(diǎn)值是q1領(lǐng)據(jù)格式,而在進(jìn)行定點(diǎn)轉(zhuǎn)換時(shí),matlab有將q14勺數(shù)據(jù) 格式量化,進(jìn)行大誤差歸一化直接轉(zhuǎn)化為 q15勺定點(diǎn)形式所以造成硬件實(shí)現(xiàn)的失 敗。matlab生的系數(shù)一般已經(jīng)是滿足ccs調(diào)用函數(shù)的sec

20、ond-order形式了。filt er design ft analysis- tn mi unt it led., f da ,0e(xfil% edi i an4lyiis t ox gets view window help口 盧p昌口陽j90x o即日兇國(guó)老為出國(guó)端。國(guó)回wicurrent f4ter normalion.structure: direict-form ii,second-orciw section-:older:6stcbioris: 3密制le yessourcb: designedslae fiter ._ response type一 desi method.

21、f3 order efiecify cr&w 6o mlnlmue order_ rreomeflcy 5oeclilcattonsunhs: hzfs:1600 口 hr butterworlh.optkdtis:there are no 中后整 parameters for frits desagri me4hod.maonlude spmrricefijons _the attenuhtiori ot culoff freqiimcies is lised &t3db (half the passftand gain)filer managedesign fuercomputing re

22、sponse . dorie次濾波器為例,產(chǎn)生的系數(shù)為:section #1numerator:121denominator:1-1.1954339628907380.69059892324149696gain:0.12379124008768973section #2numerator:121denominator:1-0.942809041582063360.33333333333333343gain:0.09763107293781749section #3numerator:121denominator:1-0.840286921651326790.18834516088404471g

23、ain:0.087014559808179473output gain: 1其中numerator就是分子部分,也就是b,其中deneminator就是分母部分也 就是a, gain就是增益,一般計(jì)算系數(shù),只需將分子部分乘以各部分增益,在轉(zhuǎn) 化為定點(diǎn)數(shù)。分母部分只需將其轉(zhuǎn)化為定點(diǎn)部分就可以了。但是,這個(gè)系數(shù)中, 存在著一項(xiàng)a11的情況,我才 用了如下的公式來進(jìn)行量化和數(shù)據(jù)格式轉(zhuǎn)換:a=;b=;a=a/2*32767*g; b=b/2*32767 其中,a為分母,b為分子;g為各項(xiàng)增益這個(gè)公式所形成的矩陣就可以應(yīng)用到iircas5的數(shù)據(jù)格式要求中,減小了溢 出的可能性。c.誤差分析(1)又tii

24、r數(shù)字濾波器的系數(shù),采用定點(diǎn)q0&式進(jìn)行數(shù)據(jù)的處理,將引入系數(shù) 量化誤差;(2)對(duì)輸入的測(cè)試信號(hào),采用定點(diǎn)q0&式進(jìn)行數(shù)據(jù)的處理,將引入輸入信號(hào)的量化誤差;(3)由于使用的a/d, d/a專換器件為有限字長(zhǎng),如da專換器的字長(zhǎng)僅10 b 或12 b0在軟件程序中事先要把數(shù)據(jù)化為相同的字長(zhǎng)位數(shù),再送到 dza轉(zhuǎn)換器, 也將引入量化誤差。(4) 對(duì)數(shù)字濾波的運(yùn)算過程編制相應(yīng)的程序,其中濾波器選用直接型、級(jí)聯(lián)型還是并聯(lián)型,將產(chǎn)生不同的運(yùn)算量化誤差。四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析本次試驗(yàn)使用的fir與iir濾波器程序主體大致相同,所以只是對(duì)fir_dma.c中的與iir與fir兩種不同的濾波器的相關(guān)系數(shù)

25、進(jìn)行了修改,下面列出的是 iir濾波器的設(shè)計(jì)程序。(一)準(zhǔn)備工作:需要將頭文件等庫(kù)函數(shù)都裝入到指定位置:1、 drv5402.lib 是軟件仿真所用的仿真器所必需的庫(kù)文件;2、dsk5402.lib是驅(qū)動(dòng)ds板所必需的庫(kù)文件;3、rts.lib ,這個(gè)庫(kù)提供目標(biāo)ds陋行時(shí)間支持(runtime-support)。由于程序沒有#include ,因此本程序不需要頭文件。上圖是編譯成功的結(jié)果顯示: 無錯(cuò)誤和警告! 這是最終調(diào)試成功的結(jié)果, 首次運(yùn)行時(shí)有11個(gè)錯(cuò)誤,主要是_cosx和_cosx混淆,分號(hào)的誤寫等。因此,本程序所使用的配置文件有:( 1)、-c ,即源程序文件;( 2)、-o , if

26、r_dma.out即輸出文件(默認(rèn)在 debug目錄);( 3)、 -l rts.lib 等庫(kù)文件。(二)程序清單:通過理解iir的基本原理,也可以通過c語言或是匯編語言進(jìn)行編寫,同樣可以 達(dá)到濾波的效果。因?yàn)橛姓{(diào)用函數(shù),使用起來比此程序方便,所以只是用了函數(shù)來實(shí)現(xiàn)。1主程序:/* 聲明頭文件*/ #include #include #include #include #include #include /*/*/* function prototypes /*/void delay(s16 period);extern void dmac2isr();/* 聲明 dmac2isr外部函數(shù) *

27、/*/* 全局變量的定義*/*/handle hhandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/* 給輸入緩沖區(qū)建立字段*/#pragma data_section(inp_buffer,audio_buffer);int inp_buffer0x200;/* 給輸出緩沖區(qū)建立字段*/#pragma data_section(ou

28、t_buffer,outt_buffer);int out_buffer0x200;/* 為系數(shù)建立字段*/#pragma data_section(coeffs,coefficients);/* iir,butterworth 低通濾波器fs=16000 fc=2000hz*/int coeffs15=-13765,3085,1425,1425,2851,-19585,11314,1756,1756,3513,-15446,5461,1846,1846,3693;/*fir hann 低通 fs=16000,fc=2000*/int coeff16=-43, -178, -407, -353

29、, 671, 2968, 5860,7903, 7903,5860, 2968, 671, -353, -407, -178, -43 ;#pragma data_section(delaybuff,delayb);int delaybuff6=0;/int delaybuff16=0/* 給中斷服務(wù)寄存器定義變量*/int frame=0;int flag=0;int temp;int currbuff = 0;/* delayptr 指針變量指向延遲緩沖區(qū)的首地址*/int *delayptr1 = &(delaybuff0);interrupt void dmac2isr();/*/*

30、主程序 */*/void main()s16 cnt=2;/* 需要用到的 bois 的部分定義*/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-)/切換led旨示燈0的顯示狀態(tài)/切換led旨示燈1的顯示狀態(tài)/切換led旨示燈2的顯示狀態(tài)brd_led_toggle(brd_led0);delay(1000);brd

31、_led_toggle(brd_led1);delay(1000);brd_led_toggle(brd_led2); delay(1000);/* 初始化 codec */hhandset = codec_open(handset_codec);/*給一個(gè)句柄*/*設(shè)置codec變量*/codec_dac_mode(hhandset, codec_dac_15bit);/* dac 15位模式*/codec_adc_mode(hhandset, codec_adc_15bit);/* adc 15位模式 */codec_ain_gain(hhandset, codec_ain_6db); /

32、*6db的輸入增益 adc */codec_aout_gain(hhandset, codec_aout_minus_6db); /* -6db 的輸出 衰減 dac */codec_sample_rate(hhandset,sr_16000);/*設(shè)置抽樣頻率為 16000hz */? /*清除dmac2中斷標(biāo)志*/intr_clr_flag(dmac2);/*重置dma1道*/dma_reset_all();/*初始化dma!道2 */dmsefc = (dsync_revt1 12);/與 mcbsp接收事件同步dmmcr = (autoinit_enable 15) | (dinm_e

33、nable 14) |(imod_halfblock 13) | (ctmod_dec 12) | (indexmode_nomod 8) | (space_data 6) | (indexmode_inc 2) | (space_data);/設(shè)置而t控制模式寄存器dmmcr幀結(jié)束dm沖斷;/15bit autoinit_enable=1使能自動(dòng)初始化根據(jù)imo雙廣生中斷幀和塊結(jié)束時(shí)都產(chǎn)生中斷減量計(jì)數(shù)模式( 多幀模式 )源地址模式no modify源地址空間為數(shù)據(jù)空間目的地址模式, 傳輸之后加1目的地址空間為數(shù)據(jù)空間/14bit dinm_enable=1/13bit imod_halfbl

34、ock=1/12bit ctmod_dec=0/10-8bit indexmode_nomod=000/7-6bit space_data=01/4-2bit indexmode_inc=01/1-0bit spacedata=01dmctr = 0xff;/ 單元記數(shù)src_addr = drr1_addr(handset_codec);/股置源地址dst_addr = (unsigned int) &inp_buffer;/設(shè)置目的地址dma_init(dma_ch2, dmsefc, dmmcr, dmctr, space_data, src_addr, space_data, dst_

35、addr);/* 設(shè)置通道2幀數(shù) */dma_framecount(dma_ch2, 1);/* 為通道2輸入設(shè)置全局自動(dòng)初始化寄存器*/dmgsa = src_addr;dmgda = dst_addr;dmgcr = 0xff;dmgfr = 1;/* 設(shè)置全局優(yōu)先級(jí)和使能控制寄存器*/dmpre = (high_priority 10) | (intsel_01 6);dmsrcp = space_data;dmdstp = space_data;dmidx0 = 0;dmidx1 = 0;dmfri0 = 0;dmfri1 = 0;dma_global_init(dmpre, dmsr

36、cp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* 通道 2 使能 */dma_enable(dma_ch2);/* 開始前端串行端口接收數(shù)據(jù)流*/temp = *(volatile u16*)drr1_addr(handset_codec);/* 通道 2中斷使能 */intr_enable(dmac2);/* 全局中斷使能 */intr_global_enable;/* 等待中斷 */for(;);/*/* 延遲 */*/void delay(s16 period)int i, j;for(i

37、=0; iperiod; i+)for(j=0; jperiod; j+);2. 終端服務(wù)程序 dma2isr.c 代碼及分析#include #include extern void delay(s16 period); extern unsigned int channel; extern unsigned int dmsefc; extern unsigned int dmmcr;extern unsigned int dmctr;extern unsigned int src_page; extern unsigned int src_addr; extern unsigned int

38、 dst_page; extern unsigned int dst_addr;/*dma/*/*/*/*/*/*/*通道數(shù) */設(shè)置同步時(shí)間和幀計(jì)數(shù)寄存器值*/設(shè)置模式控制寄存器值*/設(shè)置單元計(jì)數(shù)寄存器值*/設(shè)置源頁寄存器值*/設(shè)置源地址寄存器值*/設(shè)置目的頁寄存器值*/設(shè)置目的地址寄存器值*/extern int inp_buffer0x200;些阜iir若是 iir若是濾波器,需要改為 coeffs15*/iir 濾波器,需要改為 delaybuff6*/extern int out_buffer0x200;extern int coeffs16;/*extern int delaybu

39、ff16; /* extern int frame;extern int flag;extern int currbuff;extern int *delayptr1;init_dma3(void)int l=0; void while(dmprec&0x0008) ; /dma3 的傳送是否結(jié)束/* 初始化通道3 */dmsefc = (dsync_revt1 12);dmmcr = 0x4141;dmctr = 0xff;/256 單元 / 幀src_addr = (unsigned int) &out_buffer+(unsigned int)frame*0x100);dst_addr

40、= dxr1_addr(handset_codec);dma_init(dma_ch3, dmsefc, dmmcr, dmctr, space_datas,rc_addr, space_data, dst_addr);/* 設(shè)置通道 3 的幀數(shù) */dma_framecount(dma_ch3, 0); /2 frame/block/* 使能通道 3 */dma_enable(dma_ch3);interrupt void dmac2isr(void)int *p_inp,*p_out;p_inp=inp_buffer+frame*0x100;p_out=out_buffer+frame*0

41、x100;調(diào)用 iir 濾波函數(shù)調(diào)用 fir 濾波函數(shù) */iircas5(p_inp,coeffs,p_out,&delayptr1,3,256);/* */fir(p_inp,coeffs,p_out,&delayptr1,16,256);/*init_dma3();framea=1;3.中斷向量c5402vec.asm代碼及其分析.title 5402 dsk interrupt vector table initialization.ref _c_int00, _dmac2isr.sect .vecsreset:bd _c_int00 ;初始化 cpu寄存器,分支指向_c_int00

42、, bd占 2 個(gè)字節(jié)nopnopnmi: bd nmi ; nminopnop *軟件 s/w 中斷*sint17 bd sint17nopnopsint18 bd sint18nopnopsint19 bd sint19nopnopsint20 bd sint20nopnopsint21 bd sint21nopnopsint22 bd sint22nopnopsint23 bd sint23nopnopsint24 bd sint24nopnopsint25 bd sint25nopnopsint26 bd sint26nopnopsint27 bd sint27nopnopsint28

43、 bd sint28nopnopsint29 bd sint29nopnopsint30 bd sint30nopnop*其他中斷*int0: bd int0nopnopint1: bd int1nopnopint2: bd int2nopnoptint0: bd tint0nopnopbrint0: bd brint0nopnopbxint0: bd bxint0nopnopdmac0: bd dmac0nopnoptint1: bd tint1nopnopint3: bdint3nopnophpint: bdhpintnopnopdmac2: bddmac2isr;brint1/dmac2

44、nopnopdmac3: bddmac3nopnopdmac4: bddmac4nopnopdmac5: bddmac5nopnop(三)程序調(diào)試:首先測(cè)試iir濾波器與fir濾波器是不是都能夠使用并且能夠正常濾波,首先利用matlab的sptool進(jìn)行仿真實(shí)驗(yàn),看是不是存在溢出或是不穩(wěn)定。產(chǎn)生的 1000hzf 4500hz勺混頻彳s號(hào)。fs=16000hzhals i gna 1 br ows erfite marit erelindow help昌 車劃 | 口 乂1亭 6 h=|g|!二因# |久等|中marker 1 黑國(guó)marker 2 x; 67die 34 y: 0,14203

45、962j: ,14203952tiy: -0.2b407904利用16階fir濾波器濾出來的效果,可見fir濾波器參數(shù)可以正常使用jrsignal browserfile markers window helpi:二眼肝鳧w總昌陞$ 節(jié)t:; x i v 衿三sig2 (101x1 reai.fs=l)0.50-0.500t9080o60)&50imt403020merkarl x: 33v: 0.00035714559marker 其:s7y: q及30sdx: 34d 43,4029002,iwuueel濾波器的幅度相應(yīng):magnitude response (db)frequency (

46、khz)6階iir低通butterworth濾波器的濾波效果,不存在溢出refile harkers dndov help昌金明剛?cè)蘬4 x i 陽*三|國(guó)li二園忖陜引w10.50-0.5sig3 (101x1 real fs=1)3 匚lieq.mfirker t : 33graph*能觀察輸入輸出信號(hào):1isk/cpu_1 -居4# - code存方r sludielle edit &b eroject jjetuf; ptofl er 犯l ucni 工砒匕 d/exos ilddov help由0。 電中寸f席a看聃 uff 瞄有熊第ee d/先/ |fk.4,pjt三畫j3 b b

47、 白金飄僵卬苗* 白(3國(guó)國(guó)回回ilxi腳r.日uind h訊口let-d errtrr 0 %tmirg8 a q reia/rfc酊k h bu*d /.rvtesgps/iki1i?u haltedfor lielpv press mln 網(wǎng) 51 1 b7ifir的輸入信號(hào),輸出信號(hào)和頻譜。時(shí)域波形:頻域?yàn)V出前后對(duì)比iir的輸入信號(hào),輸出信號(hào)和頻譜??梢姮F(xiàn)實(shí)中,fir與iir的濾波效果都可以非常的接近理想中的情況。只是在 iir 的濾波器的量化是還是存在的增益的改變, 無法滿足理想的情況,嘗試增大音量 來調(diào)整增益情況,就會(huì)發(fā)生如下的情況:(1z7, 291) (127, 2-ikx機(jī)射. 407. 072 fft.2,幽,379659) f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論