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)

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

predict(pf,arg1,arg2)

Если StateOrientation является 'column', затем previousParticles является NumStateVariables-by- NumParticles массив. Если StateOrientation является 'row', затем previousParticles является NumParticles-by- NumStateVariables массив.

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

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

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

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

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

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

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

function likelihood = myMeasurementLikelihoodFcn(predictedParticles,measurement,varargin)

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

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

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

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

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

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

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

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

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

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

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

СвойствоЗначениеНапечататьОписание

TriggerMethod

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

'interval'

вектор символов

Это метод, чтобы определить, когда происходит повторная дискретизация, на основе выбранного значения. The 'interval' значение запускает повторную дискретизацию на регулярных временных шагах операции фильтра частиц. The '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-by- NumStateVariables массив.

  • Если StateOrientation является 'column' затем Particles является NumStateVariables-by- NumParticles массив.

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

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

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

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

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

  • Если StateOrientation является 'row' затем State является 1-байт- NumStateVariables вектор

  • Если StateOrientation является 'column' затем State является NumStateVariables-by-1 вектор

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

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

Загрузите данные Ван дер Поль и укажите шаг расчета.

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

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.

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

.
Введенный в R2017b