sonyps4.ru

Использование фильтров Калмана. Информационный портал по безопасности

Винеровские фильтры лучше всего подходят для обработки процессов или отрезков процессов в целом (блочная обработка). Для последовательной обработки требуется текущая оценка сигнала на каждом такте с учетом информации, поступающей на вход фильтра в процессе наблюдения.

При винеровской фильтрации каждый новый отсчет сигнала потребовал бы пересчета всех весовых коэффициентов фильтра. В настоящее время широкое распространение получили адаптивные фильтры, в которых поступающая новая информация используется для непрерывной корректировки ранее сделанной оценки сигнала (сопровождение цели в радиолокации, системы автоматического регулирования в управлении и т.д). Особенный интерес представляют адаптивные фильтры рекурсивного типа, известные как фильтр Калмана.

Эти фильтры широко используются в контурах управления в системах автоматического регулирования и управления. Именно оттуда они и появились, подтверждением чему служит столь специфическая терминология, используемая при описании их работы, как пространство состояний.

Одна из основных задач, требующих своего решения в практике нейронных вычислений, – получение быстрых и надежных алгоритмов обучения НС. В этой связи может оказаться полезным использование в контуре обратной связи обучающего алгоритма линейных фильтров. Так как обучающие алгоритмы имеют итеративную природу, такой фильтр должен представлять собой последовательное рекурсивное устройство оценки.

Задача оценки параметров

Одной из задач теории статистических решений, имеющих большое практическое значение, является задача оценки векторов состояния и параметров систем, которая формулируется следующим образом. Предположим, необходимо оценить значение векторного параметра $X$, недоступного непосредственному измерению. Вместо этого измеряется другой параметр $Z$, зависящий от $X$. Задача оценивания состоит в ответе на вопрос: что можно сказать об $X$, зная $Z$. В общем случае, процедура оптимальной оценки вектора $X$ зависит от принятого критерия качества оценки.

Например, байесовский подход к задаче оценки параметров требует полной априорной информации о вероятностных свойствах оцениваемого параметра, что зачастую невозможно. В этих случаях прибегают к методу наименьших квадратов (МНК), который требует значительно меньше априорной информации.

Рассмотрим применения МНК для случая, когда вектор наблюдения $Z$ связан с вектором оценки параметров $X$ линейной моделью, и в наблюдении присутствует помеха $V$, некоррелированная с оцениваемым параметром:

$Z = HX + V$, (1)

где $H$ – матрица преобразования, описывающая связь наблюдаемых величин с оцениваемыми параметрами.

Оценка $X$, минимизирующая квадрат ошибки, записывается следующим образом:

$X_{оц}=(H^TR_V^{-1}H)^{-1}H^TR_V^{-1}Z$, (2)

Пусть помеха $V$ не коррелирована, в этом случае матрица $R_V$ есть просто единичная матрица, и уравнение для оценки становится проще:

$X_{оц}=(H^TH)^{-1}H^TZ$, (3)

Запись в матричной форме сильно экономит бумагу, но может быть для кого то непривычна. Следующий пример, взятый из монографии Коршунова Ю. М. "Математические основы кибернетики", все это иллюстрирует.
Имеется следующая электрическая цепь:

Наблюдаемые величины в данном случае – показания приборов $A_1 = 1 A, A_2 = 2 A, V = 20 B$.

Кроме того, известно сопротивление $R = 5$ Ом. Требуется оценить наилучшим образом, с точки зрения критерия минимума среднего квадрата ошибки значения токов $I_1$ и $I_2$. Самое важное здесь заключается в том, что между наблюдаемыми величинами (показаниями приборов) и оцениваемыми параметрами существует некоторая связь. И эта информация привносится извне.

В данном случае, это законы Кирхгофа, в случае фильтрации (о чем речь пойдет дальше) – авторегрессионная модель временного ряда, предполагающая зависимость текущего значения от предшествующих.

Итак, знание законов Кирхгофа, никак не связанное с теорией статистических решений, позволяет установить связь между наблюдаемыми значениями и оцениваемыми параметрами (кто изучал электротехнику – могут проверить, остальным придется поверить на слово):

$$z_1 = A_1 = I_1 + \xi_1 = 1$$

$$z_2 = A_2 = I_1 + I_2 + \xi_2 = 2$$

$$z_2 = V/R = I_1 + 2 * I_2 + \xi_3 = 4$$

Это же в векторной форме:

$$\begin{vmatrix} z_1\\ z_2\\ z_3 \end{vmatrix} = \begin{vmatrix} 1 & 0\\ 1 & 1\\ 1 & 2 \end{vmatrix} \begin{vmatrix} I_1\\ I_2 \end{vmatrix} + \begin{vmatrix} \xi_1\\ \xi_2\\ \xi_3 \end{vmatrix}$$

Или $Z = HX + V$, где

$$Z= \begin{vmatrix} z_1\\ z_2\\ z_3 \end{vmatrix} = \begin{vmatrix} 1\\ 2\\ 4 \end{vmatrix} ; H= \begin{vmatrix} 1 & 0\\ 1 & 1\\ 1 & 2 \end{vmatrix} ; X= \begin{vmatrix} I_1\\ I_2 \end{vmatrix} ; V= \begin{vmatrix} \xi_1\\ \xi_2\\ \xi_3 \end{vmatrix}$$

Считая значения помехи некоррелированными между собой, найдем оценку I 1 и I 2 по методу наименьших квадратов в соответствии с формулой 3:

$H^TH= \begin{vmatrix} 1 & 1& 1\\ 0 & 1& 2 \end{vmatrix} \begin{vmatrix} 1 & 0\\ 1 & 1\\ 1 & 2 \end{vmatrix} = \begin{vmatrix} 3 & 3\\ 3 & 5 \end{vmatrix} ; (H^TH)^{-1}= \frac{1}{6} \begin{vmatrix} 5 & -3\\ -3 & 3 \end{vmatrix} $;

$H^TZ= \begin{vmatrix} 1 & 1& 1\\ 0 & 1& 2 \end{vmatrix} \begin{vmatrix} 1 \\ 2\\ 4 \end{vmatrix} = \begin{vmatrix} 7\\ 10 \end{vmatrix} ; X{оц}= \frac{1}{6} \begin{vmatrix} 5 & -3\\ -3 & 3 \end{vmatrix} \begin{vmatrix} 7\\ 10 \end{vmatrix} = \frac{1}{6} \begin{vmatrix} 5\\ 9 \end{vmatrix}$;

Итак $I_1 = 5/6 = 0,833 A$; $I_2 = 9/6 = 1,5 A$.

Задача фильтрации

В отличие от задачи оценки параметров, которые имеют фиксированные значения, в задаче фильтрации требуется оценивать процессы, то есть находить текущие оценки изменяющегося во времени сигнала, искаженного помехой, и, в силу этого, недоступного непосредственному измерению. В общем случае вид алгоритмов фильтрации зависит от статистических свойств сигнала и помехи.

Будем предполагать, что полезный сигнал – медленно меняющаяся функция времени, а помеха – некоррелированный шум. Будем использовать метод наименьших квадратов, опять же по причине отсутствия априорных сведений о вероятностных характеристиках сигнала и помехи.

Вначале получим оценку текущего значения $x_n$ по имеющимся $k$ последним значениям временного ряда $z_n, z_{n-1},z_{n-2}\dots z_{n-(k-1)}$. Модель наблюдения та же, что и в задаче оценки параметров:

Понятно, что $Z$ – это вектор–столбец, состоящий из наблюдаемых значений временного ряда $z_n, z_{n-1},z_{n-2}\dots z_{n-(k-1)}$, $V$ – вектор–столбец помехи $\xi _n, \xi _{n-1},\xi_{n-2}\dots \xi_{n-(k-1)}$, искажающий истинный сигнал. А что означают символы $H$ и $X$? О каком, например, векторе–столбце $X$ может идти речь, если все, что необходимо, – это дать оценку текущего значения временного ряда? А что понимать под матрицей преобразований $H$, вообще непонятно.

На все эти вопросы можно ответить только при условии введения в рассмотрение понятия модели генерации сигнала. То есть, необходима некоторая модель исходного сигнала. Это и понятно, при отсутствии априорной информации о вероятностных характеристиках сигнала и помехи остается только строить предположения. Можно назвать это гаданием на кофейной гуще, но специалисты предпочитают другую терминологию. На их "фене" это называется параметрическая модель.

В данном случае оцениваются параметры именно этой модели. При выборе подходящей модели генерации сигнала вспомним о том, что любую аналитическую функцию можно разложить в ряд Тейлора. Поразительное свойство ряда Тейлора заключается в том, что форма функции на любом конечном расстоянии $t$ от некой точки $x=a$ однозначно определяется поведением функции в бесконечно малой окрестности точки $x=a$ (речь идет о ее производных первого и высшего порядков).

Таким образом, существование рядов Тейлора означает, что аналитическая функция обладает внутренней структурой с очень сильной связью. Если, например, ограничиться тремя членами ряда Тейлора, то модель генерации сигнала будет выглядеть так:

$x_{n-i} = F_{-i}x_n$, (4)

$$X_n= \begin{vmatrix} x_n\\ x"_n\\ x""_n \end{vmatrix} ; F_{-i}= \begin{vmatrix} 1 & -i & i^2/2\\ 0 & 1 & -i\\ 0 & 0 & 1 \end{vmatrix} $$

То есть формула 4, при заданном порядке полинома (в примере он равен 2) устанавливает связь между $n$-ым значением сигнала во временной последовательности и $(n-i)$–ым. Таким образом, оцениваемый вектор состояния в данном случае включает в себя, помимо собственно оцениваемого значения, первую и вторую производную сигнала.

В теории автоматического управления такой фильтр назвали бы фильтром с астатизмом 2-го порядка. Матрица преобразования $H$ для данного случая (оценка осуществляется по текущему и $k-1$ предшествующим выборкам) выглядит так:

$$H= \begin{vmatrix} 1 & -k & k^2/2\\ - & - & -\\ 1 & -2 & 2\\ 1 & -1 & 0.5\\ 1 & 0 & 0 \end{vmatrix}$$

Все эти числа получаются из ряда Тейлора в предположении, что временной интервал между соседними наблюдаемыми значениями постоянный и равен 1.

Итак, задача фильтрации при принятых нами предположениях свелась к задаче оценки параметров; в данном случае оцениваются параметры принятой нами модели генерации сигнала. И оценка значений вектора состояния $X$ осуществляется по той же формуле 3:

$$X_{оц}=(H^TH)^{-1}H^TZ$$

По сути, мы реализовали процесс параметрического оценивания, основанный на авторегрессионной модели процесса генерации сигнала.

Формула 3 легко реализуется программно, для этого нужно заполнить матрицу $H$ и вектор столбец наблюдений $Z$. Такие фильтры называются фильтры с конечной памятью , так как для получения текущей оценки $X_{nоц}$ они используют последние $k$ наблюдений. На каждом новом такте наблюдения к текущей совокупности наблюдений прибавляется новое и отбрасывается старое. Такой процесс получения оценок получил название скользящего окна .

Фильтры с растущей памятью

Фильтры с конечной памятью обладают тем основным недостатком, что после каждого нового наблюдения необходимо заново производить полный пересчет по всем хранящимся в памяти данным. Кроме того, вычисление оценок можно начинать только после того, как накоплены результаты первых $k$ наблюдений. То есть эти фильтры обладают большой длительностью переходного процесса.

Чтобы бороться с этим недостатком, необходимо перейти от фильтра с постоянной памятью к фильтру с растущей памятью . В таком фильтре число наблюдаемых значений, по которым производится оценка, должна совпадать с номером n текущего наблюдения. Это позволяет получать оценки, начиная с числа наблюдений, равного числу компонент оцениваемого вектора $X$. А это определяется порядком принятой модели, то есть сколько членов из ряда Тейлора используется в модели.

При этом с ростом n улучшаются сглаживающие свойства фильтра, то есть повышается точность оценок. Однако непосредственная реализация этого подхода связана с возрастанием вычислительных затрат. Поэтому фильтры с растущей памятью реализуются как рекуррентные .

Дело в том, что к моменту n мы уже имеем оценку $X_{(n-1)оц}$, в которой содержится информация обо всех предыдущих наблюдениях $z_n, z_{n-1}, z_{n-2} \dots z_{n-(k-1)}$. Оценку $X_{nоц}$ получаем по очередному наблюдению $z_n$ с использованием информации, хранящейся в оценке $X_{(n-1)}{\mbox {оц}}$. Такая процедура получила название рекуррентной фильтрации и состоит в следующем:

  • по оценке $X_{(n-1)}{\mbox {оц}}$ прогнозируют оценку $X_n$ по формуле 4 при $i = 1$: $X_{\mbox {nоцаприори}} = F_1X_{(n-1)оц}$. Это априорная оценка;
  • по результатам текущего наблюдения $z_n$, эту априорную оценку превращают в истинную, то есть апостериорную;
  • эта процедура повторяется на каждом шаге, начиная с $r+1$, где $r$ – порядок фильтра.

Окончательная формула рекуррентной фильтрации выглядит так:

$X_{(n-1)оц} = X_{\mbox {nоцаприори}} + (H^T_nH_n)^{-1}h^T_0(z_n - h_0 X_{\mbox {nоцаприори}})$, (6)

где для нашего фильтра второго порядка:

Фильтр с растущей памятью, работающий в соответствии с формулой 6 – частный случай алгоритма фильтрации, известного под названием фильтра Калмана.

При практической реализации этой формулы необходимо помнить, что входящая в него априорная оценка определяется по формуле 4, а величина $h_0 X_{\mbox {nоцаприори}}$ представляет собой первую компоненту вектора $X_{\mbox {nоцаприори}}$.

У фильтра с растущей памятью имеется одна важная особенность. Если посмотреть на формулу 6, то окончательная оценка есть сумма прогнозируемого вектора оценки и корректирующего члена. Эта поправка велика при малых $n$ и уменьшается при увеличении $n$, стремясь к нулю при $n \rightarrow \infty$. То есть с ростом n сглаживающие свойства фильтра растут и начинает доминировать модель, заложенная в нем. Но реальный сигнал может соответствовать модели лишь на отдельных участках, поэтому точность прогноза ухудшается.

Чтобы с этим бороться, начиная с некоторого $n$, накладывают запрет на дальнейшее уменьшение поправочного члена. Это эквивалентно изменению полосы фильтра, то есть при малых n фильтр более широкополосен (менее инерционен), при больших – он становится более инерционен.

Сравните рисунок 1 и рисунок 2. На первом рисунке фильтр имеет большую память, при этом он хорошо сглаживает, но в силу узкополосности оцениваемая траектория отстает от реальной. На втором рисунке память фильтра меньше, он хуже сглаживает, но лучше отслеживает реальную траекторию.

Литература

  1. Ю.М.Коршунов "Математические основы кибернетики"
  2. А.В.Балакришнан "Теория фильтрации Калмана"
  3. В.Н.Фомин "Рекуррентное оценивание и адаптивная фильтрация"
  4. К.Ф.Н.Коуэн, П.М. Грант "Адаптивные фильтры"
1

Проведено исследование использования фильтра Калмана в современных разработках комплексированных навигационных систем. Приведен и разобран пример построения математической модели, использующей расширенный фильтр Калмана для повышения точности определения координат беспилотных летательных аппаратов. Рассмотрен частичный фильтр. Сделан краткий обзор научных работ, использующих данный фильтр для повышения надежности и отказоустойчивости навигационных систем. Данная статья позволяет сделать вывод, что использование фильтра Калмана в системах определения местоположения БПЛА практикуется во многих современных разработках. Существует огромное количество вариаций и аспектов такого использования, которое дает и ощутимые результаты в повышении точности, особенно в случае отказа стандартных спутниковых навигационных систем. Это является главным фактором влияния данной технологии на различные научные области, связанные с разработкой точных и отказоустойчивых навигационных систем для различных летательных аппаратов.

фильтр Калмана

навигация

беспилотный летательный аппарат (БПЛА)

1. Макаренко Г.К., Алешечкин А.М. Исследование алгоритма фильтрации при определении координат объекта по сигналам спутниковых радионавигационных систем // Доклады ТУСУРа. – 2012. – № 2 (26). – С. 15-18.

2. Bar-Shalom Y., Li X. R., Kirubarajan T. Estimation with Applications

to Tracking and Navigation // Theory Algorithms and Software. – 2001. – Vol. 3. – P. 10-20.

3. Bassem I.S. Vision based Navigation (VBN) of Unmanned Aerial Vehicles (UAV) // UNIVERSITY OF CALGARY. – 2012. – Vol. 1. – P. 100-127.

4. Conte G., Doherty P. An Integrated UAV Navigation System Based on Aerial Image Matching // Aerospace Conference. – 2008. –Vol. 1. – P. 3142-3151.

5. Guoqiang M., Drake S., Anderson B. Design of an extended kalman filter for uav localization // In Information, Decision and Control. – 2007. – Vol. 7. – P. 224–229.

6. Ponda S.S Trajectory Optimization for Target Localization Using Small Unmanned Aerial Vehicles // Massachusetts institute of technology. – 2008. – Vol. 1. – P. 64-70.

7. Wang J., Garrat M., Lambert A. Integration of gps/ins/vision sensors to navigate unmanned aerial vehicles // IAPRS&SIS. – 2008. – Vol. 37. – P. 963-969.

Одной из актуальных задач современной навигации беспилотных летательных аппаратов (БПЛА) является задача повышения точности определения координат. Эта задача решается путём использования различных вариантов комплексирования навигационных систем. Одним из современных вариантов комплексирования является сочетание gps/глонасс-навигации с расширенным фильтром Калмана (Extended Kalmanfilter), рекурсивно оценивающего точность с помощью неполных и зашумленных измерений. В данный момент существуют и разрабатываются различные вариации расширенного фильтра Калмана, включающие разнообразное число переменных состояний . В этой работе мы покажем, насколько эффективным может быть его использование в современных разработках. Рассмотрим одно из характерных представлений подобного фильтра .

Построение математической модели

В данном примере мы будем говорить только о движении БПЛА в горизонтальной плоскости, иначе, мы рассмотрим так называемую проблему 2d локализации . В нашем случае это оправдано тем, что для многих практически встречающихся ситуаций БПЛА может оставаться примерно на одной и той же высоте. Это предположение широко используется для упрощения моделирования динамики летательных аппаратов . Динамическая модель БПЛА задается следующей системой уравнений:

где {} - координаты БПЛА в горизонтальной плоскости как функции времени, направление БПЛА, угловая скорость БПЛА, и vпутевая скорость БПЛА, функции и будем считать постоянными. Они взаимно независимы, с известными ковариациями и , равными и соответственно и используются для моделирования изменений ускорения БПЛА, вызванных ветром, маневрами пилота и т.д. Значения и являются производными от максимальной угловой скорости БПЛА и опытных значений изменений линейной скорости БЛА, - символ Кронекера.

Данная система уравнений будет приближенной из-за нелинейности в модели и из-за присутствия шума. Самый простой способ аппроксимации в данном случае - это приближение методом Эйлера. Дискретная модель динамической системы движения БПЛА показана ниже.

дискретный вектор состояний фильтра Калмана, позволяющий аппроксимировать значение непрерывного вектора состояний. ∆ - временной интервал между k и k+1 измерениями. {} и {} - последовательности значений белого гауссовского шума с нулевым средним значением. Матрица ковариации для первой последовательности:

Аналогично, для второй последовательности:

Выполнив соответствующие замены в уравнениях системы (2), получаем:

Последовательности и взаимно независимы. Они также являются последовательностями белого гауссовского шума с нулевым средним значением и с матрицами ковариации и соответственно. Преимущество этой формы в том, что она показывает изменение дискретного шума в интервале между каждыми измерениями. В итоге получаем следующую дискретную динамическую модель:

(3)

Уравнение для :

= + , (4)

где, х и y - координаты БПЛА в k-момент времени, а гауссовская последовательность случайных параметров с нулевым средним значением, которая используется для задания погрешности. Предполагается, что эта последовательность не зависит от {} и {}.

Выражения (3) и (4) служат основой для оценки местоположения БПЛА, где к-е координаты получены с помощью расширенного фильтра Калмана. Моделлирование отказа навигационных систем применительно к данному типу фильтра показывает его существенную эффективность .

Для большей наглядности приведем небольшой простой пример. Пусть некоторый БПЛА летит равноускоренно, с некоторым постоянным ускорением а.

Где, х - координата БПЛА в t-момент времени, а δ - некоторая случайная величина.

Предположим, что у нас есть gps-сенсор, который получает данные о местоположении летательного аппарата. Представим результат моделирования данного процесса в программном пакете MATLAB.

Рис. 1. Фильтрация показания сенсора с помощью фильтра Калмана

На рис. 1 видно, насколько эффективным может быть использование фильтрации по алгоритму Калмана.

Однако в реальной ситуации сигналы зачастую имеют нелинейную динамику и ненормальный шум. Именно в таких случаях и используется расширенный фильтр Калмана. В том случае, если дисперсии шумов не слишком велики (т.е. линейная аппроксимация является адекватной), применение расширенного фильтра Калмана дает решение задачи с высокой точностью. Однако в том случае, когда шумы не являются гауссовскими, расширенный фильтр Калмана применять нельзя. В этом случае обычно применяют частичный фильтр, в котором используются численные методы взятия интегралов на основе методов Монте Карло с марковскими цепями.

Частичный фильтр

Представим один из алгоритмов, развивающих идеи расширенного фильтра Калмана - частичный фильтр. Частичная фильтрация является неоптимальным способом фильтрации, который работает при выполнении объединения методом Монте-Карло на множестве частиц, которые представляют собой распределение вероятностей процесса. Здесь частица это элемент, взятый из априорного распределения оцениваемого параметра. Основная идея частичного фильтра заключается в том, что большое количество частиц может быть использовано для представления оценки распределения. Чем большее число частиц используется, тем точнее множество частиц будет представлять априорное распределение. Фильтр частиц инициализируется помещением в него N частиц из априорного распределения параметров, которые мы хотим оценить. Алгоритм фильтрации предполагает прогон этих частиц через специальную систему, а затем взвешивание с помощью информации, полученной от измерения данных частиц. Полученные частицы и связанные с ними массы представляют апостериорное распределение оценочного процесса. Цикл повторяется для каждого нового измерения, и веса частиц обновляются для представления последующего распределения. Одна из основных проблем с традиционным подходом фильтрации частиц состоит в том, что в результате такой подход обычно имеет несколько частиц, имеющих очень большой вес, в отличие от большинства остальных, вес которых очень незначителен. Это приводит к нестабильности фильтрации . Эта проблема может быть решена введением частоты дискретизации, где N новых частиц берется из распределения, составленного из старых частиц. Результат оценки получают путем получения выборки среднего значения множества частиц. Если мы имеем несколько независимых выборок, то средняя выборка будет точной оценкой среднего значения, задающей конечную дисперсию.

Даже если фильтр частиц является неоптимальным, то при стремлении количества частиц к бесконечности эффективность алгоритма приближается в байесову правилу оценивания. Поэтому желательно иметь столько частиц, сколько возможно, чтобы получить наилучший результат. К сожалению, это приводит к сильному увеличению сложности вычислений, а, следовательно, вынуждает к поиску компромисса между точностью и скоростью расчета. Итак, число частиц должно быть выбрано исходя из требований к задаче оценки точности. Еще одним важным фактором для работы фильтра частиц является ограничение на частоту дискретизации. Как упоминалось ранее, частота дискретизации является важным параметром фильтрации частиц и без него в конечном итоге алгоритм становится вырождающимся. Идея заключается в том, что если веса распределяются слишком неравномерно и порог дискретизации скоро будет достигнут, то частицы с низким весом отбрасываются, и оставшееся множество образует новую вероятностную плотность, для которой могут браться новые выборки. Выбор порога частоты дискретизации представляет собой довольно сложную задачу, ведь слишком высокая частота служит причиной чрезмерной чувствительности фильтра к шуму, а слишком низкая дает большую погрешность. Также важным фактором является плотность вероятности .

В целом, алгоритм фильтрации частиц показывает хорошую производительность расчета местоположения для стационарных целей и в случае относительно медленно движущихся целей с неизвестной динамикой ускорения. В общем случае, алгоритм фильтрации частиц является более стабильным, чем расширенный фильтр Калмана, и менее склонным к вырождению и серьезным сбоям. В случаях нелинейного, негауссового распределения данный алгоритм фильтрации показывает весьма хорошую точность определения местоположения цели, в то время как алгоритм расширенной фильтрации Калмана нельзя использовать при таких условиях. К минусам данного подхода можно отнести его более высокую сложность относительно расширенного фильтра Калмана, а также то, что не всегда очевидно, как правильно подобрать параметры для этого алгоритма.

Перспективные исследования в данной области

Использование модели фильтра Калмана, подобной той, что привели мы, можно видеть в , где он используется для улучшения характеристик комплексированной системы (GPS + модель компьютерного зрения для сопоставления с географической базой), и также моделируется ситуация отказа спутникового навигационного оборудования. С помощью фильтра Калмана результаты работы системы в случае отказа были существенно улучшены (например, погрешность в определении высоты была снижена примерно в два раза, а погрешности в определении координат по разным осям снижены практически в 9 раз). Аналогичное использование фильтра Калмана приведено также в .

Интересная с точки зрения совокупности методов задача решается в . Там также используется фильтр Калмана с 5 состояниями, с некоторыми отличиями в построении модели. Полученный результат превосходит результат приведенной нами модели за счет использования дополнительных средств комплексирования (используются фото и тепловизионные изображения). Применение фильтра Калмана в данном случае позволяет уменьшить погрешность определения пространственных координат заданной точки до значения 5,5 м.

Заключение

В заключение отметим, что использование фильтра Калмана в системах определения местоположения БПЛА практикуется во многих современных разработках. Существует огромное количество вариаций и аспектов такого использования, вплоть до одновременного применения нескольких подобных фильтров с разными факторами состояний . Одним из наиболее перспективных направлений развития Калмановских фильтров видится работа над созданием модифицированного фильтра, погрешности которого будут представлены цветным шумом, что сделает его еще более ценным для решения реальных задач. Также большой интерес в данной области представляет собой частичный фильтр, с помощью которого можно фильтровать негауссовские шумы. Названное разнообразие и ощутимые результаты в повышении точности, особенно в случае отказа стандартных спутниковых навигационных систем, являются главными факторами влияния данной технологии на различные научные области, связанные с разработкой точных и отказоустойчивых навигационных систем для различных летательных аппаратов.

Рецензенты:

Лабунец В.Г., д.т.н., профессор, профессор кафедры теоретических основ радиотехники Уральского федерального университета имени первого Президента России Б.Н. Ельцина, г. Екатеринбург;

Иванов В.Э., д.т.н., профессор, зав. кафедрой технологии и средств связи Уральского федерального университета имени первого Президента России Б.Н. Ельцина, г. Екатеринбург.

Библиографическая ссылка

Гаврилов А.В. ИСПОЛЬЗОВАНИЕ ФИЛЬТРА КАЛМАНА ДЛЯ РЕШЕНИЯ ЗАДАЧ УТОЧНЕНИЯ КООРДИНАТ БПЛА // Современные проблемы науки и образования. – 2015. – № 1-1.;
URL: http://science-education.ru/ru/article/view?id=19453 (дата обращения: 06.04.2019). Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»

Как то так повелось, что очень нравятся мне всякие алгоритмы, имеющие четкое и логичное математическое обоснование) Но зачастую их описание в интернете настолько перегружено формулами и расчетами, что общий смысл алгоритма понять просто невозможно. А ведь понимание сути и принципа работы устройства/механизма/алгоритма намного важнее, чем заучивание огромных формул. Как это ни банально, но запоминание даже сотни формул ничем не поможет, если не знать, как и где их применить 😉 Собственно, к чему все это.. Решил я замутить описание некоторых алгоритмов, с которыми мне приходилось сталкиваться на практике. Постараюсь не перегружать математическими выкладками, чтобы материал был понятным, а чтение легким.

И сегодня мы поговорим о фильтре Калмана , разберемся, что это такое, для чего и как он применяется.

Начнем с небольшого примера. Пусть перед нами стоит задача определять координату летящего самолета. Причем, естественно, координата (обозначим ее ) должна определяться максимально точно.

На самолете мы заранее установили датчик, который и дает нам искомые данные о местоположении, но, как и все в этом мире, наш датчик неидеален. Поэтому вместо значения мы получаем:

где – ошибка датчика, то есть случайная величина. Таким образом, из неточных показаний измерительного оборудования мы должны получить значение координаты (), максимально близкое к реальному положению самолета.

Задача поставлена, перейдем к ее решению.

Пусть мы знаем управляющее воздействие (), благодаря которому летит самолет (пилот сообщил нам, какие рычаги он дергает 😉). Тогда, зная координату на k-ом шаге, мы можем получить значение на (k+1) шаге:

Казалось бы, вот оно, то что надо! И никакой фильтр Калмана тут не нужен. Но не все так просто.. В реальности мы не можем учесть все внешние факторы, влияющие на полет, поэтому формула принимает следующий вид:

где – ошибка, вызванная внешним воздействием, неидеальностью двигателя итп.

Итак, что же получается? На шаге (k+1) мы имеем, во-первых, неточное показание датчика , а во-вторых, неточно рассчитанное значение , полученное из значения на предыдущем шаге.

Идея фильтра Калмана заключается в том, чтобы из двух неточных значений (взяв их с разными весовыми коэффициентами) получить точную оценку искомой координаты (для нашего случая). В общем случае, измеряемая величина можем быть абсолютно любой (температура, скорость..). Вот, что получается:

Путем математических вычислений мы можем получить формулу для расчета коэффициента Калмана на каждом шаге, но, как условились в начале статьи, не будем углубляться в вычисления, тем более, что на практике установлено, что коэффициент Калмана с ростом k всегда стремится к определенному значению. Получаем первое упрощение нашей формулы:

А теперь предположим, что связи с пилотом нет, и мы не знаем управляющее воздействие . Казалось бы, в этом случае фильтр Калмана мы использовать не можем, но это не так 😉 Просто “выкидываем” из формулы то, что мы не знаем, тогда

Получаем максимально упрощенную формулу Калмана, которая тем не менее, несмотря на такие “жесткие” упрощения, прекрасно справляется со своей задачей. Если представить результаты графически, то получится примерно следующее:

Если наш датчик очень точный, то естественно весовой коэффициент K должен быть близок к единице. Если же ситуация обратная, то есть датчик у нас не очень хороший, то K должен быть ближе к нулю.

На этом, пожалуй, все, вот так вот просто мы разобрались с алгоритмом фильтрации Калмана! Надеюсь, что статья оказалась полезной и понятной =)

Фильтр Калмана

Постановка задачи

Обозначим за x k величину, которую мы будем измерять, а потом фильтровать. Это может быть координата, скорость, ускорение, влажность, температура, давление, и т.д.

Начнем с простого примера, который и приведет нас к формулировке общей задачи. Представьте себе, что у нас есть радиоуправляемый движущейся объект, который может перемещаться только вперед и назад. Мы, зная вес объекта, форму, покрытие поверхности, по которой он перемещается и т.д., рассчитали как контролирующий джойстик влияет на скорость движения v k .

Ри. 19 Движущийся объект

Тогда координата объекта будет изменяться по закону:

x k+1 = x k + v k dt (3.7)

В реальной же жизни мы не можем учесть в наших расчетах малые возмущения, действующие на объект (ветер, неровности поверхности, препятствия), поэтому настоящая скорость объекта будет отличаться от расчетной. К правой части написанного уравнения добавится случайная величина о k :

x k+1 = x k + v k dt +о k (3.8)

У нас есть установленный на объекте GPS сенсор, который пытается мерить истинную координату x k объекта, и, конечно же, не может ее померить точно, а мерит с ошибкой з л , которая является тоже случайной величиной.

В итоге с сенсора мы получаем ошибочные данные:

z k = x k + з k (3.9)

Задача состоит в том, что, зная неверные показания сенсора z k , найти хорошее приближение для истинной координаты объекта x k . Это хорошее приближение мы будем обозначать как.

В формулировке же общей задачи, за координату x k может отвечать все что угодно (температура, влажность и т.д.), а член, отвечающий за контроль системы извне, мы обозначим за u k (в примере c объектом u k = v k dt ).

Уравнения для координаты и показания сенсора будут выглядеть так:

x k+1 = x k + u k k

z k = x k + з k (3.10)

И так, что нам известно:

· u k - это известная величина, которая контролирует эволюцию системы. Мы ее знаем из построенной нами физической модели.

· Ошибка модели о k и ошибка сенсора з k - случайные величины. И их законы распределения не зависят от времени (от номера итерации k ).

· Средние значения ошибок равны нулю: k = Eз k = 0 .

· Сам закон распределения случайных величин может быть нам и не известен, но известны их дисперсии и. Заметим, что дисперсии не зависят от k , потому что законы распределения не зависят от него.

· Предполагается, что все случайные ошибки независимы друг от друга: какая ошибка будет в момент времени k совершенно не зависит от ошибки в другой момент времени k ".

Нелишним будет отметить, что задача фильтрации - это не задача сглаживания. Мы не стремимся сглаживать данные с сенсора, мы стремимся получить наиболее близкое значение к реальной координате x k .

Алгоритм Калмана

Мы будем рассуждать по индукции. Представьте себе, что на k -ом шаге мы уже нашли отфильтрованное значение с сенсора, которое хорошо приближает истинную координату системы x k . Не забываем, что мы знаем уравнение, контролирующее изменение нам неизвестной координаты:

x k+1 = x k + u k k ,

поэтому, еще не получая значение с сенсора, мы можем предположить, что на шаге k+1 система эволюционирует согласно этому закону и сенсор покажет что-то близкое к. К сожалению, пока мы не можем сказать ничего более точного. С другой стороны, на шаге k+1 у нас на руках будет неточное показание сенсора z k+1 .

Идея Калмана состоит в том, что чтобы получить наилучшее приближение к истинной координате x k+1 , мы должны выбрать золотую середину между показанием z k+1 неточного сенсора и - нашим предсказанием того, что мы ожидали от него увидеть. Показанию сенсора мы дадим вес K, а на предсказанное значение останется вес (1-K):

Коэффициент K называют коэффициентом Калмана. Он зависит от шага итерации, поэтому правильнее было бы писать K k+1 , но пока, чтобы не загромождать формулы расчетах, мы будем опускать его индекс.

Мы должны выбрать коэффициент Калмана K таким, чтобы получившееся оптимальное значение координаты было бы наиболее близко к истинной координате x k+1 . К примеру, если мы знаем, что наш сенсор очень точный, то мы будем больше доверять его показанию и дадим значению z k+1 больше весу (K близко единице). Если же сенсор, наоборот, совсем не точный, тогда больше будем ориентироваться на теоретически предсказанное значение.

В общем случае, чтобы найти точное значение коэффициента Калмана K , нужно просто минимизировать ошибку:

Используем уравнения (3.10), чтобы переписать выражение для ошибки:

Доказательство:

Теперь необходимо разобраться, что такое минимизировать ошибку? Ведь ошибка, как мы видим, сама по себе является случайной величиной и каждый раз принимает разные значения.

На самом деле не существует однозначного подхода к определению того, что означает, что ошибка минимальна.

Точно как и в случае с дисперсией случайной величины, когда мы пытались оценить характерную ширину ее разброса, так и тут мы выберем самый простой для расчетов критерий. Мы будем минимизировать среднее значение от квадрата ошибки:

Распишем последнее выражение:

Доказательство:

Из того что все случайные величины, входящие в выражение (5.13) для e k+1 , независимы, следует, что все "перекрестные" члены равны нулю: E (о k з k+1 ) = E (e k о k ) = E (e k з k+1 ) =0.

Так же k+1 =Eо k =0 , тогда формула для дисперсий выглядит намного проще:

Выражение (3.15) принимает минимальное значение, когда (приравниваем производную к нулю):

Подставляем в выражение (3.15) для среднеквадратичной ошибки минимизирующее ее значение коэффициента Калмана (5.17) . Получаем:

Наша задача решена. Мы получили итерационную формулу (3.18), для вычисления коэффициента Калмана. Практическая реализация в приложении А.

Рис. 20

Если проследить, как с шагом итерации k изменяется коэффициент Калмана K k , то можно показать, что он всегда стабилизируется к определенному значению K stab . К примеру, когда среднеквадратичные ошибки сенсора и модели относятся друг к другу как десять к одному, то график коэффициента Калмана в зависимости от шага итерации выглядит так:


Рис. 21

Основная идея фильтра Калмана состоит в том, что надо найти коэффициент K такой, чтобы отфильтрованное значение:

в среднем меньше всего отличалось бы от реального значения координаты x k+1 . Мы видим, что отфильтрованное значение есть линейная функция от показания сенсора z k+1 и предыдущего отфильтрованного значения. А предыдущее отфильтрованное значение является, в свою очередь, линейной функцией от показания сенсора z k и предпредыдущего отфильтрованного значения. И так далее, пока цепь полностью не развернется. То есть отфильтрованное значение зависит от всех предыдущих показаний сенсора линейно:

Поэтому фильтр Калмана называют линейным фильтром.

Random Forest - один из моих любимых алгоритмов data mining. Во-первых он невероятно универсален, с его помощью можно решать как задачи регрессии так и классификации. Проводить поиск аномалий и отбор предикторов. Во-вторых это тот алгоритм, который действительно сложно применить неправильно. Просто потому, что в отличии от других алгоритмов у него мало настраиваемых параметров. И еще он удивительно прост по своей сути. И в то же время он отличается удивительной точностью.

В чем же идея такого замечательного алгоритма? Идея проста: допустим у нас есть какой-то очень слабый алгоритм, скажем, . Если мы сделаем очень много разных моделей с использованием этого слабого алгоритма и усредним результат их предсказаний, то итоговый результат будет существенно лучше. Это, так называемое, обучение ансамбля в действии. Алгоритм Random Forest потому и называется "Случайный Лес", для полученных данных он создает множество деревьев приятия решений и потом усредняет результат их предсказаний. Важным моментом тут является элемент случайности в создании каждого дерева. Ведь понятно, что если мы создадим много одинаковых деревьев, то результат их усреднения будет обладать точностью одного дерева.

Как он работает? Предположим, у нас есть некие данные на входе. Каждая колонка соответствует некоторому параметру, каждая строка соответствует некоторому элементу данных.

Мы можем выбрать, случайным образом, из всего набора данных некоторое количество столбцов и строк и построить по ним дерево принятия решений.


Thursday, May 10, 2012

Thursday, January 12, 2012


Вот собственно и всё. 17-ти часовой перелет позади, Россия осталась за океаном. А в окно уютной 2-ух спальной квартиры на нас смотрит Сан-Франциско, знаменитая Кремниевая долина, Калифорния, США. Да, это и есть та самая причина, по которой я практически не писал последнее время. Мы переехали.

Всё это началось еще в апреле 2011 года, когда я проходил телефонное интервью в компании Zynga. Тогда это все казалось какой-то игрой не имеющей отношения к реальности и я и представить себе не мог, во что это выльется. В июне 2011 года Zynga приехали в Москву и провели серию собеседований, рассматривалось около 60 кандидатов прошедших телефонное интервью и из них было отобрано около 15 человек (точное число не знаю, кто-то потом передумал, кто-то сразу отказался). Интервью оказалось неожиданно простым. Ни тебе задачек на программирование, ни заковыристых вопросов про форму люков, в основном проверялись способности болтать. А знания, на мой взгляд, оценивались лишь поверхностно.

А дальше началась канитель. Сначала мы ждали результатов, потом офера, потом одобрение LCA, потом одобрения петиции на визу, потом документы из США, потом очередь в посольстве, потом дополнительную проверку, потом визу. Временами мне казалось, что я готов все бросить и забить. Временами я сомневался, а нужна ли нам эта Америка ведь и в России не плохо. Весь процесс занял где-то около полугода, в итоге, в середине декабря мы получили визы и начали готовиться к отъезду.

В понедельник был мой первый рабочий день на новом месте. В офисе созданы все условия для того чтобы не только работать, но и жить. Завтраки, обеды и ужины от собственных поваров, куча разнообразнейшей еды распиханной по всем уголкам, спортзал, массаж и даже парикмахер. Все это совершенно бесплатно для сотрудников. Многие добираются на работу на велосипеде и для хранения транспорта оборудовано несколько комнат. В общем, ничего подобного в России мне встречать не доводилось. Всему, однако, есть своя цена, нас сразу предупредили, что работать придется много. Что такое "много", по их меркам, мне не очень понятно.

Надеюсь, однако, что несмотря на количество работы, в обозримом будущем смогу возобновить ведение блога и, может быть, расскажу что-нибудь о американской жизни и работе программистом в Америке. Поживем - увидим. А пока, поздравляю всех с наступившим новым годом и рождеством и до новых встреч!


Для примера использования, распечатаем дивидендную доходность российских компаний. В качестве базовой цены, берем цену закрытия акции в день закрытия реестра. Почему-то на сайте тройки этой информации нет, а она ведь гораздо интересней чем абсолютные величины дивидендов.
Внимание! Код выполняется довольно долго, т.к. для каждой акции требуется сделать запрос на сервера finam и получить её стоимость.

Result <- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0){ try({ quotes <- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes) if (length(price)>0){ dd <- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c("Symbol", "Name", "RegistryDate", "Divs") result


Аналогично можно построить статистику для прошлых лет.


Загрузка...