trackingPF

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

Описание

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

Частицы сгенерированы с помощью различных методов передискретизации, заданных ResamplingMethod.

Создание

Синтаксис

pf = trackingPF
pf = trackingPF(transitionFcn,measuremntFcn,state)
pf = trackingPF(___,Name,Value)

Описание

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)

Зависимости

Этот параметр зависит от свойства 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 является '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

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

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

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

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

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

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

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

Примеры

свернуть все

Этот пример показывает, как создать и запустить фильтр 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