二维标准Kalman滤波

news/2025/1/12 6:01:11/

背景

二维标准kalman滤波仿真,绘制了噪声、跟踪状态和误差图,并且加入了攻击的代码部分,需要在第一个状态量的量测值中设置攻击的时候,将attack变量设置为1,会在20-40,60-80时刻加入相应攻击,攻击变量为atk可以自己设置。

代码

%Project: 基本二维Kalman
%Author: Jace
%Data: 2021/10/06
%--------------------准备---------------------
close all;
clear all;
clc;
%------------------初始化参数---------------------N=100;%设定采样点数,即持续时长%噪声相关参数
P0=0.01;%初始状态噪声协方差
p=zeros(2,2,N);
Q=[0.01,0.0;0.0,0.01];%设定系统噪声
R=[0.1,0.0;0.0,0.1];%设定观测噪声
w=sqrt(Q)*randn(2,N);
v=sqrt(R)*randn(2,N);%攻击相关参数
attack=0;%攻击1是否开启
atk=sqrt(2.6)*randn(1,N);%攻击%系统模型参数
A=[1.002,0;0,0.998];%状态转移矩阵
H=[1,0;0,1];%局部量测1量测矩阵%----------------初始化分配空间-------------------------
%真实状态值初始化
x=zeros(2,N);%物体真实状态值(分配空间),2*N维矩阵
x(:,1)=[10+P0*randn(1);20+P0*randn(1)];%物体初始真实状态值%误差协方差初始化
p(:,:,1)=[1,0;0,1];%误差协方差初始值%两个传感器量测值初始化
z=zeros(2,N);%量测值
z(:,1)=H*x(:,1);%观测真实值初始值,二维向量%各滤波器估计值初始化
xkf=zeros(2,N);%全局估计状态
xkf(:,1)=x(:,1);%全局估计状态初始化为第一列的列向量I=eye(2);%2*2单位矩阵%----------------NRD------------------------
for k=2:N%系统模型x(:,k)=A*x(:,k-1)+w(k);%量测模型,标量z(:,k)=H*x(:,k)+v(k);%注入攻击if attack==1if k>=20&&k<=40||k>=60&&k<=80z(1,k)=z(1,k)+atk(k);endend%----------------标准Kalman过程------------------------%估计误差协方差预测更新p_pre=A*p(:,:,k-1)*A'+Q;%增益矩阵预测更新K=p_pre*H'/(H*p_pre*H'+R);%状态值预测更新x_pre=A*xkf(:,k-1);%状态值量测更新xkf(:,k)=x_pre+K*(z(:,k)-H*x_pre);%估计误差协方差量测更新p(:,:,k)=(I-K*H)*p_pre;
end%--------------------------误差计算--------------------------------
%初始化
messure_err_z1=zeros(1,N);
messure_err_z2=zeros(1,N);
kalman_err_x1=zeros(1,N);
kalman_err_x2=zeros(1,N);
for k=1:N%量测误差messure_err_z1(k)=abs(z(1,k)-x(1,k));messure_err_z2(k)=abs(z(2,k)-x(2,k));%Kalman估计偏差kalman_err_x1(k)=abs(xkf(1,k)-x(1,k));kalman_err_x2(k)=abs(xkf(2,k)-x(2,k));
end%噪声图
figure;
subplot(2,2,1)
plot(w(1,:));xlabel('采样时间');ylabel('噪声');
title('第1状态值过程噪声');
subplot(2,2,2)
plot(w(2,:));xlabel('采样时间');ylabel('噪声');
title('第2状态值过程噪声');
subplot(2,2,3)
plot(v(1,:));xlabel('采样时间');ylabel('噪声');
title('第1状态值第1传感器量测噪声');
subplot(2,2,4)
plot(v(2,:));xlabel('采样时间');ylabel('噪声');
title('第2状态值第2传感器量测噪声');%局部滤波器1
figure;
hold on,box on;
plot(x(1,:),'-k.');
plot(z(1,:),'-b.');
plot(xkf(1,:),'-r.');
legend('第1状态值','第1量测值','第1状态量Kalman估计值');
xlabel('采样时间');ylabel('位置');
title('状态1跟踪');%局部滤波器2
figure;
hold on,box on;
plot(x(2,:),'-k.');
plot(z(2,:),'-b.');
plot(xkf(2,:),'-r.');
legend('第2状态值','第2量测值','第2状态量Kalman估计值');
xlabel('采样时间');ylabel('位置');
title('状态2跟踪');%局部滤波器1误差
figure;
hold on,box on;
plot(messure_err_z1,'-b.');
plot(kalman_err_x1,'-g.');
legend('量测','Kalman估计');
xlabel('采样时间');ylabel('误差');
title('滤波器1误差');%局部滤波器2误差
figure;
hold on,box on;
plot(messure_err_z2,'-b.');
plot(kalman_err_x2,'-g.');
legend('量测','Kalman估计');
xlabel('采样时间');ylabel('误差');
title('滤波器2误差');%量测值记录
figure;
hold on,box on;
plot(z(1,:));
plot(z(2,:));
xlabel('采样时间');ylabel('数值');
legend('量测1','量测2');
title('量测值记录');

效果

在这里插入图片描述


http://www.ppmy.cn/news/242098.html

相关文章

无损卡尔曼滤波

创作不易&#xff0c;转载请注明来源&#xff1a;http://blog.csdn.net/adamshan/article/details/78359048 通过上一篇文章&#xff0c;我们已经知道KF不适用于非线性系统&#xff0c;为了处理非线性系统&#xff0c;我们通过一阶泰勒展式来近似&#xff08;用线性函数近似&a…

拆卸 美能达 AF 50 1.7

http://bbs.mydigit.cn/read.php?tid259281 本人已在相机维修区发帖 地址如下 http://bbs.mydigit.cn/read.php?tid259277 维修区的帖子被总版加精 同时拆解过程也完成 资料图以及非维修拆解(卡口构件拆解)请移步 此贴将不更新 但想到这里的拆客更多因此再发出来与大家分享 并…

卡尔曼滤波(03)

视频课的第三期&#xff08;隔了好久才捡起来&#xff0c;前面的都要忘记了&#xff09;&#xff0c;这节主要就是介绍序贯滤波、信息滤波和平方根滤波 目录 1 序贯滤波2.信息滤波和信息融合2.1信息滤波2.2信息融合 3.平方根滤波3.1Potter平方根滤波3.2奇异值&#xff08;SVD&…

卡尔曼滤波(kalman)

卡尔曼&#xff08;kalman&#xff09;滤波原理 kalman滤波器可以看做状态变量在由观测生成的线性空间上的射影。 如下状态空间模型描述的动态系统&#xff1a; (1) ​​​​​​​ ​​​​​​​ (2) 式中&#xff0c;k为离散时间&#xff…

初识卡尔曼滤波

卡尔曼滤波 文章目录 卡尔曼滤波前言一、什么是卡尔曼滤波二、适用系统1.线性系统叠加性齐次性 2.高斯系统3.宏观意义 总结 前言 卡尔曼滤波&#xff08;Kalman filtering&#xff09;是一种利用 线性系统 状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对 系统状…

卡尔曼滤波_1

wiki原文 卡尔曼滤波(2016.8.4) 卡尔曼滤波&#xff0c;也常被称作线性二次估计(LQE)&#xff0c;是一种使用一段时间内的观测数据&#xff0c;其中观测数据中包含统计噪声和其他不确定性&#xff0c;来估计未知变量的值的方法。它比一般的基于单次测量的方法更加精确&#x…

探索AI插件:Access Link,Bramework,和AskYourPDF

I. 引言 在这个信息爆炸的时代&#xff0c;获取和分析信息的效率至关重要。今天&#xff0c;我将介绍三个强大的AI插件&#xff1a;Access Link&#xff0c;Bramework&#xff0c;和AskYourPDF&#xff0c;它们可以帮助我们更有效地获取和分析信息。 II. Access Link插件 A.…

卡尔曼滤波算法的代码验证

卡尔曼滤波算法它能够从一系列的不完全及包含噪声的测量中&#xff0c;估计动态系统的状态&#xff0c;实践中得到广泛应用&#xff0c;场景包括控制系统参数估计&#xff0c;移动预测等等&#xff0c;在深度学习中也常常用来配合神经网络输出做后处理&#xff0c;应用于目标跟…