exponenta event banner

trackingPF

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

Описание

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около-NumStateVariables массив. Если StateOrientation является 'column', частицы вводятся как NumStateVariablesоколо-NumParticles массив.

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

function predictParticles = stateTransitionFcn(prevParticles,varargin)

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

function predictParticles = stateTransitionFcn(prevParticles,dt,varargin)

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

Зависимости

Этот параметр зависит от StateOrientation собственность.

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

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

function noiseSample = processNoiseSamplingFcn(pf)

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

  • Когда HasAdditiveProcessNoise является trueэта функция выводит образец шума в виде матрицы M-на-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-на-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около-NumStateVariables массив. Если StateOrientation является 'column', частицы вводятся как NumStateVariablesоколо-NumParticles массив.

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

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

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

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

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

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

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

Пример: 0.2

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

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

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

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

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

Число переменных состояния, указанное как целое число. 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] Чен, З. «Байесовская фильтрация: от фильтров Калмана до фильтров частиц и далее». Статистика. т. 182, № 1, 2003, стр. 1-69.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2018b