Problem with unscented kalman filter
2 次查看(过去 30 天)
显示 更早的评论
Hi everybody!
I'm trying to implement in matlab a simple unscented or alternatively extended Kalman Filter. At the moment i'd like just to observ a simple pendulum.
So I create a pendulum function and integrate it in 10 seconds with some Initial Conditions:
% pendulum state equation
function dxdt = pendulum(~, x)
g = 9.81;
l = 2;
dxdt = [x(2); -g/l*sin(x(1))]; % state equation
end
% integration function
function [t, x, xdot] = ode
tspan = [0:0.01:10];
IC = [pi/4,0];
[t,stat] = ode45(@pendulum, tspan, IC);
x = stat(:, 1);
xdot = stat(:, 2);
end
[time, x1, x2] = ode; % generating the results
No troubles so far
Then I create an extended Kalman Filter object, a measurment function where I suppose to measure angle Theta and some sensor readings
R = 0.1; % measurment covariance
for i = 1:length(x1)
y(i) = x1(i) + randn(1)*sqrt(R); % sensor readings
end
IC = [pi/4; 0];
UKF_pendulum = unscentedKalmanFilter(@pendulum,@MeasurementFcn,IC); % UKF object
UKF_pendulum.ProcessNoise = 0.01;
UKF_pendulum.MeasurementNoise = R;
residBuf = [];
xcorBuf = [];
xpredBuf = [];
for i = 1:size(y,2)
[Residual,ResidualCovariance] = residual(UKF_pendulum,y(i));
[CorrectedState,CorrectedStateCovariance] = correct(UKF_pendulum,y(i));
[PredictedState,PredictedStateCovariance] = predict(UKF_pendulum);
residBuf(i,:) = Residual;
xcorBuf(i,:) = CorrectedState';
xpredBuf(i,:) = PredictedState';
end
The rest is kept the same with respect to the Van Der Pol oscillator example at this link: https://it.mathworks.com/help/control/ref/predict_method_state_estimation.html
Unfortunately when I try to run i get this message:

Which optional input am I supposed to give to the predict command? I tried with some variables but none of them worked.
I'll upload the file in the comment.
Thank you very much,
Andrea
0 个评论
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Online Estimation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!