EKF Simulink代码生成

1.新建模型

 2.Simulink / User-Defined Functions 之 MATLAB Function  EKF代码如下

function [P_upd,SOC_upd,Up_upd] = EKF(Noise, UL_ob, UL_pre, P_old, SOC_pre, Up_pre, Tao)
Q = Noise(1);   %过程噪声
R = Noise(2);   %观测噪声

% --------------A矩阵,状态转移----------
A1 = 1;
A2 = exp(-0.05/Tao);
A = [A1 0;0 A2];

P_last = [P_old(1) P_old(2);P_old(3) P_old(4)];
P_pre=A*P_last*A'+ [Q 0;0 Q];  
%% --------------C矩阵-------------
C1 = -7.88447 + 60.21383*2*SOC_pre - 200.15462*3*SOC_pre^2 ...
    + 345.34531*4*SOC_pre^3 - 314.92282*5*SOC_pre^4 ...
    + 141.34077*6*SOC_pre^5 - 23.60229*5*SOC_pre^6;
C = [C1 -1];
%% --------------更新--------------
X_pre = [SOC_pre;Up_pre];
K = P_pre*C'*(C*P_pre*C'+ R)^(-1);     %增益
X_upd = X_pre + K*(UL_ob-UL_pre);     %得到估计值
P_update = P_pre - K*C*P_pre;
%% --------------输出--------------
SOC_upd = X_upd(1);
Up_upd = X_upd(2);
P_upd = [P_update(1,1) P_update(1,2) P_update(2,1) P_update(2,2)];

3.Simulink / Discrete 之 Memory

3.常数模块设置如下

 

4.模型设置如下

 

 

 

5.Ctrl+D检查模型

6.Ctrl+B编译模型 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值