【卡尔曼滤波】粗略模型和过滤技术在模型不确定情况下的应用研究(Matlab代码实现)

文章探讨了在模型不完全了解的情况下进行系统估计和滤波的问题,提出了一种新的设计准则,结合经典正则化最小二乘和随机视角,给出了最大后验贝叶斯估计的上界。通过非光滑分析,得出的滤波器在高斯假设下具有非线性增益,与卡尔曼滤波器和H∞滤波器进行了对比。

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文献


💥1 概述

摘要—本文讨论了在只有粗略模型可用时系统的估计和滤波问题。基于经典正则化最小二乘问题的修改版本,提出了一种新的设计准则,考虑了测量和创新作为不确定性的可能来源。在高斯假设下,它表现为最大后验贝叶斯估计的上界。通过利用非光滑分析工具获得最优解,最优解揭示了残差空间中的一个区域,其中估计的非变化是最优的。该方法以递归形式从随机角度提供了鲁棒估计器。为了说明,导出了类似卡尔曼滤波器,并与经典的最坏情况鲁棒设计滤波器进行了比较。
索引词—估计,不确定系统,卡尔曼滤波。
一、引言
从噪声观测中估计一组未知参数的问题在科学和工程中有着广泛的应用。然而,通常情况下,数据生成的精确模型可能不为人所知,因此需要一个鲁棒的估计器。
在文献中,主要有两种主要的鲁棒状态估计方法。第一种方法是H∞估计,试图最小化输入噪声对估计误差的最坏情况能量增益,参见[1],[2]。第二种方法是所谓的保证成本估计,其中设计了一个满足上限误差的估计算法,参见[3],[4]。此外,还有一种基于确定性正则化最小二乘问题的不同方法已被探索用于设计鲁棒估计器,参见[5],[6],[7]。然而,这些方法涉及基于最坏情况的优化,如果模型和测量的不确定性相当大,解决方案中可能存在高度保守性。
为了获得针对模型不确定性的鲁棒估计器,本文采用了较少保守性的随机观点,并依赖于经典正则化最小二乘问题的修改版本[8]。这使我们能够获得最小二乘鲁棒估计和卡尔曼滤波器的更新阶段。
该立场的主要贡献是一种用于模型不确定性的静态估计器和滤波器模型,采用了一种新颖的随机建模工具。结果表明,在高斯假设下,估计准则表现为最大后验贝叶斯估计的上界。
由于模型中嵌入了由估计变化的绝对值调制的随机噪声,这种滤波器的行为在某些情况下,最佳估计仍然是先验,而不是后验,考虑到系统动态提供的先验的信心和新测量的信心之间的权衡,这在现有的鲁棒滤波的文献中是不可见的,参见[5],[6],[9],[10]。与这些不同的是,得到的滤波器增益是非线性的。

📚2 运行结果

主函数代码:

% This Matlab code implements the numerical example presented in the paper 
% M. R. Fernandes, J. B. R. do Val and R. F. Souto, "Robust Estimation and 
% Filtering for Poorly Known Models" in IEEE Control Systems Letters.
% doi: 10.1109/LCSYS.2019.2951611
% https://ieeexplore.ieee.org/document/8891731

close all
clear all
clc
rng('default'); rng(0)
%% System Model
n=2; %number of states
p=1; %number of outputs
A0=[0.9802 0.0196;0 0.9802]; %Nominal Dynamic Matrix
A1=[0 0.099;0 0];
H0=[1 -1]; %Measurement Matrix
G=eye(n);
Ef=[0 5];
Eg=[0 0];
M=[0.0198;0];

%% Noise Covariances
sigma=sqrtm([1.9608 0.0195;0.0195 1.9605]);
nu=eye(p);
Q = sigma*sigma';
R = nu*nu';

%% EVIU Parameters
sigmas.x=[0 0;0 0];
sigmas.bx=0.1*eye(n);
sigmas.y=[0 0.1];
sigmas.by=[0 0.1];
sigmas.v=[0 0.1];
sigmas.bv=sigmas.v;

%% Simulation
N=1000; %time horizon
a=-1:0.1:1; % grid for uncertain parameter
H=H0; %output matrix is considered exactly
gamma=99; %gain for the Hinf Filter

%Make a grid on [-1,1] for the uncertain parameter and apply simultaneosly
%the EVIU, BDU, Hinf and Kalman filter.
for i=1:length(a)
    A=A0+a(i)*A1; %define 'true' dynamic matrix
    % Monte Carlo Simulation
    for j=1:500
        %% Initialization
        clear x hx m hx2 hx_opt hx_s hx_hinf P P2 P_s P_hinf P_opt
        x(:,1)=1*ones(n,1);%real states
        hx(:,1)=zeros(n,1);%classic kalman states
        hx_opt(:,1)=zeros(n,1);%opt states
        m=zeros(n,1);
        S=zeros(n,1); %beta0
        hx2=hx; %eviu states
        hx_s=hx; %BDU states
        hx_hinf=hx; %hinf states
        P=eye(n); %initial covariance
        L=P;
        P_s=P; %covariance for BDU filter
        P2=P; %covariance for EVIU filter
        Phinf=P; %covariance for Hinf filter
        P_opt=P; %covariance for optimal filter
        trP(1)=trace(P); %trace of KF covariance
        trP2(j,1)=trP(1); %trace of EVIU covariance
        trP_opt(j,1)=trP(1); %trace of Optimal covariance
        trP_s(j,1)=trP(1); %trace of BDU covariance
        trP_hinf(j,1)=trP(1); %trace of Hinf covariance
        mse(j,1)=norm(hx(:,1)-x(:,1))^2; %KF error
        mse2(j,1)=mse(j,1); % EVIU error
        mse_opt(j,1)=mse(j,1); % Minimum error
        mse_hinf(j,1)=mse(j,1); % Hinf error
        mse_s(j,1)=mse(j,1); % BDU error
        %time simulation
        for k=1:N-1
            %% real system
            x(:,k+1)=A*x(:,k)+sigma*randn(n,1);
            y(:,k+1)=H*x(:,k+1)+nu*randn(p,1);
            %% Classic Kalman Filter (hx)
            [hx(:,k+1),P]=kalman_filter(A0,H0,Q,R,hx(:,k),P,y(:,k+1));
            trP(k+1)=trace(P);
            mse(j,k+1)=norm(x(:,k+1)-hx(:,k+1))^2;
            %% EVIU Filter (hx2)
        [hx2(:,k+1),P2,m,L,S(:,k+1)]=eviu_filter(A0,H0,sigmas,Q,R,hx2(:,k),P2,m,L,S(:,k),y(:,k+1));
            trP2(j,k+1)=trace(P2);
            mse2(j,k+1)=norm(x(:,k+1)-hx2(:,k+1))^2;
            %% Optimal Filter (Kalman with exactly model)
            [hx_opt(:,k+1),P_opt]=kalman_filter(A,H,Q,R,hx_opt(:,k),P_opt,y(:,k+1));
            trP_opt(j,k+1)=trace(P_opt);
            %% BDU Filter
            [hx_s(:,k+1),P_s]=BDU_filter(A0,H0,M,Ef,Eg,G,Q,R,hx_s(:,k),P_s,y(:,k+1));
            trP_s(j,k+1)=trace(P_s);
            mse_s(j,k+1)=norm(x(:,k+1)-hx_s(:,k+1))^2;
            %% Hinf filter
            [hx_hinf(:,k+1),Phinf]=hinf_filter(A0,H0,G,Q,R,hx_hinf(:,k),Phinf,y(:,k+1),eye(n),gamma);
            trP_hinf(j,k+1)=trace(Phinf);
            mse_hinf(j,k+1)=norm(x(:,k+1)-hx_hinf(:,k+1))^2;
        end
    end
    mse=mean(mse); %KF
    mse2=mean(mse2); %EVIU
    mse_s=mean(mse_s); %BDU
    trP_opt=mean(trP_opt); %Optimal
    mse_hinf=mean(mse_hinf); %Hinf
    mmse(i)=mean(mse); %KF
    mmse2(i)=mean(mse2); %EVIU
    mmse_s(i)=mean(mse_s); %BDU
    mmse_hinf(i)=mean(mse_hinf); %Hinf
    mmse_opt(i)=mean(trP_opt); % Optimal
    fprintf('%d gain=%.3f\n',i,(1-mmse2(i)/mmse(i))*100)
end
%% Plot results
figure(1)
p1=plot(a,sqrt(mmse),'*-','linewidth',2);
hold on
p2=plot(a,sqrt(mmse2),'-','linewidth',2);
p3=plot(a,sqrt(mmse_s),'o-','linewidth',2);
p5=plot(a,sqrt(mmse_hinf),'c-','linewidth',2);
p4=plot(a,sqrt(mmse_opt),'--k','linewidth',2);
legend([p1,p2,p3,p5,p4],'KF','EVIU','BDU','$\mathcal{H}_\infty$','Optimal','Interpreter','latex')
ylabel('RMSE_{total}')
xlabel('\delta')
axis([-1 1 0 22])
grid on
figure(2)
%Worst-case (delta=1)
p1=semilogx(10*log10(mse),'-','linewidth',2);
hold on
p2=semilogx(10*log10(mse2),'linewidth',2);
p3=semilogx(10*log10(mse_s),'-','linewidth',2);
p4=semilogx(10*log10(trP_opt),'--k','linewidth',2);
p5=semilogx(10*log10(mse_hinf),'c-','linewidth',2);
ylabel('MSE(dB)')
xlabel('Tempo (k)')
grid on
legend([p1,p2,p3,p5,p4],'KF','EVIU','BDU','$\mathcal{H}_\infty$','Optimal','Interpreter','latex')

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

Marcos R. Fernandes, Joao Bosco R. do Val, Rafael. F. Souto.

🌈4 Matlab代码及文献

卡尔曼滤波是一种有效的递归滤波器,它估计线性动态系统的状态。在2维的情况下,通常会用它来处理含有噪声的2维数据,并预测下一状态。在MATLAB实现2维卡尔曼滤波,你需要定义几个关键的参数矩阵,包括状态转移矩阵、观测矩阵、过程噪声协方差、测量噪声协方差、初始状态估计以及初始误差协方差。 以下是一个简单的MATLAB中2维卡尔曼滤波的例子步骤: 1. 初始化状态估计误差协方差矩阵。 2. 预测下一状态的均值协方差。 3. 计算卡尔曼增益。 4. 更新状态估计误差协方差矩阵。 这个过程在一个时间步长的循环中不断重复,以此来跟踪目标的位置。 这里提供一个粗略代码框架作为示范: ```matlab % 定义状态转移矩阵A、观测矩阵H、过程噪声协方差Q、测量噪声协方差R A = [...]; % 状态转移矩阵,描述状态如何随时间变化 H = [...]; % 观测矩阵,描述如何从状态得到观测值 Q = [...]; % 过程噪声协方差 R = [...]; % 测量噪声协方差 % 初始化状态估计误差协方差矩阵 x_est = [...]; % 初始状态估计 P = [...]; % 初始误差协方差矩阵 % 模拟一些2维的观测数据 Z = [...]; % 进行滤波处理 for k = 1:length(Z) % 预测 x_pred = A * x_est; P_pred = A * P * A' + Q; % 更新 K = P_pred * H' / (H * P_pred * H' + R); x_est = x_pred + K * (Z(k) - H * x_pred); P = (eye(size(H, 1)) - K * H) * P_pred; % 可以在这里将x_estP添加到结果变量中进行记录 end % 输出最终的状态估计 disp(x_est); ``` 这个框架需要结合实际的问题来填充具体的矩阵值初始值。在实际应用中,卡尔曼滤波器的实现细节可能会更加复杂,包括模型的非线性情况等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值