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 isrow, частицы вводятся как NumParticles- NumStateVariables массив. Если StateOrientation iscolumn, частицы вводятся как 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-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, шум процесса добавляется к вектору состояния. В противном случае шум включен в функцию изменения состояния.

Модель Measurement функционирует в виде указателя на функцию. Эта функция вычисляет измерения, учитывая состояние текущих частиц. Дополнительным входным параметрам можно предоставить 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 isrow, частицы вводятся как NumParticles- NumStateVariables массив. Если StateOrientation iscolumn, частицы вводятся как NumStateVariables- NumParticles массив.

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

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

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

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

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

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

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

Пример: 0.2

Гипотеза состояния каждой частицы в виде матрицы. Если StateOrientation isrow частицами является NumParticles- NumStateVariables массив. Если StateOrientation iscolumn, частицами является 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] Arulampalam, M.S., С. Мэскелл, Н. Гордон и Т. Клэпп. "Пример на Фильтрах частиц для Онлайнового Байесового Отслеживания Nonlinear/Non-Gaussian". Транзакции IEEE на Обработке сигналов. Издание 50, № 2, февраль 2002, стр 174-188.

[2] Чен, Z. "Байесова Фильтрация: От Фильтров Калмана до Фильтров частиц, и Вне". Статистика. Издание 182, № 1, 2003, стр 1-69.

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

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

Смотрите также

| | | | |

Введенный в R2018b