基于FPGA的Kalman濾波器實(shí)現(xiàn)研究
2 在FPGA中實(shí)現(xiàn)Kalman濾波算法研究
由于FPGA實(shí)現(xiàn)Kalman濾波解算速度非???,若利用FPGA的串行口依次輸入觀測(cè)值,由于數(shù)據(jù)串行輸入的特點(diǎn),會(huì)使FPGA的解算部分等待數(shù)據(jù)接收完畢才能執(zhí)行濾波解算,導(dǎo)致整體的解算時(shí)間過(guò)長(zhǎng)。為檢驗(yàn)FPGA實(shí)現(xiàn)Kalman濾波器的計(jì)算性能,本文預(yù)先將觀測(cè)值輸入并保存于FPGA內(nèi)的ROM中,以使FPGA可以連續(xù)地進(jìn)行濾波解算,實(shí)現(xiàn)方案原理如圖1所示。本文引用地址:http://2s4d.com/article/190479.htm
和Pk+1/k,然后進(jìn)入S2狀態(tài),計(jì)算Kk+1,最后計(jì)算解算結(jié)果和Pk+1/k+1。計(jì)算Kk+1時(shí),也需要將其分步實(shí)現(xiàn)。若將各步的解算歸于同一個(gè)狀態(tài)機(jī)內(nèi),則顯得邏輯復(fù)雜。為使得各步的邏輯更加清晰,并且增加狀態(tài)機(jī)的穩(wěn)定性和安全性,使用交互狀態(tài)機(jī),如圖2所示。
圖2中,狀態(tài)機(jī)的交互過(guò)程中,沒(méi)置標(biāo)志信號(hào)enble和finish分別用于啟動(dòng)和終止計(jì)算K值的狀態(tài),初始化時(shí)其值均為0。當(dāng)計(jì)算完第一步進(jìn)入S2時(shí),enble置為1,啟動(dòng)計(jì)算K值的狀態(tài);當(dāng)K值計(jì)算完成時(shí),finish置為1,進(jìn)入S3,enble和finish置為初值0,為下次狀態(tài)交互做準(zhǔn)備。進(jìn)入原狀態(tài)機(jī)繼續(xù)進(jìn)行下面的計(jì)算。
書(shū)寫(xiě)狀態(tài)機(jī)時(shí),采用三段式寫(xiě)法,一個(gè)模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移,另一個(gè)模塊采用組合邏輯判斷轉(zhuǎn)移條件并進(jìn)行狀態(tài)轉(zhuǎn)移,第三個(gè)模塊實(shí)現(xiàn)同步輸出。三段式描述方法的狀態(tài)機(jī),做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定和毛刺現(xiàn)象,而且更利于時(shí)序路徑分組,綜合與布局布線效果更佳。
2.3 資源分時(shí)復(fù)用
FPGA設(shè)計(jì)中,資源與速度是個(gè)矛盾體。FPGA中的資源是有限的,所以必須考慮資源的節(jié)省問(wèn)題。由于Kalman濾波可以分3步進(jìn)行,所以每一步可以利用其它步中相同的資源。此種方法可以在不降低總體速度的情況下,減少資源利用量;而對(duì)于階次較高的Kalman濾波,此方法可以最大限度的增加并行性,提高速度。該設(shè)計(jì)中用到大量的乘法器、加法器以及CLB等資源,計(jì)算第一步時(shí)用到的資源會(huì)在第二步和第三步中用到,即同一資源被用到3次。以其中用到的某乘法器的分時(shí)復(fù)用為例,其輸入端口在不同的時(shí)刻可以有不同的賦值,實(shí)現(xiàn)語(yǔ)句如下:
評(píng)論