exponenta event banner

particleFilter

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

Описание

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

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

Рассмотрим установку с состояниями x, input u, output 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 является «column», тоpreviousParticles является NumStateVariablesоколо-NumParticles массив. Если StateOrientation является строкой, тоpreviousParticles является NumParticlesоколо-NumStateVariables массив.

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

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

Чтобы увидеть пример функции перехода состояния с помощью StateOrientation свойство имеет значение «column», тип edit vdpParticleFilterStateFcn в командной строке.

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

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

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

Сигнатура функции выглядит следующим образом:

function likelihood = myMeasurementLikelihoodFcn(predictedParticles,measurement,varargin)

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

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

Для просмотра примера функции правдоподобия измерения введите edit vdpMeasurementLikelihoodFcn в командной строке.

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

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

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

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

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

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

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

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

СобственностьСтоимостьНапечататьОписание

TriggerMethod

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

'interval'

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

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

SamplingInterval

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

скаляр

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

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

MinEffectiveParticleRatio

0,5 (по умолчанию)

скаляр

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

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

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

  • 'multinomial'

  • 'residual'

  • 'stratified'

  • 'systematic'

Способ извлечения оценки состояния из частиц, указанный как одно из следующих:

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

  • 'maxweight' - Объект выводит частицу с наибольшим весом, как оценка состояния.

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

  • Если StateOrientation является 'row' тогда Particles является NumParticlesоколо-NumStateVariables массив.

  • Если StateOrientation является 'column' тогда Particles является NumStateVariablesоколо-NumParticles массив.

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

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

  • Если StateOrientation является 'row' тогда Weights является NumParticles-по-1 вектору, где каждый вес связан с частицей в одной строке в Particles собственность.

  • Если StateOrientation является 'column' тогда Weights является 1-by-NumParticles вектор, где каждый вес связан с частицей в той же колонке в Particles собственность.

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

  • Если StateOrientation является 'row' тогда State является 1-by-NumStateVariables вектор

  • Если StateOrientation является 'column' тогда State является NumStateVariables-по-1 вектору

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

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

Copyright 2012 The MathWorks, Inc..

Загрузите данные ODE van der Pol и укажите время выборки.

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. The axes contains 2 objects of type line. These objects represent True, Estimated.

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

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

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