卡尔曼滤波器及其简matlab仿真.

合集下载

matlab 自适应卡尔曼滤波

matlab 自适应卡尔曼滤波

matlab 自适应卡尔曼滤波自适应卡尔曼滤波是一种基于卡尔曼滤波算法的扩展,用于跟踪非线性系统的状态。

在传统的卡尔曼滤波中,假设系统是线性的,并且系统的噪声和测量噪声是已知的。

然而,在实际应用中,往往会遇到非线性系统或未知的噪声情况,这就需要使用自适应卡尔曼滤波方法来处理。

自适应卡尔曼滤波的基本思想是通过一种递归算法,根据系统的状态和测量值的变化来调整卡尔曼滤波的参数。

具体步骤如下:1. 初始化卡尔曼滤波模型的参数,包括状态向量、状态转移矩阵、测量矩阵、过程噪声协方差矩阵、测量噪声协方差矩阵等。

2. 根据当前的测量值和状态向量,计算预测的状态向量和状态转移矩阵。

3. 通过当前的测量值和预测的状态向量,计算卡尔曼增益。

4. 更新状态向量和状态协方差矩阵。

5. 根据更新后的状态向量,重新计算过程噪声协方差矩阵和测量噪声协方差矩阵。

6. 重复步骤2到5,直到滤波结束。

自适应卡尔曼滤波的关键在于如何根据当前的测量值和状态向量来调整滤波模型的参数,以适应实际系统的变化。

常见的自适应卡尔曼滤波算法包括扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和粒子滤波等。

在MATLAB中,可以使用现有的工具箱或编写自己的函数来实现自适应卡尔曼滤波。

MATLAB提供了kalmanfilt函数用于实现标准的卡尔曼滤波,同时也可以根据需要自定义滤波模型和参数。

它还提供了ekf, ukf和pf函数分别用于实现扩展卡尔曼滤波、无迹卡尔曼滤波和粒子滤波算法。

下面是一个简单的MATLAB示例,演示了如何使用kalmanfilt函数实现自适应卡尔曼滤波:matlab% 定义系统的状态转移矩阵和测量矩阵A = [1 0.1; 0 1];C = [1 0];% 定义过程噪声协方差矩阵和测量噪声协方差矩阵Q = [0.01 0; 0 0.01];R = 0.1;% 创建kalman滤波器对象kf = kalmanfilt(A, C, Q, R);% 初始化状态向量和状态协方差矩阵x0 = [0; 0];P0 = eye(2);% 生成模拟数据N = 100;x_true = zeros(2, N);y = zeros(1, N);for k = 1:Nx_true(:, k) = A * x_true(:, k-1) + sqrtm(Q) * randn(2, 1);y(k) = C * x_true(:, k) + sqrt(R) * randn(1);end% 使用kalman滤波器滤波数据x_est = zeros(2, N);for k = 1:Nx_est(:, k) = kf(y(k));end% 绘制真实值和估计值的对比图figure;hold on;plot(1:N, x_true(1, :), 'b-', 'LineWidth', 2);plot(1:N, x_true(2, :), 'r-', 'LineWidth', 2);plot(1:N, x_est(1, :), 'k', 'LineWidth', 2);plot(1:N, x_est(2, :), 'm', 'LineWidth', 2);legend('True x1', 'True x2', 'Estimate x1', 'Estimate x2');hold off;以上示例中,定义了一个二维状态向量和一个一维测量向量,并根据这两个向量构建了卡尔曼滤波模型的参数。

自适应卡尔曼滤波matlab

自适应卡尔曼滤波matlab

自适应卡尔曼滤波matlab自适应卡尔曼滤波(Adaptive Kalman Filtering)是一种常用的估计和滤波技术,常用于处理不确定性和噪声存在的系统。

在这篇文章中,我将详细介绍自适应卡尔曼滤波的原理和应用,并探讨如何在MATLAB中实现该算法。

自适应卡尔曼滤波是卡尔曼滤波器的一种扩展形式,它通过动态调整滤波器的参数,以适应不断变化的系统条件和噪声水平。

与传统的卡尔曼滤波相比,自适应卡尔曼滤波具有更好的鲁棒性和适应性。

自适应卡尔曼滤波的关键思想是根据观测数据的特点动态调整系统模型的参数。

在传统的卡尔曼滤波中,系统模型的参数通常是固定的,但在实际应用中,系统的动态特性和外部环境的变化可能导致模型参数的不确定性。

自适应卡尔曼滤波通过监测观测数据的统计特性,自动调整系统模型的参数,以提高滤波器的性能。

在MATLAB中实现自适应卡尔曼滤波可以分为以下几个步骤:1. 定义系统模型:首先需要定义系统的状态变量、测量变量以及系统的状态转移方程和测量方程。

这些方程描述了系统的动态特性和观测模型。

2. 初始化滤波器:在开始滤波之前,需要初始化滤波器的状态向量和协方差矩阵。

状态向量表示系统的状态变量,协方差矩阵表示对状态变量估计的不确定性。

3. 预测步骤:根据系统的状态转移方程和当前的状态估计,进行状态的预测。

预测的结果是对系统下一时刻状态的估计。

4. 更新步骤:根据测量方程和当前的观测值,更新状态估计和协方差矩阵。

更新的结果是对系统当前状态的更准确估计。

5. 自适应调整:根据观测数据的统计特性,自适应地调整滤波器的参数。

这个步骤是自适应卡尔曼滤波与传统卡尔曼滤波的主要区别之一。

自适应卡尔曼滤波在许多领域都有广泛的应用。

例如,在目标跟踪中,通过自适应调整滤波器的参数,可以更好地适应目标运动的变化和观测噪声的不确定性。

在信号处理中,自适应卡尔曼滤波可以用于去除信号中的噪声和干扰,提高信号的质量。

自适应卡尔曼滤波是一种强大的估计和滤波技术,能够有效处理不确定性和噪声存在的系统。

一维卡尔曼滤波matlab

一维卡尔曼滤波matlab

一维卡尔曼滤波器在MATLAB中的实现主要涉及以下步骤:
1. 初始化:设置初始状态和协方差矩阵。

2. 预测:根据上一状态的值,预测下一状态的值。

3. 更新:根据新的测量值,更新对下一状态的估计。

下面是一个简单的一维卡尔曼滤波器的MATLAB实现示例:
```matlab
function [x, P] = simpleKalman(x, P, A, Q, B, U, H, R, z) 预测阶段
x = A*x + B*U; 状态预测
P = A*P*A' + Q; 协方差矩阵预测
更新阶段
K = P*H'/(H*P*H' + R); 卡尔曼增益
x = x + K*(z - H*x); 状态更新
P = (eye(size(P,1)) - K*H)*P; 协方差矩阵更新
end
```
在这个函数中,输入参数`x`是状态估计向量,`P`是状态估计协方
差矩阵,`A`是状态转移矩阵,`Q`是过程噪声协方差矩阵,`B`是控制输入矩阵,`U`是控制向量,`H`是观察矩阵,`R`是观察噪声协方差矩阵,`z`是观察向量。

输出参数`x`和`P`分别是更新后的状态估计向量和协方差矩阵。

注意:这只是一个简单的示例,实际应用中需要根据具体的问题进行适当的修改和优化。

卡尔曼滤波 正弦函数 matlab

卡尔曼滤波 正弦函数 matlab

一、介绍卡尔曼滤波卡尔曼滤波是一种用于估计系统状态的线性动态系统的方法。

它是由朗迪·卡尔曼在1960年提出的。

卡尔曼滤波是一种递归滤波器,通过使用过去时刻的状态和测量,以及系统动态的模型,来预测当前时刻的状态。

二、卡尔曼滤波原理1. 状态更新步骤:在状态更新步骤中,卡尔曼滤波使用系统的动态方程来预测下一个时刻的状态。

这一步骤包括预测状态、预测状态协方差和计算卡尔曼增益。

2. 测量更新步骤:在测量更新步骤中,卡尔曼滤波使用最新的测量值来修正之前的预测。

这一步骤包括计算测量预测、计算残差、计算卡尔曼增益和更新状态估计。

三、正弦函数及其在卡尔曼滤波中的应用正弦函数是一种周期性变化的函数,具有良好的数学性质和广泛的应用。

在卡尔曼滤波中,正弦函数可以用于模拟系统的动态特性,对系统的状态进行预测和更新。

四、matlab中的卡尔曼滤波实现matlab是一种用于科学计算和工程应用的高级技术计算语言和交互环境。

在matlab中,可以很方便地实现和应用卡尔曼滤波算法。

1. 使用matlab进行线性动态系统建模在matlab中,可以使用state-space模型来表示线性动态系统的状态空间方程。

通过定义系统的状态方程、测量方程、过程噪声和观测噪声,可以建立系统的状态空间模型。

2. 使用matlab实现卡尔曼滤波算法在matlab中,可以使用kalman滤波器函数来实现卡尔曼滤波算法。

首先需要定义系统的状态转移矩阵、测量矩阵、过程噪声协方差矩阵和观测噪声协方差矩阵。

然后利用kalman滤波器函数,输入系统模型和测量值,即可得到卡尔曼滤波器的输出。

3. 使用matlab对正弦函数进行卡尔曼滤波在matlab中,可以构建一个包含正弦函数的模拟系统,并对其进行卡尔曼滤波。

通过比较卡尔曼滤波的结果和真实正弦函数的值,可以评估卡尔曼滤波算法的性能。

五、结论卡尔曼滤波是一种用于估计系统状态的有效方法,在很多领域都有广泛的应用。

卡尔曼滤波原理及应用matlab仿真

卡尔曼滤波原理及应用matlab仿真

卡尔曼滤波原理及应用matlab仿真卡尔曼滤波(Kalman Filter)是一种最优估计算法,由美国工程师卡尔曼发明并命名。

它是一种递归算法,适用于线性以及线性化的系统。

卡尔曼滤波可以通过已知的状态方程和观测方程来计算未知的状态量,同时考虑到测量误差和系统噪声。

卡尔曼滤波的核心思想是通过已知的状态方程和观测方程来递归地更新估计值和协方差矩阵。

估计值是对状态量的估计,协方差矩阵是表示估计值的不确定性的指标,它受到测量误差和系统噪声的影响。

通过不断迭代的过程,最终得到最优的状态估计值。

卡尔曼滤波主要应用于控制系统、导航、信号处理、图像处理等领域,它可以用于预测未来的状态量和优化估计结果,提高系统的稳定性和精度。

在自主导航系统中,卡尔曼滤波可以通过传感器捕捉环境信息,实现机器人的定位、控制和路径规划。

Matlab是一种强大的数学计算软件,它提供了丰富的工具箱和函数库,可以实现卡尔曼滤波算法的仿真。

Matlab中的Kalman滤波工具箱可以用于模拟线性系统的状态估计。

通过Matlab软件,可以输入系统的状态方程和观测方程,生成真实值和观测值序列,并使用卡尔曼滤波算法估计状态量,同时展示状态量的收敛过程和误差分析。

在实际应用中,卡尔曼滤波需要针对具体的问题进行调整和优化,例如选择不同的观测量和噪声模型,选择恰当的卡尔曼增益等。

因此,在使用卡尔曼滤波进行估计时需要注意以下几点:1.确定系统的状态方程和观测方程,建立合理的模型。

2.合理估计系统噪声和观测噪声,减小误差对估计结果的影响。

3.选择合适的卡尔曼增益,平衡观测值和实际值对估计的贡献。

4.对估计结果进行误差分析,评估卡尔曼滤波的优势和局限性。

总之,卡尔曼滤波是一种重要的最优估计算法,广泛应用于控制、导航、信号处理等领域。

通过Matlab软件,可以进行卡尔曼滤波算法的仿真,并优化估计结果。

在实际应用中,需要针对具体问题进行调整和优化,以提高估计精度和稳定性。

自适应扩展卡尔曼滤波matlab

自适应扩展卡尔曼滤波matlab

自适应扩展卡尔曼滤波matlab自适应扩展卡尔曼滤波(Adaptive Extended Kalman Filter,AEKF)是一种用于非线性系统状态估计的滤波算法。

本文将介绍AEKF算法的原理、步骤和实现方法,并结合MATLAB 编写代码进行演示。

一、扩展卡尔曼滤波原理扩展卡尔曼滤波(Extended Kalman Filter,EKF)是一种用于非线性系统状态估计的滤波算法。

它通过使用线性化系统模型的方式将非线性系统转换为线性系统,在每个时间步骤中用线性卡尔曼滤波器进行状态估计。

然而,EKF仅限于具有凸多边形测量特性的问题,并且对线性化过程误差敏感。

为了解决这些问题,AEKF通过自适应更新协方差矩阵的方式提高了滤波器的性能。

AEKF通过测量残差的方差更新协方差矩阵,从而提高了滤波器对非线性系统的适应能力。

AEKF算法的步骤如下:1. 初始化状态向量和协方差矩阵。

2. 根据系统的非线性动力学方程和测量方程计算预测状态向量和协方差矩阵。

3. 计算测量残差,即测量值与预测值之间的差值。

4. 计算测量残差的方差。

5. 判断测量残差的方差是否超过预设阈值,如果超过,则更新协方差矩阵。

6. 利用更新后的协方差矩阵计算最优滤波增益。

7. 更新状态向量和协方差矩阵。

8. 返回第2步,进行下一次预测。

二、AEKF算法的MATLAB实现下面,我们将使用MATLAB编写AEKF算法的代码,并通过一个实例进行演示。

首先,定义非线性系统的动力学方程和测量方程。

在本例中,我们使用一个双摆系统作为非线性系统模型。

```matlabfunction x_next = nonlinear_dynamics(x_current, u)% Nonlinear system dynamicstheta1 = x_current(1);theta2 = x_current(2);d_theta1 = x_current(3);d_theta2 = x_current(4);g = 9.8; % Gravitational accelerationd_theta1_next = d_theta1 + dt * (-3*g*sin(theta1) - sin(theta1-theta2) ...+ 2*sin(theta1-theta2)*(d_theta2^2 + d_theta1^2*cos(theta1-theta2))) .../ (3 - cos(2*(theta1-theta2)));d_theta2_next = d_theta2 + dt * (2*sin(theta1-theta2)*(2*d_theta2^2 ...+ d_theta1^2*cos(theta1-theta2) + g*cos(theta1) +g*cos(theta1-theta2))) .../ (3 - cos(2*(theta1-theta2)));theta1_next = theta1 + dt * d_theta1_next;theta2_next = theta2 + dt * d_theta2_next;x_next = [theta1_next; theta2_next; d_theta1_next;d_theta2_next];endfunction y = measurement_model(x)% Measurement model, measure the angles of the double pendulumtheta1 = x(1);theta2 = x(2);y = [theta1; theta2];end```然后,定义AEKF算法的实现。

维纳、卡尔曼滤波简介及MATLAB实现

维纳、卡尔曼滤波简介及MATLAB实现

现代数字信号处理课程作业维纳、卡尔曼、RLS、LMS算法matlab实现维纳滤波从噪声中提取信号波形的各种估计方法中,维纳(Wiener)滤波是一种最基本的方法,适用于需要从噪声中分离出的有用信号是整个信号(波形),而不只是它的几个参量。

设维纳滤波器的输入为含噪声的随机信号。

期望输出与实际输出之间的差值为误差,对该误差求均方,即为均方误差。

因此均方误差越小,噪声滤除效果就越好。

为使均方误差最小,关键在于求冲激响应。

如果能够满足维纳-霍夫方程,就可使维纳滤波器达到最佳。

维纳滤波器的优点是适应面较广,无论平稳随机过程是连续的还是离散的,是标量的还是向量的,都可应用。

维纳滤波器的缺点是,要求得到半无限时间区间内的全部观察数据的条件很难满足,同时它也不能用于噪声为非平稳的随机过程的情况,对于向量情况应用也不方便。

因此,维纳滤波在实际问题中应用不多。

下面是根据维纳滤波器给出的图像处理matlab实例,在下面实例中维纳滤波和均值滤波相比较,并且做了维纳复原、边缘提取、图像增强的实验:%****************维纳滤波和均值滤波的比较*********************I=imread('lena.bmp');J=imnoise(I,'gaussian',0,0.01);Mywiener2 = wiener2(J,[3 3]);Mean_temp = ones(3,3)/9;Mymean = imfilter(J,Mean_temp);figure(1);subplot(121),imshow(Mywiener2),title('维纳滤波器输出');subplot(122),imshow(uint8(Mymean),[]),title('均值滤波器的输出');%***********************维纳复原程序********************figure(2);subplot(231),imshow(I),title('原始图像');LEN = 20;THETA =10;PSF = fspecial('motion',LEN,THETA);Blurred = imfilter(I,PSF,'circular');subplot(232),imshow(Blurred),title('生成的运动的模糊的图像');noise = 0.1*randn(size(I));subplot(233),imshow(im2uint8(noise)),title('随机噪声');BlurredNoisy=imadd(Blurred,im2uint8(noise));subplot(234),imshow(BlurredNoisy),title('添加了噪声的模糊图像');Move=deconvwnr(Blurred,PSF);subplot(235),imshow(Move),title('还原运动模糊的图像');nsr = sum(noise(:).^2)/sum(im2double(I(:)).^2);wnr2 = deconvwnr(BlurredNoisy,PSF,nsr);subplot(236),imshow(wnr2),title('还原添加了噪声的图像');%****************维纳滤波应用于边缘提取*********************N = wiener2(I,[3,3]);%选用不同的维纳窗在此修改M = I - N;My_Wedge = im2bw (M,5/256);%化二值图像BW1 = edge(I,'prewitt');BW2 = edge(I,'canny');BW3 = edge(I,'zerocross');BW4 = edge(I,'roberts');figure(3)subplot(2,4,[3 4 7 8]),imshow(My_Wedge),title('应用维纳滤波进行边沿提取'); subplot(241),imshow(BW1),title('prewitt');subplot(242),imshow(BW2),title('canny');subplot(245),imshow(BW3),title('zerocross');subplot(246),imshow(BW4),title('roberts');%*************************维纳滤波应用于图像增强***************************for i = [1 2 3 4 5] K = wiener2(I,[5,5]);end K = K + I; figure(4);subplot(121),imshow(I),title('原始图像'); subplot(122),imshow(K),title('增强后的图像');维纳滤波器输出均值滤波器的输出原始图像生成的运动的模糊的图像随机噪声添加了噪声的模糊图像还原运动模糊的图像还原添加了噪声的图像卡尔曼滤波卡尔曼滤波的一个典型实例是从一组有限的,对物体位置的,包含噪声的观察序列预测出物体的坐标位置及速度。

卡尔曼滤波的仿真实现

卡尔曼滤波的仿真实现

卡尔曼滤波的仿真实现以下是一个卡尔曼滤波的仿真实现过程。

1.定义系统模型:首先,需要定义系统的状态转移方程和观测方程。

系统状态转移方程描述了状态在时间上的演变关系,观测方程描述了测量值与系统状态之间的关系。

例如,考虑一个简单的一维恒定速度系统,状态转移方程可以定义为:x(k+1) = x(k) + v(k) * dt观测方程可以定义为:z(k)=x(k)+w(k)2.初始化滤波器参数:卡尔曼滤波器需要初始化一些参数,包括状态的初始估计值和协方差矩阵。

初始估计值可以根据先验知识提供一个初始猜测,协方差矩阵则定义了该估计的方差。

在这个例子中,可以假设初始位置和速度均为0,并且初始协方差矩阵为一个较大的值。

3.实现卡尔曼滤波算法:在每个时间步骤中,进行以下步骤:-预测步骤:根据状态转移方程预测下一个状态的估计值和协方差矩阵:x_hat(k+1,k) = A * x_hat(k,k) + B * u(k)P(k+1,k)=A*P(k,k)*A^T+Q-更新步骤:根据观测方程更新状态的估计值和协方差矩阵:K(k+1)=P(k+1,k)*H^T*(H*P(k+1,k)*H^T+R)^(-1)x_hat(k+1,k+1) = x_hat(k+1,k) + K(k+1) * (z(k+1) - H *x_hat(k+1,k))P(k+1,k+1)=(I-K(k+1)*H)*P(k+1,k)其中,A和B是状态转移方程的系数矩阵,u(k)是系统的外部输入,Q是过程噪声的协方差矩阵,H是观测方程的系数矩阵,R是观测噪声的协方差矩阵。

4.生成噪声:为了模拟真实的情况,在每个时间步骤中,生成过程噪声和观测噪声。

过程噪声可以使用正态分布随机数生成,观测噪声可以根据具体应用生成。

5.执行仿真:在每个时间步骤中,首先根据当前状态和输入生成观测值。

然后,根据观测值和卡尔曼滤波算法更新状态的估计值和协方差矩阵。

最后,记录每个时间步骤下的估计状态和真实状态,并计算估计状态与真实状态之间的误差。

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

卡尔曼滤波器及其简matlab仿真一、卡尔曼滤波的起源谈到信号的分析与处理,就离不开滤波两个字。

通常,信号的频谱处于有限的频率范围内,而噪声的频谱则散布在很广的频率范围内,为了消除噪声,可以进行频域滤波。

但在许多应用场合,需要直接进行时域滤波,从带噪声的信号中提取有用信号。

虽然这样的过程其实也算是对信号的滤波,但其所依据的理论,即针对随机信号的估计理论,是自成体系的。

人们对于随机信号干扰下的有用信号不能“确知”,只能“估计”。

为了“估计”,要事先确定某种准则以评定估计的好坏程度。

1960年卡尔曼发表了用递归方法解决离散数据线性滤波问题的论文A New Approach to Linear Filtering and Prediction Problems(线性滤波与预测问题的新方法),在这篇文章里一种克服了维纳滤波缺点的新方法被提出来,这就是我们今天称之为卡尔曼滤波的方法。

卡尔曼滤波应用广泛且功能强大,它可以估计信号的过去和当前状态甚至能估计将来的状态即使并不知道模型的确切性质。

其基本思想是以最小均方误差为最佳估计准则,采用信号与噪声的状态空间模型利用前一时刻的估计值和当前时刻的观测值来更新对状态变量的估计,求出当前时刻的估计值。

算法根据建立的系统方程和观测方程对需要处理的信号做出满足最小均方误差的估计。

对于解决很大部分的问题,它是最优,效率最高甚至是最有用的。

它的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。

近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。

卡尔曼滤波不要求保存过去的测量数据,当新的数据到来时,根据新的数据和前一时刻的储值的估计,借助于系统本身的状态转移方程,按照一套递推公式,即可算出新的估值。

卡尔曼递推算法大大减少了滤波装置的存储量和计算量,并且突破了平稳随机过程的限制,使卡尔曼滤波器适用于对时变信号的实时处理。

二、卡尔曼滤波的原理卡尔曼滤波思想的来源是在海图作业中,航海长通常以前一时刻的船位为基准,根据航向、船速和海流等一系列因素推算下一个船位,但是他并不轻易认为船位就一定在推算船位上,还要选择适当的方法,通过仪器得到另一个推算船位。

观测和推算这两个船位一般不重合,航海长需要通过分析和判断选择一个可靠的船位,作为船舰当前的位置。

就是以现时刻的最佳估计为在前一时刻的最佳估计的基础上根据现时刻的观测值作线性修正。

卡尔曼滤波在数学上是一种线性最小方差统计估算方法,它是通过处理一系列带有误差的实际测量数据而得到物理参数的最佳估算。

其实质要解决的问题是要寻找在最小均方误差下K X 的估计值^K X 。

它的特点是可以用递推的方法计算K X ,其所需数据存储量较小,便于进行实时处理。

具体来说,卡尔曼滤波就是要用预测方程和测量方程对系统状态进行估计。

设动态系统的状态方程和测量方程分别为:11,11,----Γ+Φ=K K K K K K K W X XK K K K V X H Z +=上两式子中,K X 是k 时刻的系统状态,1,-ΦK K 和1,-ΓK K 是k-1时刻到k 时刻的状态转移矩阵,K Z 是k 时刻的测量值,K H 是测量系统的参数,K W 和K V 分别表示过程和测量的噪声,他们被假设成高斯白噪声。

如果被估计状态和观测量是满足上述第一式,系统过程噪声和观测噪声满足第二式的假设,k 时刻的观测K X 的估计^X 可按下述方程求解。

状态的一步预测: (1)均方误差进一步预测: (2) 滤波增益矩阵: (3) 滤波估计方程: (4) 均方误差更新矩阵(K 时刻的最优均方误差): (5) 上述就是卡尔曼滤波器的5条基本公式,只有给定初值0X 和0P ,根据k 时刻的观测值K Z ,就可以递推计算得k 时刻的状态估计^K X 。

/1,11ˆˆk k k k k x x φ---=*/1,11,1111ˆTTk k k k k k k k k k P P Q φφ-------=**+ΓΓ1/1/1ˆˆT T k k k k k k k k K P H H P H R ---⎡⎤=***+⎣⎦[]/1/1ˆˆk k k k k k k x x K Z H x--=+-*[]/1ˆk k k k P I K H P -=-**下面论述卡尔曼五个公式的推导过程:设系统1111,----Γ+Φ=k k k k k k x x ω (1)k k k k v x H z += k>=1 (2)其中, 动态噪声{k ω}与量测噪声{k v }是互不相关的零均值白噪声序列,对任意k,j 其基本统计性质为:E{k ω} = 0 Cov(k ω,j ω)=E[k ωTj ω]=kj k Q δE{k v } = 0 Cov(k v ,j v )=E[k v T j v ]=kj k R δ Cov(k ω,j v )=E[k ωTj v ]=0其中kj δ是克罗内克δ函数,即:又设初始状态的统计特征为 E[x 0]=Var x 0 = E{(x 0-)( x 0-)T }=P 0且x 0与{k ω},{k v }都不相关,即 Cov(0x ,k ω)=0 Cov(0x ,k v )=0在量测(k-1)次之后,已经有一个1/11ˆˆ---=k k k x x的估计值,要推测k 状态的状态值,因为E{1-k ω} = 0,可定义1/ˆ-k k x 为由k-1次量测值所估计值1ˆ-k x 的一步预测合理数值,即11,1/ˆˆ---Φ=k k k k k x x (3)同样,考虑到E{k v } = 0,因而量测的期望值为1ˆ-k k x H 也是合适的。

考虑到这两点以后利用第k 次的量测数据k z 来估计k x ˆ的递推形式,其应该为:)ˆ(ˆˆˆ1/1//---+==k k k k k k k k k k x H z K x x x (4)这里的k K 是一个待定的增益矩阵,其应使误差矩阵极小。

接下来推导误差方差公式。

定义k k k k k x xx -=--1/1/ˆ~ (5) k k k k k k x xx x -==//ˆ~~ (6) 其中“~”表示误差,式(5)表示先验(没有测量值)的误差,式(6)表示后验的误差(经测量值校正)。

则,根据式(6),将式(4),式(5)带入,得k k k k k k k k k k k k k k k k x k k k k k k k k k k k k k k k k k k v K x H K I x x H K x H K v K x H K x x x x H v x H K x x xx +-=---+++=--++=-=-----1/1/1/1/1/~)(~~)ˆ(ˆˆ~估计误差矩阵]})(~[])(~[~){(]~~[1/1/1/T k k T k k T k k k k T k T k T k k T k k k k k k T k k k K v H K I x v K K v H K I x x H K I E x x E P +-++--==---(7)定义]~~[1/1/1/T k k k k k k x x E P ---= (8)这就是一步预测误差矩阵。

由模型的统计性质可知E[k v T k v ]=k R (9) 而且,预测误差与测量噪声不相关,即:0]~[][1/1/==--T k k k T k k k x v E v x E (10) 将式(8),式(9),式(10)带入式(7),得T kk k T k k k k k k k K R K H K I P H K I P +--=-)()(1/ (11)现寻找一个k K 使式(11)最小。

将式(11)右端展开后,加减同一项1/11/1/)(----+k k k k Tk k k k T k k k P H R H P H H P再把有关k K 的项归在平方项里,即])([)]()([)(11/1/1/11/1/1/11/1/1/------------+-++-++-=k T k k k k T k k k k k k k k k k T k k k k T k k k k k k k k Tk k k k T k k k k k k R H P H H P K R H P H R H P H H P K P H R H P H H P P P(12)在式(12)中,欲使k P 极小,则11/1/)(---+=k T k k k k T k k k k R H P H H P K (13)此时1/1/11/1/1/][)(-------=+-=k k k k k k k k T k k k k T k k k k k k P H K I P H R H P H H P P P (14)这就是误差迭代公式。

由此可见,卡尔曼滤波的递推公式即可得到滤波的估计值,又可得到误差的方差阵。

由式(3)两边同时减去k x 得:k k k k k k k x x x x -Φ=---11,1/ˆ-ˆ (15)将式(1),式(5)带入式(15)1111,1/~~-----Γ-Φ=k k k k k k k x x ω因此T k k k T k k k k k k k Q P P 1111,11,1/-------ΓΓ+ΦΦ= (20)式(20)即一步预测估计误差矩阵。

到此,卡尔曼滤波公式推导完毕。

三、 卡尔曼滤波的实例——以温度检测滤波为例假设我们要研究一个房间的温度,这个房间的真实温度是25度,以一分钟为时间单位。

根据我们的经验判断,这个房间的温度是恒定的(A=1),但是对我们的经验不是完全相信,可能存在上下几度的偏差,我们把该偏差看做是高斯白噪声(系统噪声W )。

另外,我们在房间里放一个温度计(H=1),温度计也不准确,测量值会与实际值存在偏差,我们也把这偏差看做是高斯白噪声(测量噪声V )。

现在我们用卡尔曼滤波,过滤掉噪声,估算出房间的实际温度。

系统参数名称解释如下: xk系统状态 实际温度 φ系统矩阵 温度不变,为1 B 、uk 状态的控制量 无控制量,为0 Zk 观测值 温度计读数 H 观测矩阵 直接读出,为1wk 过程噪声 温度变化偏差,常量1e-1 vk测量噪声读数误差,常量1e-6假如我们要估算 2 时刻房间的实际温度值。

首先你要根据 1 时刻温度的估计值(就假设为1),来算出 2 时刻温度的估计值,即: =1 (*公式1),然后由给出的1时刻的均方差 (假设为10)进一步更新均方差,有 = 10.009(*公式2)。

有方差 之后,根据卡尔曼增益方程计算出增益: =0.925 (*公式3)。

相关文档
最新文档