класс trackingUKF

Сигма-точечный фильтр Калмана

Описание

Класс trackingUKF создает сигма-точечный фильтр Калмана дискретного времени, используемый для отслеживания положений и скоростей целевых платформ. Сигма-точечный фильтр Калмана является рекурсивным алгоритмом для оценки развивающегося состояния процесса, когда измерения сделаны на процессе. Сигма-точечный фильтр Калмана может смоделировать эволюцию состояния, которое повинуется нелинейной модели движения. Измерения могут также быть нелинейными функциями состояния. Кроме того, процесс и измерения могут иметь шум. Используйте сигма-точечный фильтр Калмана, когда текущее состояние является нелинейной функцией предыдущего состояния или когда измерения являются нелинейными функциями состояния или когда оба условия применяются. Сигма-точечный фильтр Калмана оценивает неопределенность о состоянии, и его распространение через нелинейное состояние и уравнения измерения, с помощью постоянного числа точек сигмы. Точки сигмы выбраны с помощью недушистого преобразования, как параметризовано Alpha, Beta и свойствами Kappa.

Конструкция

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

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

filter = trackingUKF(___,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, задайте ковариацию шума процесса как скаляр или положительный определенный 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

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

  • Когда 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, шум добавляется к измерению. В противном случае шум включен в функцию измерения.

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

Распределение точек сигмы, заданных как неотрицательный скаляр. Этот параметр включает знание шумового распределения состояний для генерации точек сигмы. Для Распределений Гаусса установка Beta к 2 оптимальна.

Вторичный масштабный коэффициент для генерации точек сигмы, заданных как скаляр от 0 до 3. Этот параметр помогает задать генерацию точек сигмы.

Методы

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

Примеры

свернуть все

Создайте объект trackingUKF с помощью предопределенной модели движения постоянной скорости, constvel, и связанной модели измерения, cvmeas. Эти модели принимают, что вектор состояния имеет форму [x; vx; y;] и что измерение положения находится в Декартовых координатах, [x; y; z. Установите свойство распространения точки сигмы на 1e-2.

filter = trackingUKF(@constvel,@cvmeas,[0;0;0;0],'Alpha',1e-2);

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

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

    1.2500
    0.2500
    1.2500
    0.2500

Ppred = 4×4

   11.7500    4.7500   -0.0000    0.0000
    4.7500    3.7500   -0.0000    0.0000
   -0.0000   -0.0000   11.7500    4.7500
    0.0000    0.0000    4.7500    3.7500

Больше о

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

Алгоритмы

Сигма-точечный фильтр Калмана оценивает состояние процесса, которым управляет нелинейное стохастическое уравнение

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

где xk является состоянием на шаге k. f() является функцией изменения состояния, uk средства управления на процессе. Движение может быть затронуто случайными шумовыми возмущениями, 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] Бледный, Эрик А. и Р. ван дер Мерв. “Сигма-точечный фильтр Калмана для Нелинейной Оценки”. Адаптивные системы для Обработки сигналов, Коммуникаций и Управления. КОГДА-SPCC, IEEE, 2000, pp.153–158.

[4] Бледный, Мерл. “Сигма-точечный фильтр Калмана”. В Кальмане Филтеринге и Нейронных сетях, отредактированных Саймоном Хейкином. John Wiley & Sons, Inc., 2001.

[5] Саркка С. “Рекурсивный байесов вывод на стохастических дифференциальных уравнениях”. Докторская диссертация. Хельсинкский политехнический университет, Финляндия. 2006.

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

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

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

Введенный в R2018b