【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文献


💥1 概述

文献来源:

 本文综述了连续非线性动力系统噪声时间序列测量中参数和未观测到的轨迹分量的估计问题。首先表明,在没有明确考虑测量误差的参数估计技术(如回归方法)中,噪声测量会产生不准确的参数估计。另一个问题是,对于混沌系统,必须最小化以估计状态和参数的成本函数非常复杂,以至于常见的优化例程可能会失败。我们表明,包含有关潜在轨迹的时间连续性的信息可以显着改善参数估计。本文详细描述了两种同时考虑变量误差问题和复杂成本函数问题的方法:射击方法和递归估计技术。两者都在数值示例中进行了演示。

📚2 运行结果

部分代码:

% Simulating data: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x0=zeros(2,ll); x0(:,1)=[0; 0]; % true trajectory
dt=.1*dT; nn=fix(dT/dt); % the integration time step is smaller than dT

% External input, estimated as parameter p later on:
z=(1:ll)/250*2*pi; z=-.4-1.01*abs(sin(z/2));

% 4th order Runge-Kutta integrator for FitzHugh-Nagumo system with external input:
for n=1:ll-1;
    xx=x0(:,n);
    for i=1:nn
        k1=dt*FitzHughNagumo_int(xx,z(n));
        k2=dt*FitzHughNagumo_int(xx+k1/2,z(n));
        k3=dt*FitzHughNagumo_int(xx+k2/2,z(n));
        k4=dt*FitzHughNagumo_int(xx+k3,z(n));
        xx=xx+k1/6+k2/3+k3/3+k4/6;
    end;
    x0(:,n+1)=xx;
end;

x=[z; x0]; % augmented state vector (notation a bit different to paper)

R=.2^2*var(FitzHughNagumo_obsfct(x))*eye(dy,dy); % observation noise covariance matrix
rng('default'); rng(0)
y=FitzHughNagumo_obsfct(x)+sqrtm(R)*randn(dy,ll); % noisy data

FitzHughNagumo_fct(dq,x); % this is just to suppress an erroneous warning and otherwise has no function

% Initial conditions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

xhat=zeros(dx,ll);
xhat(:,2)=x(:,2); % first guess of x_1 set to observation

Q=.015; % process noise covariance matrix

Pxx=zeros(dx,dx,ll);
Pxx(:,:,1)=blkdiag(Q,R,R);

errors=zeros(dx,ll);
Ks=zeros(dx,dy,ll);  % Kalman gains

% Main loop for recursive estimation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for k=2:ll
    
    [xhat(:,k),Pxx(:,:,k),Ks(:,:,k)]=ut(xhat(:,k-1),Pxx(:,:,k-1),y(:,k),'FitzHughNagumo_fct','FitzHughNagumo_obsfct',dq,dx,dy,R);
    
    Pxx(1,1,k)=Q;
    
    errors(:,k)=sqrt(diag(Pxx(:,:,k)));
    
end; % k

% Results %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

chisq=mean((x(1,:)-xhat(1,:)).^2+(x(2,:)-xhat(2,:)).^2+(x(3,:)-xhat(3,:)).^2);
disp(['Chi square = ',num2str(chisq)]);

% Showing last estimated parameter, used for example for the final estimate of a constant parameter:
% est=xhat(1:dq,ll)'; disp(['Estimated x = ' num2str(est)]);
% error=errors(1:dq,ll)'; disp(['Error = ' num2str(error)]);

figure(1)

subplot(2,1,1)
plot(y,'bd','MarkerEdgeColor','blue', 'MarkerFaceColor','blue','MarkerSize',3);
hold on;
plot(x(dq+1,:),'black','LineWidth',2);
%plot(xhat(dq+1,:),'r','LineWidth',2);
xlabel(texlabel('t'));
ylabel(texlabel('x_1, y'));
hold off;
axis tight
title('(a)')
drawnow

subplot(2,1,2)
plot(x(dq+2,:),'black','LineWidth',2);
hold on
plot(xhat(dq+2,:),'r','LineWidth',2);
plot(x(1,:),'black','LineWidth',2);
for i=1:dq; plot(xhat(i,:),'m','LineWidth',2); end;
for i=1:dq; plot(xhat(i,:)+errors(i,:),'m'); end;
for i=1:dq; plot(xhat(i,:)-errors(i,:),'m'); end;
xlabel(texlabel('t'));
ylabel(texlabel('z, estimated z, x_2, estimated x_2'));
hold off
axis tight
title('(b)')


function r=FitzHughNagumo_int(x,z)
% Function for modeling data, not for UKF execution
a=.7; b=.8; c=3.;
r=[c*(x(2)+x(1)-x(1)^3/3+z); -(x(1)-a+b*x(2))/c];


function r=FitzHughNagumo_obsfct(x)
% Observation function G(x)

    k1=dt*fc(xnl,p);
    k2=dt*fc(xnl+k1/2,p);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] Voss H U , Timmer J , Kurths J .NONLINEAR DYNAMICAL SYSTEM IDENTIFICATION FROM UNCERTAIN AND INDIRECT MEASUREMENTS[J].International Journal of Bifurcation and Chaos, 2011, 14(6):1905-1905.DOI:10.1142/S0218127404010345.

🌈4 Matlab代码及文献

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 车辆状态估计是指根据车辆传感器数据和先验信息,通过数学方法推测出车辆当前的状态信息,如位置、速度、方向等。扩展卡尔曼滤波(Extended Kalman Filter, EKF)和无迹卡尔曼滤波(Unscented Kalman Filter, UKF)是常用的状态估计算法。 EKF是对卡尔曼滤波算法的扩展,解决了非线性系统的状态估计问题。它通过一系列线性化技术来近似非线性系统,并根据线性化的模型进行滤波。EKF对非线性性能较强,但在高维状态空间或非线性程度较高的系统中计算复杂度较高。 UKF则是对EKF的改进,无需进行系统线性化。它通过一种称为无迹变换(unscented transformation)的方法,通过一组经过特定变换的采样点来近似系统的非线性变换。这种采样方法能够更好地保持状态向量的高斯分布特性,从而提高滤波精度。UKF用于一些非线性程度较高或状态空间较大的问题,较EKF具有更好的性能和计算效率。 总而言之,扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波UKF)是常用于车辆状态估计的算法。EKF通过线性化非线性系统来进行滤波,适用于中等复杂度的非线性问题。UKF则通过无迹变换来近似非线性变换,适用于非线性程度较高或状态空间较大的问题。根据具体的应用场景和系统特性,选择适当的算法可以提高车辆状态估计的精度和效率。 ### 回答2: 车辆状态估计是指通过利用车辆传感器提供的数据,推测车辆在特定时刻的位置、速度、方向等状态的过程。而扩展卡尔曼滤波(Extended Kalman Filter,EKF)和无迹卡尔曼滤波(Unscented Kalman Filter,UKF)是常用的车辆状态估计算法。 扩展卡尔曼滤波(EKF)是基于卡尔曼滤波的一种改进算法,可以用于非线性系统的状态估计。对于车辆的状态估计,EKF通过对车辆的运动模型和观测模型进行线性化,然后使用卡尔曼滤波的递推公式来进行状态的预测和更新。EKF通过不断迭代预测和更新步骤,逐步优化对车辆状态估计无迹卡尔曼滤波UKF)是对EKF的一种改进算法,主要解决了EKF由于线性化误差引起的估计误差问题。UKF通过使用一组特定的采样点(称为Sigma点)来代替传统的线性化过程,以更准确地近似非线性系统的状态分布。通过对Sigma点进行预测和更新,UKF能够更好地估计车辆的状态。 总结而言,扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波UKF)都是常用的车辆状态估计算法。它们通过对车辆的运动模型和观测模型进行线性化或者非线性化处理,通过迭代预测和更新的方式,对车辆的状态进行估计。其中,UKF通过使用一组特定的采样点来更准确地估计非线性系统的状态分布,相对于EKF具有更高的精度。 ### 回答3: 车辆状态估计是指对车辆的运动状态进行估计和预测的过程。在车辆动态系统中,状态包括位置、速度、加速度等信息,这些信息对于自动驾驶、智能交通等应用非常重要。 扩展卡尔曼滤波(Extended Kalman Filter,EKF)是一种基于卡尔曼滤波(Kalman Filter)的状态估计方法。EKF通过建立非线性运动方程和测量方程的雅可比矩阵,将非线性系统近似为线性系统进行状态估计。其主要思想是通过使用一阶泰勒展开对非线性方程进行线性化,得到近似的线性方程,然后利用卡尔曼滤波算法进行状态估计。由于EKF是对非线性系统的线性化近似,因此在系统非线性程度较高时,其估计精度可能会有所下降。 无迹卡尔曼滤波(Unscented Kalman Filter,UKF)是对EKF的改进和扩展。UKF通过使用一种特定的变换(无迹变换)将高斯分布转化为一组采样点,并在非线性方程中使用这些采样点来近似非线性函数的传播。无迹变换可以更好地保留非线性函数的特性,从而提高了状态估计的精度。相对于EKF而言,UKF在非线性程度高的情况下表现更加稳定和精确。 总之,EKetF和UkF是两种常用的车辆状态估计方法。EKetF是对非线性系统的线性化近似,而UKF通过无迹变换来更好地保留非线性函数的特性。在车辆状态估计应用中,选择合适的方法取决于系统的非线性程度和对估计精度的要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值