基于FPGA實現FIR濾波器的研究
發布時間:2007/8/23 0:00:00 訪問次數:431
文章作者:武漢大學電氣工程學院 郭曉宇 潘 登 楊同中
摘要:針對在FPGA中實現FIR濾波器的關鍵--乘法運算的高效實現進行了研究,給了了將乘法化為查表的DA算法,并采用這一算法設計了FIR濾波器。通過FPGA仿零點驗證,證明了這一方法是可行和高效的,其實現的濾波器的性能優于用DSP和傳統方法實現FIR濾波器。最后介紹整數的CSD表示和還處于研究階段的根據FPGA實現的要求改進的最優表示。
關鍵詞:FPGA DA FIR濾波器 CSD
數字濾波器是語音與圖像處理、模式識別、雷達信號處理、頻譜分析等應用中的一種基本的處理部件,它能滿足波器對幅度和相位特性的嚴格要求,避免模擬乙波器所無法克服的電壓漂移、溫度漂移和噪聲等問題。有限沖激響應(FIR)濾波器能在設計任意幅頻特性的同時保證嚴格的線性相位特性。
目前FIR濾波器的實現方法有三種:利用單片通用數字濾波器集成電路、DSP器件和可編程邏輯器件實現。單片通用數字濾波器使用方便,但由于字長和階數的規格較少,不能完全滿足實際需要。使用DSP器件實現雖然簡單,但由于程序順序執行,執行速度必然不快。FPGA有著規整的內部邏輯陣列和豐富的連線資源,特別適合于數字信號處理任務,相對于串行運算為主導的通用DSP芯片來說,其并行性和可擴展性更好。但長期以來,FPGA一直被用于系統邏輯或時序控制上,很少有信號處理方面的應用,其原因主要是因為在FPGA中缺乏實現乘法運算的有效結構。現在這個問題得到了解決,使FPGA在數字信號處理方面有了長足的發展。
1 分布式運算原理
分布式算法(DA)早在1973年就已經被Croisier提出來了,但是直到FPGA出現以后,才被廣泛地應用在FPGA中計算乘積和。
一個線性時不變網絡的輸出可以用下式表示:
=c[0]x[0]+c[1]x[1]+…+c[N-1]x[N-1]
假設系數c[n]是已知常數,x[n]是變量,在有符號DA系統中假設變量x[n]的表達式如下:
式中,xb[n]表示z[叫的第b位,而x[n]也就是x的第n次采樣。于是,內積y可以表示為:
重新分別求和(也就是分布式算法的由來),其結果如下:
從(1)式可以發現,分布式算法是一種以實現乘加運算為目的的運算方法。它與傳統算法實現乘加運算的不同在于執行部分積運算的先后順序不同。分布式算法在實現乘加功能時,是通過將各輸入數據的每一對應位產生的部分積預先進行相加形成相應的部分積,然后再對各個部分積累加形成最終結果的,而傳統算法是等到所有乘積已經產生之后再來相加完成乘加運算的。與傳統串行算法相比,分布式算法可極大地減少硬件電路的規模,提高電路的執行速度。它的實現框圖如圖1(虛線為流水線寄存器)所示。
2 用分布式原理實現FIR濾波器
2.1 串行方式
當系統對速度的要求不高時,可以采用串行的設計方法,即采用一個DA表、一個并行累加器和少量的寄存器就可以了。
在用LUT實現串行分布式算法的時候,假設系數為8位,則DA表的規模為2N×8位。可以看到如果抽頭系數N過多,則DA表的規模將十分龐大。這是因為LUT的規模隨著地址空間的變化(也就是N的增加)而呈指數增加。例如EPFl0K20包含1152個LC,而一個27×7位的表就需要394個LC。當N過大時,一個FPGA器件就不夠用了。
為了減小規模,可以利用部分表計算,然后將結果相加。假定長度為LN的內積為:
將和分配到L個獨立的N階并行DA的LUT之中結果如下:
如圖2所示,實現一個4N的DA設計需要3個次輔助加法器。表格的規模從一個2 N×B位的LUT降到4個2 N×B的位表。
如果再加上流水線寄存器,由于EPFl0K20每個LC后面都跟有一個寄存器,所以并沒有增加電路規模,而速度卻得到了提高。
2.2 并行方式
采用并行方式的好處是處理速度得到了提高。由于數據是并行輸入,所以計算速度要比串行方式快,但它的代價是硬件規模更大了。下面舉出全并行的例子。
設 sum[0]=c[0]x0+[0]+c[1]x0[1]+…+c[N-1]x0[N-1]
sum[B-1]=c[B-1]xB-1[0]+c[1]xB-1[1]+…c[N-1]+xB-1[N-1]
可將(1)式改寫成如下形式
y=sum[0]+sum[1]2 1+sum[2] 2+…+sum[B-1]2 B-1 (2)
利用式(2)可得一種直觀的加法器樹,如圖3所示。
雖然硬件規模加大了,但
文章作者:武漢大學電氣工程學院 郭曉宇 潘 登 楊同中
摘要:針對在FPGA中實現FIR濾波器的關鍵--乘法運算的高效實現進行了研究,給了了將乘法化為查表的DA算法,并采用這一算法設計了FIR濾波器。通過FPGA仿零點驗證,證明了這一方法是可行和高效的,其實現的濾波器的性能優于用DSP和傳統方法實現FIR濾波器。最后介紹整數的CSD表示和還處于研究階段的根據FPGA實現的要求改進的最優表示。
關鍵詞:FPGA DA FIR濾波器 CSD
數字濾波器是語音與圖像處理、模式識別、雷達信號處理、頻譜分析等應用中的一種基本的處理部件,它能滿足波器對幅度和相位特性的嚴格要求,避免模擬乙波器所無法克服的電壓漂移、溫度漂移和噪聲等問題。有限沖激響應(FIR)濾波器能在設計任意幅頻特性的同時保證嚴格的線性相位特性。
目前FIR濾波器的實現方法有三種:利用單片通用數字濾波器集成電路、DSP器件和可編程邏輯器件實現。單片通用數字濾波器使用方便,但由于字長和階數的規格較少,不能完全滿足實際需要。使用DSP器件實現雖然簡單,但由于程序順序執行,執行速度必然不快。FPGA有著規整的內部邏輯陣列和豐富的連線資源,特別適合于數字信號處理任務,相對于串行運算為主導的通用DSP芯片來說,其并行性和可擴展性更好。但長期以來,FPGA一直被用于系統邏輯或時序控制上,很少有信號處理方面的應用,其原因主要是因為在FPGA中缺乏實現乘法運算的有效結構。現在這個問題得到了解決,使FPGA在數字信號處理方面有了長足的發展。
1 分布式運算原理
分布式算法(DA)早在1973年就已經被Croisier提出來了,但是直到FPGA出現以后,才被廣泛地應用在FPGA中計算乘積和。
一個線性時不變網絡的輸出可以用下式表示:
=c[0]x[0]+c[1]x[1]+…+c[N-1]x[N-1]
假設系數c[n]是已知常數,x[n]是變量,在有符號DA系統中假設變量x[n]的表達式如下:
式中,xb[n]表示z[叫的第b位,而x[n]也就是x的第n次采樣。于是,內積y可以表示為:
重新分別求和(也就是分布式算法的由來),其結果如下:
從(1)式可以發現,分布式算法是一種以實現乘加運算為目的的運算方法。它與傳統算法實現乘加運算的不同在于執行部分積運算的先后順序不同。分布式算法在實現乘加功能時,是通過將各輸入數據的每一對應位產生的部分積預先進行相加形成相應的部分積,然后再對各個部分積累加形成最終結果的,而傳統算法是等到所有乘積已經產生之后再來相加完成乘加運算的。與傳統串行算法相比,分布式算法可極大地減少硬件電路的規模,提高電路的執行速度。它的實現框圖如圖1(虛線為流水線寄存器)所示。
2 用分布式原理實現FIR濾波器
2.1 串行方式
當系統對速度的要求不高時,可以采用串行的設計方法,即采用一個DA表、一個并行累加器和少量的寄存器就可以了。
在用LUT實現串行分布式算法的時候,假設系數為8位,則DA表的規模為2N×8位。可以看到如果抽頭系數N過多,則DA表的規模將十分龐大。這是因為LUT的規模隨著地址空間的變化(也就是N的增加)而呈指數增加。例如EPFl0K20包含1152個LC,而一個27×7位的表就需要394個LC。當N過大時,一個FPGA器件就不夠用了。
為了減小規模,可以利用部分表計算,然后將結果相加。假定長度為LN的內積為:
將和分配到L個獨立的N階并行DA的LUT之中結果如下:
如圖2所示,實現一個4N的DA設計需要3個次輔助加法器。表格的規模從一個2 N×B位的LUT降到4個2 N×B的位表。
如果再加上流水線寄存器,由于EPFl0K20每個LC后面都跟有一個寄存器,所以并沒有增加電路規模,而速度卻得到了提高。
2.2 并行方式
采用并行方式的好處是處理速度得到了提高。由于數據是并行輸入,所以計算速度要比串行方式快,但它的代價是硬件規模更大了。下面舉出全并行的例子。
設 sum[0]=c[0]x0+[0]+c[1]x0[1]+…+c[N-1]x0[N-1]
sum[B-1]=c[B-1]xB-1[0]+c[1]xB-1[1]+…c[N-1]+xB-1[N-1]
可將(1)式改寫成如下形式
y=sum[0]+sum[1]2 1+sum[2] 2+…+sum[B-1]2 B-1 (2)
利用式(2)可得一種直觀的加法器樹,如圖3所示。
雖然硬件規模加大了,但
上一篇:十全大補音響設備常識二