扩展卡尔曼滤波器的s函数编写?function [sys,x0,str,ts] = sekfs(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;case 2,sys=mdlUpdate(t,x,u);case 3,sys=mdlOutputs(t,x,u);case {1,4,9},sys=[];otherwiseerror(['Unhandled flag =

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/16 03:19:26
扩展卡尔曼滤波器的s函数编写?function[sys,x0,str,ts]=sekfs(t,x,u,flag)switchflag,case0,[sys,x0,str,ts]=mdlInitiali

扩展卡尔曼滤波器的s函数编写?function [sys,x0,str,ts] = sekfs(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;case 2,sys=mdlUpdate(t,x,u);case 3,sys=mdlOutputs(t,x,u);case {1,4,9},sys=[];otherwiseerror(['Unhandled flag =
扩展卡尔曼滤波器的s函数编写?
function [sys,x0,str,ts] = sekfs(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {1,4,9},
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 3;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [4.5000 15.0000 15.0000];
str = [];
ts = 1e-6;
function sys=mdlUpdate(t,x,u)
global Qon;
Qon=1;
R=1e-2;
Q=Qon*diag([1e-2 1e-2 1e-2]);
G_basal = 4.5; % mmol/L
X_basal = 15; % mU/L
I_basal = 15; % mU/L
P1 = 0.028735; % min-1
P2 = 0.028344; % min-1
P3 = 5.035e-5; % mU/L
V1 = 12; % L
n = 5/54; % min
D = 5;
To=1e-6;
% for i=1:3
% for j=1:3
% P(i,j)=x(3*i+j);
% end
% end
P=[0.01 0 0; 0 0.01 0;0 0 0.01];
xp=zeros(3,size(x,2));
xp(1,1) = x(1)+(-P1 * (x(1) - G_basal) - (x(2)- X_basal) * x(1) + D)*To;
xp(2,1) = x(2)+(-P2 * (x(2) - X_basal) + P3 * (x(3) - I_basal))*To;
xp(3,1) = x(3)+(-n * x(3) + u(1) / V1)*To;
F=[ -P1-x(2),-x(1),0 ;0,-P2,P3;0,0,-n];
P=F*P*F'+Q;
H=[1,0,0];
K=P*H'*inv(H*P*H'+R);
D=u(1);
H=xp(1,1);
xp=xp+K*(D-H);
P=P-K*H*P;
%sys=[xp(1,1);xp(2,1);xp(3,1)];
for i=1:3
sys(i)=xp(i,1);
end
% for i=1:3
% for j=1:3
% sys(i,j)=P(3*i+j);
% end
% end
function sys=mdlOutputs(t,x,u)
sys =x(1);
Error in 'untitled/S-Function' while executing M-File S-function 'sekfs',flag = 2 (update),at time 0.MATLAB error message:Inner matrix dimensions must agree.
哪里错了?

扩展卡尔曼滤波器的s函数编写?function [sys,x0,str,ts] = sekfs(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;case 2,sys=mdlUpdate(t,x,u);case 3,sys=mdlOutputs(t,x,u);case {1,4,9},sys=[];otherwiseerror(['Unhandled flag =
H=[1,0,0];
K=P*H'*inv(H*P*H'+R);
D=u(1);
H=xp(1,1);
xp=xp+K*(D-H);
P=P-K*H*P;
H是一个3*1的矩阵,但在下面H=xp(1,1),这时又变成一个数了,后面xp=xp+K*(D-H);没有问题.但是P=P-K*H*P;这里就出现了矩阵维数不对.你换过来就行了.

扩展卡尔曼滤波器的s函数编写?function [sys,x0,str,ts] = sekfs(t,x,u,flag)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;case 2,sys=mdlUpdate(t,x,u);case 3,sys=mdlOutputs(t,x,u);case {1,4,9},sys=[];otherwiseerror(['Unhandled flag = 求扩展卡尔曼滤波器的英文论文 最好只讲算法 卡尔曼滤波器的输入和输出分别接什么 卡尔曼滤波器和匹配滤波器的联系和区别 请比较一下卡尔曼滤波器与自适应滤波器的优劣一个是卡尔曼滤波器,一个是基于自适应噪声抵消器的参数估计器(自适应滤波器),它们滤波效果的比较情况?我知道,卡尔曼滤波适合噪声已知 卡尔曼滤波器属于高通低通还是带通?我知道巴特沃斯滤波器和契比雪夫滤波器有高低通、带通之分,但是卡尔曼滤波器呢?我只知道它的方程推导和数学建模,却从没有听过它到底是高通还是低 请问卡尔曼滤波器中状态噪声和观测噪声在工程应用中怎么获得? 有一个数列,其前三项分别为1、2、3,从第四项开始,每项均为其相邻的前三项之和的1/2,编写函数过程,求该数列前n项的平均值.要求调用该过程,计算并输出n=30时前n项的平均值.vb 用函数程序funct 请教一下matlab的fir滤波器设计,已知频率响应的表达式,要如何编写代码设计滤波器呢? 卡尔曼滤波算法的功能是什么? 求一个MATLAB 矩阵扩展函数~解决再加50分!编写个函数:imageex(image,height,width),调用repmat函数 【Matlab】Matlab中如何编写S函数 【Matlab】Matlab中如何编写S函数 编写求阶乘的函数,并通过调用函数计算s=6!+10!+22! 根据已知,利用双线性变换法设计IIR数字低通滤波器设模拟滤波器的系统函数为:Ha(S)=1/(S^2+S+1)令T=2,利用双线性变换法设计IIR数字低通滤波器需要明确的过程和尽可能详细的答案 c++说的扩展函数是什么意思?什么样的函数是扩展函数? 用matlab编写使用二维高斯低通滤波器的函数,使用大小为3*3,标准差分别为0.5,1.5,2.5对灰度图像,真彩色图像,伪彩色图像进行滤波 用窗函数法设计FIR滤波器的主要特点是什么?