任何确定性信号经过测量后往往就会引入随机性误差而使该信号随机化,另外,任何信号本身都存在随机干扰,通常把对信号或系统功能起干扰作用的随机信号称之为噪声。噪声的存在影响了信号的正确接收及判决,因此,要使用滤波器将信号尽可能精确地表现出来,从噪声中提取出有用的信号。
维纳滤波和卡尔曼滤波都是解决线性滤波和预测问题的方法,并且都是以均方误差最小为准则的,在平稳条件下两者的稳态结果是一致的。但是它们解决问题的方法有很大区别。 维纳滤波是根据全部过去观测值和当前观测值来估计信号的当前值;卡尔曼滤波是用当前一个估计值和最近一个观测值来估计信号的当前值。 维纳滤波只适用于平稳随机过程,卡尔曼滤波就没有这个限制。 设计维纳滤波器要求已知信号与噪声的相关函数,设计卡尔曼滤波器要求已知状态方程和量测方程,当然两者之间也有联系。
卡尔曼滤波器可分为两个部分:时间更新方程和测量更新方程。 时间更新方程负责及时向前推算当前状态变量和误差协方差估计的值,以便为下一个时间状态构造先验估计。 测量更新方程负责反馈,它将先验估计和新的测量变量结合以构造改进的后验估计。
时间更新方程: 测量更新方程:
在本设计中,设置控制参量 ,信号长度L=100,改变Rw,Rv的值可改变状态量或观测量,分析对卡尔曼滤波器性能的影响。
clear; clc; Ak=0.95; Bk=0; Ck=1; Wk=1; %过程的噪声 Vk=1; %测量的噪声 Rw=0.1; % 1, 0.01,10^(-10) Rv=1; % 20,0.1, 10^(-10) L=100; w=sqrt(Rw)*randn(1,L); % w为均值零方差为Rw斯白噪声 v=sqrt(Rv)*randn(1,L); % v为均值零方差为Rv高斯白噪声 x0=sqrt(10^(-12))*randn(1,L); for i=1:L u(i)=1; %系统的控制量1 end x(1)=w(1); %给x(1)赋初值. for i=2:L %递推求出x(k). x(i)=Ak*x(i-1)+Bk*u(i-1)+Wk*w(i-1); yk=Ck*x+Vk*v; n=1:L; Qk=Wk*Wk'*Rw; %过程的噪声的相关 Rk=Vk*Vk'*Rv; %测量的噪声的相关
P(1)=var(x0); P1(1)=Ak*P(1)*Ak'+Qk; xg(1)=0; for k=2:L P1(k)=Ak*P(k-1)*Ak'+Qk; %从k-1 时刻估计k 时刻协方差。 H(k)=P1(k)*Ck'*inv(Ck*P1(k)*Ck'+Rk); % 计算卡尔曼增益 I=eye(size(H(k))); P(k)=(I-H(k)*Ck)*P1(k); %估计状态的后验协方差 xg(k)=Ak*xg(k-1)+H(k)*(yk(k)-Ck*Ak*xg(k-1)); %结合预测值和测量值得到现在状态的估算值 yg(k)=Ck*xg(k); end subplot(2,1,1); plot(n,x); title('状态值'); subplot(2,1,2); plot(n,yk); title('测量值'); figure(2); plot(n,x(n),n,xg(n),'r:'); title('滤波后与原状态值的比较') plot(n,yk(n),n,yg(n),'r:'); title('滤波前后的比较');
Rw=0.1; Rv=1;
Rw=1; Rv=1;
Rw=0.01; Rv=1;
Rw=10^(-10); Rv=1;
Rw=0.1; Rv=20;
Rw=0.1; Rv=0.1;
Rw=0.1; Rv=10^(-10);
经过实验,可得出下面的结论 : 经卡尔曼滤波后,在稳态情况下,可以很好的对信号y(n)进行估计,极大的减少噪声对信号的影响。 在卡尔曼滤波中,当高斯白噪声方差很小时,信号较小,信噪比很小,信号完全埋没在噪声之中,无法滤出。越大,信号值越大,卡尔曼滤波的效果越好。 ,Rv越大,表明引入的噪声越大,信噪比越小,信号越难滤出;当Rv变小时,信号很容易被滤出。
Thanks !