trackingPF

Фильтр частиц для отслеживания объектов

Описание

The trackingPF объект представляет трекер объектов, который следует нелинейной модели движения или который измеряется нелинейной моделью измерения. Фильтр использует набор дискретных частиц, чтобы аппроксимировать апостериорное распределение состояния. Фильтр частиц может быть применен к произвольным нелинейным системным моделям. Шум процесса и измерения может следовать произвольному негауссову распределению.

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

Создание

Описание

pf = trackingPF возвращает trackingPF объект с функцией перехода между состояниями, @constvel, функция измерения, @cvmeasи распределение частиц по состоянию, [0;0;0;0], с единичной ковариацией в каждой размерности. Фильтр принимает аддитивную модель Гауссова процесса шума и вычисления Гауссова вероятности.

пример

pf = trackingPF(transitionFcn,measuremntFcn,state) задает StateTransitionFcn, MeasurementFcn, и State свойства непосредственно. Фильтр принимает модуль ковариацию вокруг состояния.

pf = trackingPF(___,Name,Value) задает свойства фильтра частиц, используя одну или несколько Name,Value аргументы в виде пар. Любые неопределенные свойства берут значения по умолчанию.

Свойства

расширить все

Это свойство доступно только для чтения.

Текущее состояние фильтра, заданное как вектор M -элемент с реальным значением. Текущее состояние вычисляется из Particles и Weight использование заданной StateEstimationMethod. M является NumStateVariables. StateOrientation определяет, задано ли состояние в виде строки или вектора-столбца.

Пример: [0.1;0.05;0.04;-0.01]

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

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Указывает, имеют ли переменные состояния круговое распределение, заданное как M-элементный нулевой вектор и таковых. Значения 1 указывает, что он имеет круговое распределение. Функция плотности вероятностей круговой переменной принимает угловые значения в области значений [-pi,pi].

Ориентация вектора состояния, заданная как 'column' или 'row'.

Примечание

Если вы задаете ориентацию 'row', значение по умолчанию StateTransitionFcn и MeasurementFcn не поддерживаются. Все предусмотренные функции переходов состояний и функции измерений (constvel и cvmeas, для примера) предположим, что 'column' ориентация.

Функция перехода состояния, заданная как указатель на функцию. Функция перехода состояния развивает состояние системы от каждой частицы. Функция обратного вызова принимает по крайней мере один входной параметр, prevParticles, который представляет систему на предыдущем временном шаге. Если StateOrientation является 'row', частицы входа как NumParticles-by- NumStateVariables массив. Если StateOrientation является 'column', частицы входа как NumStateVariables-by- NumParticles массив.

Дополнительные входные параметры могут быть снабжены varargin, которые передаются в predict функция. Сигнатура функции:

function predictParticles = stateTransitionFcn(prevParticles,varargin)

Когда HasAdditiveProcessNoise свойство фильтра falseфункция перехода между состояниями может принять дополнительный входной параметр, dt. Для примера:

function predictParticles = stateTransitionFcn(prevParticles,dt,varargin)

dt - временной шаг trackingPF фильтр, filter, что было указано в последнем вызове predict функция. The dt аргумент применяется, когда вы используете фильтр в трекере и вызываете predict функция с фильтром для предсказания состояния трекера на следующем временном шаге. Для случая неаддитивного шума процесса трекер принимает, что вы явным образом задаете временной шаг при помощи этого синтаксиса: predict(filter,dt)

Зависимости

Этот параметр зависит от StateOrientation свойство.

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

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

function noiseSample = processNoiseSamplingFcn(pf)

  • Когда HasAdditiveProcessNoise является falseэта функция выводит шумовую выборку как W -by - N матрицу, где W - количество членов технологического шума, а N - количество частиц.

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

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

Зависимости

Этот параметр зависит от HasAdditiveProcessNoise свойство.

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

Ковариация технологического шума:

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

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

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

Если ProcessNoiseSamplingFcn задается как @gaussianSampleэто свойство определяет Гауссову шумовую ковариацию процесса.

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

Зависимости

Этот параметр зависит от HasAdditiveProcessNoise свойство.

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

Функция модели измерения, заданная как указатель на функцию. Эта функция вычисляет измерения, учитывая состояние текущих частиц. Дополнительные входные параметры могут быть снабжены varargin. Сигнатура функции:

function predictedParticles = measurementFcn(particles,varargin)

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

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

Функция обратного вызова принимает по крайней мере три входных параметров, pf, predictedParticles, и measurement. Существует две сигнатуры функций:

function likelihood = measurementLikelihoodFcn(pf,predictedParticles,measurement,varargin)
function [likelihood,distance] = measurementLikelihoodFcn(pf,predictedParticles,measurement,varargin)

pf - объект фильтра частиц.

predictedParticles представляет набор частиц, возвращенных из MeasurementFcn. Если StateOrientation является 'row', частицы входа как NumParticles-by- NumStateVariables массив. Если StateOrientation является 'column', частицы входа как NumStateVariables-by- NumParticles массив.

measurement - измерение состояния на текущем временном шаге.

varargin позволяет вам задать дополнительные входы correct функция.

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

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

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

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

Если MeasurementLikelihoodFcn задается как @gaussianLikelihood, это свойство используется, чтобы задать Гауссову шумовую ковариацию измерения.

Пример: 0.2

Гипотеза о состоянии каждой частицы, заданная как матрица. Если StateOrientation является 'row' частицы являются NumParticles-by- NumStateVariables массив. Если StateOrientation является 'column', частицы являются NumStateVariables-by- NumParticles массив.

Каждая строка или столбец соответствует гипотезе о состоянии одной частицы.

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

Веса частиц, заданные в виде вектора. Вектор является строке или векторам-столбцам, основанным на StateOrientation. Каждая строка или столбец является весом, сопоставленным с той же строкой или столбцом в Particles.

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

Количество переменных состояния, заданное в виде целого числа. The State состоит из этого количества переменных состояния.

Количество частиц, используемых фильтром, заданное в виде целого числа. Каждая частица представляет гипотезу о состоянии.

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

Метод, используемый для повторной дискретизации частиц, указанный как 'multinomial', 'systemic', 'stratified', или 'residual'.

Метод, используемый для оценки состояния, задается как 'mean' или 'maxweight'.

Функции объекта

predictПредсказать состояние и ковариацию ошибки расчета состояния отслеживающего фильтра
correctПравильное состояние и ковариация ошибки оценки состояния с помощью отслеживающего фильтра
correctjpdaПравильное состояние и ковариация ошибки оценки состояния с помощью отслеживающего фильтра и JPDA
distanceРасстояния между током и предсказанными измерениями отслеживающего фильтра
likelihoodВероятность измерения с отслеживающего фильтра
cloneСоздайте повторяющийся фильтр отслеживания
initializeИнициализируйте состояние и ковариацию отслеживающего фильтра

Примеры

свернуть все

В этом примере показано, как создать и запустить trackingPF фильтр. Вызовите predict и correct функции для отслеживания объекта и корректировки оценки состояния на основе измерений.

Создайте фильтр. Задайте начальное состояние и ковариацию состояния. Укажите количество частиц и наличие аддитивного технологического шума.

state = [0;0;0;0];
stateCov = 10*eye(4);
pf = trackingPF(@constvel,@cvmeas,state,'StateCovariance',stateCov,...
    'NumParticles',2500,'HasAdditiveProcessNoise',true);

Функции predict получить предсказанное состояние и ковариацию фильтра. Используйте временной шаг 0,5 сек.

[xPred,pPred] = predict(pf,0.5);

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

state1 = [0;0;0;0];
stateCov1 = 10*eye(4);
state2 = [100;0;100;0];
stateCov2 = 10*eye(4);

pf.Particles(:,1:1000) = (state1 + chol(stateCov1)*randn(4,1000));
pf.Particles(:,1001:2000) = (state2 + chol(stateCov2)*randn(4,1000));

Функции correct с заданным измерением.

meas = [1;1;0];
[xCorr,pCorr] = correct(pf,meas);

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

[xPred,pPred] = predict(pf);         % Predict over 1 second
[xPred,pPred] = predict(pf,2);       % Predict over 2 seconds

Ссылки

[1] Арулампалам, М. С., С. Маскелл, Н. Гордон и Т. Клэпп. Руководство по фильтрам частиц для онлайн-нелинейного/негауссовского байесовского отслеживания. Транзакции IEEE по обработке сигналов. Том 50, № 2, фев 2002, с. 174-188.

[2] Chen, Z. «Bayesian Filtering: From Kalman Filters to Фильтры Частиц, and Beyond». Статистика. Том 182, № 1, 2003, стр. 1-69.

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

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

.
Введенный в R2018b