梁春芳 宋偉偉
摘要:文章針對(duì)如何利用有符號(hào)DA算法實(shí)現(xiàn)FIR濾波器進(jìn)行了詳細(xì)的介紹,主要討論了有符號(hào)DA算法的原理和FIR濾波器的實(shí)現(xiàn)。并采用VHDL語(yǔ)言編程來(lái)實(shí)現(xiàn)算法中的查表和乘累加運(yùn)算。
關(guān)鍵詞:有符號(hào)DA算法VHDLFPGAFIR濾波器
1. 引言
隨著科學(xué)技術(shù)的迅速發(fā)展,數(shù)字信號(hào)處理技術(shù)的應(yīng)用領(lǐng)域不斷擴(kuò)大,逐漸成為應(yīng)用最廣和最有潛力的技術(shù)之一。與此同時(shí)現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(FPGA)也迅速的發(fā)展起來(lái),成為了與數(shù)字信號(hào)處理密切相關(guān)的技術(shù)。數(shù)字濾波器是處理數(shù)字信號(hào)時(shí)必不可少的一部分,而FIR濾波器是其中的一種。FIR濾波器的實(shí)現(xiàn)方法有許多,可用DSP芯片,或者是專用的FIR濾波器集成電路(ASIC)等來(lái)實(shí)現(xiàn)。其中使用FPGA實(shí)現(xiàn)時(shí)可以在速度、設(shè)計(jì)周期和可編程性等方面有明顯的優(yōu)勢(shì),在FPGA實(shí)現(xiàn)的過(guò)程中分布式算法為乘累加運(yùn)算提高了速度與此同時(shí)也節(jié)省了資源。
2. 有符號(hào)分布式FIR濾波器
2.1 有符號(hào)DA算法
數(shù)字信號(hào)處理的對(duì)象為數(shù)字信號(hào),而處理方式可歸結(jié)為一些基本的數(shù)學(xué)運(yùn)算(如加法、累加、乘法、比較以及開(kāi)方等運(yùn)算。乘累加運(yùn)算是乘法和累加運(yùn)兩種算的結(jié)合,其中分布式算法(DA)在乘累加運(yùn)算中被廣泛應(yīng)用,分布式算法又分為無(wú)符號(hào)DA算法和有符號(hào)DA算法。
乘累加運(yùn)算可寫(xiě)為 。假設(shè)c(n)為固定的常數(shù), 為有符號(hào)數(shù),則
其中, 表示用二進(jìn)制數(shù)表示 的第b位。若令,則 。
2.2 FIR濾波器
數(shù)字濾波器分類(lèi)方式有很多,其中根據(jù)系統(tǒng)的時(shí)域性能可分為有限脈沖響應(yīng)數(shù)字濾波器(FIR)和無(wú)限脈沖響應(yīng)數(shù)字濾波器(IIR)。其中IIR濾波器保留了模擬濾波器的幅度特性的特點(diǎn),但是在線性相位特性方面卻被忽視,為了保證濾波器有良好的線性相位特性引入了FIR濾波器。FIR濾波器的脈沖響應(yīng)由有限個(gè)采樣值構(gòu)成。抽頭數(shù)為(N)階數(shù)為(N-1)的FIR系統(tǒng)的差分方程為 上式表明完成一次的濾波要進(jìn)行N次的乘法和N-1次的加法運(yùn)算。
2.3 有符號(hào)DA在FIR濾波器中的應(yīng)用
因?yàn)?所以現(xiàn)假設(shè)B=5然后對(duì)x(n)進(jìn)行整理
由上式可知濾波器的輸出與查找表的結(jié)果有一定的關(guān)系,即查表輸出右移后與反饋相加再左移,此查表方法比傳統(tǒng)的乘累加算法省去了許多過(guò)程。
3. FIR濾波器的實(shí)現(xiàn)
3.1查找表的建立
由于 ,假設(shè) 、 、 , 最高為8,則建立的表如下
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
3.2 VHDL語(yǔ)言部分程序設(shè)計(jì)
本程序是以4位二進(jìn)制的有符號(hào)數(shù)x0_in,x1_in,x2_in為例編寫(xiě)的,通過(guò)建立查詢表來(lái)獲取f(b)。并通過(guò)狀態(tài)機(jī)來(lái)分別對(duì)變量和信號(hào)初始化和移位,當(dāng)狀態(tài)為s0時(shí),對(duì)變量和信號(hào)初始化;當(dāng)狀態(tài)為s1時(shí),對(duì)信號(hào)移位和對(duì)變量累加。其主要部分程序如下:
建立查詢表:
case table_in is
when"000"=>table_out<=0; when"001"=>table_out<=-2; when"010"=>table_out<=3;
when"011"=>table_out<=1; when"100" =>table_out<=1; when"101"=>table_out<=-1;
when"110"=>table_out<=4; when"111"=>table_out<=2; When others=>table_out<=0;
end case;
初始化變量和信號(hào)(狀態(tài)為s0時(shí)):
state<=s1; count:=0; p:=0; x0<=x_in0; x1<=x_in1; x2<=x_in2;
移位并累加(狀態(tài)為s1時(shí)):
if count=4theny<=p;
else if count=3thenp:=p/2-table_out*8;
elsep:=p/2+table_out*8;
end if;
for k in 0 to 2 loop
x0(k)<=x0(k+1); x1(k)<=x1(k+1); x2(k)<=x2(k+1);
end loop;
count:=count+1;
end if;
4. 結(jié)束語(yǔ)
本文介紹了有符號(hào)DA算法實(shí)現(xiàn)FIR濾波器的設(shè)計(jì)過(guò)程。講述了有符號(hào)DA算法的原理和告訴實(shí)現(xiàn)乘累加的原理,采用一種循環(huán)移位相加的算法來(lái)實(shí)現(xiàn)FIR濾波器。并用VHDL語(yǔ)言編程實(shí)現(xiàn)。FPGA的出現(xiàn)使具有線性相位特性的FIR濾波器的實(shí)現(xiàn)變得簡(jiǎn)單,而且也成為以后數(shù)字信號(hào)處理技術(shù)中不可或缺的重要部分。
5. 參考文獻(xiàn)
[1] 《數(shù)字信號(hào)處理》(第三版) 高西全、丁玉美編著 西安電子科技大學(xué)出版社2008-08
[2] 《基于FPGA的數(shù)字信號(hào)處理》 高亞軍編著 電子工業(yè)出版社 2012-02
[3]《數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn)》 劉凌、胡永生編著清華大學(xué)出版社 2002—06