MatLab

Теперь, когда мы познакомились с фильтром Калмана, реализуем пример на MatLab. Для тестирования программы мы воспользуемся Matlab 7.10.0 (R2010a)
Код: clear all; % x(t) = 5 + 2t + 0.1*t^2 % a=0.2, V(0)=2 % x(t+1) = x(t) + a*t + 2.1 N=100; % Number of measurements a=0.2; % Acceleration sigmaPsi=1; sigmaEta=50; k=1:N; x=k; x(1)=5; % Coordinates of the origin z(1)=x(1)+normrnd(0,sigmaEta); for t=1:(N-1) x(t+1)=x(t)+a*t+2.1+normrnd(0,sigmaPsi); z(t+1)=x(t+1)+normrnd(0,sigmaEta); end; % Apply the Kalman filter xOpt(1)=z(1); eOpt(1)=sigmaEta; for t=1:(N-1) eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2+eOpt(t)^2+sigmaPsi^2)); K(t+1)=(eOpt(t+1))^2/sigmaEta^2; xOpt(t+1)=(xOpt(t)+a*t+2.1)*(1-K(t+1))+K(t+1)*z(t+1); end; hold all; plot(k,xOpt,'LineWidth',2); plot(k,z); plot(k,x,'--','LineWidth',2); ylabel('Coordinates (m)'); xlabel('Time (sec)'); legend('Filtering Sensor for Kalman', 'Sensor readings', 'True coordinate'); Запустим программу и получим график на котором будут располагаться 3 линии: линия истинного положения бронепоезда, линия показания сенсора и линия полученная после использования фильтра Калмана.
Результат выполнения программы: