首页 > 其他分享 >基于卡尔曼滤波的系统参数辨识matlab仿真

基于卡尔曼滤波的系统参数辨识matlab仿真

时间:2024-08-05 23:38:26浏览次数:15  
标签:Xk end plot 卡尔曼滤波 参数 matlab hold 辨识

1.程序功能描述

       通过kalman滤波的方法,对系统的参数进行辨识,整个程序仿真输出参数辨识的收敛过程,参数辨识误差,参数辨识之后系统的输出和真实的系统输出误差,最后设置不同的信噪比,对比不同干扰下的系统参数辨识误差。

 

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

 

 

 

3.核心程序

 

for i=1:Mc
    for i=3:n-2
Xkp=F*X0;         % 计算状态的一步预测值 
          P=F*P0*F'+G*Q*G'; % 计算一步预测误差协方差 
          h=[-z(i-1) -z(i-2) M(i-1) M(i-2)]';% 计算观测矩阵h  
          K=P*h/(h'*P*h+1); % 计算Kalman增益K  
Xk(:,i)=Xkp+K*(z(i)-h'*Xkp);% 更新状态估计值Xk
          Pk=(eye(4)-K*h')*P;          % 更新估计误差协方差Pk  
          P0=Pk;% 更新估计误差协方差的初值P0为Pk
          X0=Xk(:,i);% 更新状态估计的初值X0为Xk(:,i)
          D(:,i)=(X-Xk(:,i)).^2;% 计算估计误差并保存到D中 
    end
end
figure
plot(Xk(1,:))
hold on
plot(Xk(2,:))
hold on
plot(Xk(3,:))
hold on
plot(Xk(4,:))
title('参数的辨识过程')
grid on
legend('a1','a2','b1','b2');




figure
subplot(221);
plot(Xk(1,:),'r','linewidth',2)
hold on
plot(Ra1*ones(size(Xk(1,:))),'b')
title('a1参数的变化过程')
grid on
subplot(222);
plot(Xk(2,:),'r','linewidth',2)
hold on
plot(Ra2*ones(size(Xk(1,:))),'b')
title('a2参数的变化过程')
grid on
subplot(223);
plot(Xk(3,:),'r','linewidth',2)
hold on
plot(Ra3*ones(size(Xk(1,:))),'b')
title('b1参数的变化过程')
grid on
subplot(224);
plot(Xk(4,:),'r','linewidth',2)
hold on
plot(Ra4*ones(size(Xk(1,:))),'b')
title('b2参数的变化过程')
grid on



figure
plot(D(1,50:end))
hold on
plot(D(2,50:end))
hold on
plot(D(3,50:end))
hold on
plot(D(4,50:end))
hold on
title('估计误差的变化过程')

a1=Xk(1,end);
a2=Xk(2,end);
a3=Xk(3,end);
a4=Xk(4,end);
% 初始值设定  
z2(1)=-1;
z2(2)=0;
%根据系统传递函数表达式 
for i=3:n-1
    z2(i)=-a1*z2(i-1)-a2*z2(i-2)+a3*M(i-1)+a4*M(i-2)+v(i-2);
end

figure;
subplot(211);
plot(z)
hold on
plot(z2)
legend('系统输出','参数辨识系统输出');

subplot(212);
plot(z-z2')
legend('参数辨识系统误差');
0008

  

 

4.本算法原理

      卡尔曼滤波是一种广泛应用于信号处理、控制系统和数据融合等领域的高效递归滤波算法。它的主要优点是只需要利用前一时刻的估计值和当前时刻的观测值,就可以递推地计算出当前时刻的状态估计值。这使得卡尔曼滤波非常适合于实时系统和在线应用。

 

4.1、卡尔曼滤波的基本原理

      卡尔曼滤波是一种线性、递归和最小均方误差的估计算法,它适用于线性动态系统和加性白噪声环境。卡尔曼滤波的基本方程包括状态预测方程和状态更新方程:

 

状态预测方程:

X(k|k-1) = A X(k-1|k-1) + B U(k) (1)

 

状态更新方程:

X(k|k) = X(k|k-1) + K(k) [Z(k) - H X(k|k-1)] (2)

 

       其中,X(k|k-1) 是根据上一时刻状态预测的本时刻状态,X(k|k) 是根据本时刻观测值更新后的状态估计,A 是状态转移矩阵,B 是控制输入矩阵,U(k) 是控制输入,Z(k) 是本时刻的观测值,H 是观测矩阵,K(k) 是卡尔曼增益。

 

4.2、基于卡尔曼滤波的系统参数辨识

       系统参数辨识是确定系统模型参数的过程,这些参数可以描述系统的动态行为。卡尔曼滤波可以用于在线辨识系统的参数,其基本思想是将系统的参数作为状态变量,然后利用卡尔曼滤波算法进行估计。

 

假设我们有一个线性系统,其状态方程和观测方程可以表示为:

 

状态方程:

 

x(k+1) = Ax(k) + Bu(k) + w(k) (3)

 

观测方程:

 

y(k) = Cx(k) + Du(k) + v(k) (4)

 

        其中,x(k) 是状态向量,u(k) 是输入向量,y(k) 是输出向量,w(k) 和 v(k) 分别是过程噪声和观测噪声,它们被假设为零均值的高斯白噪声。A、B、C 和 D 是系统的参数矩阵。

 

       我们可以将系统的参数矩阵作为状态变量,然后应用卡尔曼滤波算法进行估计。令系统的参数向量为 θ,则状态方程和观测方程可以改写为:

 

状态方程:

 

θ(k+1) = θ(k) + w(k) (5)

 

观测方程:

 

y(k) = X(k)θ(k) + v(k) (6)

 

       其中,X(k) 是由输入向量 u(k) 和状态向量 x(k) 构成的回归矩阵。这样,我们就可以利用卡尔曼滤波算法对参数向量 θ 进行在线估计。具体步骤如下:

 

初始化:给定初始状态估计值 θ(0|0) 和初始估计误差协方差 P(0|0)。

预测:利用状态预测方程(5)预测下一时刻的状态 θ(k+1|k)。同时,利用预测误差协方差方程预测下一时刻的估计误差协方差 P(k+1|k)。

更新:当新的观测值 y(k+1) 到达时,利用状态更新方程(2)更新状态估计值 θ(k+1|k+1)。同时,利用更新误差协方差方程更新估计误差协方差 P(k+1|k+1)。

迭代:返回步骤2,进行下一时刻的预测和更新。

 

标签:Xk,end,plot,卡尔曼滤波,参数,matlab,hold,辨识
From: https://www.cnblogs.com/softcodes/p/18344265

相关文章

  • 基于matlab的汽车牌照识别程序
    摘要:本次作业的任务是设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码。关键词:车牌识别,matlab,神经网络1引言随着我国交通运输的不断发展,......
  • MATLAB边缘检测系统实现
    MATLAB边缘检测一、目的: 熟悉边缘检测原理,并运用matlab软件实现图像的canny边缘检测,体会canny边缘检测的优缺点。二、内容:编写matlab程序,实现对lena图像的边缘检测,输出程序运行结果。三、原理或步骤:首先回顾一下边缘检测的一般步骤:边缘检测算法一般包含如下四个步骤:1.......
  • 【学习笔记】Matlab和python双语言的学习(蒙特卡洛法)
    文章目录前言一、蒙特卡洛二、经典示例:计算圆周率π1.代码实现----Matlab2.代码实现----python三、示例2:三门问题1.代码实现----Matlab2.代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1E......
  • 利用MATLAB打造混凝土结构裂缝识别系统(二)
    文章目录前言一、操作说明二、导入图像三、选择裂缝识别方法1.“单裂缝识别”方法2.“多裂缝识别”方法四、结果输出与保存实际识别效果展示墙体裂缝:道路裂缝:衬砌裂缝:桥面裂缝:房屋楼板裂缝:前言本节主要介绍所设计的混凝土结构裂缝识别系统各个组件的具体操作与......
  • Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断
    对于使用GAF-PCNN-MATT、GASF-CNN、GADF-CNN技术来进行多特征输入数据的分类预测或故障诊断,你可以考虑以下步骤:数据准备:准备你的多特征输入数据集,确保数据的质量和一致性。每个样本应该包含多个特征。特征提取:使用GramianAngularField(GAF)、GramianAngularSecto......
  • 基于IEEE802.11g标准的OFDM信号帧检测matlab仿真
    1.程序功能描述     现有的无线通信信道共享的无线信号识别为将来的软件定义的无线电系统是一个巨大的挑战。在这个项目中,学生将制定IEEE802.11无线信号在AWGN信道,利用MATLAB/Simulink技术来识别。一个完整的发射机模式将开发和实施。在AWGN信道下的性能进行评估。 基......
  • 如何利用Matlab网格生成器画太极
    注:首先要懂几何函数的定义!代码:1.主函数:clc,clear;closeall;g1=[1111;20-20;0-202;020-2;20-20;1221;0000;0000;0000;2222];%大○g2=[1111;010-1;10-10;-2-121;-1010;2211;1122;0000;-1-111;1111];%......
  • MATLAB生成各类区域网格剖分
    一、双洞模型代码:hg=[1111111120-20010-10-20210-10020-2012120-2012101111000000001111000000000000111122221111];ug=[1111010-1......
  • 灰狼优化算法(GWO)与长短期记忆网络(LSTM)结合的预测模型(GWO-LSTM)及其Python和MATLAB实现
    ####一、背景在现代数据科学和人工智能领域,预测模型的准确性和效率是研究者和工程师不断追求的目标,尤其是在时间序列预测、金融市场分析、气象预测等领域。长短期记忆(LSTM)网络是一种解决传统递归神经网络(RNN)在长序列学习中存在的梯度消失和爆炸问题的有效模型。LSTM能够保持......
  • 灰狼优化算法(GWO)与门控循环单元(GRU)结合的预测模型(GWO-GRU)及其Python和MATLAB实现
    ####一、背景深度学习已成为解决复杂时序数据预测问题的重要工具。在众多神经网络架构中,门控循环单元(GatedRecurrentUnit,GRU)凭借其在捕捉时间序列数据中的长程依赖性和相对较低的计算复杂度而受到广泛关注。此外,优化算法在深度学习模型的训练中扮演着至关重要的角色。灰......