particleFilter

Объект фильтра частиц для онлайновой оценки состояния

Описание

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

particleFilter создает объект для онлайновой оценки состояния дискретного времени нелинейная система с помощью алгоритма фильтра частиц дискретного времени.

Считайте объект с состояниями x, входом u, выходом m, шум процесса w и измерение y. Примите, что можно представлять объект как нелинейную систему.

Алгоритм вычисляет оценки состояния x^ из нелинейной системы с помощью функций правдоподобия изменения состояния и измерения вы задаете.

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

Чтобы выполнить онлайновую оценку состояния, создайте нелинейную функцию изменения состояния и функцию правдоподобия измерения. Затем создайте particleFilter объект с помощью этих нелинейных функций. После того, как вы создаете объект:

  1. Инициализируйте частицы с помощью initialize команда.

  2. Предскажите оценки состояния на следующем шаге с помощью predict команда.

  3. Откорректируйте оценки состояния с помощью correct команда.

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

Создание

Описание объекта

пример

pf = particleFilter(StateTransitionFcn,MeasurementLikelihoodFcn) создает объект фильтра частиц для онлайновой оценки состояния дискретного времени нелинейная система. StateTransitionFcn функция, которая вычисляет частицы (гипотезы состояния) на следующем временном шаге, учитывая вектор состояния на временном шаге. MeasurementLikelihoodFcn функция, которая вычисляет вероятность каждой частицы на основе измерений датчика.

После создания объекта используйте initialize команда, чтобы инициализировать частицы известным средним значением и ковариацией или равномерно распределенные частицы в заданных границах. Затем используйте correct и predict команды, чтобы обновить частицы (и следовательно оценка состояния) использование измерений датчика.

Входные параметры

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

Функция изменения состояния в виде указателя на функцию, определяет переход частиц (гипотезы состояния) между временными шагами. Также свойство particleFilter объект. Для получения дополнительной информации смотрите Свойства.

Функция правдоподобия измерения в виде указателя на функцию, используется, чтобы вычислить вероятность частиц (гипотезы состояния) от измерений датчика. Также свойство particleFilter объект. Для получения дополнительной информации смотрите Свойства.

Свойства

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

Количество переменных состояния в виде скаляра. Это свойство только для чтения и установлено с помощью initialize. Количество состояний неявно на основе заданных матриц для начального среднего значения частиц или границ состояния.

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

Функция изменения состояния в виде указателя на функцию, определяет переход частиц (гипотезы состояния) между временными шагами. Эта функция вычисляет частицы на следующем временном шаге, включая шум процесса, учитывая частицы на временном шаге.

В отличие от этого изменение состояния функционирует для extendedKalmanFilter и unscentedKalmanFilter генерирует одну оценку состояния, в установленный срок продвигаются.

Вы пишете и сохраняете функцию изменения состояния для своей нелинейной системы и задаете его как указатель на функцию при построении particleFilter объект. Например, если vdpParticleFilterStateFcn.m функция изменения состояния, задайте StateTransitionFcn как @vdpParticleFilterStateFcn. Можно также задать StateTransitionFcn как указатель на функцию к анонимной функции.

Функциональная подпись следующие:

function predictedParticles = myStateTransitionFcn(previousParticles,varargin)

StateTransitionFcn функция принимает по крайней мере один входной параметр. Первый аргумент является набором частиц previousParticles это представляет гипотезы состояния на предыдущем временном шаге. Дополнительное использование varargin в функции позволяет вам ввести любые дополнительные параметры, которые важны для предсказания следующего состояния, с помощью predict, можно следующим образом:

predict(pf,arg1,arg2)

Если StateOrientation 'столбец', затем previousParticles NumStateVariables- NumParticles массив. Если StateOrientation 'строка', затем previousParticles NumParticles- NumStateVariables массив.

StateTransitionFcn должен возвратить точно один выходной параметр, predictedParticles, который является набором предсказанных местоположений частицы для шага текущего времени (массив с теми же размерностями как previousParticles).

StateTransitionFcn должен включать шум вероятностного процесса (от любого распределения, подходящего для вашего приложения) в predictedParticles.

Видеть, что пример изменения состояния функционирует с StateOrientation набор свойств к 'столбцу', введите edit vdpParticleFilterStateFcn в командной строке.

Функция правдоподобия измерения в виде указателя на функцию, используется, чтобы вычислить вероятность частиц (гипотезы состояния) использование измерений датчика. Для каждой гипотезы состояния (частица) функция сначала вычисляет вектор гипотезы измерения N-элемента. Затем вероятность каждой гипотезы измерения вычисляется на основе измерения датчика и вероятностного распределения шума измерения.

В отличие от этого измерение функционирует для extendedKalmanFilter и unscentedKalmanFilter берет одну гипотезу состояния и возвращает одну оценку измерения.

Вы пишете и сохраняете функцию правдоподобия измерения на основе своей модели измерения и используете его, чтобы создать объект. Например, если vdpMeasurementLikelihoodFcn.m функция правдоподобия измерения, задайте MeasurementLikelihoodFcn как @vdpMeasurementLikelihoodFcn. Можно также задать MeasurementLikelihoodFcn как указатель на функцию к анонимной функции.

Функциональная подпись следующие:

function likelihood = myMeasurementLikelihoodFcn(predictedParticles,measurement,varargin)

MeasurementLikelihoodFcn функция принимает по крайней мере два входных параметра. Первый аргумент является набором частиц predictedParticles это представляет предсказанную гипотезу состояния. Если StateOrientation 'столбец', затем predictedParticles NumStateVariables- NumParticles массив. Если StateOrientation 'строка', затем predictedParticles NumParticles- NumStateVariables массив. Второй аргумент, measurement, измерение датчика N-элемента на шаге текущего времени. Можно обеспечить дополнительные входные параметры с помощью varargin.

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

Чтобы видеть пример функции правдоподобия измерения, введите edit vdpMeasurementLikelihoodFcn в командной строке.

Имеют ли переменные состояния круговое распределение в виде логического массива.

Это - свойство только для чтения и установлено с помощью initialize.

Проспект (или угловой) распределения использует функцию плотности вероятности с областью значений [-pi,pi]. IsStateVariableCircular вектор-строка с NumStateVariables элементы. Каждый векторный элемент указывает, является ли переменная ассоциированной страны круговой.

Настройки политики, которые определяют, когда инициировать передискретизацию в виде particleResamplingPolicy объект.

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

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

Neff=1i=1N(wi)2

В этом уравнении, N количество частиц и w нормированный вес каждой частицы. Эффективным отношением частицы является затем Neff / NumParticles. Поэтому эффективное отношение частицы является функцией весов всех частиц. После того, как веса частиц достигают достаточно низкого значения, они не способствуют оценке состояния. Эта низкая стоимость инициировала передискретизацию, таким образом, частицы ближе к оценке текущего состояния и имеют более высокие веса.

Следующие свойства particleResamplingPolicy объект может быть изменен, чтобы управлять, когда передискретизация инициирована:

СвойствоЗначениеВводОписание

TriggerMethod

'ratio' (значение по умолчанию)

'interval'

символьный вектор

Это - метод, чтобы определить, когда передискретизация происходит, на основе выбранного значения. 'interval' триггерная передискретизация значения на шагах постоянного времени операции фильтра частиц. 'ratio' триггерная передискретизация значения на основе отношения эффективных общих частиц.

SamplingInterval

1 (значение по умолчанию)

скаляр

Фиксированный интервал между передискретизацией в виде скаляра. Этот интервал определяет, во время которых шагов коррекции выполняется передискретизация. Например, значение 2 средних значений передискретизация выполняется каждый второй шаг коррекции. Значение inf средние значения, что передискретизация никогда не выполняется.

Это свойство только применяется с TriggerMethod установлен в 'interval'.

MinEffectiveParticleRatio

0.5 (значение по умолчанию)

скаляр

Это - минимальное желаемое отношение эффективного количества частиц к общему количеству частиц NumParticles. Эффективное количество частиц является мерой того, как хорошо текущий набор частиц аппроксимирует апостериорное распределение. Более низкое эффективное отношение частицы подразумевает, что более низкое количество частиц способствует оценке, и передискретизация требуется.

Если отношение эффективного количества частиц к общему количеству частиц NumParticles падения ниже MinEffectiveParticleRatio, шаг передискретизации инициирован.

Метод использовал для передискретизации частицы в виде одного из следующего:

  • 'multinomial' — Передискретизация многочлена, также названная, упростила случайную выборку, генерирует N случайные числа независимо от равномерного распределения в открытом интервале (0,1) и использует их, чтобы выбрать частицы, пропорциональные их весу.

  • 'residual' — Остаточная передискретизация состоит из двух этапов. Первая стадия является детерминированной репликацией каждой частицы, которые имеют веса, больше, чем 1/N. Второй этап состоит из случайной выборки с помощью остатка от весов (помеченный как остаточные значения).

  • 'stratified' — Стратифицированная передискретизация делится, целое население частиц в подмножества вызвало слои. Это предварительно делит (0,1) интервал в N непересекающиеся подынтервалы размера 1/N. Случайные числа чертятся независимо в каждом из этих подынтервалов и демонстрационных индексов, выбранных в слоях.

  • 'systematic' — Систематическая передискретизация похожа на стратифицированную передискретизацию, когда это также использует слои. Одно различие - то, что это только чертит одно случайное число от открытого интервала (0,1/N) и остающиеся точки выборки вычисляются детерминировано в фиксированном 1/N неродной размер.

Метод, используемый для извлечения оценки состояния от частиц в виде одного из следующего:

  • 'mean' - Объектные выходные параметры взвешенное среднее частиц, в зависимости от свойств Weights и Particles, как оценка состояния.

  • 'maxweight' - Объектные выходные параметры частица с самым высоким весом как оценка состояния.

Массив значений частицы в виде массива на основе StateOrientation свойство:

  • Если StateOrientation isrow затем Particles NumParticles- NumStateVariables массив.

  • Если StateOrientation iscolumn затем Particles NumStateVariables- NumParticles массив.

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

Веса частицы, заданные как вектор на основе значения StateOrientation свойство:

  • Если StateOrientation isrow затем Weights NumParticles- 1 вектор, где каждый вес сопоставлен с частицей в той же строке в Particles свойство.

  • Если StateOrientation iscolumn затем Weights 1 NumParticles вектор, где каждый вес сопоставлен с частицей в том же столбце в Particles свойство.

Оценка текущего состояния, заданная как вектор на основе значения StateOrientation свойство:

  • Если StateOrientation isrow затем State 1 NumStateVariables вектор

  • Если StateOrientation iscolumn затем State NumStateVariables- 1 вектор

State свойство только для чтения и выведено из Particles на основе StateEstimationMethod свойство. Обратитесь к StateEstimationMethod для получения дополнительной информации о как значение State определяется.

State наряду с StateCovariance может также быть определен с помощью getStateEstimate.

Текущая оценка ошибочной ковариации оценки состояния, заданной как NumStateVariables- NumStateVariables массив. StateCovariance свойство только для чтения и вычисляется на основе StateEstimationMethod. Если вы задаете метод оценки состояния, который не поддерживает ковариацию, то функция возвращает StateCovariance как [].

StateCovariance и State может быть определен вместе с помощью getStateEstimate.

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

initializeИнициализируйте состояние фильтра частиц
predictПредскажите ошибочную ковариацию оценки состояния и оценки состояния на следующем временном шаге с помощью сигма-точечного фильтра Калмана или фильтра частиц
correctИсправьте состояние и ковариацию ошибки оценки состояния с помощью сигма-точечного фильтра Калмана, или фильтра частиц и измерений
getStateEstimateИзвлечение лучше всего утверждает оценку и ковариацию от частиц
cloneСкопируйте онлайновый объект оценки состояния

Примеры

свернуть все

Чтобы создать объект фильтра частиц для оценки состояний вашей системы, создайте соответствующую функцию изменения состояния и функцию правдоподобия измерения для системы.

В этом примере, функциональном vdpParticleFilterStateFcn описывает приближение дискретного времени к осциллятору Ван дер Поля параметром нелинейности, mu, равный 1. Кроме того, это шум процесса моделей Gaussian. vdpMeasurementLikelihood функция вычисляет вероятность частиц от шумных измерений первого состояния, принимая Гауссово распределение шума измерения.

Создайте объект фильтра частиц. Используйте указатели на функцию, чтобы предоставить функции правдоподобия изменения состояния и измерения объекту.

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

Чтобы инициализировать и оценить состояния и ошибочную ковариацию оценки состояния от созданного объекта, используйте initialize, predict, и correct команды.

Copyright 2012 The MathWorks, Inc..

Загрузите данные об ОДУ Ван дер Поля и задайте шаг расчета.

vdpODEdata.mat содержит симуляцию ОДУ Ван дер Поля параметром нелинейности mu=1, с помощью ode45, начальными условиями [2;0]. Истинное состояние было извлечено с шагом расчета dt = 0.05.

addpath(fullfile(matlabroot,'examples','control','main')) % add example data

load ('vdpODEdata.mat','xTrue','dt')
tSpan = 0:dt:5;

Получите измерения. В данном примере датчик измеряет первое состояние с Гауссовым шумом со стандартным отклонением 0.04.

sqrtR = 0.04;
yMeas = xTrue(:,1) + sqrtR*randn(numel(tSpan),1);

Создайте фильтр частиц и установите функции правдоподобия изменения состояния и измерения.

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

Инициализируйте фильтр частиц в [2; 0] состояния с модульной ковариацией и использованием 1000 частицы.

initialize(myPF,1000,[2;0],eye(2));

Выберите mean оценка состояния и systematic передискретизация методов.

myPF.StateEstimationMethod = 'mean';
myPF.ResamplingMethod = 'systematic';

Оцените состояния с помощью correct и predict команды и хранилище предполагаемые состояния.

xEst = zeros(size(xTrue));
for k=1:size(xTrue,1)
    xEst(k,:) = correct(myPF,yMeas(k));
    predict(myPF);
end

Постройте результаты и сравните предполагаемые и истинные состояния.

figure(1)
plot(xTrue(:,1),xTrue(:,2),'x',xEst(:,1),xEst(:,2),'ro')
legend('True','Estimated')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent True, Estimated.

rmpath(fullfile(matlabroot,'examples','control','main')) % remove example data

Ссылки

[1] Т. Ли, М. Болик, пополудни Djuric, "Передискретизируя Методы для Фильтрации Частицы: Классификация, реализация и стратегии", Журнал Обработки сигналов IEEE, издание 32, № 3, стр 70-86, май 2015.

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

Введенный в R2017b