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