UKF滤波算法
EKF,UKF,PF三种算法的比较粒子滤波matlab仿真程序EKF,UKF,PF三种算法的比较matlab仿真程序
%EKF UKF PF的三个算法clear;%tic;x=0.1;%初始状态x_estimate=1;%状态的估计e_x_estimate=x_estimate;%EKF的初始估计u_x_estimate=x_estimate;%UKF的初始估计p_x_estimate=x_estimate;%PF的初始估计Q=10;%input('请输入过程噪声方差Q的值:');%过程状态协方差R=1;%input('请输入测量噪声方差R的值:');%测量噪声协方差P=5;%初始估计方差e_P=P;%UKF方差u_P=P;%UKF方差pf_P=P;%PF方差tf=50;%模拟长度x_array=[x];%真实值数组e_x_estimate_array=[e_x_estimate];%EKF最优估计值数组u_x_estimate_array=[u_x_estimate];%UKF最优估计值数组p_x_estimate_array=[p_x_estimate];%PF最优估计值数组u_k=1;%微调参数u_symmetry_number=4;%对称的点的个数u_total_number=2*u_symmetry_number+1;%总的采样点的个数linear=0.5;N=500;%粒子滤波的粒子数close all;%粒子滤波初始N个粒子for i=1:Np_xpart(i)=p_x_estimate+sqrt(pf_P)*randn;endfor k=1:tf%模拟系统x=linear*x+(25*x/(1+x^2))+8*cos(1.2*(k-1))+sqrt(Q)*randn;%状态值y=(x^2/20)+sqrt(R)*randn;%观测值%扩展卡尔曼滤波器%进行估计第一阶段的估计e_x_estimate_1=linear*e_x_estimate+25*e_x_estimate/(1+e_x_estimate^2)+8*cos(1.2*(k-1));e_y_estimate=(e_x_estimate_1)^2/20;%这是根据k=1时估计值为1得到的观测值;只是这个由我估计得到的第24行的y也是观测值不过是由加了噪声的真实值得到的%相关矩阵e_A=linear+25*(1-e_x_estimate^2)/((1+e_x_estimate^2)^2);%传递矩阵e_H=e_x_estimate_1/10;%观测矩阵%估计的误差e_p_estimate=e_A*e_P*e_A'+Q;%扩展卡尔曼增益e_K=e_p_estimate*e_H'/(e_H*e_p_estimate*e_H'+R);%进行估计值的更新第二阶段e_x_estimate_2=e_x_estimate_1+e_K*(y-e_y_estimate);%更新后的估计值的误差e_p_estimate_update=e_p_estimate-e_K*e_H*e_p_estimate;%进入下一次迭代的参数变化e_P=e_p_estimate_update;e_x_estimate=e_x_estimate_2;%粒子滤波器%粒子滤波器for i=1:Np_xpartminus(i)=0.5*p_xpart(i)+25*p_xpart(i)/(1+p_xpart(i)^2)+8*cos(1.2*(k-1))+ sqrt(Q)*randn;%这个式子比下面一行的效果好%xpartminus(i)=0.5*xpart(i)+25*xpart(i)/(1+xpart(i)^2)+8*cos(1.2*(k-1));p_ypart=p_xpartminus(i)^2/20;%预测值p_vhat=y-p_ypart;%观测和预测的差p_q(i)=(1/sqrt(R)/sqrt(2*pi))*exp(-p_vhat^2/2/R);%各个粒子的权值end%平均每一个估计的可能性p_qsum=sum(p_q);for i=1:Np_q(i)=p_q(i)/p_qsum;%各个粒子进行权值归一化end%重采样权重大的粒子多采点,权重小的粒子少采点,相当于每一次都进行重采样;for i=1:Np_u=rand;p_qtempsum=0;for j=1:Np_qtempsum=p_qtempsum+p_q(j);if p_qtempsum>=p_up_xpart(i)=p_xpartminus(j);%在这里xpart(i)实现循环赋值;终于找到了这里!!!break;endendendp_x_estimate=mean(p_xpart);%p_x_estimate=0;%for i=1:N%p_x_estimate=p_x_estimate+p_q(i)*p_xpart(i);%end%不敏卡尔曼滤波器%采样点的选取存在x(i)u_x_par=u_x_estimate;for i=2:(u_symmetry_number+1)u_x_par(i,:)=u_x_estimate+sqrt((u_symmetry_number+u_k)*u_P);endfor i=(u_symmetry_number+2):u_total_numberu_x_par(i,:)=u_x_estimate-sqrt((u_symmetry_number+u_k)*u_P);end%计算权值u_w_1=u_k/(u_symmetry_number+u_k);u_w_N1=1/(2*(u_symmetry_number+u_k));%把这些粒子通过传递方程得到下一个状态for i=1:u_total_numberu_x_par(i)=0.5*u_x_par(i)+25*u_x_par(i)/(1+u_x_par(i)^2)+8*cos(1.2*(k-1));end%传递后的均值和方差u_x_next=u_w_1*u_x_par(1);for i=2:u_total_numberu_x_next=u_x_next+u_w_N1*u_x_par(i);endu_p_next=Q+u_w_1*(u_x_par(1)-u_x_next)*(u_x_par(1)-u_x_next)';for i=2:u_total_numberu_p_next=u_p_next+u_w_N1*(u_x_par(i)-u_x_next)*(u_x_par(i)-u_x_next)';end%%对传递后的均值和方差进行采样产生粒子存在y(i)%u_y_2obser(1)=u_x_next;%for i=2:(u_symmetry_number+1)%u_y_2obser(i,:)=u_x_next+sqrt((u_symmetry_number+k)*u_p_next);%end%for i=(u_symmetry_number+2):u_total_number%u_y_2obser(i,:)=u_x_next-sqrt((u_symmetry_number+u_k)*u_p_next); %end%另外存在y_2obser(i)中;for i=1:u_total_numberu_y_2obser(i,:)=u_x_par(i);end%通过观测方程得到一系列的粒子for i=1:u_total_numberu_y_2obser(i)=u_y_2obser(i)^2/20;end%通过观测方程后的均值y_obseu_y_obse=u_w_1*u_y_2obser(1);for i=2:u_total_numberu_y_obse=u_y_obse+u_w_N1*u_y_2obser(i);end%Pzz测量方差矩阵u_pzz=R+u_w_1*(u_y_2obser(1)-u_y_obse)*(u_y_2obser(1)-u_y_obse)';for i=2:u_total_numberu_pzz=u_pzz+u_w_N1*(u_y_2obser(i)-u_y_obse)*(u_y_2obser(i)-u_y_obse)';end%Pxz状态向量与测量值的协方差矩阵u_pxz=u_w_1*(u_x_par(1)-u_x_next)*(u_y_2obser(1)-u_y_obse)';for i=2:u_total_numberu_pxz=u_pxz+u_w_N1*(u_x_par(i)-u_x_next)*(u_y_2obser(i)-u_y_obse)';end%卡尔曼增益u_K=u_pxz/u_pzz;%估计量的更新u_x_next_optimal=u_x_next+u_K*(y-u_y_obse);%第一步的估计值+修正值;u_x_estimate=u_x_next_optimal;%方差的更新u_p_next_update=u_p_next-u_K*u_pzz*u_K';u_P=u_p_next_update;%进行画图程序x_array=[x_array,x];e_x_estimate_array=[e_x_estimate_array,e_x_estimate];p_x_estimate_array=[p_x_estimate_array,p_x_estimate];u_x_estimate_array=[u_x_estimate_array,u_x_estimate];e_error(k,:)=abs(x_array(k)-e_x_estimate_array(k));p_error(k,:)=abs(x_array(k)-p_x_estimate_array(k));u_error(k,:)=abs(x_array(k)-u_x_estimate_array(k));endt=0:tf;figure;plot(t,x_array,'k.',t,e_x_estimate_array,'r-',t,p_x_estimate_array,'g--',t,u_x_estimate_array,'b:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('真实值','EKF估计值','PF估计值','UKF估计值');figure;plot(t,x_array,'k.',t,p_x_estimate_array,'g--',t,p_x_estimate_array-1.96*sqrt(P),'r:',t, p_x_estimate_array+1.96*sqrt(P),'r:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('真实值','PF估计值','95%置信区间');%root mean square平均值的平方根e_xrms=sqrt((norm(x_array-e_x_estimate_array)^2)/tf);disp(['EKF估计误差均方值=',num2str(e_xrms)]);p_xrms=sqrt((norm(x_array-p_x_estimate_array)^2)/tf);disp(['PF估计误差均方值=',num2str(p_xrms)]);u_xrms=sqrt((norm(x_array-u_x_estimate_array)^2)/tf);disp(['UKF估计误差均方值=',num2str(u_xrms)]);%plot(t,e_error,'r-',t,p_error,'g--',t,u_error,'b:');%legend('EKF估计值误差','PF估计值误差','UKF估计值误差');t=1:tf;figure;plot(t,e_error,'r-',t,p_error,'g--',t,u_error,'b:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('EKF估计值误差','PF估计值误差','UKF估计值误差');%toc;。
扩展Kalman滤波(EKF)和无迹卡尔曼滤波(ukf)
Pkk_1 = Phikk_1*Pk_1*Phikk_1' + Qk;
Pxz = Pkk_1*Hk'; Pzz = Hk*Pxz + Rk;
Pxz*Pzz^-1;
Kk =
Xk = fXk_1 + Kk*Zk_hfX;
Pk = Pkk_1 - Kk*Pzz*Kk';
二、扩展Kalman滤波(EKF)算法
[Xk, Pk, Kk] = ekf(eye(4)+Ft*Ts, Qk, fX, Pk, Hk, Rk, Z(k,:)'-hfX);
X_est(k,:) = Xk';
Hale Waihona Puke end二、扩展Kalman滤波(EKF)算法
figure(1), plot(X_est(:,1),X_est(:,3), '+r')
EKF与UKF
一、背景
普通卡尔曼滤波是在线性高斯情况下利用最小均方误差准则获得 目标的动态估计,适应于过程和测量都属于线性系统, 且误差符 合高斯分布的系统。 但是实际上很多系统都存在一定的非线性, 表现在过程方程 (状态方程)是非线性的,或者观测与状态之间 的关系(测量方程)是非线性的。这种情况下就不能使用一般的卡 尔曼滤波了。解决的方法是将非线性关系进行线性近似,将其转化 成线性问题。 对于非线性问题线性化常用的两大途径: (1) 将非线性环节线性化,对高阶项采用忽略或逼近措施;(EKF) (2)用采样方法近似非线性分布. ( UKF)
三、无迹卡尔曼滤波算法(UKF)
UKF是用确定的采样来近似状态的后验PDF,可以 有效解决由系统非线性的加剧而引起的滤波发散问 题,但UKF仍是用高斯分布来逼近系统状态的后验概 率密度,所以在系统状态的后验概率密度是非高斯 的情况下,滤波结果将有极大的误差。
EKFUKFPF算法的比较程序
EKFUKFPF算法的比较程序在估计理论中,EKF(Extended Kalman Filter),UKF(Unscented Kalman Filter)和PF(Particle Filter)是三种常用的非线性滤波算法。
它们在不同的环境和应用中具有不同的优点和缺点。
下面将对这三种算法进行比较。
首先,EKF是最常用的非线性滤波算法之一、它通过线性化状态转移方程和测量方程来近似非线性问题。
EKF在处理高斯噪声的情况下表现良好,但在处理非高斯噪声时会有较大的误差。
由于线性化过程的存在,EKF对于高度非线性和非高斯问题可能表现不佳。
此外,EKF对系统模型的准确性要求较高,较大的模型误差可能导致滤波结果的不准确性。
其次,UKF通过构造一组代表系统状态的Sigma点,通过非线性映射来近似非线性函数。
相较于EKF,UKF无需线性化系统模型,因此适用于更广泛的非线性系统。
UKF的优点是相对较好地处理了非线性系统和非高斯噪声,但在处理维数较高的问题时,计算开销较大。
最后,PF是一种基于粒子的滤波方法,通过使用一组代表系统状态的粒子来近似概率密度函数。
PF的优点是它可以处理非线性系统和非高斯噪声,并且在系统模型不准确或缺乏确定性时,具有较好的鲁棒性。
由于粒子的数量可以灵活调整,PF可以提供较高的估计精度。
然而,PF的计算开销较大,尤其在高维度的情况下。
综上所述,EKF、UKF和PF是三种常用的非线性滤波算法。
EKF适用于高斯噪声条件下的非线性问题,但对系统模型准确性要求高。
UKF适用于一般的非线性问题,但计算开销较大。
PF适用于非线性和非高斯噪声条件下的问题,并具有较好的鲁棒性,但在计算开销方面具有一定的挑战。
在实际应用中,我们应根据具体问题的性质和要求选择合适的算法。
比如,在低维情况下,EKF是一个可行的选择;在高维或非高斯噪声情况下,可以考虑使用UKF或PF算法。
ukf滤波算法范文
ukf滤波算法范文UKF(Unscented Kalman Filter)是一种基于卡尔曼滤波的非线性滤波算法。
相比于传统的扩展卡尔曼滤波(EKF),UKF通过一种更好的方法来近似非线性系统的概率分布,从而提高了非线性滤波的精确度和鲁棒性。
UKF通过一种称为“无气味变换(unscented transform)”的方法来处理非线性函数。
该方法基于对概率分布的均值和协方差进行一系列的采样点选择,然后通过变换这些采样点来近似非线性函数的传播。
这些采样点被称为“Sigma点”,可以看作是真实系统状态在均值周围的一系列假设状态。
UKF的基本步骤如下:1.初始化:初始化系统状态和协方差矩阵。
2. 预测步骤(Prediction):- 通过生成Sigma点来近似系统状态的概率分布。
- 将Sigma点通过非线性函数进行变换,得到预测状态和预测协方差矩阵。
-计算预测状态的均值和协方差。
3. 更新步骤(Update):- 通过生成Sigma点来近似测量函数的概率分布。
- 将预测状态的Sigma点通过测量函数进行变换,得到预测测量和预测测量协方差矩阵。
-计算预测测量的均值和协方差。
-根据实际测量值和预测测量的概率分布,计算卡尔曼增益。
-更新预测状态和协方差。
UKF相比于EKF具有以下优势:1.不需要对非线性函数进行线性化。
EKF通过一阶泰勒展开来线性化非线性函数,这可能导致误差积累和不稳定性。
UKF通过采样点直接逼近非线性函数,避免了这个问题。
2.更好的估计准确度和收敛性。
UKF通过采样点的选择更好地逼近了真实概率分布,提高了滤波的准确度和收敛性。
3.适用于高维状态空间。
EKF在高维状态空间中存在计算复杂度高和数值不稳定的问题,而UKF则通过更好的采样点选择来解决了这个问题。
4.对初始条件不敏感。
UKF对初始条件的选择不太敏感,可以在一定程度上避免初始条件选择不当导致的滤波失效问题。
尽管UKF相比于EKF有许多优势,但它也存在一些缺点。
UKF滤波算法
wk ~ N (0, Qk )
v k ~ N (0, Rk )
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ P0 = E (x0 − x0 )(x0 − x0 )
[
T
]
(2)状态估计
1.计算Sigma点
ˆ χ k0−1 = xk −1 ˆ χ ki −1 = xk −1 ˆ χ ki −1 = xk −1 +
注意
随机状态变量沿非线性函数的 传播问题是非线性滤波的关 键!
新思路
“近似非线性函数的概率密度分布比 近似非线性函数更容易”
因此,使用采样方法近似非线性分布来解决非 线性滤波问题的途径目前得到了人们的广泛关 注。
粒子滤波
使用参考分布,随机产生大量粒子,近似 状态的后验概率密度,得到系统的估计。 问题:1)计算量甚大,为EKF的若干数量 阶;2)若减少粒子数,估计精度下降。
T
{
}
{
}
}
描述最优状态估值质量优劣的误差协方差 阵确定如下 ˆ = E ( x − x )( x − x )T Y k = P − K P (k )K T ˆk k ˆk Pk k k k y k
{
}
EKF的不足
必须求非线性函数的Jacobi矩阵,对于模型复 杂的系统,比较复杂且容易出错; 引入线性化误差 ,对非线性强度高的系统,容 易导致滤波效果下降。 基于上述原因,为了提高滤波精度和效率,以 满足特殊问题的需要,就必须寻找新的逼近方 法。
增广状态的方差为
⎡ Px ,k ⎢ 0 =⎢ ⎢ 0 ⎣ 0⎤ ⎥ Q 0⎥ 0 R⎥ ⎦ 0
Pa ,k
(1)初始化
UKF法滤波性能分析
UKF 算法滤波性能分析高海南 3110038011一、仿真问题描述考虑一个在二维平面x-y 内运动的质点M ,其在某一时刻k 的位置、速度和M 在水平方向(x )作近似匀加速直线运动,垂直方向(y )上亦作近似匀加速直线运动。
两方向上运动具其中假设一坐标位置为(0,0)的雷达对M显然在笛卡尔坐标系下,该模型运动观测方程为非线性的。
我们根据雷达测量值使用UKF 算法对目标进行跟踪,并与EKF 算法结果进行比较。
二、问题分析1. UKF 滤波跟踪有协方差阵k R 。
ukf 算法步骤如下: (1) 计算σ点1|1i k k --ξ,依据1|1k k --x 和1|1k k --p 生成2n+1个σ点1|1i k k --ξ,0,1,2,2i n =。
在UT 变换时,取尺度参数01.0=α,0=κ,2=β。
(2) 计算σ点|ik k ξ,即()()|1|12|1|02|1||1||110(),0,1,2,2ˆˆˆi i k kk k k nm i k k i k k i n T c i ik k i k k k k k k k k k i i n ωωω---=----=⎧⎪==⎪⎪=⎨⎪⎪=--+⎪⎩∑∑ξf ξxξp ξx ξx Q (3) 计算σ点|1ˆk k -x|1k k -p 通过量测方程对k x 的传播,即(4) 计算输出的一步提前预测,即(5) 获得新的量测后,进行滤波更新:2. 扩展卡尔曼滤波算法分析(1)()()()(())()k k k k k k k k +=+⎧⎨=+⎩x f x w z h x v 的,定义k |1k ˆ=()k k k k-∂=∂x x xf x f xEKF 算法步骤如下:k 时刻的一步提前预测状态预测误差协方差阵为卡尔曼滤波增益为在k 时刻得到新的量测后,状态滤波的更新公式为状态滤波协方差矩阵为三、实验仿真与结果分析N=50,采样时间为t=0.5。
迹如图1所示。
基于UKF的单站无源定位与跟踪双向预测滤波算法
基于UKF的单站无源定位与跟踪双向预测滤波算法张刚兵;刘渝;胥嘉佳【摘要】提出了一种新的滤波算法,以加快滤波算法的收敛速度和提高滤波的估计精度.反向预测与更新提高了上一时刻状态估计的精度,减小了当前时刻的状态预测误差.利用更准确的初始条件经过正向预测与更新,能得到当前状态更精确的估计值.计算机仿真结果表明,本算法的滤波性能优于传统的迭代滤波算法,既提高了滤波的估计精度,又加快了算法的收敛速度.【期刊名称】《系统工程与电子技术》【年(卷),期】2010(032)007【总页数】4页(P1415-1418)【关键词】无源定位;非线性滤波;无迹卡尔曼滤波;正反向预测【作者】张刚兵;刘渝;胥嘉佳【作者单位】南京航空航天大学信息科学与技术学院,江苏,南京,210016;南京航空航天大学信息科学与技术学院,江苏,南京,210016;南京航空航天大学信息科学与技术学院,江苏,南京,210016【正文语种】中文【中图分类】TN970 引言单站无源定位与跟踪技术因具有设备简单、成本低、作用距离远、隐蔽接收、不易被发现等优点,是近年来被广泛研究的一个热点。
单站无源定位与跟踪过程是一个非线性滤波过程,测量量都是状态变量的非线性函数,必须采用非线性滤波方法。
因此,寻求一种收敛速度快、稳定性好的跟踪滤波算法成为单站无源定位与跟踪中需要解决的关键问题之一。
传统的非线性滤波方法有扩展卡尔曼滤波(extend Kalman filter,EKF)[1],修正增益扩展卡尔曼滤波(modified gain EKF,MGEKF)[2]以及修正协方差扩展卡尔曼滤波(modified covariance EKF,MVEKF)[3]等算法。
这些算法都属于扩展卡尔曼滤波,基本思想都是将非线性观测方程在状态预测处进行泰勒级数展开,忽略高次项、线性化后再利用经典的卡尔曼滤波算法进行滤波。
只有在近似误差较小的条件下,EKF 类算法才能得到可靠的滤波结果,否则,较大的线性化误差会导致滤波器性能下降,甚至发散。
UKF滤波
7.3 UKF 滤波UKF 滤波,仍然采用高斯分布代替状态量的分布,不同的是,通过特别挑选的样本点来表示状态量。
这些样本点完全可以表示出GRV (高斯随机变量)的均值和方差。
即使经过非线性变换(任何非线性变换)后,也能逼近变换后的均值和方差,逼近精度可以达到二阶泰勒展开后的精度。
下面开始介绍UT 变换。
UT 变换:UT 变换是计算随机变量经过非线性变换后的统计特征的一种方法。
考虑非线性函数:(x)y f =,记x 的均值和方差为,x x P 。
现在需要计算y 的统计特性,即ˆ,y yP 。
可以采用下面的方法,构造一个矩阵,矩阵中包含21L +个simga 向量:0 1,,, 1,,2,i i i i L xx i L x i L L -ℵ=ℵ=+=ℵ=-=+ (1)其中:2()L L λακ=+-——为尺度参数;α——确定sigma 点在x 周围的分布范围,4101α-≤≤; κ——尺度参数,其值通常为3L -β——x 分布合作参数,x 分布若为高斯分布,则2β=为最优值。
i 列向量。
(矩阵均方根值可以通过进行柯西因式分解得到)构造x 的样本后,则对应于x 的每个样本点,可以计算对应的y 样本:i ()i y f =ℵ(2)通过y 样本,可以计算,y y P2(m)02(c)0()()Li ii LTy i i i i y W y P W y y y y ==≈≈--∑∑ (3)其中,权重系数i W 可以由下式确定:(m)0()20(m)()11,1,,22()c c i i W L W L W W i LL λλλαβλλ=+=+-++===+ (4)UT 变换不同于蒙特卡洛法,蒙特卡洛法需要产生大量的样本点,而UT 变换不需要。
UT 变换计算非线性函数的统计特性,对于输入为高斯输入的非线性系统,计算精度至少为3阶,对于输入不是高斯输入的非线性系统,计算精度至少可以达到2阶,如果适当选择,αβ 的值,计算精度可以达到3阶或以上。
UKF算法滤波性能分析复习过程
UKF 算法滤波性能分析 高海南3110038011一、仿真问题描述考虑一个在二维平面x-y 内运动的质点M ,其在某一时刻k 的位置、速度和 加速度可用矢量x (k) =[X k , Y k ,X k ,y k ,X k ,V k ]T表示。
假设M 在水平方向(x )作近似 匀加速直线运动,垂直方向(y )上亦作近似匀加速直线运动。
两方向上运动具 有加性系统噪声w (k),则在笛卡尔坐标系下该质点的运动状态方程为x (k 1) = f k ( x(k)) w (k) = F k x(k) w (k)其中t 21 0 t 0 —2t 21 0 t 0 — 20 1 0 t 0 0 0 1 0 t 0 0 0 1 0 0 0 0 0 1 一假设一坐标位置为(0,0)的雷达对M 进行测距「k 和测角k ,实际测量中雷 达具有加性测量噪声v (k),则在传感器极坐标系下,观测方程为显然在笛卡尔坐标系下,该模型运动观测方程为非线性的。
我们根据雷达测 量值使用UKF 算法对目标进行跟踪,并与 EKF 算法结果进行比较。
1. UKF 滤波跟踪z(k) = h k ( x (k)) v (k)=Jk+v 「(k) I严k +vq<k)_tan*蚩 v (k)X k问题分析x (k +1)= f k x (k) + w (k)对于非线性系统]z (k )= h k (X (k))+ v (k),设w (k)具有协方差阵Q k , v (k )具 有协方差阵Rk 。
ukf 算法步骤如下:(1)计 算;”点Qjjkd ,依据Xk Jk|_和 P k 」k 」生成 2n+1个口点 Qj|k 」,i=0,1,2川|2n 。
在UT 变换时,取尺度参数。
=0.01,瓷=0, P =2。
⑵计算二点i k ,即虹=fk ( &』心,i =0,1,2,川2n2n x k|k 丄二' 1 &|ki -0.2n c iiT='-ii|k-乂仆」J'" - i<|k - x k|k 1 ' Q kJi =0代■屯i ;* 附=冷X + (J3 + 艸一 J - 1於"=心一厂(Js + 人))1-^1 r J = ” + L “ + 2, 2n.计算输出的一步提前预测,即4 = IX w ◎)府-菇卩+尽 2厂壬谱(卅・和J 刃-如j ;获得新的量测后,进行滤波更新:左申=刊4】十瓦t (G _二年_】): 瓦」%町;扩展卡尔曼滤波算法分析x (k 1)= f k x (k) w (k)z (k) h k ( x (k)) v (k),由于状态方程为线性的,定义计算二点Xk|k JP k2通过量测方程对X k 的传播,即2. 对于讨论的非线性系统x由于系统状态方程为线性的,贝U f k=F k而量测方程为非线性的,对其关于 xk 求偏导,得到EKF 算法步骤如下: k 时刻的一步提前预测状态预测误差协方差阵为xx TP k|kJ:" f kP k J|k -1 f: Q kJ卡尔曼滤波增益为Kk = p k|k J h k h k p k|k 4h k ' R k在k 时刻得到新的量测后,状态滤波的更新公式为藏k|k 二 x k|k 」'K k z k - h k^?k|k J状态滤波协方差矩阵为p 耶=I - K k h x P k|k_i三、实验仿真与结果分析0 1 一0012,二者不相关。
ukf滤波算法
ukf滤波算法UKF(Unscented Kalman Filter)滤波算法是一种非线性滤波算法,目的是通过逼近非线性系统的状态和测量值的真实分布来估计系统的状态。
相比于传统的Kalman滤波算法,UKF采用了Sigma点来近似系统状态和测量值的分布,从而可以处理非线性系统。
UKF算法的基本思想是使用一些特定的采样点(称为Sigma点)来近似系统状态和测量值的分布。
通过对这些Sigma点进行传播和更新,可以获得系统的状态估计值。
具体来说,UKF算法包含以下几个步骤:1.初始化:确定系统的状态和观测方程,以及状态协方差矩阵和测量噪声协方差矩阵。
2. Sigma点生成:根据系统状态的均值和协方差矩阵,生成一组代表系统状态的Sigma点。
通常,Sigma点的个数是通过经验确定的,一般取2n+1个,其中n是状态向量的维度。
3. Sigma点传播:根据系统的非线性状态方程,通过将Sigma点传播到下一个时刻,得到预测的Sigma点。
这一步骤的目的是在状态空间中对预测状态进行采样。
4.状态预测:利用预测的Sigma点计算出预测的系统状态的均值和协方差矩阵。
5. Sigma点更新:根据测量模型,通过对预测的Sigma点进行线性变换,得到预测的测量值Sigma点。
这一步骤的目的是在测量空间中对预测状态进行采样。
6.测量预测:利用预测的测量值Sigma点计算出预测的测量值的均值和协方差矩阵。
7.卡尔曼增益计算:根据预测的状态和测量值的均值和协方差矩阵,计算出卡尔曼增益。
8.状态更新:利用测量值对预测的状态进行修正,得到更新后的状态估计值和协方差矩阵。
通过以上步骤,UKF算法可以通过对状态和测量值的Sigma点进行传播和更新,逼近非线性系统的状态和测量值的真实分布,从而得到系统的状态估计值。
UKF算法的优点是可以处理非线性系统,并且不需要对系统进行线性化处理。
相比于传统的扩展卡尔曼滤波(EKF)算法,UKF算法更加精确和鲁棒。
基于UKF的滤波算法设计分析与应用共3篇
基于UKF的滤波算法设计分析与应用共3篇基于UKF的滤波算法设计分析与应用1基于UKF的滤波算法设计分析与应用随着科技的发展,各行各业的数据处理越来越重要,滤波算法在这个过程中扮演了重要的角色。
本文将探讨一种基于UKF的滤波算法,包括其设计分析以及应用。
UKF是一种针对非线性系统的滤波算法,其全称为无迹卡尔曼滤波器(Unscented Kalman Filter)。
相比于卡尔曼滤波器,UKF更加适用于非线性、非高斯的系统,并且其运行速度更快、精度更高。
在UKF的运行过程中,需要进行两次变换,分别为sigma点变换和权值变换,其中sigma点变换将高斯分布的均值和协方差矩阵转换为一些离散的点,这些点在系统的非线性关系下具有良好的近似性质,权值变换则是将这些点的权重求出,最终依据这些点和权重来进行滤波。
在实际应用中,UKF滤波算法及其改进算法大量被应用在各种领域,比如机器人控制、导航、雷达信号处理等等。
本文将以信号处理方面为例,探讨在声音信号处理中,UKF滤波算法的设计分析与应用。
在声音信号处理中,我们常常需要对信号进行滤波以去除噪声,但是传统的滤波算法在处理非线性、非高斯信号时,精度不够高。
因此,UKF滤波算法便成了一个较好的选择。
在设计UKF滤波算法时,需要根据实际需求设置相关参数,比如系统的状态变量和测量变量,以及噪声的协方差矩阵。
在应用过程中,需要将待滤波的信号和上一时刻的状态量带入UKF滤波器进行处理,得到一个经过优化的滤波结果。
在实际应用中,UKF滤波算法在音频降噪方面表现突出,其通过取sigma点进行变换,避免了需要用到高斯假设的问题。
在汽车音响中,UKF滤波算法还可以用于提高音频效果,比如降低回声和噪声,提升车内音质。
此外,在语音识别领域中,UKF滤波算法可以有效提高语音识别的准确性,避免非线性噪声的影响。
需要注意的是,UKF滤波算法并不是万能的,其在处理高维系统时会有一定难度,而且高斯分布的假设仍然是不可取的。
一种基于UKF的天文组合导航滤波算法研究
一种基于UKF的天文组合导航滤波算法研究摘要:飞机导航系统的设计需要考虑传感器和外部因素不稳定带来的影响,同时在飞行中也面临着导航系统和量测噪声统计不确定问题,因而导致滤波精度低,稳定性差,有可能发散。
为此本文研究了一种基于UKF的自适应卡尔曼滤波算法,能自动平衡状态信息与观测信息在滤波结果中的权比,来实时调整状态向量和观测向量的协方差,从而提高系统的性能。
仿真结果表明该算法定位精度高,稳定性好,具有重要的工程应用价值。
关键词:UKF 自适应滤波组合导航1、引言SINS能完全独立自主的工作,具有短时精度高、输出连续、抗干扰能力强,可同时提供位置、姿态信息等突出优点,但它误差随时间积累,长时间工作的误差很大;CNS精度高、误差不随时间积累,在所有导航设备中航向精度最高,观测目标为天体不可能被人为摧毁,战争时可用性高,但其输出信息不连续,并且在某些情况下会受到外界环境的影响,如在航空中的应用容易受到气候条件的影响[1],目前我国比较先进的星敏感器的输出频率为1Hz,对有高精度要求的军用载体来说是不适用的[2]。
由于两者都存在着自身难以克服的缺点,但两者具有互补的特点,所以,将其组合不仅具有独立系统各自的主要优点,而且随着组合水平的加深,它们之间互相交流、使用信息加强,SINS/天文组合系统的总体性能要优于各自独立系统。
本文研究的自适应UKF卡尔曼滤波算法,在系统噪声统计特性未知时,此算法能自动平衡状态信息与观测信息在滤波结果中的权比,来实时调整状态向量和观测向量的协方差,从而提高系统的性能。
2、星敏感器姿态测量误差分析星敏感器是高精度仪器,但也存在多种误差源,主要包括光学系统成像误差,加工、装配误差,光轴不稳定性,CCD噪声、暗电流、性应不均匀性,电子线路噪声,标定误差等。
因此,星敏感器的姿态确定精度实际上受到诸多因素的影响[3]:2.1 星象提取误差星象提取误差主要来源于星光信号本身,包括恒星的自行、光行差、视差、光线弯曲等误差以及星表误差。
ekf,ukf,enkf,pf,ckf在二维空间中的距离探测和相对角探测下的matlab对比代码
ekf,ukf,enkf,pf,ckf在二维空间中的距离探测和相对角探测下的matlab对比代码该问题涉及到了几种滤波算法在二维空间中的距离和相对角度探测的Matlab代码对比。
这些滤波算法包括扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)、Ensemble Kalman Filter(EnKF)、粒子滤波(PF)和连续卡尔曼滤波(CKF)。
下面是针对每个部分的具体解释:●EKF (Extended Kalman Filter):●EKF 是标准的Kalman 滤波器的扩展,用于处理非线性系统。
它通过一阶Taylor展开近似非线性函数,并使用这个近似来更新状态估计。
UKF (Unscented Kalman Filter):●UKF 是一种无迹方法,用于处理非线性系统。
它使用所谓的"sigmapoints"来表示状态变量的不确定性,这些sigma点被用于近似非线性函数的概率密度。
EnKF (Ensemble Kalman Filter):●EnKF 是一种用于数据同化的统计滤波方法,特别适用于处理具有高维度和复杂非线性的问题。
它使用一组样本(或“ensemble”)来表示状态变量的不确定性。
PF (Particle Filter):●PF 是一种基于贝叶斯估计的非线性滤波方法,用于估计未知动态系统的状态。
它通过粒子来近似后验概率密度,并对这些粒子进行重要性采样。
CKF (Continuous Kalman Filter):●CKF 是一种特殊的非线性滤波器,用于处理连续系统的状态估计问题。
它采用连续化方法处理离散时间系统中的非线性函数,以便更精确地计算状态估计。
Matlab对比代码的内容:●创建一个二维空间的模拟系统,包括距离和相对角度的测量。
●使用每种滤波器对该系统进行仿真,并记录估计的距离和角度。
●通过比较真实值与估计值,评估各种滤波器的性能。
●可通过图形展示各种滤波器的跟踪性能、误差分布等。
无迹卡尔曼滤波算法
无迹卡尔曼滤波算法
无迹卡尔曼滤波算法(Unscented Kalman Filter,UKF)是一种用于处理非线性系统的非参数滤波算法,它可以从观测和测量数据中推断隐藏状态的值。
UKF的基本思想是基于状态变量的状态和测量变量的观测,使用一系列加权的状态估计来预测未来状态,并通过观测和测量值来校正预测值。
UKF的优点在于它可以处理非线性系统,而不需要对系统进行线性化处理,从而可以更准确地估计隐藏状态变量,准确度比传统卡尔曼滤波算法更高。
UKF是一种经典的非线性滤波算法,它可以利用观测和测量值,以及相关的不确定性信息,以准确的方式估计隐藏状态变量。
它也可以用于自适应控制,机器人移动控制,机器视觉,自动驾驶等领域。
UKF可以用来模拟复杂的物理过程,估计不同的系统参数,以及更准确地预测未来的状态,这在许多领域,如自动驾驶汽车,智能机器人,机器视觉,航空航天,大气科学和精细化工等领域中都很有用。
总之,无迹卡尔曼滤波算法是一种用于处理非线性系统的有效滤波算法,能够从观测和测量数据中推断隐藏状态的值,准确度比传统卡尔曼滤波算法更高,在航空航天,机器人,机器视觉,控制系统,大气科学和精细化工等领域都得到了广泛应用。
immukf算法
immukf算法IMM(交互式多模型)算法是一种用于目标跟踪的算法,它利用多个不同的运动模型来匹配目标的不同运动模式。
这些模型可以通过马尔可夫转移概率进行转移,从而形成一个具有多种可能性的模型概率集合。
然后,利用卡尔曼滤波器对目标的状态进行估计和更新。
在IMM算法中,可以采用多种运动模型,例如匀速模型、匀加速模型、转弯模型等。
同时,为了处理非线性问题,可以采用扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)。
其中,UKF算法相对于EKF算法具有更高的精度和稳定性。
具体来说,IMM算法的流程如下:1.初始化:确定初始状态量、初始模型概率和滤波器参数。
2.模型选择:根据当前状态量和模型概率,选择一个最适合的模型进行状态估计。
3.状态估计:利用选择的模型和卡尔曼滤波器对目标的状态进行估计。
4.模型转移:根据已知的马尔可夫转移概率,对模型概率进行更新。
5.判断终止条件:如果满足终止条件,则结束算法;否则,返回步骤2继续执行。
对于IMM-UKF算法的具体步骤如下:1.设定目标监测概率为1,系统采样间隔为T。
2.K时刻的离散运动模型和观测模型分别为跟踪过程中,前20次采样使用传统的无迹卡尔曼算法跟踪目标,然后采用本文设计的IMMUKF算法继续对目标进行跟踪。
3.3个IMM模型的采样概率为μ-1=0.8,μ-2=0.1,μ-3=0.1。
通过两点起始法计算初始状态。
4.为了验证算法性能,通过MATLAB进行算法仿真,模拟目标运动轨迹,同时对附加均值为0、标准差为100的目标观测噪声。
仿真扫描周期设为2s,对目标轨迹进行观测估计。
UKF的算法介绍
UKF的算法介绍——作者,niewei120,nuaa参数说明:其中sigama点的获得方法如下:例外的一种描述方式其滤波算法表示如下:UKF 中各参数的影响:α确定了采样点与均值的远近程度,通常取0 到1 之间的正值,所取值越大则距离平均值越远,当其值为零时,UKF 的滤波效果相当于EKF;UT中的k 为一比例因子,通常取为0,当状态分布可以认为是高斯分布时,可取k = n - 3(n为状态向量x 的维数);β在正态分布时取2。
当Q 和R 过大时,UKF 的状态非常不稳定,有时甚至还会发散。
整个的matlab的程序如下:(1)sigama点的计算,输出为siagma点和权重值,以及sigama点的数量function [xPts, wPts, nPts] = scaledSymmetricSigmaPoints(x,P,alpha,beta,kappa)% % This function returns the scaled symmetric sigma point distribution.%% [xPts, wPts, nPts] = scaledSymmetricSigmaPoints(x,P,alpha,beta,kappa) %% Inputs:% x mean 状态量均值% P covariance 协方差% alpha scaling parameter 1% a决定万周围Sigma点的分布状态,调节其值能够使得高阶项影响最小% beta extra weight on zero'th point% 调节beta的值可以提高方差的精度,对于高斯分布,beta为2是最优的% kappa scaling parameter 2 (usually set to default 0)% 是一个比例因子kappa=alpha^2*(n+kappa)-n%% Outputs:% xPts The sigma points sigma点% wPts The weights on the points 所在点的权重% nPts The number of points sigma点的数目%%%% (C) 2000 Rudolph van der Merwe% (C) 1998-2000 S. J. Julier.% Number of sigma points and scaling terms sigma点的个数n = size(x(:),1);nPts = 2*n+1; % we're using the symmetric SUT 采用的是对称sui,此时的sigma点为2n+1% Recalculate kappa according to scaling parameters 根据标定参数重新计算kappa值kappa = alpha^2*(n+kappa)-n;% Allocate space 分配空间wPts=zeros(1,nPts);xPts=zeros(n,nPts);% Calculate matrix square root of weighted covariance matrix 计算根号下的协方差矩阵Psqrtm=(chol((n+kappa)*P))';% Array of the sigma points sigma点的阵列xPts=[zeros(size(P,1),1) -Psqrtm Psqrtm];% Add mean back inxPts = xPts + repmat(x,1,nPts);% Array of the weights for each sigma point sigma点的权重阵列wPts=[kappa 0.5*ones(1,nPts-1) 0]/(n+kappa);% Now calculate the zero'th covariance term weight 计算0处的协方差权重wPts(nPts+1) = wPts(1) + (1-alpha^2) + beta;(2)ukf滤波算法function[xEst,PEst,xPred,PPred,zPred,inovation,S,K]=ukf(xEst,PEst,U,Q,ffun,z,R,hfun,dt,alpha,beta,kappa) % TITLE : UNSCENTED KALMAN FILTER%% PURPOSE : This function performs one complete step of the unscented Kalman filter.%% SYNTAX : [xEst,PEst,xPred,PPred,zPred,inovation]=ukf(xEst,PEst,U,Q,ffun,z,R,hfun,dt,alpha,beta,kappa)% % INPUTS : - xEst : state mean estimate at time k k时刻卡尔曼状态量均值的预测值% - PEst : state covariance at time k k时刻协方差的预测值% - U : vector of control inputs 输入的控制量% - Q : process noise covariance at time k k时刻的状态噪声%% - z : observation at k+1 k+1时刻的观测量% - R : measurement noise covariance at k+1 k+1的测量噪声的协方差%% - ffun : process model function 状态方程% - hfun : observation model function 观测方程% - dt : time step (passed to ffun/hfun) 时间步长% - alpha (optional) : sigma point scaling parameter. Defaults to% 1.影响sigma向量围绕分布的扩展因子% - beta (optional) : higher order error scaling parameter.% Default to 0. 另一个规模因子% - kappa (optional) : scalar tuning parameter 1. Defaults to% 0. 先验分布的因子%% OUTPUTS : - xEst : updated estimate of state mean at time% k+1 k+1时刻的状态量的更新值% - PEst : updated state covariance at time k+1% k+1时刻的协方差的更新值% - xPred : prediction of state mean at time k+1% k+1时刻的状态量的预测值% - PPred : prediction of state covariance at time% k+1 k+1时刻的协方差预测值% - inovation : innovation vector 更新矢量% NOTES : The process model is of the form, x(k+1) = ffun[x(k),v(k),dt,u(k)]% where v(k) is the process noise vector. The observation model is% of the form, z(k) = hfun[x(k),w(k),dt,u(k)], where w(k) is the% observation noise vector.%% This code was written to be readable. There is significant% scope for optimisation even in Matlab.%% Process defaultsif (nargin < 10)alpha=1;end;if (nargin < 11)beta=0;end;if (nargin < 12)kappa=0;end;% Calculate the dimensions of the problem and a few useful% scalarsstates = size(xEst(:),1);observations = size(z(:),1);vNoise = size(Q,2); %过程噪声wNoise = size(R,2); %观测噪声noises = vNoise+wNoise;% Augment the state vector with the noise vectors.% Note: For simple, additive noise models this part% can be done differently to save on computational cost.% For details, contact Rudolph v.d. Merweif (noises)N=[Q zeros(vNoise,wNoise); zeros(wNoise,vNoise) R];PQ=[PEst zeros(states,noises);zeros(noises,states) N];xQ=[xEst;zeros(noises,1)];elsePQ=PEst;xQ=xEst;end;% Calculate the sigma points and there corresponding weights using the Scaled Unscented% Transformation[xSigmaPts, wSigmaPts, nsp] = scaledSymmetricSigmaPoints(xQ, PQ, alpha, beta, kappa); %计算sigma点的均值、权重和sigma点的数目% Duplicate wSigmaPts into matrix for code speedup 重复wSigmaPts使得矩阵运算速度提升wSigmaPts_xmat = repmat(wSigmaPts(:,2:nsp),states,1);wSigmaPts_zmat = repmat(wSigmaPts(:,2:nsp),observations,1);% Work out the projected sigma points and their means% This routine is fairly generic. The only thing to watch out for are% angular discontinuities. There is a standard trick for doing this -% contact me (Julier) for details!xPredSigmaPts = feval(ffun,xSigmaPts(1:states,:),repmat(U(:),1,nsp),xSigmaPts(states+1:states+vNoise,:),dt);%状态更新zPredSigmaPts = feval(hfun,xPredSigmaPts,repmat(U(:),1,nsp),xSigmaPts(states+vNoise+1:states+noises,:),dt);%观测更新% Calculate the mean. Based on discussions with C. Schaefer, form% is chosen to maximise numerical robustness.% - I vectorized this part of the code for a speed increase : RvdM 2000xPred = sum(wSigmaPts_xmat .* (xPredSigmaPts(:,2:nsp) - repmat(xPredSigmaPts(:,1),1,nsp-1)),2);%状态量的一步预测值zPred = sum(wSigmaPts_zmat .* (zPredSigmaPts(:,2:nsp) - repmat(zPredSigmaPts(:,1),1,nsp-1)),2);%观测量的一步预测值xPred=xPred+xPredSigmaPts(:,1);zPred=zPred+zPredSigmaPts(:,1);% Work out the covariances and the cross correlations. Note that% the weight on the 0th point is different from the mean% calculation due to the scaled unscented algorithm.exSigmaPt = xPredSigmaPts(:,1)-xPred; %sigma点状态值的误差ezSigmaPt = zPredSigmaPts(:,1)-zPred; %sigma点量测值的误差PPred = wSigmaPts(nsp+1)*exSigmaPt*exSigmaPt';%状态量的协方差PxzPred = wSigmaPts(nsp+1)*exSigmaPt*ezSigmaPt';%状态量与观测量的协方差S = wSigmaPts(nsp+1)*ezSigmaPt*ezSigmaPt';%观测量的协方差exSigmaPt = xPredSigmaPts(:,2:nsp) - repmat(xPred,1,nsp-1);%sigma点状态值的误差的更新ezSigmaPt = zPredSigmaPts(:,2:nsp) - repmat(zPred,1,nsp-1);%sigma点量测值的误差的更新PPred = PPred + (wSigmaPts_xmat .* exSigmaPt) * exSigmaPt';%状态量的协方差的更新S = S + (wSigmaPts_zmat .* ezSigmaPt) * ezSigmaPt';%观测量的协方差的更新PxzPred = PxzPred + exSigmaPt * (wSigmaPts_zmat .* ezSigmaPt)';%状态量与观测量的协方差的更新%%%%% MEASUREMENT UPDATE 量测更新% Calculate Kalman gain 计算卡尔曼增益K = PxzPred / S;% Calculate Innovation 计算测量误差inovation = z - zPred;% Update mean 更新状态量均值xEst = xPred + K*inovation;% Update covariance 更新协方差PEst = PPred - K*S*K';。
ukf翻译
一、 无轨卡尔曼滤波(UKF )前面已经提到,广义卡尔曼滤波(EKF )是一种应用最为广泛的非线性系统的状态估计算法。
然而,由于EKF 需要通过线性化来传递状态量的均值和方差,如果系统的非线性非常严重,其估计结果就会变得不可靠。
本部分讨论的无轨卡尔曼滤波(UKF ),是卡尔曼滤波的又一推广形式,其相对于EKF 能有效减少线性化误差,提升滤波性能。
当随机变量通过非线性函数后,EKF 只用了均值和方差真实表达式展开序列的第一项作为近似值。
当状态方程和量测方程的非线性非常严重时,取这样的一阶线性化近似值容易导致均值和方差在传递上的显著误差。
而无轨转换正是能有效减少这种误差的一种传递方式。
本部分首先分析在无轨转换下,随机变量通过一个非线性函数后的均值和方差。
接着,我们将利用无轨转换讨论的结果给出UKF 的滤波基本方程,并且指出其相对于EKF 是如何减少线性化误差的。
3.1 无轨转换非线性系统的问题在于难以用一个通用的非线性函数来传递概率密度函数。
EKF 遵循的原则是用均值和方差的一阶线性转换来近似真实的非线性转换,但是这种近似许多时候是不能满足要求的。
无轨转换遵循两个基本原则。
第一,它对单个的点很容易的进行非线性转换(而不是对整个概率密度函数)。
第二,在状态空间能找到一组相互独立的点,这一组点的采样概率密度函数近似于状态向量的真实概率密度函数。
基于这两个原则,假设我们知道向量x 的均值为x ,方差为P ,并且找到一组其整体均值和方差与x 和P 都相等的确定向量,我们把这样的向量称为sigma 点。
接着对每一确定向量用非线性函数()h y =x 进行转换得到转换后的一组向量,转换后的向量要能很好的估计出y 的真实均值和方差。
这就是无轨转换的关键所在。
举例来说,假设x 是一个1n ⨯维的向量,选择如下2n 个sigma 点:()()()() 1,, 1,, 1,,2T i iT n i ii i i ni n i n +===-=== xxx x +x(3.1)n P矩阵平方根所以有Tn =P ,并且i第i 行。
ukf和ekf跟踪滤波算法比较
ukf和ekf跟踪滤波算法比较作者:武振宁李小艳王伟来源:《消费电子·理论版》2013年第02期摘要:本文描述了两种典型的非线性滤波算法原理和特点,一种是扩展卡尔曼滤波EKF,另一种是新发展的无损卡尔曼滤波UKF。
通过目标跟踪数据仿真对比两者的特点。
关键词:非线性滤波;跟踪中图分类号:TN957 文献标识码:A 文章编号:1674-7712 (2013) 04-0058-01一、概述在动态目标跟踪系统中,对含有噪声的测量数据进行滤波和预测是重要环节,在很多实际工程项目中系统状态是非线性的。
传统的非线性滤波的方法主要是扩展卡尔曼滤波算法EKF,但是该算法存在着精度不高、稳定性差等缺点。
近年来,文献[1]提出了一种非线性滤波算法UKF即无损卡尔曼滤波。
它是根据无损变换和卡尔曼滤波相结合得到的一种算法。
二、建立目标模型表示某一时刻的状态向量,表示其非线性函数,是输入向量,是叠加的噪声。
观测方程(2)中,是观测向量,是观测空间到状态空间的转换矩阵,是叠加的测量噪声。
三、非线性滤波(一)扩展卡尔曼滤波扩展卡尔曼滤波EKF,用雅克比Jacobian矩阵(3)解决了非线性问题,即对非线性函数的Taylor展开式进行一阶线性化截断,忽略其余高阶项,从而将非线性问题转化为线性。
(二)无损卡尔曼滤波四、仿真假设目标轨迹如图1所示,初始位置空间坐标在,和。
目标的初始速度是 and .采样周期是。
分别采用EKF和UKF对机动目标跟踪。
两种滤波算法的滤波误差分别如图2到图4所示。
整个跟踪的MATLAB仿真运算时间是:EKF共用了6.126秒,而UKF共用了11.996秒。
从运算消耗来看两者基本在一个数量级,UKF消耗不到EKF 时间的两倍,由于UKF计算统计误差和协方差矩阵消耗了更多时间和内存等资源,从图中看出EKF和UKF两种跟踪滤波在位置,速度,加速度估值的误差区别,UKF跟踪精度高于EKF滤波。
五、结论通过理论和仿真表明,UKF滤波结果比EKF的要小很多,而且EKF有稳定性差、对目标机动反应迟缓等缺点。
ukf(无迹卡尔曼滤波)算法的matlab程序
ukf(⽆迹卡尔曼滤波)算法的matlab程序转载⾃:https:///ss19890125/article/details/32121969#0-tsina-1-16645-397232819ff9a47a7b7e80a40613cfe1function [x,P]=ukf(fstate,x,P,hmeas,z,Q,R)% UKF Unscented Kalman Filter for nonlinear dynamic systems% [x, P] = ukf(f,x,P,h,z,Q,R) returns state estimate, x and state covariance, P% for nonlinear dynamic system (for simplicity, noises are assumed as additive):% x_k+1 = f(x_k) + w_k% z_k = h(x_k) + v_k% where w ~ N(0,Q) meaning w is gaussian noise with covariance Q% v ~ N(0,R) meaning v is gaussian noise with covariance R% Inputs: f: function handle for f(x)% x: "a priori" state estimate% P: "a priori" estimated state covariance% h: fanction handle for h(x)% z: current measurement% Q: process noise covariance% R: measurement noise covariance% Output: x: "a posteriori" state estimate% P: "a posteriori" state covariance%% Example:%{n=3; %number of stateq=0.1; %std of processr=0.1; %std of measurementQ=q^2*eye(n); % covariance of processR=r^2; % covariance of measurementf=@(x)[x(2);x(3);0.05*x(1)*(x(2)+x(3))]; % nonlinear state equationsh=@(x)x(1); % measurement equations=[0;0;1]; % initial statex=s+q*randn(3,1); %initial state % initial state with noiseP = eye(n); % initial state covraianceN=20; % total dynamic stepsxV = zeros(n,N); %estmate % allocate memorysV = zeros(n,N); %actualzV = zeros(1,N);for k=1:Nz = h(s) + r*randn; % measurmentssV(:,k)= s; % save actual statezV(k) = z; % save measurment[x, P] = ukf(f,x,P,h,z,Q,R); % ekfxV(:,k) = x; % save estimates = f(s) + q*randn(3,1); % update processendfor k=1:3 % plot resultssubplot(3,1,k)plot(1:N, sV(k,:), '-', 1:N, xV(k,:), '--')end%}%% By Yi Cao at Cranfield University, 04/01/2008%L=numel(x); %numer of statesm=numel(z); %numer of measurementsalpha=1e-3; %default, tunableki=0; %default, tunablebeta=2; %default, tunablelambda=alpha^2*(L+ki)-L; %scaling factorc=L+lambda; %scaling factorWm=[lambda/c 0.5/c+zeros(1,2*L)]; %weights for meansWc=Wm;Wc(1)=Wc(1)+(1-alpha^2+beta); %weights for covariancec=sqrt(c);X=sigmas(x,P,c); %sigma points around x[x1,X1,P1,X2]=ut(fstate,X,Wm,Wc,L,Q); %unscented transformation of process% X1=sigmas(x1,P1,c); %sigma points around x1% X2=X1-x1(:,ones(1,size(X1,2))); %deviation of X1[z1,Z1,P2,Z2]=ut(hmeas,X1,Wm,Wc,m,R); %unscented transformation of measurments P12=X2*diag(Wc)*Z2'; %transformed cross-covarianceK=P12*inv(P2);x=x1+K*(z-z1); %state updateP=P1-K*P12'; %covariance updatefunction [y,Y,P,Y1]=ut(f,X,Wm,Wc,n,R)%Unscented Transformation%Input:% f: nonlinear map% X: sigma points% Wm: weights for mean% Wc: weights for covraiance% n: numer of outputs of f% R: additive covariance%Output:% y: transformed mean% Y: transformed smapling points% P: transformed covariance% Y1: transformed deviationsL=size(X,2);y=zeros(n,1);Y=zeros(n,L);for k=1:LY(:,k)=f(X(:,k));y=y+Wm(k)*Y(:,k);endY1=Y-y(:,ones(1,L));P=Y1*diag(Wc)*Y1'+R;function X=sigmas(x,P,c)%Sigma points around reference point%Inputs:% x: reference point% P: covariance% c: coefficient%Output:% X: Sigma pointsA = c*chol(P)';Y = x(:,ones(1,numel(x)));X = [x Y+A Y-A];。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
}
{
}
}
描述最优状态估值质量优劣的误差协方差 阵确定如下 ˆ = E ( x − x )( x − x )T Y k = P − K P (k )K T ˆk k ˆk Pk k k k y k
{
}
EKF的不足
必须求非线性函数的Jacobi矩阵,对于模型复 杂的系统,比较复杂且容易出错; 引入线性化误差 ,对非线性强度高的系统,容 易导致滤波效果下降。 基于上述原因,为了提高滤波精度和效率,以 满足特殊问题的需要,就必须寻找新的逼近方 法。
假定状态为高斯随机矢量;过程噪声与测量噪 声的统计特性为
wk ~ N (0, Qk )
v k ~ N (0, Rk )
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ P0 = E (x0 − x0 )(x0 − x0 )
[
T
]
(2)状态估计
1.计算Sigma点
ˆ χ k0−1 = xk −1 ˆ χ ki −1 = xk −1 ˆ χ ki −1 = xk −1 +
一步预测
根据所有过去时刻的测量信息对状态作最 小方差估计 x k = E x k Y k −1
{
}
状态估计质量的优劣利用一步预测误差 协方差矩阵描述
Pk = E ( x k − x k )( x k − x k ) Y k −1
T
{
}
测量修正
获得当前时刻的测量信息后,对状态预测 估值进行修正,得到状态的最优估计值
增广状态的方差为
⎡ Px ,k ⎢ 0 =⎢ ⎢ 0 ⎣ 0⎤ ⎥ Q 0⎥ 0 R⎥ ⎦ 0
Pa ,k
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ Px ,0 = E ( x0 − x0 )( x0 − x0 )
ˆ xa , 0 = E x
[
T
]
[
T 0
0
T m×1
0l×1
T
]
T
Pa , 0
⎡ Px , 0 =⎢ 0 ⎢ ⎢ 0 ⎣
(1)对非线性函数的概率密度分布进行近 似,而不是对非线性函数进行近似,即使系统 的模型复杂,也不增加算法实现的难度。 (2)所得到的非线性函数的统计量的准确性 可以达到三阶(泰勒展开)。 (3)不需要计算Jacobi矩阵,可以处理不可导 非线性函数。
UKF滤波算法
UKF实现思想
UKF=Unscented transform + Kalman Filter
即 UKF 可以看作是基于 UT 技术的卡尔曼滤 波器。在卡尔曼滤波算法中,对于一步预测 方程,使用UT变换来处理均值和协方差的非 线性传递,就成为UKF算法。
状态的时间更新:
选定状态的 2n+1 个 Sigma点(n 为状态维 数); 利用 UT 技术计算状态的后验均值和方差。
状态的测量更新:
利用标准的 Kalman 滤波的测量更新,但使用 的公式有所不同。
其中:
, i = 1,...,2n
κ = α 2 (n + λ ) − n
在均值和方差加权中需要确定 α 、λ 和 β 共3个参 数,它们的取值范围分别为:
α 确定 x 周围Sigma点的分布,通常设为一个较小 的正数(1 > α ≥ 1e −4 ); λ 为第二个尺度参数,通常设置为0或3-n; β 为状态分布参数,对于高斯分布 β = 2 是最优的, 如果状态变量是单变量,则最佳的选择是 β = 0 。 适当调节 α 、λ 可以提高估计均值的精度;调节 β 可
xk +1 = f ( xk , wk )
y k = h( x k , v k )
这时需要对状态变量进行扩展,得增广状态
x a ,k = x , w , v
T k T k
[
T T k
]
增广状态的均值为
ˆ ˆ x a ,k = x , 0
T k
[
T m×1
,0
T T l ×1
]
m 其中, 和 l 分别为过程噪声和观测噪声的维数。
不必计算 Jacobi 矩阵,不必对非线性系统函 数 f (x) 进行任何形式的逼近; 预测阶段只是标准的线性代数运算(矩阵方根 分解,外积,矩阵和向量求和); 系统函数可以不连续; 随机状态可以不是高斯的; 计算量和 EKF 同阶。
扩维UKF滤波算法 (噪声隐含)
若过程噪声与测量噪声是隐含在系统中的,即 系统方程为
注意
随机状态变量沿非线性函数的 传播问题是非线性滤波的关 键!
新思路
“近似非线性函数的概率密度分布比 近似非线性函数更容易”
因此,使用采样方法近似非线性分布来解决非 线性滤波问题的途径目前得到了人们的广泛关 注。
粒子滤波
使用参考分布,随机产生大量粒子,近似 状态的后验概率密度,得到系统的估计。 问题:1)计算量甚大,为EKF的若干数量 阶;2)若减少粒子数,估计精度下降。
应用实例
模型:卫星姿态确定系统
f [q (t ), ω (t )]⎤ ⎡0 4×3 ⎤ −1 & (t ) = f [x(t )] + Gd (t ) = ⎡ 1 x ⎢ f 2 [ω (t )] ⎥ + ⎢ I 3 ⎥ J d (t ) ⎣ ⎦ ⎣ ⎦
( −(
(n + κ )Pk −1 )i (n + κ )Pk −1 )i
, i = 1,..., n , i = n + 1,...,2n
2.时间传播方程
χ ki |k −1 = f (χ ki −1 )
i ˆ− x k = ∑ Wi ( m ) χ k |k −1 i =0
i i ˆ− ˆ− Px−k = ∑ Wi ( c ) [ χ k |k −1 − x k ][ χ k |k −1 − x k ]T + Qk , i =0 2n
i ˆ− xk = ∑ Wi (m ) χ x ,k |k −1 i =0
2N
P = ∑ Wi
− x ,k i =0
2N
(c )
[χ
i x , k |k −1
ˆ −x χ
− k
][
i x , k |k −1
ˆ −x
− T k
]
i γ ki |k −1 = h(χ x ,k |k −1 , χ vi ,k −1 )
Py ≈ ∑ Wi
i =0
(c )
(Yi − y )(Yi − y )
T
(m ) W i 和 Wi (c)分别为计算 y 的均值和方差所用加权
W0
(c )
(m )
= κ (n + κ )
W0 = κ (n + κ ) + 1 − α + β
2
(
)
Wi (m ) = Wi (c ) = κ [2(n + κ )]
2n
2n
i ˆ− i ˆ− Pxy, k = ∑Wi ( c ) [ χ k |k −1 − x k ][γ k |k −1 − y k ]T i =0
K = Pxy, k Py−,1k
ˆ xk =
− ˆ xk
+ K ( yk −
− ˆ yk )
Px , k = Px− k − KPy , k K T ,
ˆ xk = E xk Y k = xk + K k [ yk − yk ]
{
}
K k = Pxy (k )Py−1 (k )
y k = E y k Y k −1
{
Py (k ) = E [ y k − h( x k )][ y k − h( x k )] Y k −1
T
Pxy (k ) = E [x k − x k ][ y k − h( x k )] Y k −1
i ˆ− yk = ∑ Wi (m )γ k |k −1 i =0 2N
3.测量更新方程
Py ,k = ∑ Wi
i =0 2Hale Waihona Puke 2N(c )[γ
i k |k −1
ˆ −y γ
− k − k
][
i k |k −1
ˆ −y
− T k
]
Pxy ,k = ∑ Wi
i =0
(c )
[χ
i x , k |k −1
2n
γ ki |k −1 = h(χ ki |k −1 )
i ˆ− y k = ∑Wi ( m )γ k |k −1 i =0 2n
3.测量更新方程
i ˆ− i ˆ− Py , k = ∑Wi ( c ) [γ k |k −1 − y k ][γ k |k −1 − y k ]T + Rk i =0
非线性系统 UKF滤波算法
主要内容
非线性状态估计原理(MMSE) Uscented变换(UT) UKF滤波算法 应用比较
非线性状态估计原理 (MMSE)
非线性状态估计原理
离散系统:
xk +1 = f ( xk , u k ) + wk y k = h ( xk ) + v k
不管条件密度函数 p x| y ( x | y ) 的特性如何, 最小均方估计就是条件均值 µ x| y = E{x | y} 。非 线性状态滤波过程的实现包括一步预测与测量 修正两个阶段。
0 Q 0
0⎤ 0⎥ ⎥ R⎥ ⎦
(2)状态估计
1.计算Sigma点
ˆ 根据 x a , k −1 和 Pa , k −1 ,构造增广Sigma点
0 ˆ χ a ,k −1 = xa ,k −1
i ˆ χ a ,k −1 = xa ,k −1 + i ˆ χ a ,k −1 = xa ,k −1