класс trackingEKF

Расширенный Фильтр Калмана

Описание

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

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

  • Шум может быть добавлен и к процессу и к измерениям. В этом случае размеры шума процесса и шума измерения должны совпадать с размерами вектора состояния и вектора измерения, соответственно.

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

Конструкция

filter = trackingEKF создает расширенный объект Фильтра Калмана для системы дискретного времени с помощью значений по умолчанию для StateTransitionFcn, MeasurementFcn и свойств State. Шумы процесса и измерения приняты, чтобы быть дополнением.

filter = trackingEKF(transitionfcn,measurementfcn,state) задает функцию изменения состояния, transitionfcn, функцию измерения, measurementfcn и начальное состояние системы, state.

filter = trackingEKF(___,Name,Value) конфигурирует свойства расширенного объекта Фильтра Калмана, использующего один или несколько аргументов пары Name,Value. Любые незаданные свойства имеют значения по умолчанию.

Свойства

развернуть все

Состояние фильтра Калмана, заданное как M с действительным знаком - вектор элемента.

Пример: [200;0.2]

Типы данных: double

Ошибочная ковариация состояния, заданная как положительно-определенный M с действительным знаком-by-M матрица, где M является размером состояния фильтра. Ковариационная матрица представляет неуверенность в состоянии фильтра.

Пример: [20 0.1; 0.1 1]

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

  • Если HasAdditiveProcessNoise является true, задайте функцию с помощью одного из этих синтаксисов:

    x(k) = transitionfcn(x(k-1))
    
    x(k) = transitionfcn(x(k-1),parameters)
    где x(k) является состоянием во время k. Термин parameters обозначает все дополнительные аргументы, требуемые функцией изменения состояния.

  • Если HasAdditiveProcessNoise является false, задайте функцию с помощью одного из этих синтаксисов:

    x(k) = transitionfcn(x(k-1),w(k-1))
    
    x(k) = transitionfcn(x(k-1),w(k-1),parameters)
    где x(k) является состоянием во время, k и w(k) являются значением для шума процесса во время k. Аргумент parameters обозначает все дополнительные аргументы, требуемые функцией изменения состояния.

Пример: @constacc

Типы данных: function_handle

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

  • Если HasAdditiveProcessNoise является true, задайте Функцию Якоби с помощью одного из этих синтаксисов:

    Jx(k) = statejacobianfcn(x(k))
    
    Jx(k) = statejacobianfcn(x(k),parameters)
    где x(k) является состоянием во время k. Аргумент parameters обозначает все дополнительные аргументы, требуемые функцией изменения состояния.

    Jx(k) обозначает якобиан предсказанного состояния относительно предыдущего состояния. Якобианом является M-by-M матрица во время k. Функция Якоби может взять дополнительные входные параметры, такие как входные параметры управления или размер временного шага.

  • Если HasAdditiveProcessNoise является false, задайте Функцию Якоби с помощью одного из этих синтаксисов:

    [Jx(k),Jw(k)] = statejacobianfcn(x(k),w(k))
    
    [Jx(k),Jw(k)] = statejacobianfcn(x(k),w(k),parameters)
    где x(k) является состоянием во время, k и w(k) является демонстрационный Q - вектор элемента шума процесса во время k. Q является размером ковариации шума процесса. В отличие от случая шума аддитивного процесса, вектор шума процесса в неаддитивном шумовом случае не должен иметь тех же размерностей как вектор состояния.

    Jx(k) обозначает якобиан предсказанного состояния относительно предыдущего состояния. Этим якобианом является M-by-M матрица во время k. Функция Якоби может взять дополнительные входные параметры, такие как входные параметры управления или размер временного шага.

    Jw(k) обозначает M-by-Q якобиан предсказанного состояния относительно элементов шума процесса.

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

Пример: @constaccjac

Типы данных: function_handle

Ковариация шума процесса:

  • Когда HasAdditiveProcessNoise будет true, задайте ковариацию шума процесса как скаляр или положительный определенный M с действительным знаком-by-M матрица. M является размерностью вектора состояния. Когда задано как скаляр, матрица является кратной M-by-M единичная матрица.

  • Когда HasAdditiveProcessNoise будет false, задайте ковариацию шума процесса как Q-by-Q матрица. Q является размером вектора шума процесса.

    Необходимо задать ProcessNoise перед любым вызовом метода predict. В более поздних вызовах predict можно опционально задать шум процесса как скаляр. В этом случае матрица шума процесса является кратной Q-by-Q единичная матрица.

Пример: [1.0 0.05; 0.05 2]

Опция к образцовому шуму процессов как дополнение, заданное как true или false. Когда этим свойством является true, шум процесса добавляется к вектору состояния. В противном случае шум включен в функцию изменения состояния.

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

  • Если HasAdditiveMeasurementNoise является true, задайте функцию с помощью одного из этих синтаксисов:

    z(k) = measurementfcn(x(k))
    
    z(k) = measurementfcn(x(k),parameters)
    где x(k) является состоянием во время, k и z(k) являются предсказанным измерением во время k. Термин parameters обозначает все дополнительные аргументы, требуемые функцией измерения.

  • Если HasAdditiveMeasurementNoise является false, задайте функцию с помощью одного из этих синтаксисов:

    z(k) = measurementfcn(x(k),v(k))
    
    z(k) = measurementfcn(x(k),v(k),parameters)
    где x(k) является состоянием во время, k и v(k) являются шумом измерения во время k. Аргумент parameters обозначает все дополнительные аргументы, требуемые функцией измерения.

Пример: @cameas

Типы данных: function_handle

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

  • Если HasAdditiveMeasurmentNoise является true, задайте Функцию Якоби с помощью одного из этих синтаксисов:

    Jmx(k) = measjacobianfcn(x(k))
    
    Jmx(k) = measjacobianfcn(x(k),parameters)
    где x(k) является состоянием во время k. Jx(k) обозначает N-by-M якобиан функции измерения относительно состояния. Аргумент parameters обозначает все аргументы, требуемые функцией измерения.

  • Если HasAdditiveMeasurmentNoise является false, задайте Функцию Якоби с помощью одного из этих синтаксисов:

    [Jmx(k),Jmv(k)] = measjacobianfcn(x(k),v(k))
    
    [Jmx(k),Jmv(k)] = measjacobianfcn(x(k),v(k),parameters)
    где x(k) является состоянием во время, k и v(k) является R - размерный демонстрационный шумовой вектор. Jmx(k) обозначает N-by-M якобиан функции измерения относительно состояния. Jmv(k) обозначает якобиан N-by-R функция измерения относительно шума измерения. Аргумент parameters обозначает все аргументы, требуемые функцией измерения.

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

Пример: @cameasjac

Типы данных: function_handle

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

  • Когда HasAdditiveMeasurementNoise будет true, задайте ковариацию шума измерения как скаляр или N-by-N матрица. N является размером вектора измерения. Когда задано как скаляр, матрица является кратной N-by-N единичная матрица.

  • Когда HasAdditiveMeasurementNoise будет false, задайте ковариацию шума измерения как R-by-R матрица. R является размером вектора шума измерения.

    Необходимо задать MeasurementNoise перед любым вызовом метода correct. После первого вызова correct можно опционально задать шум измерения как скаляр. В этом случае матрица шума измерения является кратной R-by-R единичная матрица.

Пример: 0.2

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

Методы

клонСоздайте расширенный объект Фильтра Калмана с идентичными значениями свойств
правильныйИсправьте вектор состояния Кальмана и утвердите ошибочную ковариационную матрицу
correctjpdaПравильная ошибочная ковариация оценки состояния и оценки состояния с помощью JPDA
расстояниеРасстояние от измерений до предсказанного измерения
инициализироватьИнициализируйте расширенный Фильтр Калмана
вероятностьВероятность измерения
предсказатьПредскажите расширил вектор состояния Кальмана и ошибочную ковариационную матрицу состояния
невязкаНевязка измерения и остаточная ковариация

Примеры

свернуть все

Создайте двумерный объект trackingEKF и используйте пары "имя-значение", чтобы задать свойства StateTransitionJacobianFcn и MeasurementJacobianFcn. Используйте предопределенное движение постоянной скорости и модели измерения и их Якобианы.

EKF = trackingEKF(@constvel,@cvmeas,[0;0;0;0], ...
    'StateTransitionJacobianFcn',@constveljac, ...
    'MeasurementJacobianFcn',@cvmeasjac);

Запустите фильтр. Используйте predict и методы correct, чтобы распространить состояние. Можно вызвать predict и correct в любом порядке, и когда много раз вы хотите. Задайте измерение в Декартовых координатах.

measurement = [1;1;0];
[xpred, Ppred] = predict(EKF);
[xcorr, Pcorr] = correct(EKF,measurement);
[xpred, Ppred] = predict(EKF);
[xpred, Ppred] = predict(EKF)
xpred = 4×1

    1.2500
    0.2500
    1.2500
    0.2500

Ppred = 4×4

   11.7500    4.7500         0         0
    4.7500    3.7500         0         0
         0         0   11.7500    4.7500
         0         0    4.7500    3.7500

Больше о

развернуть все

Алгоритмы

Расширенный Фильтр Калмана оценивает состояние процесса, которым управляет это нелинейное стохастическое уравнение:

xk+1=f(xk,uk,wk,t)

xk является состоянием на шаге k. f() является функцией изменения состояния. Случайные шумовые возмущения, wk, могут влиять на объектное движение. Фильтр также поддерживает упрощенную форму,

xk+1=f(xk,uk,t)+wk

Чтобы использовать упрощенную форму, установите HasAdditiveProcessNoise на true.

В расширенном Фильтре Калмана измерения являются также общими функциями состояния:

zk=h(xk,vk,t)

h(xk,vk,t) является функцией измерения, которая определяет измерения как функции состояния. Типичные измерения являются положением и скоростью или некоторой функцией положения и скоростью. Измерения могут также включать шум, представленный vk. Снова, фильтр предлагает более простую формулировку.

zk=h(xk,t)+vk

Чтобы использовать упрощенную форму, установите HasAdditiveMeasurmentNoise на true.

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

Ссылки

[1] Браун, Р.Г. и П.И.К. Ван. Введение в случайный анализ сигнала и прикладного Кальмана, фильтрующего. 3-й выпуск. Нью-Йорк: John Wiley & Sons, 1997.

[2] Кальман, R. E. “Новый Подход к Линейным проблемам Фильтрации и Прогноза”. Транзакции Журнала ASME Базового проектирования, Издания 82, Серии D, март 1960, стр 35–45.

[3] Блэкмен, Сэмюэль и R. Пополи. Проект и анализ современных систем слежения, дома 1999 Artech.

[4] Блэкмен, Сэмюэль. Несколько - целевое отслеживание с радарными приложениями, домом Artech. 1986.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2017a