高國棟,林 明
(江蘇科技大學 電子信息學院,鎮(zhèn)江 212003)
粒子濾波算法(particle filter, PF)[1]發(fā)展于20世紀90年代,是一種蒙特卡洛方法和遞推貝葉斯估計相結(jié)合的新型估計算法.在處理非線性、非高斯系統(tǒng)的狀態(tài)估計方面具有明顯優(yōu)勢,有效地克服了擴展卡爾曼濾波等方法的局限性.粒子濾波算法自提出至今,在理論上取得了顯著成果,但很多研究還停留在理論仿真階段,如何簡化算法復雜度,提高運算速度,將粒子濾波算法用硬件實現(xiàn),并應用于更多的領域,是當前粒子濾波的研究熱點.硬件實現(xiàn)粒子濾波,為達到更高的濾波精度,往往需要更多的粒子數(shù)量,就意味著需要更大的計算量.PF算法引入了重采樣步驟,削弱了粒子濾波可以進行并行處理的優(yōu)勢,重采樣成為了PF算法實時性處理的瓶頸.GPF(Gaussiam particle filter)算法[2]是PF算法的改進算法,用重要性采樣方法更新狀態(tài)的均值和方差,免去了重采樣步驟,使PF算法的并行運行成為可能.同時GPF算法無需存儲每次迭代得到的所有粒子的狀態(tài)和權重,減少了對存儲空間的要求.因此在硬件實現(xiàn)方面,GPF算法比PF算法更具優(yōu)勢[3].所以文中選擇GPF算法作為硬件實現(xiàn)的目標算法,并將其運用到一個典型的二維純方位跟蹤(2 dimensional bearing-only tracking,2-D BOT)非線性系統(tǒng)中.
為滿足實時性要求,運用現(xiàn)場可編程門列(field-programmable gate array,FPGA),實現(xiàn)硬件并行流水線計算是一種有效方法.已經(jīng)有很多學者對PF算法的硬件實現(xiàn)進行了研究,并都取得了一定成果.為了更利于PF算法的硬件實現(xiàn),文獻[4]中簡化了PF算法,著重對重采樣方法進行了改進,并根據(jù)算法給出了合理的FPGA實現(xiàn)方案.文獻[5]中研究了擬蒙特卡洛-高斯粒子濾波算法的并行結(jié)構(gòu),并在此算法的基礎上給出了FPGA硬件實現(xiàn)方案.文獻[6]中給出了基于System Generator的PF算法硬件實現(xiàn)方案,首先根據(jù)算法搭建Simulink模型,然后轉(zhuǎn)換為RTL代碼.以上的PF算法硬件實現(xiàn)過程,是對具體算法具體分析,給出具體硬件結(jié)構(gòu),因而得到的硬件模塊都具有比較高的性能和資源效率.從總的開發(fā)流程來看,以上粒子濾波IP核各實現(xiàn)過程可概括為算法從軟件到硬件的轉(zhuǎn)換過程.但由于在開發(fā)過程中不但要考慮算法的可行性,還要充分考慮硬件的可實現(xiàn)性,需要關注硬件設計的每個環(huán)節(jié),開發(fā)效率并不是很高,屬于傳統(tǒng)的FPGA開發(fā)過程.
文中針對傳統(tǒng)FPGA開發(fā)流程實現(xiàn)PF算法過程中出現(xiàn)的問題,提出了基于Vivado HLS 的GPF算法的硬件實現(xiàn)方法.該方法根據(jù)特定的綜合優(yōu)化策略,直接將C語言算法綜合為具有期望結(jié)構(gòu)的FPGA硬件模塊.可以用少量的時間開發(fā)出具有同樣高性能的硬件模塊,因而具有比較高的開發(fā)效率,同時也具有較強的開發(fā)靈活性[7-8].
Vivado HLS是Xilinx公司推出的最新一代FPGA設計工具,該工具可以把用C標準語言(C、C++或SystemC)描述的算法模塊編譯并綜合成寄存器傳輸級(RTL)硬件IP模型,產(chǎn)生實現(xiàn)硬件加速所需要的HDL代碼,直接用于在FPGA中實現(xiàn).在硬件開發(fā)過程中,開發(fā)者只需專注于算法規(guī)格、算法C語言實現(xiàn)以及算法宏觀架構(gòu),Vivado HLS工具會自動考慮FPGA的微觀架構(gòu).
用C標準語言設計出算法模塊,輔以相應的約束文件和優(yōu)化策略,同時給出測試模塊行為和功能的C測試文件(C Test Bench).經(jīng)過驗證算法的正確性后,就可以進行RTL級綜合生成,得到RTL代碼.使用Vivado HLS內(nèi)置仿真工具XSIM或者第三方仿真工具Modelsim進行功能仿真,進一步驗證設計的架構(gòu)行為和功能.得到的RTL代碼可直接用于Xilinx設計開發(fā)環(huán)境,做系統(tǒng)集成、仿真以及生成bit文件.
Vivado HLS主要根據(jù)3種參數(shù)來描述模塊的性能[9]:數(shù)據(jù)初始化間隔(Initiation Interval,II)、數(shù)據(jù)延遲(Latency)和面積(Area).其中II代表模塊接收相鄰兩次新的輸入數(shù)據(jù)之間的時鐘間隔,更小的II意味著更大的數(shù)據(jù)吞吐量;Latency指模塊從輸入新的數(shù)據(jù)到給出所有輸出數(shù)據(jù)的延遲時鐘數(shù),更小的Latency表示更快的計算速度;Area指模塊所占用的邏輯資源.HLS默認以II、Latency、Area為優(yōu)先級順序,對C算法進行綜合實現(xiàn).
BOT模型常用于被動跟蹤系統(tǒng)中,由于其隱蔽性好,抗干擾性強,歷來是研究的熱點和難點.目前對BOT問題研究大多基于擴展卡爾曼濾波器及其各種變形來進行.實際上由于系統(tǒng)本身的弱觀測性和狀態(tài)空間模型的強非線性,這些傳統(tǒng)方法在精度方面往往不能滿足要求.GPF算法處理BOT問題有很好表現(xiàn).文中只研究在高斯背景下的純方位跟蹤問題[4],其系統(tǒng)噪聲和量測噪聲都是高斯白噪聲.
在直角坐標系下,BOT模型的系統(tǒng)狀態(tài)方程和觀測方程分別為:
(1)
(1) 初始化.k=0時刻初始化目標狀均值x(0)=[xp(0),xv(0),yp(0),yv(0)]T;初始化狀態(tài)方差Σ(0)=[Σx(0),Σvx(0),Σy(0),Σvy(0)]T.
xi(k-1)~N[x(k-1),Σ(k-1)]
(2)
xi(k)=Φxi(k-1)+Γw(k-1)
(3)
計算權重:
(4)
(4) 權值歸一化.得到每一個粒子的權值后,再對所有權值歸一化:
(5)
(5) 計算估計值.
(6)
(6) 計算k時刻的協(xié)方差.
(7)
(7) 返回到第(2)步進行迭代計算.
當Ns數(shù)量較大時,單步迭代計算將耗費大量時間.為了縮短計算時間以及減少硬件資源的利用,獲得更高的性能,文中從以下幾個方面對算法進行簡化與改進:① 預先計算步驟(3)中的常數(shù)項,把結(jié)果直接代入算法中;② 去掉權值歸一化步驟,將除法運算轉(zhuǎn)變?yōu)槌朔ㄟ\算,再把步驟(3)和步驟(5)的循環(huán)合并為一個大循環(huán);③ 將以上算法關于矩陣的計算變?yōu)闃肆坑嬎?以降低計算的復雜度;④ 盡量減少算法內(nèi)部數(shù)組和頂層模塊端口的讀寫操作,可以通過設定內(nèi)部緩存解決這樣的問題;⑤ 使用Vivado HLS任意精度數(shù)據(jù)類型[9],根據(jù)實際需要合理設定變量位寬,從而獲得更快的計算速度和更少的資源占用;⑥ 盡量使用Vivado HLS提供的針對硬件優(yōu)化的C庫函數(shù),在以上算法中,有乘法、除法、指數(shù)運算和反正切運算等,這些運算可直接從Vivado HLS數(shù)學運算庫中調(diào)用.
設定目標初始狀態(tài)均值x(0)=[1, 0.3, 3, 0.3]T;初始狀態(tài)方差Σ(0)=[0.01, 0.002, 0.01, 0.002]T;系統(tǒng)噪聲的方差Σw=[0.004, 0.004]T;量測噪聲的方差Σv=0.000 5;T=1 s;量測點位于原點,仿真時間為50 s.對以上算法進行多次Matlab仿真,仿真結(jié)果表明該算法具有良好的跟蹤效果.圖1給出了其中某次仿真結(jié)果.
圖1 2-D BOT模型的GPF算法Matlab仿真結(jié)果Fig.1 Matlab simulation results of GPF 2-D BOT
GPF算法的單次濾波流程如圖2.整個算法流程劃分為5個任務步驟:任務1對端口數(shù)據(jù)預處理;任務2是一個循環(huán),用于對粒子狀態(tài)和計算粒子權重進行累加;任務3計算權重和的倒數(shù)并給出最終的狀態(tài)估計;任務4也是一個循環(huán),用于計算粒子狀態(tài)方差的累加和;任務5計算最終的狀態(tài)方差.文中以C++為描述語言,根據(jù)圖2,給出基于GPF算法的2-D BOT模型的軟件實現(xiàn).
圖2 2-D BOT模型的GPF算法流程Fig.2 Flowchart of implementation of GPF 2-D BOT
設計的頂層模塊為State gpf-hls(ObsvType ZObserve, State Previous-state),其中輸入?yún)?shù)ZObserve為當前時刻的觀測值,Previous-state為前一時刻的狀態(tài),State為結(jié)構(gòu)體類型:
typedef struct{
StateType Position-state[4];
StateSigmaType Sigma-state[4];
}State;
其中成員數(shù)組Position-state[4]用于存放狀態(tài)均值,Sigma-state[4]用于存放狀態(tài)的方差.函數(shù)的返回值是State類型,返回同樣的信息.設計中將粒子數(shù)定義為宏變量,以便于方便修改粒子數(shù)量.
基于GPF算法的2-D BOT模型需要同時產(chǎn)生6路均值為0、方差為1的高斯隨機數(shù).在FPGA中產(chǎn)生的高斯隨機數(shù)通常都由均勻隨機數(shù)轉(zhuǎn)換得到.根據(jù)文獻[11],首先運用m序列法產(chǎn)生均勻隨機數(shù),然后再運用Box-Muller方法結(jié)合非均勻量化查表法得到高斯隨機數(shù).
高斯隨機數(shù)子函數(shù)為:
void awgn-generator(
ap-int< NOISE-WIDTH> &noise0,
ap-int< NOISE-WIDTH> & noise1,
ap-int< NOISE-WIDTH> & noise2,
ap-int< NOISE-WIDTH> & noise3,
ap-int< NOISE-WIDTH> & noise4,
ap-int< NOISE-WIDTH> & noise5)
該函數(shù)以參數(shù)引用的方式返回6路高斯隨機數(shù),數(shù)據(jù)類型是位寬為NOISE-WIDTH的有符號整形,通過設定小數(shù)點位置,就可以得到不同的幅度值.通過C/RTL協(xié)同仿真,波形如圖3:
圖3 6路高斯隨機數(shù)波形Fig.3 Waves of 6-way Gaussian white noise generator
當開發(fā)者沒有添加任何綜合優(yōu)化策略時,Vivado HLS采用自帶的默認策略進行綜合實現(xiàn)[11].例如,C算法中的循環(huán)(Loop)默認不展開,每一次循環(huán)計算在同一個硬件單元實現(xiàn),具有完全一樣的狀態(tài).然而當算法的時序很復雜、計算量很大時,這些默認策略的綜合結(jié)果往往不能滿足設計要求.設計中首先選擇目標器件xc7z020clg484,粒子數(shù)Ns分別為512,1 024,2 048,僅采用Vivado HLS的默認策略進行綜合,得到表1數(shù)據(jù)延遲報告和表2資源利用報告.
表1 Vivado HLS默認策略綜合的數(shù)據(jù)延遲報告Table 1 Summary of Latency with default directives
表2 Vivado HLS默認策略的資源利用報告Table 2 Summary of utilization with default directives
由于表1中的Latency和II在同一種粒子數(shù)量下都近似相等,可以推斷綜合出來的模塊并不能以并行流水線方式執(zhí)行.而且根據(jù)表1中的數(shù)據(jù),當系統(tǒng)時鐘頻率為100 MHz,粒子數(shù)為512時,濾波(采樣)速率約為109 Hz,數(shù)據(jù)延遲約為2.3 ms,這樣的速率低于DSP處理速率[12],失去了用FPGA硬件實現(xiàn)PF算法的優(yōu)勢.所以必須采用合理的綜合優(yōu)化策略,以獲得更高的數(shù)據(jù)吞吐量和運算速度.
Vivado HLS提供豐富的綜合優(yōu)化策略,用戶可以使用不同的策略來調(diào)整和控制內(nèi)部邏輯和I/O行為,以充分利用硬件并行優(yōu)勢,獲得更高的性能.在圖2的算法流程圖中,數(shù)據(jù)從任務1依次傳遞到任務5,且后一個任務僅對前一個任務有數(shù)據(jù)依賴關系,所以在任務層面可以采用數(shù)據(jù)流-流水線策略.圖4顯示了模塊在任務層面上的流水線運行方式.
圖4 任務層面上的流水線處理Fig.4 Pipeline structure on the task hierarchy
pipeline優(yōu)化策略實現(xiàn)任務內(nèi)部流水線操作,能實現(xiàn)子任務(函數(shù)、循環(huán))最大化并行運行,最大程度降低II和Latency.在本設計中,將該策略運用到任務2的循環(huán)中,這樣單次循環(huán)中的各項運算都將以并行方式運行,如果再對循環(huán)中的某些運算輔以其他策略,如inline,resource等,進入相鄰兩次循環(huán)的時間間隔就可以降低到1個時鐘周期,即LoopII=1.最終的流水線效果如圖5,其中Ns代表循環(huán)次數(shù),整個任務的初始化間隔FunctionII=Ns.
圖5 循環(huán)的流水線操作Fig.5 Pipeline structure on the loop hierarchy
然而在某些情況下,例如在單次循環(huán)中存在對存儲器讀操作時,因為讀存儲器需要多出一個時鐘來提供地址,pipeline策略就不能把LoopII降為1,而最低只能降到2,此時該任務的FunctionII為2Ns,可能就成為整個模塊數(shù)據(jù)吞吐量和運算速度的瓶頸.這時為了抵消這樣的讀操作瓶頸,除了采用Pipeline策略外,還要對該循環(huán)采用部分展開(partially unroll)策略,并設定展開因子(unroll factor)為2,這樣總的循環(huán)次數(shù)減半,單次循環(huán)內(nèi)并行的運算操作加倍.同時把循環(huán)內(nèi)的要讀的數(shù)組指定為雙端口RAM,以滿足單次循環(huán)2路并行讀操作,這樣就可以把FunctionII降低為Ns.本設計中的任務4就采用這樣的策略,總體結(jié)構(gòu)前后對比如圖6.
圖6 任務4采用partially unroll策略的結(jié)構(gòu)轉(zhuǎn)變示意Fig.6 Changes of the structure with partiallyunroll directive of task four
inline優(yōu)化策略消除子模塊與上層模塊的層次邊界,免去子模塊的頻繁讀寫調(diào)用,能使上層模塊獲得更好的性能.本設計中,把該策略用于運算操作比較少而調(diào)用很頻繁的函數(shù),如sqrtf(),atan2f(),expf()等.resource優(yōu)化策略能為數(shù)組、運算操作符和函數(shù)接口等分配特定的資源類型,從而獲得更高的資源效率和運算性能.例如,對某些乘法操作指定為DSP48乘法宏單元,對某些數(shù)組變量指定為雙端口塊RAM(RAM-2P-BRAM),以增加并行度.主要使用的綜合優(yōu)化策略如表3.
表3 本設計主要使用的優(yōu)化策略Table 3 Main specified directives of this design
選擇目標器件為xc7z020clg484,并且將粒子數(shù)Ns分別設定為512,1 024,2 048,根據(jù)表3中的策略,綜合得到如表4、5.
表4 使用優(yōu)化策略綜合后的數(shù)據(jù)延遲報告Table 4 Summary of Latency with specified directives
表5 使用優(yōu)化策略綜合后的資源利用報告Table 5 Summary of utilization with specified directives
根據(jù)表4中的Latency和II的關系,可推斷該模塊能以并行流水線方式運行.表1、4同時說明,當粒子數(shù)量成倍增長時,Latency和II也大致成倍增長.但由于流水線結(jié)構(gòu)的原因,表4中Latency和II增加的相對幅度小于2倍.進一步比較表1、4可知,當使用自定義優(yōu)化策略后,系統(tǒng)的Latency和II大幅度下降,運算速率的數(shù)據(jù)吞吐量得到極大地提高.表2、5說明,更快的速度占用更多的資源.當系統(tǒng)時鐘為100 MHz,粒子數(shù)量為2 048時,濾波速率約為48.8 kHz,數(shù)據(jù)延遲約為31.6 us,是同等條件下文獻[4]中最好情況32 kHz的1.5倍.
在Vivado HLS Test Bench目錄下創(chuàng)建測試文件,在該文件中編寫main()函數(shù),以反饋調(diào)用的方式調(diào)用頂層函數(shù):
for (i=1;i { state-estimated[i]= gpf-hls(Z[i],state-estimated[i-1]); } 函數(shù)中:T為仿真時間;數(shù)組Z[T]中存放觀測值;數(shù)組state_estimated[T]中存放每次迭代的估計結(jié) 果.按照仿真初始值設定模塊的初始狀態(tài)state-estimated[0].在調(diào)用仿真之前,通過C++文件操作,把觀測值從文件test-Z.txt中讀入到數(shù)組Z[T]中.在仿真結(jié)束后,再把state_estimated[T]內(nèi)容寫入到文件中,用于分析校驗. 根據(jù)Vivado HLS 開發(fā)流程,在創(chuàng)建完算法的C++語言描述文件和測試文件后,先后執(zhí)行C simulation命令和C/RTL Cosimulation命令,分別從軟件層面和硬件層面對算法進行驗證.當粒子數(shù)量為1 024時,根據(jù)式(8)計算算法估計的均方根誤差(root mean squared error, RMSE) (8) 表6 算法在不同仿真平臺上跟蹤性能仿真結(jié)果比較Table 6 Comparison of tracking performances of different simulation platforms 表6中,Vivado HLS C simulation和Vivado HLS RTL simulation仿真平臺的仿真結(jié)果和Matlab的仿真結(jié)果很接近,說明在HLS工具中用C++語言描述的GPF算法及其綜合得到的RTL模塊功能的正確性.進一步觀察可發(fā)現(xiàn),C simulation和RTL simulation的仿真結(jié)果完全一致,這是因為產(chǎn)生偽隨機數(shù)的RTL硬件模塊是由C函數(shù)直接綜合得到的,而兩者采用相同的隨機數(shù)種子,所以得到偽隨機數(shù)序列是完全一樣的,因而濾波過程中得到的數(shù)據(jù)完全一致. 圖7為RTL仿真波形,在0.135 2 us時刻模塊啟動,開始從端口Previous-state讀入數(shù)據(jù).在17.255 us時刻,從輸出端口輸出結(jié)果. 圖7 RTL仿真波形Fig.7 Waves of RTL simulation 在10.585 2 us時刻,模塊從輸入端口讀入新的數(shù)據(jù),并在27.695 us時刻輸出結(jié)果.在每次迭代計算結(jié)束之前,就從輸入端口讀入新的數(shù)據(jù),由此可見文中設計的模塊以流水線方式運行.圖8為C/RTL協(xié)同仿真結(jié)果,C仿真估計軌跡和RTL硬件仿真估計軌跡完全重合,這說明最終得到的RTL模塊功能與軟件仿真一致,能夠?qū)崿F(xiàn)對目標的跟蹤. 圖8 2-D BOT模型的GPF算法C/RTL協(xié)同仿真結(jié)果Fig.8 C/RTL cosimulation results of GPF 2-D BOT 按照圖1中的開發(fā)流程來對GPF算法進行實現(xiàn),主要有HLD代碼編寫、代碼修改優(yōu)化和仿真校驗3個步驟.本設計中運用HLS工具進行開發(fā)也同樣有這3個步驟.表7為二者在開發(fā)周期上的比較. 表7 兩種方法在開發(fā)周期上的比較Table 7 Simple comparison between two methodson development cycles 從表7可以看出,用HLS方法對PF算法進行硬件實現(xiàn)能顯著加快開發(fā)進程,使開發(fā)者能有更多的時間和精力研究原型算法的改進. (1) 運用Vivado HLS工具實現(xiàn)GPF算法的關鍵是靈活運用多種綜合優(yōu)化策略.根據(jù)實際需要,不同的綜合策略能得到不同硬件結(jié)構(gòu).運用pipeline策略及其輔助策略實現(xiàn)的并行流水線結(jié)構(gòu),能很好地滿足PF算法實時性要求. (2) 文中實現(xiàn)的GPF算法硬件結(jié)構(gòu)在保證運算準確的前提下,達到了較高的數(shù)據(jù)吞吐量和較快的數(shù)據(jù)運算速度. (3) 文中運用Vivado HLS工具實現(xiàn)GPF算法,大部分時間和精力放在了算法的合理性以及宏觀的硬件架構(gòu)上,只有少部分放在了微觀的硬件實現(xiàn)細節(jié)上,因而具有較高的開發(fā)效率. (4) 文中提出的實現(xiàn)方法對其他復雜軟件算法的硬件化加速具有重要的指導意義. 參考文獻(References) [ 1 ] ARULAMPALAM M S, MASKELL S, GORDON N, et al. A tutorial on particle filters for online nonlinear/non-Gaussian Bayesian tracking[J]. IEEE Transactions on Signal Processing, 2002, 50(2): 174-188. DOI:10.1109/78.978374. [ 2 ] KOTECHA J H, DJURIC P M. Gaussian particle filtering[J]. IEEE Transactions on Signal Processing, 2003, 51(10): 2592-2601. DOI:10.1109/tsp.2003.816758. [ 4 ] 洪少華, 史治國, 陳抗生. 用于純方位跟蹤的簡化粒子濾波算法及其硬件實現(xiàn)[J]. 電子與信息學報, 2009, 31(1): 96-100. HONG Shaohua,SHI Zhiguo,CHEN Kangsheng. Simplified algorithm and hardware implementation for particle filter applied to bearings-only tracking [J]. Journal of Electronics and Information Technology, 2009, 31(1):96-100.(in Chinese) [ 5 ] 李倩, 姬紅兵, 郭輝. 擬蒙特卡羅-高斯粒子濾波算法研究及其硬件實現(xiàn)[J]. 電子與信息學報, 2010, 32(7): 1737-1741. LI Qian, JI Hongbing, GUO Hui. Reasearch and hardware implementation of Quasi-Monte-Carlo Gaussian particle filter[J]. Journal of Electronics and Information Technology, 2010, 32(7):1737-1741. (in Chinese) [ 6 ] 毛麗民, 盧振利, 浦宇歡, 等. 基于FPGA實現(xiàn)粒子濾波算法的實時細胞跟蹤系統(tǒng)設計[J]. 紅外技術, 2014, 36(5): 389-393. MAO Limin, LU Zhenli, PU Yuhuan, et al. Design of a real-time cell tracking system by implementation of particle filter algorithm with FPGA[J]. Infrared Technology, 2014, 36(5):389-393. (in Chinese) [ 7 ] COUSSY P, CHAVET C, BOMEL P, et al. High level synthesis from algorithm to digital circuits [M]. [S.l.]: Springer, 2008. [ 8 ] XILINX Inc. Introduction to fpga design with vivado high-level synthesis [EB/OL]. (2013-07-02) [2016-03-20].http://www.xilinx.com/support/documentation/sw_manuals/ug998-vivado-intro-fpga-design-hls.pdf. [ 9 ] XILINX Inc. Vivado design suite user guide high-level synthesis [EB/OL]. (2015-02-24) [2016-03-20].http://www.xilinx.com/support/documentation/sw_manuals/xilinx2015-2/ug902-vivado-high-level-synthesis.pdf. [10] 陳鵬, 錢徽, 朱淼良. 一種快速高斯粒子濾波算法[J]. 華中科技大學學報(自然科學版), 2008, 36(s1): 291-294. CHEN Peng, QIAN Hui, ZHU Miaoliang. A fast Gaussian particle filtering algorithm [J]. Journal of Huazhong University of Science and Technology (Natural Science Edition), 2008, 36(s1): 291-294.(in Chinese) [11] GHAZEL A, BOUTILLON E, DANGER J L, et al. Design and performance analysis of a high speed AWGN communication channel emulator[J]. IEEE Pacific Rim Conference on Communications, Computers and Signal Processing,2001:374-377. DOI:10.1109/pacrim.2001.953647. [12] 余純. 基于硬件實現(xiàn)的粒子濾波改進算法研究[D]. 北京: 北京交通大學, 2008.3.5 開發(fā)效率比較
4 結(jié)論