cf死神打生化:如何加信号到kalman滤波器上

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 08:19:44
这是洛伦兹信号程序
function out = lorenz_x(length)
h=0.01; %迭代步长
n=length; %需要产生的序列长度
dis=2000; %需要舍弃的初始迭代值的数目
X=[10];Y=[10];Z=[10]; %迭代初值
a=16; b=45.92; c=4; %方程组参数
for i=1:n+dis %迭代产生数值解
x=X(i); y=Y(i); z=Z(i);
q11=fx(x,y,a);
q21=fy(x,y,z,b);
q31=fz(x,y,z,c);
q12=fx(x+0.5*h*q11,y+0.5*h*q21,a);
q22=fy(x+0.5*h*q11,y+0.5*h*q21,z+0.5*h*q31,b);
q32=fz(x+0.5*h*q11,y+0.5*h*q21,z+0.5*h*q31,c);
q13=fx(x+0.5*h*q12,y+0.5*h*q22,a);
q23=fy(x+0.5*h*q12,y+0.5*h*q22,z+0.5*h*q32,b);
q33=fz(x+0.5*h*q12,y+0.5*h*q22,z+0.5*h*q32,c);
q14=fx(x+h*q13,y+h*q23,a);
q24=fy(x+h*q13,y+h*q23,z+h*q33,b);
q34=fz(x+h*q13,y+h*q23,z+h*q33,c);
X(i+1)=x+(h/6)*(q11+2*q12+2*q13+q14);
Y(i+1)=y+(h/6)*(q21+2*q22+2*q23+q24);
Z(i+1)=z+(h/6)*(q31+2*q32+2*q33+q34);
if i>dis %舍弃初始迭代的一段
XX(i-dis)=X(i); YY(i-dis)=Y(i); ZZ(i-dis)=Z(i);
end
end
plot3(XX,YY,ZZ)
out = XX;

function[out]=fx(x,y,a)
out=-a*(x-y);

function[out]=fy(x,y,z,b)
out=-x*z+b*x-y;

function[out]=fz(x,y,z,c)
out=x*y-c*z;
下面是kalman滤波程序
clear
N=200;
w(1)=0;
w=randn(1,N)
x(1)=0;
a=1;
for k=2:N;
x(k)=a*x(k-1)+w(k-1);
end

V=randn(1,N);
q1=std(V);
Rvv=q1.^2;
q2=std(x);
Rxx=q2.^2;
q3=std(w);
Rww=q3.^2;
c=0.2;
Y=c*x+V;

p(1)=0;
s(1)=0;
for t=2:N;
p1(t)=a.^2*p(t-1)+Rww;
b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);
s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));
p(t)=p1(t)-c*b(t)*p1(t);
end

t=1:N;
plot(t,s,'r',t,Y,'g',t,x,'b');
如何将两者结合?