FIR濾波器設(shè)計方案_第1頁
FIR濾波器設(shè)計方案_第2頁
FIR濾波器設(shè)計方案_第3頁
FIR濾波器設(shè)計方案_第4頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、FIR濾波器設(shè)計方案DesigneryaoguaiwsFIR 濾波器的基本結(jié)構(gòu)一 橫截型 (卷積型、直接型)<Direct-type>FIR 濾波器的差分方程表達(dá)式為:N1y nh m x nmm 0很明顯, 這就是線形時不變系統(tǒng)的卷積和公式,也就是 xn 的延時級聯(lián)的橫向結(jié)構(gòu),如下圖所示:由于線形相位FIR 濾波器的系數(shù)是鏡像對稱的,所以 N 階濾波器系數(shù)只需要 N 個2儲存單元即可。 而輸入 xn 的值需要N 個儲存單元, 這樣總共就需要 N N3 N 個22儲存單元。二 級聯(lián)型 <Cascade-type>將 H(z) 分解成實系數(shù)二階因子的乘積形式:N1N2H

2、( z)h(n) z n( 0k1k z 12 k z 2 )n0k 1圖中畫出了一個FIR 濾波器的級聯(lián)結(jié)構(gòu), 其中每一個二階因子用一個橫截型來表示:這種結(jié)構(gòu)的每一節(jié)控制一對零點,因而在需要控制傳輸零點時可以采用它。但是這種結(jié)構(gòu)所需要的系數(shù)ik (i0,1,2; k 1,2, , N 2) 比卷積型的系數(shù) hn 要多,因而需要更多的儲存單元。理論上需要3N 個單元儲存系數(shù),再加上N 各單元儲存中間結(jié)果,2結(jié)果一共需要3NN5 N 個儲存單元。22三 頻率抽樣型 <Decimation-type>把一個 N 店有限長序列的z 變換 H(z) 在單位圓上作N 等分抽樣,就得到H (k

3、 ) ,其主值序列就等于h(n)的離散傅里葉變換H (k ) 。即 H(z) 的內(nèi)插公式為:H (z) (1 zN1 N 1H (k )WN k z 1N k 1 1這個公式就為FIR 濾波器提供了另外一種結(jié)構(gòu),這種結(jié)構(gòu)由兩部分組成。N 1H ( z)1 H c ( z)H k' ( z)Nk 0其中的第一部分為(這是一個FIR 子系統(tǒng),是由N 節(jié)延時單元構(gòu)成的梳狀濾波器):H c (z) 1z N級聯(lián)的第二部分為(這是一個由N 個一節(jié)網(wǎng)絡(luò)并聯(lián)而成的IIR 子系統(tǒng)):N 1N 1H (k)H k'(z)k 0k 1 1WN k z 1頻率抽樣型的結(jié)構(gòu)如圖所示:該系統(tǒng)需要2N 個

4、儲存單元用來緩存輸入的數(shù)據(jù),共需要花費3N 個儲存單元。N 個儲存單元用來儲存系數(shù),一量化誤差分析理論設(shè)計的FIR 濾波器系數(shù)都是無限精度的,當(dāng)他們有硬件實現(xiàn)時,必須要量化,這必然引起量化誤差。這也就使得理論濾波器和實際濾波器存在一些性能上的差別 <由于濾波器只有 z=0 只一個極點,他在單位圓內(nèi),不會出現(xiàn)系統(tǒng)的不穩(wěn)定,這還算 Lucky! >FIR系數(shù)的量化誤差對系統(tǒng)的影響,不僅僅和量化字長有關(guān),更是和濾波器的結(jié)構(gòu)密切相關(guān)的!分析:假設(shè) bk 為理論系數(shù),bk 為量化系數(shù),bk 為量化誤差,則有:bkbkbk可以得到由于各 bk 的偏差bk 引起的第 i 個零點 zi 位置變化量

5、為 (推導(dǎo)過程見:數(shù)字信號處理教程 .程佩青 .清華大學(xué)出版社P408410):NN kziNzibkk 1( zizl )l 1li上式分母中的每一個因子( zi zl ) 是由一個零點zl 指向 zi 的矢量,而整個分母正是所有其它零點zl (li ) 指向該零點zi 的矢量積。 當(dāng)系統(tǒng)的零點非常密集時,他們互相的矢量長度就很短,矢量積就更小,zi 就較大。高階直接型濾波器的零點數(shù)目多而密集,而低階直接型濾波器的零點數(shù)目少而稀疏,因而前者對系數(shù)的量化誤差要敏感得多。實現(xiàn)方案比較? Direct-type使用儲存單元最少, 但是由于階數(shù)很高, 所以零點非常密集, 系數(shù)的量化誤差對零點的影響較

6、大, 必須要通過增加系數(shù)的量化字長來確保系統(tǒng)的正確。? Cascade-type使用的儲存單元較多, 但是由于每一個子系統(tǒng)都是二階系統(tǒng), 故量化誤差對整個系統(tǒng)的影響較小,可以使用較短的系數(shù)量化字長。? Decimation-type使用的儲存單元較多,由于每一個并聯(lián)的二階字系統(tǒng)的誤差值對自身影響,故該結(jié)構(gòu)的整個系統(tǒng)誤差最小。但是由于引入了 IIR 系統(tǒng),故在系數(shù)量化的時候,必須是極點量化在單位圓之內(nèi),否則將使系統(tǒng)不穩(wěn)定。指標(biāo):采樣頻率 f s59kHz系數(shù)量化字長b27 bit通帶截止頻率f pc 22kHz阻帶截止頻率fsc26kHz通帶紋波系數(shù)6.88 10 5 dB阻帶衰減142.2dB

7、在右上角的幅頻特性曲線圖(經(jīng)放大)中,我們可以看到,系數(shù)經(jīng)過量化后,會對幅頻特性產(chǎn)生一定的影響。 但是由于量化比特數(shù)非常的高, 所以影響不是太大,能符合我們的設(shè)計指標(biāo)。 右下角展示了量化過后的系數(shù)對零極點的影響。設(shè)計方案由于要求是硬件最少,并且最優(yōu),我們采取第一種方案,即:系數(shù)高bit 量化的直接型結(jié)構(gòu)。由于FIR 濾波器的系數(shù)鏡像對稱,故將線形相位FIR 濾波器的流圖改造成如下格式:在上結(jié)構(gòu)中,每一個乘加單元<MAC> 都是將鏡像對稱的兩個值進(jìn)行MAC 運算。所以我們在實現(xiàn)輸入值xn 的緩沖時,將緩沖設(shè)置成兩個鏡像對稱的緩沖器<top-buffer &buttom-

8、buffer> 。這樣在實現(xiàn)累加時兩個 buffer 可以共用一個指針減計數(shù)器<decrementor>(采用減計數(shù)器,而不采用加計數(shù)器的原因?qū)诤罄m(xù)的時序關(guān)系中得到解釋),而不必要使用一個指針加計數(shù)器<incrementor> 和一個指針減計數(shù)器<decrementor> ,或者讓系數(shù) ROM 的指針變量產(chǎn)生復(fù)雜的運動, 這能簡化時序設(shè)計的復(fù)雜性,同時也就節(jié)約了硬件; 并且采用用鏡像對稱 buffer ,再不額外增加硬件的同時,可以降低時鐘一半的頻率,這是非常重要的。雖然增加了一個 (24+1)-bit 加法器,但是同時也減少了ROM 中的計數(shù)器(

9、資源共享原理將在ROM 模塊介紹),并且換來上述的優(yōu)化設(shè)計。在上述的原理框圖中我們可以看到,所有的MAC 都是規(guī)則分布的,這種幾何上的“美”,正好是時分復(fù)用的最好例證。假設(shè) xn 的輸入時鐘clk 的速率為 Vx n59kHz , MAC 單元的處理速率為 VMAC ,若存在 VMACN59kHz 3.304MHz ,則可以實現(xiàn) MAC 單元的復(fù)用, 這樣就將Vx n562N 個 MAC 單元降低為 1 個,大大的節(jié)約了硬件。2FIR 濾波器的實現(xiàn)框圖如下:ROM-cell實現(xiàn):方案一(直接法)由于該 FIR 濾波器的性能要求極高,所以在實現(xiàn)時,F(xiàn)IR 濾波器的系數(shù)非常的多。且由以上的“零極點

10、圖”可以看出,零點非常的密集,這就修要使用高bit 來量化 FIR 濾波器的系數(shù)。當(dāng)采用 27-bit 量化時才能取得較好的結(jié)果。這樣,理論上需要5627bit1539bit 。由于系數(shù)眾多,所以需要大量的存儲單元。方案二(縮放法【ScalingTech 】)可以證明, 一個十進(jìn)制數(shù)要被二進(jìn)制數(shù)表示時,該十進(jìn)制數(shù)越接近于1,產(chǎn)生相同精度時,用于表示該數(shù)的二進(jìn)制位數(shù)越少。若c 1 ,2 N ,其中 c 為濾波器系數(shù),為量化間距, N 為量化比特數(shù)。假設(shè) 為相對量化誤差,則有:1c c 2N1Nlog 2 ( c)顯然,當(dāng)相對量化誤差一定時,系數(shù)c 越大,所采用的量化比特數(shù)N 就越少。在下圖中可以

11、很明顯地看出量化間距對相對量化誤差的影響。 很明顯, 當(dāng)系數(shù) c 太小時, 很容易被量化間距所造成的量化噪聲s 所淹沒,而完全不能恢復(fù)。所以我們可以先把所有的系數(shù)(左圖)放大2N 后再進(jìn)行量化,將放大后的數(shù)(右圖)進(jìn)行量化并進(jìn)行乘法運算,最后將乘法的結(jié)果減小2N 倍(這對于硬件實現(xiàn)非常容易,只需要講結(jié)果右移 N 位即可)。但是我們從系數(shù)上來觀察,發(fā)現(xiàn)采用“直接型”FIR 濾波器所產(chǎn)生的系數(shù)相差非常的大,其動態(tài)范圍高達(dá)105,不宜采用單因子縮放。這里引入一個叫做縮放矩陣和趨一矩陣的概念:記為縮放矩陣為Sr c ,趨一矩陣為 Trt 。將所有的系數(shù)絕對值Cr 被 1 除,將得到的商項下取整得 Qr

12、,由于 Cr1,所以必有Qr 1 ,再計算 P log 2Qr 和 Cr CrP ,這時 Cr 將滿足 Cr21,Cr 1 。分別將 P 和 Cr 用二進(jìn)制量化為 t 比特、 c 比特,于是有:C0 cC0cP0tSr cCr b Tr tC55 cC55cP55 t由于 Cr1 ,所以只需要用較少的比特來量化他就可以滿足精度的要求,試驗證明:當(dāng) c=14 時,較精確的滿足了要求。再算得t=5,所以一共只需要采用19 比特就可以了。這樣每個系數(shù)就節(jié)約了8 比特。理論上一共節(jié)約了56 8448bit 。誤差分析:1.當(dāng)采用直接法量化時, N=27 ,cmin9.9798 10-7 ,算得: ma

13、x27cmin10.75%2272.而采用收縮法量化時,N=14 , cmin0.50037 ,算得:1510.0122%maxcmin2143. 可以看出,當(dāng)采用【 ScalingTech 】技術(shù)以后,不僅能將量化比特數(shù)幾乎降為原來的一半,而且最大相對量化誤差降為原來的1 。62當(dāng)采用【 ScalingTech】算法時,乘法器所需要的最高速度變?yōu)椋篤ACCb VMAC14(5659kHz )46.26MHz采用直接法時, MAC 單元可以直接采用 Booth 乘法器,而采用縮放法時需要對乘法器添加移位運算器 (shifter) 。當(dāng)采用收縮法時,由于最后要將乘法結(jié)果進(jìn)行右移以后才Booth能

14、將結(jié)果進(jìn)行累加,所以會損失一定的精度。移位得越多,精度損失得越多。直接法收縮法ROMMACROMMACROMs(64 1)2714資源耗費10811479237LUTsMAC-cell實現(xiàn):MAC-cell是由一個乘法器和一個累加器組成,累加器設(shè)計較為簡單,的資源,關(guān)鍵在于乘法器的設(shè)計。在該FIR 濾波器中,乘法器要實現(xiàn)14bit的乘法運算, 不合理的結(jié)構(gòu)對資源的占用是巨大的,極有可能使資源崩潰!致分為 3種也不會占用太多27bit40bit乘法器的實現(xiàn)大1.串行乘法器:資源最節(jié)約,但是由較多的延時,適合于大規(guī)模;2.并形乘法器:資源消耗很大,但是速度較快,適合于中規(guī)模;3.查表乘法器:資源耗

15、費巨大,速度最快,只適合于小規(guī)模。在該設(shè)計中,由于乘法運算的位數(shù)很高,所以必須采用“串行乘法器”來實現(xiàn)其功能。 “串行乘法器” 在算法上是由一個移位寄存器 <SR>和一個累加器構(gòu)成 <ACC> ,SR 負(fù)責(zé)進(jìn)行乘數(shù)的移位,而 ACC 負(fù)責(zé)將移位的二進(jìn)制數(shù)相加,并把結(jié)果保留在寄存器中,以供下次使用。方案一(校正算法)由于在該MAC 運算單元中,涉及到的是兩個有符號數(shù)的乘法,所以還必須先對有符號數(shù)進(jìn)行編碼, 然后才能進(jìn)行運算。 我們這里采用二進(jìn)制補碼的編碼方案, 該方案是目前在 DSP 領(lǐng)域類最為流行的有符號數(shù)字表示法??紤]到,兩個符號相依的數(shù)不能直接采用無符號乘法器 &l

16、t;unsigned-Multiplier> ,所以我們必須先對編碼做一定轉(zhuǎn)換后送入無符號乘法器,然后將結(jié)果通過另一個與之相反的網(wǎng)絡(luò),使結(jié)果正確。算法框圖如下圖所示:要對有符號數(shù)進(jìn)行乘法運算,必須要將它們進(jìn)行編碼。在編碼方案中,二進(jìn)制補碼表示法是目前 DSP 領(lǐng)域最為流行的有符號數(shù)字表示法,在該編碼方案中,若最高位為0,則表示該數(shù)為正數(shù),反之則表示為負(fù)數(shù)。首先將乘數(shù)和被乘數(shù)的首位進(jìn)行比較,若它們相同,則直接送到無符號乘法器中進(jìn)行乘法運算我們可以證明兩個負(fù)數(shù)相乘和兩個正數(shù)相乘都可以采用無符號乘法器 <unsigned-Multiplier> 得到結(jié)果。若首位不相同,則將其中的負(fù)

17、數(shù)通過“負(fù)正變換網(wǎng)絡(luò)”<N2P Network> 后再將兩數(shù)送入無符號乘法器,最后將結(jié)果在通過“正負(fù)變換網(wǎng)絡(luò)”<P2NNetwork> ,進(jìn)行校正。此時得到的結(jié)果就是正確的。方案二( Booth 算法)該算法不僅能處理負(fù)數(shù)相乘的情況,而且速度較快。下圖給出了Booth 算法的流程:乘數(shù)與被乘數(shù)分別載入Q 和 M 寄存器內(nèi), 同時還有一個 1 比特寄存器, 位于 Q 寄存器最低位 Q0 的右邊,稱為 Q。乘法的結(jié)果出現(xiàn)在A 和 Q 寄存器中。 A 和 Q的初始值為 0??刂七壿嬕彩敲看螔呙璩藬?shù)的一位(掃描的次數(shù)位Q 長度 -1),但同時也要檢查右邊的一位。若兩位相同, 則

18、 A 、Q 和 Q的所有位右移一位。 若兩位不同, 則根據(jù)是 1-0 還是 0-1 決定 A+M還是 A-M ;加減之后再右移一位。也就是說,右移運算總是要進(jìn)行的。智利的右移是算術(shù)移位,即如果 An 1 移到 An 2 后,原來得值仍然保留在An 1 中。Booth Arithmetic校正算法Booth算法資源消耗(LUTs)339107最大時鐘頻率(MHz )105.7144.0可以明顯地看出,采用Booth 算法后,不但能大大的節(jié)約資源(以大幅的提高最大頻率(105.7 >144.0),故在有符號乘法器中都采用339>107 ),而且可Booth 乘法器。輸入緩沖FIFO 的

19、讀寫時鐘的時序關(guān)系圖:在 in_clk 的上升沿,緩沖FIFO 寫入一個外界數(shù)據(jù)xn ,在該個in_clk 的上升沿余下一個in_clk的上升沿之間,F(xiàn)IFO中的數(shù)據(jù)經(jīng)過out_clk時鐘將FIFO 中的N 個數(shù)據(jù)<xnxn-(N-1)>讀出倒下一個模塊進(jìn)行運算。由以上關(guān)系可以得出,out_clk 的頻率必須是in_clk 頻率的 N 倍。當(dāng) Reset 信號有效時, FIFO 被清零,并且讀寫指針都指向首地址。coe-ROM 讀時鐘與FIFO 讀時鐘的時序關(guān)系圖:由于從緩沖FIFO中取出的數(shù)需要和FIR濾波器的系數(shù)相乘,所以ROM時鐘<ROM_clk>必須要和FIFO

20、讀時鐘 <out_clk> 同步,才能在下一個模塊中進(jìn)行MAC運算。當(dāng)Reset 系號有效時,ROM指針指向首地址。MAC 單元系統(tǒng)運算時鐘與移位時鐘的時序關(guān)系圖:在 MAC 單元的設(shè)計中, 采用的是串行乘法器,由于系數(shù)被量化成27-bit ,所以移位寄存器的時鐘頻率必須是累加器頻率的 27 倍,才能夠完成一次 MAC 運算。累計器中存儲的數(shù)據(jù)不僅要在 reset 信號的作用下被清零,而且要在下一個數(shù)據(jù) xn 輸入 FIFO 進(jìn)行下一個yn 的數(shù)出之前必須被清零。由于三個運算單元存在事實上的前后關(guān)系,所以這些關(guān)系必須要從時序上體現(xiàn)出來,這和采樣時間密切相關(guān)。系統(tǒng)在實際運行的過程中,

21、先將外界的一個信號xn 采樣進(jìn)來, 然后將數(shù)據(jù)FIFO 的鏡像相加,最后將和數(shù)與系數(shù)ROM 一起送到MAC 單元移位相乘。由此也就決定了,采樣時間最優(yōu)先,緊接著是FIFO 的“鏡像相加” ,然后緊接著是MAC 單元的移位相乘。在以上的時序關(guān)系圖中正好體現(xiàn)了這個特點:當(dāng)reset 信號變?yōu)闊o效以后的緊接著的上升沿中 (圖中前面3 個采樣點),將數(shù)據(jù)采樣并壓入FIFO 中,并且執(zhí)行FIFO 的鏡像相加。由于相加時鐘和采樣時鐘同步,若使用加計數(shù)器<incrementor> (用來作為FIFO讀指針),第一次是讀首單元。由于使用非阻塞賦值(<=) ,所以并沒有把這次的xn 讀出來,而

22、讀出的是上一次存在FIFO 中的 xn !所以應(yīng)該采用減計數(shù)器,“鏡像相加”操作從xn-(N/2-1)+xn-N/2 開始,這就是為什么要采用減計數(shù)器的原因。當(dāng)每一次“鏡像相加”操作完成后,就應(yīng)該是MAC 單元的移位相乘,它必須緊接著“鏡像相加”操作,它并不能在西一個上升沿采樣,這樣會讓最后的一個bit 無法進(jìn)行移位操作, 所以移位相乘的采樣時間被安排到,緊接著的下一個上升沿。在 shift_clk 的上升沿采樣,并且僅當(dāng) acc_clear 信號有效時, MAC 中的累加器執(zhí)行一次清零操作,表示本次的整個 yn 以運算完畢。ModelSim仿真ctrl_cell模塊仿真:當(dāng) reset 信號

23、有效時 (reset=0),將所有的時鐘信號清零(mac_clk=0 / in_clk=0) ;當(dāng) reset信號有效時,使得所有的時鐘信號開始工作。此時當(dāng)mac_clk 的上升沿出現(xiàn)時,開始進(jìn)行FIFO 和 ROM 的數(shù)據(jù)讀出,并送入MAC 單元進(jìn)行下一步的處理。在MAC 中,由于乘法器是采用的移位累加器來實現(xiàn)的, 所以必須先要將外面的數(shù)據(jù)寫入以后才能開始進(jìn)行移位累加運算。由于 MAC-cell 中的 Booth-Multiplier是下降沿時鐘有效,但是我們看到,由于reset信號的失效時刻到再次有效與系數(shù)采樣時鐘(mac_clk) 之間有一個 base_clk 空操作信號, 所以這會產(chǎn)生

24、錯位移位運算!這里采用“動態(tài)鎖死”技術(shù)【DynamicCapture】來防止信號出現(xiàn)上面的錯位移位運算。當(dāng)時使用該技術(shù)后,產(chǎn)生一個新的全局清零信號:reset_d 。有上圖可以看出,如果用reset_d 作為時鐘清零信號,第一個有效base_clk信號都將會緊接著出現(xiàn)在第一個有效mac_clk 信號之后,這樣就防止了信號的錯位運算。該圖為上述時鐘模塊的全局仿真圖, clear 信號為 MAC 中累加器的清零信號(并非毛刺!這可以在第一幅圖中很清楚地看到) 。coe_cell 模塊仿真 :“index”為外界地址指針輸入,它為ROM 提供地址單元信號??梢钥闯鲈凇眎ndex ”信號的作用下, FIR 濾波器的悉數(shù)被一個一個地“讀”出來(圖中的coe_out 信號)。fifo_data模塊仿真該仿真中可以看到,外界向FIFO 中寫數(shù)據(jù)xn ,并且讀指針 ”index ”才開始工作對FIFO進(jìn)行一次循環(huán)取數(shù),即當(dāng)”index”每一次不同的取值,都要從FIFO中讀一次數(shù)據(jù)”data_out”。由于在 ”in_clk ”第一次寫入的數(shù)據(jù)為”000000”由于第一次寫入的數(shù)據(jù)為 ”000000”,所以第一次讀出的數(shù)據(jù)為 ”000000+000000=000000 ”。第二次寫入的數(shù)據(jù)為 ”00198e”。由于第二次寫入的數(shù)據(jù)為 ”00198e”,所以第二次讀出的數(shù)據(jù)為 ”0019

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論