Ponomarev Dmitriy edited untitled.tex  almost 8 years ago

Commit id: 0ef6679c2decf00af93a91c06fead81f331b370a

deletions | additions      

       

\section{Алгоритм Калмана} Фильтр Калмана~— эффективный рекурсивный фильтр, который оценивает состояние линейной динамической системы по серии неточных измерений. Назван в честь Рудольфа Калмана. \section{Постановка задачи} Обозначим за $x_t$ величину которую мы считываем с датчика и которую необходимо отфильтровать. Уравнение этой величины:\\ \begin{equation} x_{k+1} = x_{k} + a\cdot s\cdot tdt + \xi_k \end{equation} Где a,s – параметры, $\xi_k$ – случайная величина, внешние влияния на движение.\\ Поскольку у датчика есть погрешность, мы получаем координату с погрешностью $\eta_k$:\\ \begin{equation} z_{k} = x_{k} + \eta_k \end{equation} Далее нам нужно найти фильтрованную величину $x^{opt}$. Для этого воспользуемся формулой:\\ \begin{equation} x^{opt}_k = K\cdot z_{k+1} + (1-K)\cdot (x^{opt}_k + u_{k}) \end{equation} где $K_{k+1}$ - показания сенсора, $1-K_{k+1}$ - предсказанное значение. Необходимо выбрать коэффициент Калмана $K_{k+1}$ таким, чтобы $x^{opt}_{k+1} \approx x_{k+1}$. Для этого минимизируем ошибку:\\ \begin{equation} e_{k+1} = x_{k+1} - x^{opt}_{k+1} \end{equation} \begin{equation} e_{k+1} = (1-K_{k+1})\cdot (e_{k+1} + \xi_{k+1}) - K_{k+1}\cdot \eta_{k+1} \end{equation} Минимизируем среднее значение от квадрата ошибки:\\ \begin{equation} E(e^{2}_{k+1})\rightarrow min\\ \end{equation} В итоге Коэффициент Калмана примет вид:\\ \begin{equation} K_{k+1}=\frac{Ee^{2}_{k}+\sigma_{\xi}^{2}}{Ee^{2}_{k}+\sigma_{\xi}^{2}+\sigma_{\eta}^{2}}\\ \end{equation} \section{Код на MATLAB} \section{Результаты}  \begin{verbatim} N=100;  a = 0.1;  s = -0.8;