卡尔曼滤波作业二作业2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Wiener 滤波器和Kalman 滤波器
黄姗姗 (通信工程)
摘要:
卡尔曼滤波和维纳滤波都是以最小均方误差为准则的线性估计器。

卡尔曼滤波和维纳滤波的不同点在于(1)卡尔曼滤波与维纳滤波中解决最佳滤波的方法不相同。

维纳滤波是用频域及传递函数的方法,卡尔曼是用时域及状态变量的方法。

(2)维纳滤波要求过程的自相关函数和互相关函数的简单知识,而卡尔曼滤波则要求时域中状态变量及信号产生过程的详细知识。

(3)维纳滤波要求平稳,而卡尔曼滤波则不要求。

关键词:
卡尔曼滤波 维纳滤波 高斯白噪声
现在举一个例子,设有一个随机信号()x n 服从AR(4)过程,它是一个宽带过程,参
数如下:
通过观测方程()()()y n x n n υ=+来测量信号,()n υ是方差为1的高斯白噪声,分别利 用Wiener 滤波器和Kalman 滤波器通过测量信号估计()x n 的波形。

将()n υ的方差改为4再仿真一次。

一Wiener 滤波器
利用维纳滤波器测量信号的时候,可以建立模型如下
Y0(n)
①将随机信号X(n)看成是由典型白噪声序列源W(n)激励一个线性系统产生,用一个差
分方程() 1.352(1) 1.338(2)0.662(
3)0.240(x n x
n x n x n x n w n --+---+-=来描
述。

进行Z 变换得到1233
()1
()()1 1.352 1.3380.6620.240X z H z W z z z z z ----=
=-+-+,那么均值为1的高斯白噪声序列W (n )可以用randn 函数产生,再利用函数X=filter(B,A,W)产生随机信号x(n)。

②观测方程是Y(n)=X(n)+V(n),V(n)是方差为1的高斯白噪声,产生进入Wiener 滤波器的信号。

③下面就是Wiener 滤波器的设计:这里将滤波器的阶数设为101,根据维纳-霍夫方
程:
-1
h=⨯,其中rx1是观测信号的自相关函数,rx2是观测信号和期望信号的互相[]rx1rx2
opt
关函数。

定义维纳滤波的模型,最后带入filter。

④最后在同一幅图中绘出观测信号Y0和期望信号X的波形。

仿真结果如图1:
图1
⑤将V(n)方差等于4仿真时,其它过程都不变,只是不用randn 产生,编写了V=randn(1,100);
V=V/std(V);
V=V-mean(V);
a=0;
b=sqrt(4);
V=a+b*V;来产生。

仿真结果如图2:
图2
二Kalman 滤波器
① 离散Kalman 滤波器
稳态Kalman 滤波器方程如下:
测量值修正计算:
x[|]x[|1]([][|1])x[1|]x[|][]
n n n n M y n Cx n n n n A n n Bu n ∧∧


=-+--+=+
我们可以通过kalman 函数设计上述稳态滤波器。

首先定义带噪声的系统模型:
[1][][][]
[][]
x n Ax n Bu n Bw n y n Cx n +=++=
具体的程序代码如下:
% 注意:设置采样时间为-1表示模型为离散的 Plant = ss (A, [B B ], C, 0, -1, ′inputname ′, {′u ′ ′w ′}, ′outputname ′, ′y ′);
假设Q=R=1, 下面可以设计离散Kalman 滤波器: Q = 1; R = 1;
[kalmf, L, P, M ] = kalman(Plant, Q, R);
函数将返回Kalman滤波器的状态模型kalmf和修正增益M。

M
M =
3.7980e-01
8.1732e-02
-2.5704e-01 Kalman滤波器的模型如下图:
u
yv
ye
X[n|n]图1
因为我们对输出估计ye比较感兴趣, 因此只需要保留kalmf的第一个输出。

为此输入 kalmf = kalmf(1, :);
kalmf
a =
x1-e x2-e x3-e
x1-e 0.7683-0.494 0.1129
x2-e 0.62020 0
x3-e -0.0817321 0
b =
u y
x1-e -0.3832 0.3586
x2-e 0.5919 0.3798
x3-e 0.5191 0.081732
c =
x1-e x2-e x3-e
y -e 0.6202 0 0
d =
u y
y-e 0 0.3798
I/O groups:
Group name I/O Channel(s)
KnownInput I 1
Measurement I 2
OutputEstimate O 1
Sampling time: unspecified
Discrete time model.

ye
y
图2
滤波器的功能是在已知输入噪声方差的条件下尽可能消除输出信号中的噪声影响,上图显示了滤波前后的不同输出信号。

下面用程序来比较滤波后输出信号与系统实际信号相对理想输出的误差。

a = A;
b = [B B 0*B];
c = [C;C];
d = [0 0 0;0 0 1];
P = ss(a,b,c,d,-1, ′inputname′, {′u′′w′′v′},′outputname′, {′y′′yv′});
sys = parallel(P, kalmf, 1, 1, [], []) % 创建并联系统
% 将系统输出yv正反馈到滤波器的输入端, 形成闭环系统
SimModel = feedback(sys, 1, 4, 2, 1)
% 从I/O列表中删除yv
SimModel = SimModel([1 3], [1 2 3])
% 产生信号
t = [1:100]';
W=randn(1,100);
B=[1];
A=[1,-1.352,1.338,-0.662,0.240];
X=filter(B,A,W);
u = X';
w = sqrt(Q)*randn(n, 1);
v = sqrt(R)*randn(n, 1);
% 系统仿真
[out, x] = lsim(SimModel, [w, v, u]);
y = out(:, 1); % 系统真实(理想)输出响应
ye = out(:, 2);% 滤波后的系统输出
yv = y + v;% 系统输出的测量值
% 比较结果
subplot(211), plot(t, y, ′--′, t, ye, ′-′),
xlabel(′No. of samples′), ylabel(′Output′)
title(′Kalman filter response′)
subplot(212), plot(t, y-yv, ′-.′, t, y-ye, ′-′), xlabel(′No. of samples′),
ylabel(′Error′)
仿真结果如图3和图4:
图3
图4
图中上面的图形显示的是真实响应y(虚线)和滤波后的输出ye(实线),下面的图形比较测量误差(虚线)与估计误差(实线)。

该图表明, 滤波器最大程度地消除了系统输出中的噪声影响。

这可以通过计算误差的协方差进行验证。

MeasErr = y-yv;
MeasErrCov = sum(MeasErr.*MeasErr)/length(MeasErr);
EstErr = y-ye;
EstErrCov = sum(EstErr.*EstErr)/length(EstErr);
滤波前误差(测量误差)的协方差为
MeasErrCov
MeasErrCov =
1.1138
而滤波后的误差(估计误差)的协方差仅为
EstErrCov
EstErrCov =
0.2722。

相关文档
最新文档