当前位置:首页 >> 信息与通信 >>

Matlab中kalman函数中文说明


5.4.2

Kalman 滤波器的设计 这一节将讨论如何使用控制系统工具箱进行 Kalman 滤波器的

因为我们对输出估计 ye 比较感兴趣, 因此只需要保留 kalmf 的第一 个输出。 为此输入 kalmf = kalmf(1, :); (5.9)? (5.10) a= x1 ?-e x2 ?-e x3 ?-e x1 ?-e 0.7683-0.494 0.1129 x2 ?-e 0.62020 0 0 x3 ?-e 0]; b= uy x1 ?-e x2 ?-e x3 ?-e c= x1-e y -e d= u y-e 0 y 0.3798 0.6202 x2-e 0 x3-e 0 -0.3832 0.5919 0.5191 0.3586 0.3798 0.081732 -0.0817321 0 kalmf

设计和仿真。 考虑下面的离散系统: x[n+1]=Ax[n]+B(u[n]+w[n]) y[n]=Cx[n] 为 A = [1.1269-0.49400.1129 1.0000 0 B = [-0.3832 0.5919 0.5191]; C = [1 0 0]; 我们的目标是设计 Kalman 滤波器, 在给定输入 u[n]和带噪 输出测量值 yv[n]=Cx[n]+v[n]的情况下估计系统的输出。 其中, v [n]是高斯白噪声。 1) 离散 Kalman 滤波器 上述问题的稳态 Kalman 滤波器方程如下: ? 测量值修正计算
x [ n | n ] ? x [ n | n ? 1] ? M ( y v [ n ] ? C x [ n | n ? 1]) x[n ? 1 | n ] ? A x[n | n ] ? B u[n ]
^ ^ ^ ^ ^

其中, w[n]是在输入端加入的高斯噪声。 状态矩阵参数分别

0 1.0000

I/O groups:

(5.11) (5.12)

Group name KnownInput Measurement OutputEstimate

I/O I I O

Channel(s) 1 2 1

2) 稳态设计 我们可以通过 kalman 函数设计上述稳态滤波器。 首先定义带噪 声的系统模型: x[n+1]=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(即 G(n))。 M= 3.7980e-01 8.1732e-02 -2.5704e-01 ? (状态方程)? (测量方程)

Sampling time: unspecified Discrete ? time model. 滤波器的功能是在已知输入噪声方差的条件下尽可能消除输出信 号中的噪声影响。 图 5.25 显示了滤波前后的不同输出信号。 下面用程序来比较滤波后输出信号与系统实际信号相对理想输 出的误差。 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 = [0:100]′; u = sin(t/5); n = length(t)

图5.24 Kalman滤波器
1

randn(′seed′, 0)

3) 时变 Kalman 滤波器 时变 Kalman 滤波器是稳态滤波器在时变系统或具有可变协方 差噪声的 LTI 系统的推广。 假定系统状态方程和测量方程分别为 x[n+1]=Ax[n]+Bu[n]+Gw[n]? yv[n]=Cx[n]+v[n] (5.13)

图 5.25 滤波前后输出信号的比较
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, ′-′), ylabel(′Output′)

测量值修 ^ 正 x [ n | n ] ? x [ n | n ? 1] ?
^ T

M [ n ]( y ? [ n ] ? C x [ n | n ? 1]
T ?1

^

M [ n ] ? P [ n | n ? 1]C ( R [ n ] ? C P [ n | n ? 1]C ) P [ n | n ] ? I ? M [ n ]C P [ n | n ? 1]

预测值
x[n ? 1 | n ] ? A x[n | n ] ? B u[n ] P [n ? 1 | n ] ? A P [n | n ] A
T ^ ^

(5.17)
T

? G Q [ n ]G

(5.18)

定义
Q [ n ] ? E (? [ n ]? [ n ] )
T

R [ n ] ? E (? [ n ]? [ n ] )
T

xlabel(′No. of samples′),

P [ n | n ] ? E ({[ n ] ? x [ n | n ]}{ x [ n ] ? x [ n | n ]} )
T

title(′Kalman filter response′) subplot(212), plot(t, y-yv, ′-.′, t, y-ye, ′-′), xlabel(′No. of samples′), ylabel(′Error′) 比较结果如图 5.26 所示。 图中上面的图形显示的是真实响应 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

P [ n | n ? 1] ? E ({ x [ n ] ? x [ n | n ? 1]}{ x [ n ] ? x [ n | n ? 1]} )
T

4) 时变滤波器设计 尽管控制系统工具箱没有提供专门的命令完成时变 Kalman 滤 波器的设计, 我们也可以很方便地在 MATLAB 环境中完成滤波器 的迭代计算。 通常的计算程序如下: % 使用前一节产生的系统噪声 w 和测量噪声 v sys = ss(A, B, C, 0, -1); y = lsim(sys, u+w); yv = y + v; % 定义迭代的初始条件 P = B*Q*B′; x = zeros(3, 1); ye = zeros(length(t), 1); ycov = zeros(length(t), 1); for i=1:length(t) % 测量值修正计算 % 误差协方差的初始条件矩阵 % 初始状态矩阵 % w = 系统噪声 % v = 测量噪声

Mn = P*C′/(C*P*C′+R); x = x + Mn*(yv(i)-C*x); % x[n|n] P = (eye(3)-Mn*C)*P; % P[n|n] ye(i) = C*x; errcov(i) = C*P*C′; % 下一时刻的预测值

x = A*x + B*u(i); % x[n+1|n] P = A*P*A′ + B*Q*B′; % P[n+1|n] end subplot(211), plot(t, y,′--′, t, ye, ′-′) % 显示相关的滤波结果 title(′Time-varying Kalman filter response′) xlabel(′No. of samples′), ylabel(′Output′) plot(t, y-yv, ′-.′, t, y-ye, ′-′) ylabel(′Output′)

图 5.26 滤波前后的输出响应与真实输出的比较
2

subplot(212),

xlabel(′No. of samples′),

图 5.27

时变滤波器的设计结果分析

3


相关文章:
matlab 中文 帮助文件
matlab 中文帮助文件 包含内容: 下载后,有 chm 文件 matlab手册.chm ...Matlab中kalman函数中文... 3页 免费 matlab中文帮助文档 106页 7下载券喜欢...
卡尔曼滤波入门、简介及其算法MATLAB实现代码
卡尔曼滤波入门、简介及其算法MATLAB实现代码_计算机...仅仅利用了非线性函数 Taylor 展开式的一阶偏导部分...卡尔曼滤波简介说明及其算法 MATLAB 实现代码卡尔曼...
卡尔曼滤波的MATLAB实现
卡尔曼滤波的MATLAB实现_工学_高等教育_教育专区。...(k ) 是一个标量零均值白高斯序列,且自相关函数...但为了用作图来说明问题, P8.1 表和 P8.2 给...
ncurses函数的中文说明
Matlab中kalman函数中文... 3页 免费喜欢此文档的还喜欢 ncurses函数的中文说明...关于curses 函数库中几个常用函数的中文说明 Curses 的由来 为了因应网络上各式...
Kalman滤波原理及程序(手册)
Kalman 滤波原理及仿真手册 KF/EKF/UKF 原理+应用实例+MATLAB 程序 本手册的...是线性的, 这类方程很多, 例如平方关系, 对数关系, 指数关系, 三角函数关系...
matlab各种函数大全
matlab各种函数大全_计算机软件及应用_IT/计算机_专业...在说明书中未包含的新信息 版本信息 退出 MATLAB ...Kalman 滤波器设计和仿真 实用工具 Bode Dbode D...
Kalman滤波MATLAB综合实验报告
Kalman滤波MATLAB综合实验报告_电子/电路_工程科技_专业资料。《数学实验》综合...能够调用相关函数进行数据处理 使用循环函数和二维曲线画图 有效的构建仿真模型,...
卡尔曼滤波器及matlab代码
卡尔曼滤波器及matlab代码_工学_高等教育_教育专区。卡尔曼滤波器及matlab代码 ...最速下降算法的基本思想考虑一个代价函数 ,它是某个未知向量 连续可微分函数...
卡尔曼滤波MATLAB代码
卡尔曼滤波MATLAB代码_信息与通信_工程科技_专业资料。??? = ??? ???1 +...end %状态的推测值 %状态的预测值 时刻 2 开始调用主函数 for k=2:N [x...
基于MATLAB_GUI的Kalman滤波程序
本 文基于 MATLAB_GUI 对 Kalman 滤波器进行设计和仿真。 -1- 第 1 章 Kalman 滤波理论 1.1 Kalman 滤波理论应用背景信号是传递和运载信息时间或空间函数...
更多相关标签: