資源簡(jiǎn)介
Kalman濾波算法S-Function程序,主要完成電池SOC估計(jì)。
代碼片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%S函數(shù)實(shí)現(xiàn)對(duì)輸入信號(hào)Kalman濾波
function[sysx0strts]=SimuKalmanFilter(txuflag)
%輸入?yún)?shù)
%????t、x、u、分別對(duì)應(yīng)時(shí)間、狀態(tài)、輸入信號(hào)
%????flag為標(biāo)志位,其,取值不同,s函數(shù)執(zhí)行的任務(wù)和返回的數(shù)據(jù)也是不同的
%輸出參數(shù)
%????sys為一個(gè)通用的返回參數(shù)值,其數(shù)值根據(jù)flag的不同而不同
%????x0位狀態(tài)初始數(shù)值
%????str在目前為止的MATLAB版本中并沒有什么作用,一般str=[]即可
%????ts為一個(gè)兩列的矩陣,包含采樣時(shí)間和偏移量?jī)蓚€(gè)參數(shù)
switch?flag
????case?0??%?系統(tǒng)進(jìn)行初始化,調(diào)用mdlInitializeSizes函數(shù)
????????[sysx0strts]=mdlInitializeSizes;
????case?1??%?計(jì)算連續(xù)狀態(tài)變量的導(dǎo)數(shù),調(diào)用mdlDerivatives函數(shù)
????????sys=mdlDerivatives(txu);
????case?2??%?更新離散狀態(tài)變量,調(diào)用mdlUpdate函數(shù)
????????sys=mdlUpdate(txu);
????case?3??%?計(jì)算s函數(shù)的輸出,調(diào)用mdlOutputs
????????sys=mdlOutputs(txy);
????case?4??%?計(jì)算下一仿真時(shí)刻
????????sys=mdlGetTimeOfNextVarHit(txu);
????case?9??%?仿真結(jié)束,調(diào)用mdlTerminate函數(shù)
????????sys=mdlTerminate(txu);
????otherwise??%?其他未知情況處理,用戶可以自定義
????????error([‘Unhandled?flag=‘num2str(flag)]);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1.?系統(tǒng)初始化子函數(shù)
function[sysx0strts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates??=0;
sizes.NumDiscStates??=1;
sizes.NumOutputs?????=1;
sizes.NumInputs??????=1;
sizes.DirFeedthrough?=1;
sizes.NumSampleTimes?=1;????%至少需要的采樣時(shí)間
sys=simsizes(sizes);
x0??=5000+sqrt(5)
評(píng)論
共有 條評(píng)論