基于强跟踪卡尔曼滤波的隔振系统故障诊断——matab simulink仿真

84 篇文章 15 订阅
56 篇文章 20 订阅

链接:https://pan.baidu.com/s/1s6T7UpY1G2m-A1876etmBg
提取码:1234

一、参考资料

1、基于强跟踪滤波器的在线故障诊断方法
2、线性连续系统的离散化

二、理论推导

在这里插入图片描述
画重点:当考虑系统受到载荷激励时,微分方程右边为载荷激励;当考虑系统受到位移和速度的激励时,右边为位移速度激励以刚度k和阻尼c为系数的线性合作。这是两个不同的动力学系统。如果要卡尔曼滤波监测k和c,则需要扩展k和c两个状态变量,这时只能用第二种系统模型,否则卡尔曼滤波在状态预测时,不准确的k和c的估计值会影响到载荷激励,与真实的载荷差别很大,使估计误差的方差不仅不减小,反而会增大,致使算法无法收敛。模型错误是卡尔曼滤波不收敛的重要原因。

三、线性系统离散及验证

在这里插入图片描述
在这里插入图片描述

四、强跟踪卡尔曼滤波故障诊断

假设系统初始刚度为7.55/(pi/180),0.3秒后系统发生故障,刚度变成450/(pi/180),刚度初始估计值为0.5*7.55/(pi/180),看卡尔曼滤波可否快速跟踪刚度的变化从而进行故障判断。
在这里插入图片描述
在这里插入图片描述

隔振系统仿真代码

%kalman_sim.m
%Plant
function [u]=kalman_sim(u1,u2,u3,u4,u5)
%u1:输入飞轮位移
s_flywheel=u1;
%u2:输入飞轮转速
v_flywheel=u2;
%u3:系统噪声W
W=u3;
%u4:测量噪声V
V=u4;
%u5:时间t
t=u5;

%s一轴转角 v一轴转速 m一轴当量质量 k离合器刚度 c离合器阻尼
%Ts采样时间(由输入信号采样频率确定)
%F_s_flywheel飞轮转角 F_v_flywheel飞轮转速
persistent s v m k c Ts
if t==0
    fs=1792.1;
    Ts=1/fs;
    s=0.0;    
    v=0.0;
    m=0.3511;%kgm^2
    k=7.55/(pi/180);%Nm/rad
    wn=sqrt(k/m);
    s_=0.25;
    %wd=sqrt(1-s_^2)*wn;
    c=2*s_*wn*m;
    z=v+V;
end
if t>0.3
    k=450/(pi/180);%假设5秒后刚度出现突变为450
end
if t>0
    F_input=c*v_flywheel+k*s_flywheel;
    s=s+Ts*v;
    v=-k/m*Ts*s+(1-c/m*Ts)*v+Ts/m*F_input+Ts*W;
    z=v+V;
end

u(1)=v;
u(2)=k;
u(3)=c;
u(4)=z;

强跟踪卡尔曼滤波代码

%kalman_k_c.m
%Plant
function [u]=kalman_sim(u1,u2,u3,u4)
%u1:输入飞轮位移
s_flywheel=u1;
%u2:输入飞轮转速
v_flywheel=u2;
%u3:系统噪声W
z=u3;
%u4:时间t
t=u4;

%persistent v m i
persistent x Ts m Q R P H Jf V0
if t==0
    fs=1792.1;
    Ts=1/fs;
    
    m=0.3511;%kgm^2
    k=7.55/(pi/180);%Nm/rad
    wn=sqrt(k/m);
    s_=0.25;
    %wd=sqrt(1-s_^2)*wn;
    c=2*s_*wn*m;
    
    %系统方程:
    
    H=[0,1,0,0];  
      
    %Covariances of w:
    Q=diag([0,Ts*0.1*Ts',0,0]);

    %Covariances of v:
    R=[0.1];

    %初始估计值:
    x=[0;0;k/2;c];

    %初始估计误差协方差:
    P=diag([0,Ts*0.1*Ts',40000,0.000000]); 
    
    u=x(2:4);%开始时刻不进行卡尔曼滤波,直接将初始值输出,2020
end

%%卡尔曼滤波::
if t>0
    %先验,Time update:
    %根据系统状态方程计算下一状态预测值:
    %x=A*x+B*u1;
    Jf=eye(4);
    Jf(1,2)=Ts;
    Jf(2,1)=-x(3)/m*Ts;
    Jf(2,2)=1-x(4)/m*Ts;
    %*********very important**********
    %因为激励为飞轮的转角与转速而不是飞轮对离合器的激励转矩,改动如下:
    %Jf(2,3)=-x(1)/m*Ts;
    Jf(2,3)=(s_flywheel-x(1))/m*Ts;
    %Jf(2,4)=-x(2)/m*Ts;
    Jf(2,4)=(v_flywheel-x(2))/m*Ts;
    %**********************************

    s=x(1);
    v=x(2);
    k=x(3);
    c=x(4);
    F_input=c*v_flywheel+k*s_flywheel;
    s=s+Ts*v;
    v=-k/m*Ts*s+(1-c/m*Ts)*v+Ts/m*F_input;
    x(1)=s;
    x(2)=v;
    x(3)=k;
    x(4)=c;
 
    %************强跟踪滤波器STF核心代码《::*********************************
    %**************************************
    % 可调节参数汇总
    %**************************************
    rho=0.95;                         % 残差方差阵的遗忘因子初始值 (0.95<rho<0.995)
    beta=1;                           % 量测噪声的衰减因子选定值 (beta>=1)
    %beta_upmax=8;                     % 衰减因子选定极限
    %***************************************
    F=Jf;
    r0=z-H*x;
    if t<2*Ts
        V0=r0*r0';
    else
        V0=(rho*V0+r0*r0')/(1+rho);
    end
    N=V0-beta*R-H*Q*H';
    M=H*F*P*F'*H';
    eta=trace(N)/trace(M);
    if eta>1
        lamda=eta;
    else
        lamda=1;
    end
    
    %预测误差协方差:
    P=lamda*Jf*P*Jf'+Q;  
    %!!!渐消因子lamda=1即为普通卡尔曼滤波!!!
    %************STF核心代码》************************************************
    
    %后验,Measurement update:
    %根据估计误差协方差和测量噪声协方差计算卡尔曼增益:
    Kk=P*H'/(H*P*H'+R);

    %计算最优估计值:    
    %x=A*x+Mn*(yv-C*A*x);
    x=x+Kk*(z-H*x);

    %计算最优估计值和真实值之间的误差协方差矩阵,为下次递推做准备:
    P=(eye(4)-Kk*H)*P;

    %ye=C*x;           %Filtered value
    u=x(2:4);    %Filtered signal

    errcov=H*P*H';      %Covariance of estimation error   
    
end
%}

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
### 回答1: 卡尔曼滤波是一种用于实时估计动态系统状态的算法。它在许多领域中被广泛应用,如航空航天、导航、机器人等。卡尔曼滤波算法通过结合系统的测量数据和模型预测值,来动态地更新系统的状态估计。它的核心思想是将已有的信息与新的观测结果进行加权平均,从而得到对系统真实状态更准确的估计。 在Matlab中,我们可以通过编写卡尔曼滤波仿真程序来实现对系统状态的估计。首先,我们需要定义系统的状态方程和观测方程,以及系统的初始状态和噪声模型。然后,使用kalman函数来进行滤波处理,将观测数据输入到滤波器中,得到对状态的估计值。 具体而言,我们可以按照以下步骤来编写卡尔曼滤波的Matlab仿真程序: 1. 定义系统的状态方程和观测方程,并初始化系统状态和滤波器的状态估计。 2. 定义系统的噪声模型,包括过程噪声和观测噪声的协方差矩阵。 3. 生成系统的真实状态序列和对应的观测数据。 4. 使用kalman函数进行滤波处理,将观测数据输入到滤波器中,得到对状态的估计值。 5. 计算滤波器的误差协方差矩阵,评估滤波器性能。 6. 绘制真实状态序列、观测数据和滤波器估计值的曲线图,以及滤波器误差的方差曲线图。 在编写程序时,我们还可以尝试不同的参数设置和噪声模型,以及对结果进行分析和优化。 总之,通过在Matlab中编写卡尔曼滤波仿真程序,我们可以更好地理解卡尔曼滤波的原理和应用,并对其进行调试和优化,从而实现更准确的状态估计。 ### 回答2: 卡尔曼滤波是一种用于估计状态变量的方法,它通过将测量观测值与先验估计进行加权平均,来获得更准确的状态估计值。这种滤波方法常用于控制系统中,尤其是在传感器测量带有噪声的情况下。 卡尔曼滤波的原理主要包含两个步骤:预测和更新。在预测步骤中,使用系统的状态转移方程预测下一时刻的状态变量;而在更新步骤中,根据已有的观测值和预测值之间的误差,计算卡尔曼增益,从而对预测值进行修正,得到更准确的状态估计。 Matlab是一种广泛使用的科学计算与数据分析工具,提供了丰富的数学函数和工具箱,可以方便地进行卡尔曼滤波仿真。在Matlab中,可以使用kalman函数来实现卡尔曼滤波。具体步骤如下: 1. 定义系统的状态转移方程、观测方程和噪声协方差矩阵。 2. 初始化系统的状态向量和协方差矩阵。 3. 通过循环迭代,对每个时刻进行滤波。 4. 在预测步骤中,使用状态转移方程进行状态的预测。 5. 在更新步骤中,计算观测值与预测值之间的误差,并计算卡尔曼增益。 6. 根据卡尔曼增益修正预测值,得到更准确的状态估计。 7. 更新协方差矩阵,并记录滤波结果。 Matlab还提供了一些用于可视化和分析滤波结果的函数,如plot函数和mean函数等。 通过使用Matlab进行卡尔曼滤波仿真,我们可以观察到滤波结果与真实值的接近程度,评估滤波算法的性能并进行参数调整,以获得更准确的状态估计。这对于控制系统的设计和实际应用具有重要意义。 ### 回答3: 卡尔曼滤波是一种最优化的滤波方法,用于估计系统的状态。它通过融合系统的测量值和预测值,提供对未知状态的最优估计。卡尔曼滤波的原理是基于贝叶斯定理,它假设系统的状态满足线性动力学方程,并且状态的噪声满足高斯分布。在卡尔曼滤波中,有两个主要的步骤:预测步骤和更新步骤。 预测步骤是根据上一个时刻的状态估计值,预测当前时刻的状态估计值和协方差矩阵。更新步骤是通过测量值,根据预测的状态估计值和当前测量值之间的差异,进行状态的修正和协方差矩阵的更新。 Matlab中提供了卡尔曼滤波仿真工具箱,可以通过设置系统模型、测量模型、协方差矩阵以及初始状态值等参数,实现对状态的估计。 随书程序是指在教科书中附带的示例程序。卡尔曼滤波的随书程序是指通过Matlab编写的卡尔曼滤波的代码示例。这些示例程序可以帮助读者理解卡尔曼滤波的原理和应用,并且可以通过修改参数和增加噪声等操作,进行仿真实验,观察估计结果的变化。 通过使用Matlab编写随书程序,读者可以更好地理解卡尔曼滤波算法,掌握卡尔曼滤波的实现方法,并且可以在实际应用中进行调试和参数优化。 总之,卡尔曼滤波原理和应用的随书程序是一种辅助学习和实验的工具,通过使用Matlab编写,可以更好地理解卡尔曼滤波算法,并且可以进行仿真实验,优化参数,提高对系统状态的估计精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值