授之以渔: 卡尔曼滤波器

上传人:大米 文档编号:431215374 上传时间:2023-07-29 格式:DOCX 页数:8 大小:86.60KB
返回 下载 相关 举报
授之以渔: 卡尔曼滤波器_第1页
第1页 / 共8页
授之以渔: 卡尔曼滤波器_第2页
第2页 / 共8页
授之以渔: 卡尔曼滤波器_第3页
第3页 / 共8页
授之以渔: 卡尔曼滤波器_第4页
第4页 / 共8页
授之以渔: 卡尔曼滤波器_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《授之以渔: 卡尔曼滤波器》由会员分享,可在线阅读,更多相关《授之以渔: 卡尔曼滤波器(8页珍藏版)》请在金锄头文库上搜索。

1、. .一片绿油油的草地上有一条曲折的小径,通向一棵大树。一个要求被提出:从起点沿着小径走到树下。“很简单。A说,于是他丝毫不差地沿着小径走到了树下。现在,难度被增加了:蒙上眼。“也不难,我当过特种兵。B说,于是他歪歪扭扭地走到了树.旁。“唉,好久不练,生疏了。“看我的,我有DIY的GPS! C说,于是他像个醉汉似地走到了树.旁。“唉,这个GPS软件没做好,漂移太大。“我来试试。旁边一人拿过GPS,蒙上眼,居然沿着小径走到了树下。“这么厉害!你是什么人“卡尔曼 ! “卡尔曼?!你是卡尔曼?众人大吃一惊。“我是说这个GPS卡而慢。这段时间研究了一下卡尔曼滤波器,有一些心得,写出来与大家分享。卡尔曼

2、滤波器与我以前讲过的FIR, IIR滤波器完全不一样,与其说属于滤波器,不如说是属于最优控制的范畴。下面的内容涉及相当多的控制理论知识,对于在这方面缺乏的同学可能有些吃力。不过不要紧,大家关注结果,会应用就够了,那些晦涩的理论和推导可以忽略。我也会用图片让大家更直观的理解卡尔曼滤波器首先回忆一下传统数字滤波器。对于一个线性时不变系统,施加一个输入u(t),我们可以得到一个输出y(t) .如果输入是一个冲击,那么输出y(t)被称作冲击响应,用h(t)来表示,是系统的内核。对于任意u(t),输出y(t)可以通过u(t)与冲击响应h(t)的卷积得到,这是FIR滤波器的根本原理。我们还可以通过系统微分

3、方程转换为差分方程,或是通过laplace传递函数转换到差分方程,最后得到一个递推公式,这种形式的滤波器就是IIR滤波器。以前讲过,一个系统可以用时域的微分方程来建立,然后可以用laplace的传递函数来处理,把解微分方程变为多项式乘法,可以简单的求解。还有另外一种处理形式就是状态空间,以矩阵形式来处理微分方程或微分方程组,利用矩阵变换求解,类同齐次方程组的矩阵形式。例如微分方程:y +3y + 2y = u让X1 = y, X2 = y = X1,那么上式变为: X2 = -3 X2 2 X1- u X1 =X2矩阵形式为:通用形式为:X = A*X + B*uY = C*X.可以看到,可以

4、很轻易的微分方程或微分方程组转换到状态空间形式,而状态空间与laplace传递函数之间可以相互转换,事实上矩阵A的特征值就是s传递函数的极点。系统的传递函数阵可以通过矩阵变换得到:Y(s) = C * (s * I - A)-1* B同理,连续域的微分方程对应了离散域的差分方程,s对应了z,离散域状态空间相应的变为:X(k) = A*X(k-1) + B(u-1)Y(k) = C*X(k)我们现在来看看蒙眼走小径的走法问题。假设A走过的路径是真真正的路径,为Za; B是用自己的大脑作为预测估计器,走出了一个预测路径,为Zb; C用测量器,走出了一条测量路径,为Zc。用图片来说明:“系统真实输出

5、是A走过的路径:Za = C * X;“测量输出是Zb.Zb = Za + V,这里V是噪声,即GPS的漂移;“预测估计输出是Zc = C * X,X是预测的状态。T是采样延时。现在,蒙上眼的情况下有两种选择,GPS或大脑预测估计器。如果GPS很准而预测不准,那么可以选择GPS;如果预测准确而GPS不准,那么选择预测估计器,等等,没有反响的预测估计器会因为累积误差而导致越来越不准。如果两个都不准,该如何取舍?如何把两者结合在一起呢?我们可以设置一个信心指数K,K在0与1之间,来说明对测量值还是预测值的信任程度:Z = K * Zb + (1 K) * Zc= Zc + K*(Zb Zc)(1)

6、可以看出,当K = 1和0时,分别选择了GPS或预测估计器.现在,可以把误差Zb -Zc作为反响误差,来修正预测估计器的结果。新的系统构造图如下:这个框图,就是卡尔曼滤波器的根本构造。学过现代控制理论的同学都这个图应该很熟悉,与状态变量估计控制的图形差不多,只是其中的K = 1而且没有噪声项和系统反响而已。而我们下面的任务,就是如何确定这个K值。.以下略去三百字的方差,与协方差的介绍.自己看吧:zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE.以下略去五百字的kalman Filter Gain K的推导。自己看吧:zh.wikipedia.o

7、rg/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2关于卡尔曼滤波器的推导过程,枯燥晦涩,我就略过,直接关注结果。计算过程:卡尔曼滤波是一种递归的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息。卡尔曼滤波器的递归过程:1)估计时刻k的状态:X(k) = A*X(k-1) + B*u(k)这里,u(k)是系统输入2)计算误差相关矩阵P, 度量估计值的准确程度:P(k) = A*P(k-1)*A+ Q这里,Q = E Wj2 是系统噪声的协方差阵,即系统框图中的Wj的协

8、方差阵, Q应该是不断变化的,为了简化,当作一个常数矩阵。3)计算卡尔曼增益,以下略去(k),即P = P(k), X = X(k):K = P *C * (C * P * C + R)-1这里R = E Vj2 ,是测量噪声的协方差(阵),即系统框图中的Vj的协方差,为了简化,也当作一个常数矩阵。由于我们的系统一般是单输入单输出,所以R是一个1x1的矩阵,即一个常数,上面的公式可以简化为:K = P *C / (C * P * C + R)4)状态变量反响的误差量:e = Z(k) C*X(k)这里的Z(k)是带噪声的测量量5)更新误差相关矩阵PP = P K * C * P6)更新状态变量

9、:X =X + K*e = X + K* (Z(k) C*X(k)7)最后的输出:Y = C*X现在的问题就是如何实现卡尔曼滤波, A, B, C, Q, R 这些矩阵或量如何确定?仿真实例下面用仿真实例来观察卡尔曼滤波器的效果。假设我们的系统是一个加热系统,热时间常数为60秒,100度时到达热平衡。忽略系统的延迟,那么当系统加电后,温度由0开场上升。这个上升过程大家应该很熟悉,这是一个指数函数:y(t) = 100 * (1 e-t/60)其 laplace 传递函数为:y(s) = 100 / (60 * s - 1)我们人为的参加了随机噪声来模拟测量噪声我们假定并不知道系统的传递函数,现

10、在只是简单的,随便地构造了一个预测系统。A = 1, 0; 0, 1B = 1; 0C = 1, 0这是一个二阶系统,其输出是一条直线,与实际的系统相去甚远:测量噪声的协方差R = 40,此为猜测值;系统噪声Q = 2,也是猜测值,预测模型越不准,Q值应越大。卡尔曼滤波器的结果,红色为滤波器输出:可以看到,尽管我们使用了一个粗劣的预测估计器,Kalman滤波器还是相当的皮实,根本上消除了噪声.如果我们有一个相当准确的模型,结果会怎么样呢?准确模型的建立要建立一个准确的预测估计模型,我们还是要利用方差。如果一个估计的曲线与实际曲线完全重合时,他们的方差为 0. 方差越小,拟合度越高,最小二乘法的

11、原理便是如此。具体推导过程还是省略,直接给出matlab的拟合程序,这是一个非常非常有用的程序。如果数学模型很准确,能不能直接数学模型的输出作为滤波器的结果呢?不能,因为没有反响,数学模型的输出会因为没有反响的校正造成误差不断累积,失之毫厘,谬之千里。下面是用最小二乘法获得系统的模型并做为预测估计器,设定为 3 阶系统,得出的数学模型相当准确,所以Q值可以取一个小值,这里Q= 0.02,现在看看卡尔曼滤波器的结果:效果非常好,卡尔曼滤波器的输出与实际系统的输出 (即无噪声的系统输出) 几乎重合,这是准确的预测估计模型带来的好处。现在比较两个例子中卡尔曼增益的不同最小二乘法获得系统的模型中的增益

12、迅速地由大变小,最后小于不准确模型。K 值较小,意味着误差反响量较小,使得预测输出更偏重信任预测模型的结果,通过上图可以看到 kalman 算法的自适应性。至于误差相关阵 P 的值,同样,最小二乘法获得系统的模型中的 C*P*C 的值较小,这里就不给出图形了。结论:从上面的例子可以看出,卡尔曼滤波器对于预测系统的要求并不高,所以,那个卡尔曼可以蒙上眼,拿着一个劣质的GPS可以走到树下。假设系统的预测模型很准确,卡尔曼滤波器会有一个相当良好的效果。matlab 的验证程序z在 62, 63楼,所有程序均为原创。最小二乘法获取系统传递函数:1. function numd, dend = Leas

13、tSquare(x, y, N)2. count = length(y);3. M = count - 1;4. ai = zeros(N*2, M);5. for i=1:N6. ai(i, i:M) = x(1:(count-i);7. ai(i+N, i:M) = -y(1:(count-i);8. end9. bi = y(2:(count);10. xd = (inv(ai*ai)*ai*bi);11. numd = 0 xd(1:N);12. dend = 1 xd(N+1: N+N);复制代码输入参数:x-系统输入阵列y-系统输出阵列N-系统传递函数的阶数函数输出:系统 Z 传递

14、函数分子与分母的系数,即: h(z) = numd(z) / dend(z)这个函数实在是居家旅行 ., 啊,是建模仿真必备良器Ts = 1; 采样时间s = tf(s);sysc = 100/(60*s +1); 真实系统的传递函数sysd = c2d(sysc, Ts);t = 0:TsTs*300);u = ones(1, length(t); 系统输入ys = lsim(sysd, u, t, 0); 系统输出ys = ys + 10*rand(size(ys); 测量量 = 系统输出 + 噪声A = 1, 0; 0, 1;B = 1; 0;C = 1, 0;N = length(A); 系统维数Len = length(u);yout = zeros(Len, 1); 滤波器输出Xh = zeros(N, 1); 状态变量P = eye(N); Q = 2 * eye(N); 系统噪声R = 50; 测量噪声for i = 1 : Len Xh = A*Xh + B*u(i); P = A*P*A + Q; K = P*C* inv(C*P*C + R); Xh = Xh + K*(ys(i) - C*Xh); P = P - K*C*P; yout(i) = C*Xh;endTs = 1; 采样时间s = tf(s);sysc = 100/(60*s +1);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号