基于FPGA的四階IIR數字濾波器設計
本文引用地址:http://butianyuan.cn/article/168076.htm
tan<=tmpa(9);tbn<=tmpb(9);
tp<=taa*tbb;
p<=(others=>‘0’) when (tmpb=“0000000000”) else
tp2n & tpp;
process (clk_reg,clk_regbt)
begin
if clk_reg=‘1’ then cnt<=“000”;ytmp<=(others=>‘0’);
elsif (clk_regbt’event and clk_regbt=‘1’) then
if cnt<5 then cnt<=cnt+1;ytmp<=ytmp+p;
elsif (cnt=5) then
if ytmp(7)=‘1’ then
yout(8 downto 0)<=ytmp(16 downto 8)+1;
yout(9)<=ytmp(23);
else yout(8 downto 0)<=ytmp(16 downto 8);
yout(9)<=ytmp(23); end if;
end if;
end if;
end process;
end behav;
IIR2模塊的輸出數據采用將補碼最高符號位直接取反轉換為移碼后,就可以送到DAC7520實現雙極性信號輸出。
3 系統(tǒng)性能測試
系統(tǒng)性能的測試采用單極性方波周期信號作為輸入信號。信號的頻率為100kHz,在采樣頻率為2MHz時,每個周期采樣20個點,換算成數字域頻率為0.1π,其二次諧波的數字頻率為0.2π。輸入到TLC5510的信號電壓幅度為0~2V,則經過A/D轉換后的輸出為00H~FFH。由于低通濾波器的阻帶截止頻率選在200kHz,衰減32dB,由信號理論分析可知,周期方波信號沒有二次諧波,所以對三次諧波的衰減經過IIR濾波器后輸出有直流分量的基波(頻率為100kHz)正弦信號。理論計算給出的方波周期信號基波幅度為:
2E/π=(2×255)/π=162.34
輸入一個周期的數據,Matlab的計算值與MAX+plusⅡ的仿真值如表3所示。
表3 濾波后輸出的數據
輸入數據
255
255
255
255
255
255
255
255
255
255
計算值
28.7
-8.2
-29.4
-34.9
-25.2
-1.3
34.8
80.0
130.5
182.0
仿真值
32
1020
999
993
1002
1
36
80
129
179
輸入數據
0
0
0
0
0
0
0
0
0
0
計算值
223.4
260.2
281.4
286.9
277.2
253.2
217.1
172.0
121.5
70.1
仿真值
219
255
276
282
273
250
215
171
122
72
由表3可見,仿真輸出值為補碼,谷點輸出值993換算成符號數為993-1024=-31。Matlab軟件計算的滿度輸出值為286.9,其基波幅度為[286.9-(-34.9)]/2=160.9,與理論值的誤差為:
(160.9-162.34)/162.34=-0.87%
四階IIR濾波器實現的滿度輸出值為[282-(-31)]/2=156.5,與理論值的誤差為:
(156.5-162.34)/162.34=-3.6%
這是由于有限精度算法所引起的誤差,可以通過增加二進制位數來提高系統(tǒng)的運算精度。圖4給出單極性方波信號的前三個周期經過濾波后得到的含直流分量的輸出波形,其中實線為Matlab的計算值,“*”為MAX+plusⅡ的仿真輸出??梢?,該四階級聯(lián)IIR濾波器達到了設計要求。
如果改變?yōu)V波器的輸入時鐘頻率,則可以改變?yōu)V波器的截止頻率。另外如果輸入無直流分量的周期信號,而且其頻率為采樣頻率的1/20,則該低通濾波器可以直接得到基波分量輸出。其實,要將TLC5510輸出的直流分量濾出很容易,只需利用FPGA做一個減法運算即可。
評論