資源簡介
收到一些國內外朋友的來信,咨詢關于容積卡爾曼濾波的問題(CKF),大家比較疑惑的應該就是generator或G-orbit的概念。考慮到工作以后,重心必然轉移,不可能再像現在這樣詳細的回答所有人的問題,更不可能再幫大家改論文、寫(或改)代碼了,請各位諒解!在此,上傳一個CKF和五階CKF用于目標跟蹤的示例代碼,代碼中包含詳細的注釋,希望對大家以后的學習和研究有所幫助!
此代碼利用C++對五階CKF的第二G-軌跡進行了封裝(Perms.exe),能理解最好,如果無法理解,也無須深究其具體構造方法!可執行文件底層是用字符串+遞歸算法實現的,理論上可以應用于任意維模型。但考慮到遞歸算法可能存在的棧溢出,重復壓棧出棧帶來的時間消耗等問題,我們利用矩陣的稀疏性和群的完全對稱性,并通過分次調用,來盡可能減少棧的深度,提高計算速度。
容積點一次生成后,可以一直使用,通過對50維G-軌跡的生成速度(Core T6600@2.2GHz)進行測試,包含數據讀寫在內的速度約為1.5秒,速度尚可。而目前為止,本人尚未遇到達到甚至超過50維的系統,因此,暫時不作算法層面的優化。
注意:Perms.exe可以用于任意維模型,將可執行文件復制至工作目錄下,調用時選擇N/n,并輸入你的模型維數,即可生成所需的第二G-軌跡。如果無法理解相關的概念,請參考示例代碼,并記住如何使用即可~~~
相關理論基礎及所用模型,請參考以下文獻:
References (you may cite one of the articles in your paper):
[1] X. C. Zhang, C. J. Guo, "Cubature Kalman filters: Derivation and extension," Chinses Physics B, vol.22, no.12, 128401, DOI: 10.1088/1674-1056/22/12/128401
[2] X. C. Zhang, Y. L. Teng, "A new derivation of the cubature Kalman filters," Asian Journal of Control, DOI: 10.1002/asjc.926
[3] X. C. Zhang, "Cubature information filters using high-degree and embedded cubature rules," Circuits, Systems, and Signal Processing,vol.33, no.6,pp.1799-1818,DOI: 10.1007/s00034-013-9730-0

代碼片段和文件信息
function?[x?P]?=?Fifth_degree_CKF(xhat?Pplus?z)
global?Q?R?T?m?kesi_5?b_5?w2_5?w_5?w4_5;
%%?--------------------------5th-degree?CKF-----------------------
%%?---------------------------Time?Update-------------------------
%?Evaluate?the?Cholesky?factor
Shat?=?chol(Pplus?‘lower‘);
for?cpoint?=?1?:?b_5
????%?Evaluate?thecubature?points
????rjpoint_5(:?cpoint)?=?Shat?*?kesi_5(:?cpoint)?+?xhat;
????%?Evaluate?the?propagated?cubature?points
????fai3?=?[1?sin(rjpoint_5(5?cpoint)?*?T)?/?rjpoint_5(5?cpoint)?0?-(1?-?...
????????cos(rjpoint_5(5?cpoint)?*?T))?/?rjpoint_5(5?cpoint)?0;
????????0?cos(rjpoint_5(5?cpoint)?*?T)?0?-sin(rjpoint_5(5?cpoint)?*?T)?0;
????????0?(1?-?cos(rjpoint_5(5?cpoint)?*?T))?/?rjpoint_5(5?cpoint)?1?...
????????sin(rjpoint_5(5?cpoint)?*?T)?/?rjpoint_5(5?cpoint)?0;
????????0?sin(rjpoint_5(5?cpoint)?*?T)?0?cos(rjpoint_5(5?cpoint)?*?T)?0;
????????0?0?0?0?1];
????Xminus_5(:?cpoint)?=?fai3?*?rjpoint_5(:?cpoint);
end
%?Estimate?the?predicted?state
xminus_5?=?w2_5?*?Xminus_5(:?1)?+?w_5?*?sum(Xminus_5(:?2?:?m?+?1)?2)?+?...
????w4_5?*?sum(Xminus_5(:?m?+?2?:?b_5)?2);
%?Estimate?the?predicted?error?covariance
Pminus_5?=?Q?+?w2_5?*?(Xminus_5(:?1)?-?xminus_5)?*?(Xminus_5(:?1)?-?xminus_5)‘...
????+?w_5?*?(Xminus_5(:?2?:?m?+?1)?-?repmat(xminus_5?1?m))?*?...
????(Xminus_5(:?2?:?m?+?1)?-?repmat(xminus_5?1?m))‘?+?...
????w4_5?*?(Xminus_5(:?m?+?2?:?b_5)?-?repmat(xminus_5?1?b_5?-?m?-?1))?...
????*?(Xminus_5(:?m?+?2?:?b_5)?-?repmat(xminus_5?1?b_5?-?m?-?1))‘;
%%?---------------------------------------------------------------
%%?-------------------------Measurement?Update--------------------
%?Evaluate?the?Cholesky?factor
Sminus_5?=?chol(Pminus_5?‘lower‘);
for?cpoint?=?1?:?b_5
????%?Evaluate?the?cubature?points
????rjpoint1_5(:?cpoint)?=?Sminus_5?*?kesi_5(:?cpoint)?+?xminus_5;
????%Evaluate?the?propagated?cubature?points
????Z_5(:?cpoint)?=?[sqrt(rjpoint1_5(1?cpoint)?^?2?+?rjpoint1_5(3?cpoint)?^?2)?...
????????atan(rjpoint1_5(3?cpoint)?/?rjpoint1_5(1?cpoint))]‘;
end
%?Estimate?the?predicted?measurement
zhat_5?=?w2_5?*?Z_5(:?1)?+?w_5?*?sum(Z_5(:?2?:?m?+?1)?2)?+?w4_5?*?...
????sum(Z_5(:?m?+?2?:?b_5)?2);
%?Estimate?the?innovation?covariance?matrix
Pzminus_5?=?R?+?w2_5?*?(Z_5(:?1)?-?zhat_5)?*?(Z_5(:?1)?-?zhat_5)‘?+?...
????w_5?*?(Z_5(:?2?:?m?+?1)?-?repmat(zhat_5?1?m))?*?(Z_5(:?2?:?m?+?1)?...
????-?repmat(zhat_5?1?m))‘+?w4_5?*?(Z_5(:?m?+?2?:?b_5)?-?...
????repmat(zhat_5?1?b_5?-?m?-?1))?*?(Z_5(:?m?+?2?:?b_5)?-?repmat(zhat_5?1?b_5?-?m?-?1))‘;
%?Estimate?the?cross-covariance?matrix
Pxzminus_5?=?w2_5?*?(rjpoint1_5(:?1)?-?xminus_5)?*?(Z_5(:?1)?-?zhat_5)‘?+?...
????w_5?*?(rjpoint1_5(:?2?:?m?+?1)?-?repmat(xminus_5?1?m))?*?...
????(Z_5(:?2?:?m?+?1)?-?repmat(zhat_5?1?m))‘...
????+?w4_5?*?(rjpoint1_5(:?m?+?2?:?b_5)?-?repmat(xminus_5?1?b_5?-?m?-?1))?...
????*?(Z_5(:?m?+?2?:?b_5)?-?repmat(zhat_5?1?b_5?-?m?-?1))‘;
%?Estimate?th
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3274??2014-06-21?14:47??Target?tracking\Fifth_degree_CKF.m
?????文件????1092608??2014-06-21?15:08??Target?tracking\Perms.exe
?????文件????????925??2013-01-23?11:16??Target?tracking\rms.m
?????文件???????2188??2014-06-21?14:46??Target?tracking\Three_degree_CKF.m
?????文件???????7034??2014-06-21?15:00??Target?tracking\TR_Main.m
?????目錄??????????0??2014-06-21?15:09??Target?tracking
-----------?---------??----------?-----??----
??????????????1106029????????????????????6
- 上一篇:VC++點陣字生成器(MFC)
- 下一篇:用C語言實現圖形菜單界面
評論
共有 條評論