基于FPGA的四階IIR數(shù)字濾波器
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模塊的輸出數(shù)據(jù)采用將補(bǔ)碼最高符號位直接取反轉(zhuǎn)換為移碼后,就可以送到DAC7520實(shí)現(xiàn)雙極性信號輸出。
3 系統(tǒng)性能測試
系統(tǒng)性能的測試采用單極性方波周期信號作為輸入信號。信號的頻率為100kHz,在采樣頻率為2MHz時(shí),每個(gè)周期采樣20個(gè)點(diǎn),換算成數(shù)字域頻率為0.1π,其二次諧波的數(shù)字頻率為0.2π。輸入到TLC5510的信號電壓幅度為0~2V,則經(jīng)過A/D轉(zhuǎn)換后的輸出為00H~FFH。由于低通濾波器的阻帶截止頻率選在200kHz,衰減32dB,由信號理論分析可知,周期方波信號沒有二次諧波,所以對三次諧波的衰減經(jīng)過IIR濾波器后輸出有直流分量的基波(頻率為100kHz)正弦信號。理論計(jì)算給出的方波周期信號基波幅度為:
2E/π=(2×255)/π=162.34
輸入一個(gè)周期的數(shù)據(jù),Matlab的計(jì)算值與MAX+plusⅡ的仿真值如表3所示。
表3 濾波后輸出的數(shù)據(jù)
輸入數(shù)據(jù)
255
255
255
255
255
255
255
255
255
255
計(jì)算值
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
輸入數(shù)據(jù)
0
0
0
0
0
0
0
0
0
0
計(jì)算值
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可見,仿真輸出值為補(bǔ)碼,谷點(diǎn)輸出值993換算成符號數(shù)為993-1024=-31。Matlab軟件計(jì)算的滿度輸出值為286.9,其基波幅度為[286.9-(-34.9)]/2=160.9,與理論值的誤差為:
(160.9-162.34)/162.34=-0.87%
四階IIR濾波器實(shí)現(xiàn)的滿度輸出值為[282-(-31)]/2=156.5,與理論值的誤差為:
(156.5-162.34)/162.34=-3.6%
這是由于有限精度算法所引起的誤差,可以通過增加二進(jìn)制位數(shù)來提高系統(tǒng)的運(yùn)算精度。圖4給出單極性方波信號的前三個(gè)周期經(jīng)過濾波后得到的含直流分量的輸出波形,其中實(shí)線為Matlab的計(jì)算值,“*”為MAX+plusⅡ的仿真輸出??梢?,該四階級聯(lián)IIR濾波器達(dá)到了設(shè)計(jì)要求。
如果改變?yōu)V波器的輸入時(shí)鐘頻率,則可以改變?yōu)V波器的截止頻率。另外如果輸入無直流分量的周期信號,而且其頻率為采樣頻率的1/20,則該低通濾波器可以直接得到基波分量輸出。其實(shí),要將TLC5510輸出的直流分量濾出很容易,只需利用FPGA做一個(gè)減法運(yùn)算即可。
評論