Stepan Salov added section_MatLab_addcontentsline_toc_section__.tex  almost 8 years ago

Commit id: 130daa03c9aed478cc05c87913878a5043791f87

deletions | additions      

         

\section*{MatLab}  \addcontentsline{toc}{section}{MatLab}  Теперь реализуем всё вышесказанное в MatLab.\\  Код:  \begin{verbatim}  clear all;  % Задано движение формулой:  % x(t) = 5 + 2t + 0.1*t^2  % Т.е. ускорение равно 0.2, начальная скорость равно 2  % x(t+1) = x(t) + a*t + 2.1  N=100; % Количество измерений  a=0.2; % Ускорение  sigmaPsi=1;   sigmaEta=50;  k=1:N;  x=k;  x(1)=5; % Начальная координата  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;    %Применяем фильтр Калмана  xOpt(1)=z(1); % База итерации   eOpt(1)=sigmaEta; % Т.к. eOpt(e0^2) = eOpt(Eta0^2) = 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('Координата (м)');  xlabel('Время (сек)');  legend('Фильтрация сенсора по Калману', 'Показания сенсора', 'Истинная координата');  \end{verbatim}  Запустим программу и получим график на котором будут располагаться 3 линии: линия истинного положения бронепоезда, линия показания сенсора и линия полученная после использования фильтра Калмана.\\  Результат выполнения программы: