<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于FPGA的Kalman濾波器實現(xiàn)研究

          基于FPGA的Kalman濾波器實現(xiàn)研究

          作者: 時間:2012-04-25 來源:網(wǎng)絡(luò) 收藏

          2 在中實現(xiàn)濾波算法研究
          由于實現(xiàn)濾波解算速度非???,若利用的串行口依次輸入觀測值,由于數(shù)據(jù)串行輸入的特點,會使FPGA的解算部分等待數(shù)據(jù)接收完畢才能執(zhí)行濾波解算,導(dǎo)致整體的解算時間過長。為檢驗FPGA實現(xiàn)的計算性能,本文預(yù)先將觀測值輸入并保存于FPGA內(nèi)的ROM中,以使FPGA可以連續(xù)地進(jìn)行濾波解算,實現(xiàn)方案原理如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/190479.htm

          和Pk+1/k,然后進(jìn)入S2狀態(tài),計算Kk+1,最后計算解算結(jié)果j.jpg和Pk+1/k+1。計算Kk+1時,也需要將其分步實現(xiàn)。若將各步的解算歸于同一個狀態(tài)機(jī)內(nèi),則顯得邏輯復(fù)雜。為使得各步的邏輯更加清晰,并且增加狀態(tài)機(jī)的穩(wěn)定性和安全性,使用交互狀態(tài)機(jī),如圖2所示。

          e.JPG


          圖2中,狀態(tài)機(jī)的交互過程中,沒置標(biāo)志信號enble和finish分別用于啟動和終止計算K值的狀態(tài),初始化時其值均為0。當(dāng)計算完第一步進(jìn)入S2時,enble置為1,啟動計算K值的狀態(tài);當(dāng)K值計算完成時,finish置為1,進(jìn)入S3,enble和finish置為初值0,為下次狀態(tài)交互做準(zhǔn)備。進(jìn)入原狀態(tài)機(jī)繼續(xù)進(jìn)行下面的計算。
          書寫狀態(tài)機(jī)時,采用三段式寫法,一個模塊采用同步時序描述狀態(tài)轉(zhuǎn)移,另一個模塊采用組合邏輯判斷轉(zhuǎn)移條件并進(jìn)行狀態(tài)轉(zhuǎn)移,第三個模塊實現(xiàn)同步輸出。三段式描述方法的狀態(tài)機(jī),做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定和毛刺現(xiàn)象,而且更利于時序路徑分組,綜合與布局布線效果更佳。
          2.3 資源分時復(fù)用
          FPGA設(shè)計中,資源與速度是個矛盾體。FPGA中的資源是有限的,所以必須考慮資源的節(jié)省問題。由于Kalman濾波可以分3步進(jìn)行,所以每一步可以利用其它步中相同的資源。此種方法可以在不降低總體速度的情況下,減少資源利用量;而對于階次較高的Kalman濾波,此方法可以最大限度的增加并行性,提高速度。該設(shè)計中用到大量的乘法器、加法器以及CLB等資源,計算第一步時用到的資源會在第二步和第三步中用到,即同一資源被用到3次。以其中用到的某乘法器的分時復(fù)用為例,其輸入端口在不同的時刻可以有不同的賦值,實現(xiàn)語句如下:
          f.JPG



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();