首页 > 编程知识 正文

滤波算法原理,卡尔曼滤波简单理解

时间:2023-05-04 17:50:46 阅读:12594 作者:194

出于科学研究的需要,我打算开始学习卡尔曼滤波器。 卡尔曼滤波很久以前就听说了,但一直没能深入学习。 这次终于有机会了。 哈哈。

1 .卡尔曼滤波的发展历程

卡尔曼滤波器的本质是“估计”xsdsb。 首先介绍估计,“估计”问题是指,对于受到随机干扰和随机测量误差作用的物理系统,基于某一性能指标最佳的原则,从具有随机误差的测量数据中提取信息,估计系统某一参数的状态变量最快的估计方法是著名数学家欢呼的鸵鸟1795年发明的最小二乘法(最小二乘法计算简单,便于应用,但没有考虑被估计参数和观察数据的统计特性)。 为什么这么说,是因为这个方法不是最佳的推测。 之后,1912年,英国统计学家qld提出了最大似然法,从概率密度的角度考虑估计问题。 关于随机过程的估计,1940年控制论创始人pgfn根据火力控制系统上的需要提出了一种频域统计设计滤波器最多的方法。 该方法称为Wiener过滤。 同时,苏联数学家苹果绿草提出并首次解决了广义离散平稳随机序列的预测和外推问题。 由于pgfn滤波采用频域设计法,由于运算复杂、分析困难等问题,科学家寻求一种直接在时域设计最优滤波器的方法,卡尔曼滤波应运而生! (发明人)匈牙利裔美国人数学家热情的大老爷,1930—() )。

卡尔曼滤波是一种时域滤波方法,采用状态空间法描述系统,算法采用递归形式,数据存储量少,不仅能处理平稳随机过程,还能处理bzdxmy和非平稳随机过程。 卡尔曼滤波理论具有上述强大的优点,因此作为惯导、全球定位系统、目标跟踪系统、通信与信号处理、金融等最重要的最优估计理论被广泛应用于各个领域。

2 .经典卡尔曼滤波原理介绍

经典卡尔曼创立于1960年,此后几十年不断衍生发展,本文讨论的是经典卡尔曼滤波卡尔曼滤波器的推导过程设计了许多繁琐的公式,在此不再推导。 省略公式,掌握其中的基本前提、基本假设、基本方程,就能领略卡尔曼的魅力。

(1)基本前提:卡尔曼滤波器应用对象是已知模型精确随机干扰信号统计特性的线性系统

)2)基本方程:

式中,k为离散时间,系统为时刻k的状态X(k )、Y(k )为对应状态的3http://ww.com/) 称为状态转移矩阵,是噪声驱动矩阵,观测信号,是观测矩阵。

与上述方程式有关的参数x表示卡尔曼估计值,y表示实际的观测值。和W均为系统相关模型参数,因此在系统模型足够准确的情况下,卡尔曼滤波器工作正常; 卡尔曼滤波认为观测值和真值有误差。 该误差的来源是过程噪声V和观测噪声H过程噪声是什么? 过程噪声是指外界对系统的干扰,例如在温度测量系统中,过程噪声是由人体干扰、阳光照射、风等因素引起的; 测量噪声起因于传感器的测量精度,即传感器的测量误差。 测量噪声和过程噪声的特性可以统计得到。

)3)基本假设:假设1 ) w和v均值为零,方差分别为q和r的不相关白噪声;

假设2 :初始状态x(0)与w和v无关

总之,卡尔曼滤波器问题可以归结为基于观测信号{}求出状态x(k )的线性方差估计值

3 .算法设计

通过推导,卡尔曼滤波的递归算法如下。

状态的一步预测:

更新状态:

滤波器增益矩阵:

进一步预测协方差序列:

分布式阵列更新:

其中,r为观测噪声方差,q为过程噪声方差。

4 .例行示威

卡尔曼滤波在温度测量中的应用:假设研究对象为房间温度。 根据经验判断,该房间温度约为25左右,可能受到气流、阳光等的影响,房间内温度波动较小,采样周期为1分钟,利用卡尔曼滤波器实时最佳估计温度。

源代码如下:

(() ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )在652

%功能说明:卡尔曼滤波用于一维温度数据测量系统

(() ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )在652

clc;

清除全部;

关闭全部;

N=120; %采样点的数量,以分钟为单位

常数=25; %室内温度的理论值受过程噪声的影响,该值

会有波动
%对状态和测量初始化
Xexcept=constant*ones(1,N);%房间各时刻真是温度值
Xkf=zeros(1,N);%卡尔曼滤波处理的状态,也叫估计值
Z=zeros(1,N);%温度测量值
P=zeros(1,N);
%赋初值
X(1)=25.1;%假设房间温度为25.1℃
P(1)=0.01;%初始值的协方差
Z(1)=24.9;
Xkf(1)=Z(1);%初始测量值为24.9℃,可作为滤波器的初始估计状态
%噪声
Q=0.01;
R=0.25;
W=sqrt(Q)*randn(1,N);%方差决定噪声大小
V=sqrt(R)*randn(1,N);%方差决定噪声大小
%系数矩阵
F=1;
G=1;
H=1;
I=eye(1);%本系统状态为一维
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模拟房间温度和测量过程并滤波
for k=2:N
    %第一步:随时间推移,房间真实温度波动变化
    %k时刻房间真实温度,对于温度传感器来说,这个真实值是不知道的
    X(k)=F*X(k-1)+G*W(k-1);
    %第二步:随时间推移,获取真实数据
    %温度传感器对k时刻房间的测量
    %Kalman滤波是站在温度传感器角度进行的,它不知道此刻真实状态X(k),只能利用上
    %次测量值Z(k)和上次估计值Xkf(k)来做处理,其目的是最大限度地降低测量噪声R的
    %干扰,尽可能地逼近X(k),这也是Kalman滤波的本质目的
    Z(k)=H*X(k)+V(k);
    %第三步:Kalman滤波
    %有了k时刻的观测值Z(k)和k-1时刻的状态,就可以进行滤波过程
    X_pre=F*Xkf(k-1);              %状态预测;
    P_pre=F*P(k-1)*F'+Q;           %协方差预测
    Kg=P_pre*inv(H*P_pre*H'+R);    %计算kalman增益
    e=Z(k)-H*X_pre;                %新息
    Xkf(k)=X_pre+Kg*e;             %状态更新
    P(k)=(I-Kg*H)*P_pre;           %协方差更新
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算误差
Err_Measure=zeros(1,N);%测量值与真实值之间的偏差
Err_Kalman=zeros(1,N); %估计值与真实值之间的偏差
for k=1:N
    Err_Measure(k)=abs(Z(k)-X(k));
    Err_Kalman(k)=abs(Xkf(k)-X(k));
end
t=1:N;
figure%画图显示
%依次输出理论值,叠加过程噪声(受波动影响)的真实值,温度传感器和Kalman估计值
plot(t,Xexcept,'-b',t,X,'-r',t,Z,'-ko',t,Xkf,'-g*');
legend('期望值','真实值','观测值','Kalman滤波值');
xlabel('采样时间/s');
ylabel('温度/℃');
figure;%画图显示
plot(t,Err_Measure,'-b',t,Err_Kalman,'-K*');
legend('测量偏差','Kalman滤波偏差');
xlabel('采样时间/s');
ylabel('温度偏差/℃');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

效果如下:

                   

结束。初次学习,难免理解有误,各位正直的中心请多指教。 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。