用于fpga的高速高階fir濾波器的頻域?qū)崿F(xiàn)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及離散信號(hào)處理技術(shù)領(lǐng)域,特別涉及一種用于FPGA的高速高階FIR濾波 器的頻域?qū)崿F(xiàn)方法。
【背景技術(shù)】
[0002] 在數(shù)字信號(hào)處理系統(tǒng)中,F(xiàn)IR(Finite Impulse Response)濾波器是最基本的單 元。由于其嚴(yán)格的線性相頻特性和穩(wěn)定的系統(tǒng),F(xiàn)IR成為許多領(lǐng)域處理數(shù)據(jù)的主要手段。隨 著電子技術(shù)的發(fā)展,信號(hào)采樣頻率不斷提高,在高速采樣下,基于乘法器結(jié)構(gòu)的FIR濾波器 和基于分布式算法的FIR濾波器在FPGA中雖然能進(jìn)行快速的流水線實(shí)時(shí)處理,但像脈沖壓 縮技術(shù)類似FIR濾波器,其階數(shù)成千上萬(wàn),對(duì)FPGA資源消耗太大。
[0003] 快速傅立葉變換(FFT)是一種能實(shí)現(xiàn)這種高階FIR濾波器且消耗資源相對(duì)較小的 方法。傅立葉變換方法設(shè)計(jì)原理如下:
[0004] FIR濾波器的本質(zhì)就是有限長(zhǎng)序列與無(wú)限長(zhǎng)序列的線性卷積,線性卷積頻域表達(dá) 式為:
[0005] y(n) =x(n)*h(n)=IFFT{FFT[x(n)]XFFT[h (n)]}
[0006] 其中,*代表離散線性卷積關(guān)系,y(n)為輸出序列,x(n)為輸入序列,h(n)為濾波 器沖擊響應(yīng)。FFT方法實(shí)現(xiàn)卷積流程圖如圖1 :為長(zhǎng)度N的輸入序列和長(zhǎng)度M的沖擊響應(yīng)分 別補(bǔ)M-I個(gè)0和N-I個(gè)0,將長(zhǎng)度均補(bǔ)成L=M+N-1,從而與卷積輸出序列等長(zhǎng)(長(zhǎng)度為M 和N的序列卷積輸出的序列長(zhǎng)度為M+N-1)。然后對(duì)補(bǔ)零后長(zhǎng)度均為L(zhǎng)的輸入序列和沖擊響 應(yīng)分別做FFT運(yùn)算轉(zhuǎn)到頻域,接著將輸入序列和沖擊響應(yīng)的頻譜相乘,再做IFFT運(yùn)算(逆 變換)便可得到長(zhǎng)為L(zhǎng)的卷積結(jié)果。在實(shí)際應(yīng)用中,序列x(n)長(zhǎng)度很長(zhǎng),做FFT和IFFT需 要很大的點(diǎn)數(shù),而硬件資源有限,不能對(duì)過(guò)長(zhǎng)的數(shù)據(jù)進(jìn)行FFT。所以一般將數(shù)據(jù)X(n)分段成 多個(gè)長(zhǎng)度為N的有限長(zhǎng)子序列集Xm (k),那么x(n)可以表示為:
[0014] 其中,ym(k)ihJkhx-GO。所求的線性卷積分成了無(wú)限個(gè)長(zhǎng)度均為N+M-1的短 長(zhǎng)度線性卷積的和,ym(k)和ym+1(k)之間會(huì)有一個(gè)范圍為mN<n<mN+M-2的M-I個(gè)樣本 重疊。
[0015] 顯然,基于上述原理的FFT方法可以顯著降低FPGA資源的消耗。但是,補(bǔ)零部分 一方面耗費(fèi)時(shí)間,降低處理速度,另一方面形成延時(shí)間隔,造成數(shù)據(jù)無(wú)法實(shí)時(shí)處理。這使得 降低資源消耗和提高處理速度難以兼得。
【發(fā)明內(nèi)容】
[0016] 為了解決上述問(wèn)題,本發(fā)明的目的在于提供一種用于FPGA的高速高階FIR濾波器 的頻域?qū)崿F(xiàn)方法,對(duì)現(xiàn)有的FFT方法進(jìn)行改進(jìn),以解決降低FPGA資源消耗和提高處理速度 難以兼得的問(wèn)題,即:一方面降低高階高速情況下對(duì)FPGA資源的消耗,另一方面提高處理 速度以實(shí)現(xiàn)實(shí)時(shí)處理。
[0017] 上述目的是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
[0018] 一種用于FPGA的高速高階FIR濾波器的頻域?qū)崿F(xiàn)方法,所述方法包括:
[0019] 步驟A:確定FIR濾波器的沖擊響應(yīng)h(n)長(zhǎng)度為M,將輸入FIR濾波器的數(shù)據(jù)序列x(n)分段成多個(gè)長(zhǎng)度為N的分段序列,設(shè)定沖擊響應(yīng)h(n)和分段序列進(jìn)行FFT的點(diǎn)數(shù)為 2N,其中,N= 21,i為正整數(shù);使M=N+1,如M長(zhǎng)度不足用零補(bǔ)足;
[0020] 步驟B:對(duì)沖擊響應(yīng)h(n)進(jìn)行點(diǎn)數(shù)為2N的FFT運(yùn)算得到?jīng)_擊響應(yīng)頻譜H(k),將分 段序列劃分為奇數(shù)段和偶數(shù)段,利用乒乓操作將奇數(shù)段分段序列和偶數(shù)段分段序列分別補(bǔ) N個(gè)零后輸入兩個(gè)FFTIP核進(jìn)行點(diǎn)數(shù)為2N的FFT運(yùn)算,得到時(shí)序相差N個(gè)時(shí)鐘、長(zhǎng)度為2N 的奇數(shù)段分段序列頻譜和偶數(shù)段分段序列頻譜,然后分別將奇數(shù)段分段序列頻譜和偶數(shù)段 分段序列頻譜與沖擊響應(yīng)頻譜H(k)相乘;
[0021] 步驟C:將奇數(shù)段分段序列頻譜和偶數(shù)段分段序列頻譜與沖擊響應(yīng)頻譜H(k)的乘 積分別輸入到兩個(gè)IFFTIP核,分別獲得長(zhǎng)度為2N的奇數(shù)段卷積和偶數(shù)段卷積;
[0022] 步驟D:將奇數(shù)段卷積結(jié)果和偶數(shù)段卷積結(jié)果相加,得到FIR濾波器的輸出信號(hào)。
[0023]FFT和IFFT運(yùn)算的點(diǎn)數(shù)為每個(gè)序列分段長(zhǎng)度N的兩倍,階數(shù)為N+1;如果階數(shù)不滿 足,需要將階數(shù)添零到N+1個(gè)。
[0024] 進(jìn)一步地,所述步驟B中,先將沖擊響應(yīng)h(n)補(bǔ)零至2N長(zhǎng)度,再進(jìn)行點(diǎn)數(shù)為2N的 FFT運(yùn)算。
[0025] 進(jìn)一步地,所述步驟B中,點(diǎn)數(shù)為2N的FFT運(yùn)算結(jié)果存入到RAM中,RAM使用寫優(yōu) 先模式。由于沖擊響應(yīng)先進(jìn)入FFT模塊,所以輸出的數(shù)據(jù)先進(jìn)入兩個(gè)RAM中,RAM使用寫模 式,進(jìn)入的數(shù)據(jù)無(wú)需傳完便可讀取。
[0026] 進(jìn)一步地,所述步驟B中,按第1、3、5……個(gè)分段序列依次進(jìn)入第一個(gè)FFTIP核進(jìn) 行點(diǎn)數(shù)為2N的FFT運(yùn)算,按第2、4、6……個(gè)分段序列依次進(jìn)入第二個(gè)FFTIP核進(jìn)行點(diǎn)數(shù)為 2N的FFT運(yùn)算;第1個(gè)(長(zhǎng)度為N的)分段序列輸入進(jìn)第一個(gè)FFTIP后補(bǔ)N個(gè)0,補(bǔ)零同 時(shí),第2個(gè)(長(zhǎng)度為N的)分段序列開始輸入進(jìn)第二個(gè)FFTIP,輸入后補(bǔ)N個(gè)0,補(bǔ)零同時(shí), 第3個(gè)長(zhǎng)度為N的分段序列再輸入進(jìn)第一個(gè)FFTIP并補(bǔ)N個(gè)0,如此依次將奇數(shù)段分段序 列和偶數(shù)段分段序列輸入,相鄰兩分段序列相差的時(shí)鐘周期始終為N。
[0027] 本發(fā)明的有益效果:
[0028] (1)本發(fā)明提供的用于FPGA的高速高階FIR濾波器的頻域?qū)崿F(xiàn)方法不僅能降低 FPGA資源消耗,還能夠消除現(xiàn)有技術(shù)中的補(bǔ)零延遲現(xiàn)象,提高了處理速度,能實(shí)現(xiàn)實(shí)時(shí)處 理。
[0029] (2)本發(fā)明提供的FIR濾波器的頻域?qū)崿F(xiàn)方案解決了高階情況下高速處理的資源 消耗的問(wèn)題,優(yōu)化硬件結(jié)構(gòu),且FIR濾波器的系數(shù)可配置。
【附圖說(shuō)明】
[0030] 圖1:現(xiàn)有技術(shù)頻域?qū)崿F(xiàn)兩個(gè)序列的線性卷積流程圖;
[0031] 圖2 :本發(fā)明提供的在FPGA中設(shè)計(jì)FIR濾波器的結(jié)構(gòu)圖;
[0032]圖3:本發(fā)明提供的是輸入信號(hào)的具體時(shí)序圖;
[0033] 圖4:本發(fā)明提供的分段卷積之后的輸出信號(hào)的時(shí)序圖;
[0034]圖5:本發(fā)明所使用的FFTIP核模塊示意圖。
【具體實(shí)施方式】
[0035] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合實(shí)施例和附圖對(duì)本發(fā) 明實(shí)時(shí)方案進(jìn)一步的詳細(xì)描述。
[0036] 本發(fā)明提供一種用于FPGA的高速高階FIR濾波器的頻域?qū)崿F(xiàn)方法,該方法對(duì)利用 頻域處理卷積運(yùn)算時(shí),由于補(bǔ)零耗時(shí)造成的數(shù)據(jù)無(wú)法實(shí)時(shí)處理這一問(wèn)題進(jìn)行了改進(jìn),將原 來(lái)利用一個(gè)FFTIP處理序列的常規(guī)方案改為利用兩個(gè)FFTIP對(duì)輸入的數(shù)據(jù)進(jìn)行運(yùn)算,序列 時(shí)序如圖3所示。該方法適用于系數(shù)為實(shí)整數(shù)或復(fù)整數(shù)的系統(tǒng),適用于超高階系統(tǒng),適用于 脈沖壓縮系統(tǒng),適用于系數(shù)可配置的系統(tǒng)。
[0037] 下面以XILINX公司FPGA作為平臺(tái)來(lái)闡述本發(fā)明所述的技術(shù)方案。
[0038]FIR濾波器的本質(zhì)就是有限長(zhǎng)序列與無(wú)限長(zhǎng)序列的線性卷積,即:
[0039]y(n) =x(n)*h(n) =IFFT{FFT[x(n) ]XFFT[h(n) ]}
[0040] 對(duì)無(wú)限長(zhǎng)序列的卷積,將x(n)分段成多個(gè)長(zhǎng)度為N的有限長(zhǎng)子序列集xm(n)在頻 域上卷積,其中,沖擊響應(yīng)h(n)長(zhǎng)度為M=N+l;x