Stepan Salov edited untitled.tex  almost 8 years ago

Commit id: 509bcb03085b141499d828e94a6f3fa42de86a0b

deletions | additions      

       

$$  x(t+1)=x(t)+a*t+2.1+E_{t}  $$  \selectlanguage{russian}Мы Мы  установили на бронепоезд GPS сенсор, который мерит координату \selectlanguage{english}$x(t)$,\selectlanguage{russian}но, $x(t)$,но,  к сожалению, не может точно измерить ее и мерит с ошибкой \selectlanguage{english}$N_{t}$,\selectlanguage{russian}которая $N_{t}$,которая  тоже является случайной величиной: \selectlanguage{english}$$ $$  z(t)=x(t)+N_{t}  $$  \selectlanguage{russian}Задача Задача  состоит в том, чтобы зная неверные показания сенсора \selectlanguage{english}$z(t)$ \selectlanguage{russian}, $z(t)$,  найти хорошее приближение для истинной координаты бронепоезда \selectlanguage{english}$x(t)$. \selectlanguage{russian}Это $x(t)$. Это  приближение мы будем обозначать \selectlanguage{english}$xOpt(t)$.  \selectlanguage{russian}Таким $xOpt(t)$.  Таким  образом, уравнение для координаты и показания сенсора будут выглядеть следующим образом: \begin{equation}  \begin{cases}  x(t+1)=x(t)+a*t+2.1+E_{t}\\ 

\end{equation}  \section*{Алгоритм Калмана}  \addcontentsline{toc}{section}{Алгоритм Калмана}  \selectlanguage{russian}Идея Идея  Калмана состоит в том, чтобы получить наилучшее приближение к истинной координате \selectlanguage{english}$x(t+1)$ \selectlanguage{russian},мы $x(t+1)$,мы  должны выбрать золотую середину между показанием \selectlanguage{english}$z(t+1)$ \selectlanguage{russian} $z(t+1)$  неточного сенсора и \selectlanguage{english}$xOpt(t)+a*t+2.1$ \selectlanguage{russian}-— $xOpt(t)+a*t+2.1$ —  нашим предсказанием того, что мы ожидали от него увидеть. Показанию сенсора мы дадим вес \selectlanguage{english}$K$ \selectlanguage{russian}, $K$,  а на предсказанное значение останется вес \selectlanguage{english}$(1-K)$:  \selectlanguage{english}$$ $(1-K)$:  $$  xOpt(t+1)=K_{t+1}*z(t+1)+(1-K_{t+1})*(xOpt(t)+a*t+2.1)  $$  \selectlanguage{russian}где \selectlanguage{english}$K_{t+1}$\selectlanguage{russian}-коэффициент где $K_{t+1}$ - коэффициент  Калмана, зависящий от шага итерации. \\ Мы должны выбрать \selectlanguage{english}$K_{t+1}$\selectlanguage{russian}таким, $K_{t+1}$ таким,  чтобы получившееся оптимальное значение координаты \selectlanguage{english}$xOpt(t+1)$\selectlanguage{russian} $xOpt(t+1)$  было бы наиболее близкое к истиной координате \selectlanguage{english}$x(t+1)$.  \selectlanguage{russian}В $x(t+1)$.  В  общем случае, чтобы найти точное значение коэффициента Калмана \selectlanguage{english}$K_{t+1}$ \selectlanguage{russian}, $K_{t+1}$ ,  нужно просто минимизировать ошибку: \selectlanguage{english}$$ $$  e(t+1)=x(t+1)-xOpt(t+1)  $$  \selectlanguage{russian}Подставляем Подставляем  в выражения уравнения и упрощаем: \selectlanguage{english}$$ $$  e(t+1)=x(t+1)–K_{t+1}*z(t+1)-(1-K_{t+1})*(xOpt(t)+a*t+2.1)=\\=x(t+1)-K_{t+1}*(x(t+1)+N_{t+1})-(1-K_{t+1})*(xOpt(t)+a*t+2.1)=\\=x(t+1)*(1-K_{t+1})-K_{t+1}*(x(t+1)+N_{t+1})-(1-K_{t+1})*(xOpt(t)+a*t+2.1)=\\=(1-K_{t+1})*(x(t+1)–xOpt(t)–a*t–2.1)–K_{t+1}*N_{t+1}=\\=(1-K_{t+1})*(x(t)+a*t+2.1+E_{t}–xOpt(t)–a*t–2.1)–K_{t+1}*N_{t+1}=\\=(1-K_{t+1})*(x(t)–xOpt(t)+E_{t})–K_{t+1}*N_{t+1}=\\=(1-K_{t+1})*(e(t)+E_{t})–K_{t+1}*N_{t+1}$$  \selectlanguage{russian}Таким Таким  образом, получаем: \selectlanguage{english}$$ $$  e(t+1)=(1-K_{t+1})*(e(t)+E_{t})–K_{t+1}*N_{t+1}  $$  \selectlanguage{russian}Мы Мы  будем минимизировать среднее значение от квадрата ошибки: \selectlanguage{english}$E(e^{2}(t+1))\longrightarrow\min$  \selectlanguage{russian}Т.к. $E(e^{2}(t+1))\longrightarrow\min$  Т.к.  все входящие в \selectlanguage{english}$e(t+1)$\selectlanguage{russian}) $e(t+1)$)  случайные величины независимые и средние значения ошибок сенсора и модели равны нулю: \selectlanguage{english}$E[E_{t}]=E[N_{t+1}]=0$\selectlanguage{russian}, $E[E_{t}]=E[N_{t+1}]=0$,  и все перекрестные значения равны нулю:\selectlanguage{english}$E[E_{t}*N_{t+1}]=E[e(t)*E_{t}]=E[e(t)*N_{t+1}]=0$\selectlanguage{russian},то нулю:$E[E_{t}*N_{t+1}]=E[e(t)*E_{t}]=E[e(t)*N_{t+1}]=0$,то  получаем: \selectlanguage{english}$$ $$  E(e^{2}(t+1))=(1-K_{t+1})^{2}*(E(e^{2}(t))+D(E_{t}))+K^{2}_{t+1}*D(N_{t})  $$  \selectlanguage{russian}Где \selectlanguage{english}$D(E_{t})$\selectlanguage{russian} Где $D(E_{t})$  и \selectlanguage{english}$D(N_{t+1})$\selectlanguage{russian}-дисперсии $D(N_{t+1})$-дисперсии  случайных величин \selectlanguage{english}$E_{t}$\selectlanguage{russian} $E_{t}$  и \selectlanguage{english}$N_{t+1}$.  \selectlanguage{russian}Найдем $N_{t+1}$.  Найдем  минимальное значение для этого выражения (т.е. найдем производную): \selectlanguage{english}$$ $$  -2*(1-K_{t+1})*(E(e^{2}(t))+D(E_{t}))+2*K_{t+1}*D(N_{t})=0\\  -E(e^{2}(t))–D(E_{t})+K_{t+1}*E(e^{2}(t))+K_{t+1}*D(E_{t})+K_{t+1}*D(N_{t})=0\\  K_{t+1}=\frac{E(e^{2}(t))+D(E_{t})}{E(e^{2}(t))+D(E_{t})+D(N_{t})}  $$  \selectlanguage{russian}Таким Таким  образом, получаем такое \selectlanguage{english}$K_{t+1}$\selectlanguage{russian}, $K_{t+1}$,  что выражение \selectlanguage{english}$E(e^{2}(t+1))$\selectlanguage{russian} $E(e^{2}(t+1))$  будет минимальным: \selectlanguage{english}$$ $$  K_{t+1}=\frac{E(e^{2}(t))+D(E_{t})}{E(e^{2}(t))+D(E_{t})+D(N_{t})}  $$  \selectlanguage{russian}Заметим, Заметим,  что мы не знаем закон распределения случайных величин, но нам известны их дисперсии:\selectlanguage{english}$\delta^{2}_{E}$\selectlanguage{russian} дисперсии:$\delta^{2}_{E}$  и \selectlanguage{english}$\delta^{2}_{N}$\selectlanguage{russian}. $\delta^{2}_{N}$.  Заметим, что дисперсии не зависят от t, потому что законы распределения не зависят от него. Подставляем в выражение для среднеквадратичной ошибки \selectlanguage{english}$E(e^{2}(t+1))$\selectlanguage{russian}минимизирующее $E(e^{2}(t+1))$минимизирующее  ее значение коэффициента Калмана \selectlanguage{english}$K_{t+1}$\selectlanguage{russian} $K_{t+1}$  и получаем: \selectlanguage{english}$$ $$  E(e^{2}(t+1))=(1-\frac{E(e^{2}(t))+\delta^{2}_{E}}{E(e^{2}(t))+\delta^{2}_{E}+\delta^{2}_{N}})^{2}*(E(e^{2}(t))+\delta^{2}_{E})+(\frac{E(e^{2}(t))+\delta^{2}_{E}}{E(e^{2}(t))+\delta^{2}_{E}+\delta^{2}_{N}})^{2}*\delta^{2}_{N}  $$  \selectlanguage{russian}Пусть: \selectlanguage{english}$E(e^{2}(t))=a; Пусть: $E(e^{2}(t))=a;  \delta^{2}_{E}=b; \delta^{2}_{N}=c;$ \selectlanguage{russian}Тогда:  \selectlanguage{english}$$ Тогда:  $$  E(e^{2}(t+1))=(1-\frac{a+b}{a+b+c})^{2}*(a+b)+(\frac{a+b}{a+b+c})^{2}*c=\frac{c^{2}*(a+b)}{(a+b+c)^{2}}+\frac{c*(a+b)^{2}}{(a+b+c)^{2}}=\\=\frac{c*(a+b)*(c+a+b)}{(a+b+c)^{2}}=\frac{c*(a+b)}{a+b+c}=\frac{\delta^{2}_{N}*(E(e^{2}(t))+\delta^{2}_{E})}{E(e^{2}(t))+\delta^{2}_{E}+\delta^{2}_{N}}  $$  \selectlanguage{russian}Таким Таким  образом получаем: \selectlanguage{english}$$ $$  E(e^{2}(t+1))=\frac{\delta^{2}_{N}*(E(e^{2}(t))+\delta^{2}_{E})}{E(e^{2}(t))+\delta^{2}_{E}+\delta^{2}_{N}} - среднее\ значение\ квадрата\ ошибки   $$  \selectlanguage{russian}Таким Таким  образом, мы получили формулу для вычисления коэффициента Калмана. \section*{MatLab}  \addcontentsline{toc}{section}{MatLab}  \selectlanguage{russian}Теперь Теперь  реализуем всё вышесказанное в MatLab.\\ Код:  \begin{verbatim}  clear all; 

\includegraphics[width=0.77\columnwidth]{master/file/figures/123.png}  \end{center}  \end{figure}  \selectlanguage{russian}Как Как  мы видим из графика, фильтр Калмана очень хорошо фильтрует данные, и мы получаем близкие значения к реальной координате \selectlanguage{english}$x(t)$ $x(t)$