DA算法的FIR濾波器設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.引言
在數(shù)字信號處理系統(tǒng)中,F(xiàn)IR數(shù)字濾波器多采用專用DSP芯片(如TMS320CXX系列),這種基于DSP的處理系統(tǒng)存在很多優(yōu)點(diǎn),比如方案靈活、可操作性強(qiáng)、程序易于移植。但這種結(jié)構(gòu)的濾波器多是根據(jù)FIR 濾波器的數(shù)據(jù)移位相乘累加的算法編寫相應(yīng)軟件,利用軟、硬件相互結(jié)合完成濾波器的設(shè)計(jì)。由于軟件運(yùn)行時(shí),指令都是串行執(zhí)行的,這嚴(yán)重制約了系統(tǒng)的運(yùn)行速率,不能滿足高傳輸速率,大數(shù)據(jù)吞吐量的數(shù)字信號的實(shí)時(shí)性處理要求。而基于DA算法的FPGA濾波器則是一種采用純硬件的方式實(shí)現(xiàn)FIR 濾波器的方式,這種方法突出的優(yōu)點(diǎn)是運(yùn)算速度快,特別適合在高速、實(shí)時(shí)、快變的數(shù)字信號處理要求。
2.DA算法的基本思想
第一個(gè)討論分布式算法(distributed arithmetic,DA)的可以追溯到1973年Cr0i Croisier的一篇論文,并由Peled和Liu來推廣。但是直到FPGA出現(xiàn)以后,才在FPG計(jì)算乘積和中被廣泛地應(yīng)用。在FPGA 芯片設(shè)計(jì)中,分布式算法(distributed arithmetic,DA)是一種很重要的技術(shù)。它在乘積和的計(jì)算中已被廣泛應(yīng)用,為了理解DA算法設(shè)計(jì)原理,我們考慮有一個(gè)線性時(shí)不變網(wǎng)絡(luò)的輸出可以用下式表示:
假設(shè)系數(shù)c[n]是已知常數(shù),x[n]是變量,在有符號DA系統(tǒng)中假設(shè)變量x[n]的表達(dá)式如下:
其中xb[n]表示 x[n]的第b位,即x[n]是x第n個(gè)樣點(diǎn)。所以,內(nèi)積y 可以表示為:
我們重新分別求和次序(這就是分布式算法的由來),結(jié)果是:
y=(c[0]xB-1[0]+c[1]+……+c[N-1]xB-1[N-1])2B-1+(c[0]xB-2[0]+c[1]+……+c[N-1]xB-2[N-1])2B-2 (2-4)
.
.
.
+(c[0]x0[0]+c[1]x0[1]+c[N-1]x0[N-1])20
用更緊湊的形式表示為:
從(2—4)式可以發(fā)現(xiàn),分布式算法是一種以實(shí)現(xiàn)乘加運(yùn)算為目的的運(yùn)算方法。它與傳統(tǒng)算法實(shí)現(xiàn)乘加運(yùn)算的不同在于執(zhí)行部分積運(yùn)算的先后順序不同。分布式算法在實(shí)現(xiàn)乘加功能時(shí),是通過將各輸入數(shù)據(jù)的每一對應(yīng)位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)的部分積,然后再對各個(gè)部分積累加而得到最終的結(jié)果,而傳統(tǒng)算法是等到所有乘積已經(jīng)產(chǎn)生之后再來相加完成乘加運(yùn)算的。與傳統(tǒng)串行算法相比,分布式算法可極大地減少硬件電路的規(guī)模,提高電路的執(zhí)行速度。
3.基于DA算法的FIR數(shù)字濾波器的硬件實(shí)現(xiàn)
由上面分析可以知道,對于任何一個(gè)線性時(shí)不變網(wǎng)絡(luò)總可以將它轉(zhuǎn)換成式(2-5)那樣的形式,FIR濾波器是一個(gè)很典型的線性時(shí)不變網(wǎng)絡(luò),它的表達(dá)式是:
我們可以將它轉(zhuǎn)化成下面這樣的形式:
在本系統(tǒng)中,采用的是8 位輸入,所以B = 8 則:
線性相位FIR濾波器滿足系數(shù)對稱條件,本系統(tǒng)設(shè)計(jì)的系統(tǒng)為16階,那么它的系數(shù)關(guān)于h[7]偶對稱,即有:
h[n]= h[16-1-n]= h[15-n] (3-4)
由式(3-3)和(3-4)可得到實(shí)現(xiàn)系統(tǒng)硬件框圖如圖3-1:
4.系統(tǒng)的VHDL描述
4.1頂層模塊設(shè)計(jì)
Library ieee;
Use ieee.std_logic_1164.a11;
Use ieee.std_logic_unsigned.all;
Entity FIR is
Port (x: in std_logic_vector(7 downto 0);
clk : in std_logic;
y : out std_logic_vector(7 downto 0));
end FIR;
architecture behave of FIR is
component lpfir
port (
in : in std_logic_vector(7 downto 0);
clk : in std_logic;
out : out std_logic_vector(7 downto 0));
end component ;
begin
process(clk)
begin
u1:lpfir port map (x,clk,y);
end process;
end behave;
4.2 LUT查詢表ROM的建立
用MIF文件格式編輯的ROM初始化值
WIDTH = 16
DEPTH = 16
ADDRESS_RADIX = HEX ;[!--empirenews.page--]
DATA_RADIX = HEX ;
CONTENT BEGIN
0 : 0000;
1 : 0045;
2 : 00E6;
……
F : 0000;
END;
4.3 濾波器系數(shù)的設(shè)計(jì)
我們利用matlab 自帶的濾波器設(shè)計(jì)工具FDAtool和信號處理工具Pstool設(shè)計(jì)出一個(gè)16階窗函數(shù)FIR低通濾波器。它的具體參數(shù)是:
窗函數(shù)類型:Blackman窗,信號采樣頻率:50KHz,通帶截至頻率10KHz,濾波系數(shù)h[n]見下表1,該濾波器的傳輸特性如下圖4-1 所示:
5.系統(tǒng)的仿真與結(jié)果分析
為了驗(yàn)證與檢測該系統(tǒng)的效果,我們采用Cyclone 公司EP1C6Q240C8芯片對系統(tǒng)進(jìn)行了開發(fā),并通過ALTERA 公司的綜合設(shè)計(jì)工具Quartus II 4.2 對該系統(tǒng)進(jìn)行了綜合編譯與仿真,我們對該系統(tǒng)連續(xù)輸入了16個(gè)數(shù)據(jù)(0.3,0.32,-0.79,0.45,-0.87,-0.91,-0.12,0.89,0.37,0.66,-0.57,0.75,-0.21,0.96,0.56,-0.19)進(jìn)行處理,得到了如下仿真結(jié)果。
5.1 系統(tǒng)綜合性能的仿真結(jié)果
系統(tǒng)的綜合性能見表5-1:
由表5-1可以看出系統(tǒng)占有硬件資源很少,運(yùn)行速度很高。
5.2 系統(tǒng)處理準(zhǔn)確性的仿真結(jié)果
系統(tǒng)的處理結(jié)果與理論結(jié)果對比見表5-2:
為了獲得一個(gè)更為準(zhǔn)確的結(jié)果,取后8 個(gè)數(shù)據(jù)進(jìn)行分析,通過表5-2我們可以看出該系統(tǒng)的實(shí)際處理結(jié)果與理論計(jì)算結(jié)果誤差很小,可以滿足實(shí)際工程方面的需求。
6. 結(jié)論
以上理論分析和仿真結(jié)果表明,軟硬件結(jié)合串行執(zhí)行的DSP算法相比,DA算法具有明顯的占用系統(tǒng)資源低和運(yùn)行速度高的優(yōu)點(diǎn),是一種更為有效的FIR 濾波器設(shè)計(jì)方法;基于DA算法的數(shù)字信號處理設(shè)計(jì)具有DSP算法所無可比擬的優(yōu)勢,在極大的提高了FIR 數(shù)字濾波器的處理速度和數(shù)據(jù)吞吐能力的同時(shí),又可以保證系統(tǒng)很小的處理誤差,是一種比較實(shí)用可靠高效的設(shè)計(jì)方法。