exponenta event banner

правильный

Правильная ковариация ошибок оценки состояния и состояния с использованием расширенного или незаметного фильтра Калмана или фильтра частиц и измерений

Описание

correct команда обновляет ковариацию состояния и ошибки оценки состояния extendedKalmanFilter, unscentedKalmanFilter или particleFilter объект с помощью измеряемых системных выходов. Чтобы реализовать расширенный или незаметный фильтр Калмана, или фильтр частиц, используйте correct и predict команды вместе. При наличии текущего выходного измерения можно использовать correct и predict. Если измерение отсутствует, можно использовать только predict. Сведения о порядке использования команд см. в разделе Использование команд прогнозирования и исправления.

пример

[CorrectedState,CorrectedStateCovariance] = correct(obj,y) корректирует ковариацию оценки состояния и ошибки оценки состояния расширенного или незаметного фильтра Калмана или объекта фильтра частиц obj с использованием измеренного выходного сигнала y.

Вы создаете obj с использованием extendedKalmanFilter, unscentedKalmanFilter или particleFilter команды. Функция перехода состояния и функция измерения нелинейной системы задаются в obj. В этих функциях также указывается, являются ли термины шума процесса и измерения аддитивными или неаддитивными. State свойство объекта хранит последнее оценочное значение состояния. Предположим, что на шаге времени k, obj.State x ^ [k 'k − 1]. Это значение является оценкой состояния для времениk, оценено с использованием измеренных выходов до времени k-1. При использовании correct команда с выходом измеряемой системы y[k], программное обеспечение возвращает скорректированную оценку состояния x ^ [k 'k] в CorrectedState выход. Где x ^ [k 'k] - оценка состояния во времяk, оценено с использованием измеренных выходов до времени k. Команда возвращает ковариацию ошибки оценки состояния x ^ [k 'k] в CorrectedStateCovariance выход. Программное обеспечение также обновляет State и StateCovariance свойства obj с этими скорректированными значениями.

Используйте этот синтаксис, если функция измерения h, указанная в obj.MeasurementFcn имеет одну из следующих форм:

  • y(k) = h(x(k)) - для измерения аддитивного шума.

  • y(k) = h(x(k),v(k)) - для неаддитивного измерительного шума.

Где y(k), x(k), и v(k) - измеренный выходной сигнал, состояния и измеренный шум системы на шаге времени k. Единственными входами в h являются состояния и шум измерения.

пример

[CorrectedState,CorrectedStateCovariance] = correct(obj,y,Um1,...,Umn) указывает дополнительные входные аргументы, если для функции измерения системы требуются эти входные данные. Можно указать несколько аргументов.

Используйте этот синтаксис, если функция измерения h имеет одну из следующих форм:

  • y(k) = h(x(k),Um1,...,Umn) - для измерения аддитивного шума.

  • y(k) = h(x(k),v(k),Um1,...,Umn) - для неаддитивного измерительного шума.

correct команда передает эти входные данные измерительной функции для вычисления расчетных выходных сигналов.

Примеры

свернуть все

Оцените состояния генератора ван дер Пол, используя расширенный алгоритм фильтра Калмана и измеренные выходные данные. Генератор имеет два состояния и один выход.

Создайте расширенный объект фильтра Калмана для осциллятора. Используйте ранее записанные и сохраненные функции перехода и измерения состояния, vdpStateFcn.m и vdpMeasurementFcn.m. Эти функции описывают дискретное приближение к генератору ван дер Пол с параметром нелинейности mu, равным 1. Функции предполагают аддитивный процесс и измерение шума в системе. Укажите значения начального состояния для двух состояний как [1; 0]. Это предположение для значения состояния в начальный момент времениk, основываясь на знании системных выходов до времени k-1, xˆ[k'k-1].

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[1;0]);

Загрузить измеренные выходные данные y от генератора. В этом примере для иллюстрации используются смоделированные статические данные. Данные хранятся в vdp_data.mat файл.

load vdp_data.mat y

Укажите ковариации технологического и измерительного шума генератора.

obj.ProcessNoise = 0.01;
obj.MeasurementNoise = 0.16;

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

residBuf = [];
xcorBuf = [];
xpredBuf = [];

Реализация расширенного алгоритма фильтра Калмана для оценки состояний генератора с помощью correct и predict команды. Сначала необходимо исправить xˆ[k'k-1] с помощью измерений в момент времени. k получить xˆ[k'k]. Затем вы прогнозируете значение состояния на следующем временном шаге xˆ[k+1|k] с помощью xˆ[k'k], оценка состояния на временном шаге k которая оценивается с помощью измерений до времени k.

Для моделирования измерений данных в реальном времени используйте измеренные данные один раз за раз. Вычислите остаток между прогнозируемым и фактическим измерением, чтобы оценить, насколько хорошо фильтр работает и сходится. Вычисление остатка является необязательным шагом. При использовании residual, разместите команду непосредственно перед correct команда. Если прогноз соответствует измерению, остаток равен нулю.

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

for k = 1:size(y)
    [Residual,ResidualCovariance] = residual(obj,y(k));
    [CorrectedState,CorrectedStateCovariance] = correct(obj,y(k));
    [PredictedState,PredictedStateCovariance] = predict(obj);
    
     residBuf(k,:) = Residual;
     xcorBuf(k,:) = CorrectedState';
     xpredBuf(k,:) = PredictedState';
   
end

При использовании correct команда, obj.State и obj.StateCovariance обновляются скорректированными значениями ковариации состояния и ошибки оценки состояния для временного шага k, CorrectedState и CorrectedStateCovariance. При использовании predict команда, obj.State и obj.StateCovariance обновляются прогнозируемыми значениями для временного шага k+1, PredictedState и PredictedStateCovariance. При использовании residual команда, вы не изменяете obj свойства.

В этом примере используется correct прежде predict поскольку начальное значение состояния было xˆ[k'k-1], предположение для значения состояния в начальный момент времени k на основе системных выходов до времени k-1. Если начальное значение состояния равно xˆ[k-1|k-1], значение в предыдущий раз k-1 на основе измерений до k-1, затем используйте predict сначала команда. Дополнительные сведения о порядке использования predict и correct, см. Использование команд прогнозирования и исправления.

Постройте график расчетных состояний с использованием значений посткоррекции.

plot(xcorBuf(:,1), xcorBuf(:,2))
title('Estimated States')

Figure contains an axes. The axes with title Estimated States contains an object of type line.

Постройте график фактического измерения, скорректированного оценочного измерения и остатка. Для функции измерения в vdpMeasurementFcn, измерение является первым состоянием.

M = [y,xcorBuf(:,1),residBuf];
plot(M)
grid on
title('Actual and Estimated Measurements, Residual')
legend('Measured','Estimated','Residual')

Figure contains an axes. The axes with title Actual and Estimated Measurements, Residual contains 3 objects of type line. These objects represent Measured, Estimated, Residual.

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

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

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.

Рассмотрим нелинейную систему с входными данными u состояние которого x и измерение y развиваются в соответствии со следующими уравнениями перехода и измерения состояния:

x [k] = x [k-1] + u [k-1] + w [k-1]

y [k] = x [k] + 2 * u [k] + v [k] 2

Технологический шум w системы является аддитивной, а измерительный шум v является неаддитивным.

Создайте функцию перехода состояния и функцию измерения для системы. Укажите функции с дополнительным входом u.

f = @(x,u)(sqrt(x+u));
h = @(x,v,u)(x+2*u+v^2);

f и h представляют собой дескрипторы функций для анонимных функций, которые хранят функции перехода состояния и измерения соответственно. В функции измерения, поскольку шум измерения не является добавочным, v также указывается в качестве входных данных. Обратите внимание, что v задается как вход перед дополнительным входом u.

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

obj = extendedKalmanFilter(f,h,1,'HasAdditiveMeasurementNoise',false);

Укажите ковариацию шума измерения.

obj.MeasurementNoise = 0.01;

Теперь можно оценить состояние системы с помощью predict и correct команды. Вы передаете значения u кому predict и correct, которые, в свою очередь, передают их в функции перехода и измерения состояния соответственно.

Корректировка оценки состояния с помощью измерения y[k]=0.8 и ввод u[k]=0.2 на шаге времени k.

correct(obj,0.8,0.2)

Предсказать состояние на следующем шаге времени, учитывая u[k]=0.2.

predict(obj,0.2)

Извлеките ошибку или остаток между предсказанием и измерением.

[Residual, ResidualCovariance] = residual(obj,0.8,0.2);

Входные аргументы

свернуть все

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

  • extendedKalmanFilter - использует расширенный алгоритм фильтра Калмана.

  • unscentedKalmanFilter - Использует алгоритм фильтра Калмана без запаха.

  • particleFilter - использует алгоритм фильтра частиц.

Измеренный выходной сигнал системы на текущем временном шаге, определяемом как вектор N-элемента, где N - количество измерений.

Дополнительные входные аргументы для функции измерения системы, указанные как входные аргументы любого типа. Функция измерения h указана в MeasurementFcn или MeasurementLikelihoodFcn имущество obj. Если функция требует входных аргументов в дополнение к значениям состояния и шума измерения, эти входные значения указываются в correct синтаксис команды. correct команда передает эти входные данные измерению или функции правдоподобия измерения для вычисления оцененных выходных данных. Можно указать несколько аргументов.

Например, предположим, что функция измерения или правдоподобия вычисляет расчетный выходной сигнал системы. y с использованием системных входов u и текущее время k, в дополнение к государству x:

y(k) = h(x(k),u(k),k)

Затем при выполнении оценки состояния в режиме онлайн на шаге времени k, укажите эти дополнительные входные данные в correct синтаксис команды:

[CorrectedState,CorrectedStateCovariance] = correct(obj,y,u(k),k);

Выходные аргументы

свернуть все

Скорректированная оценка состояния, возвращенная в виде вектора размера М, где М - количество состояний системы. Если указаны начальные состояния obj в качестве вектора столбца затем М возвращается в качестве вектора столбца, в противном случае М возвращается в качестве вектора строки.

Сведения о задании начальных состояний объекта см. в разделе extendedKalmanFilter, unscentedKalmanFilter и particleFilter справочные страницы.

Исправленная ковариация ошибки оценки состояния, возвращаемая в виде матрицы М-за-М, где М - количество состояний системы.

Подробнее

свернуть все

Используя predict и correct Команды

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

На шаге времени k, correct команда возвращает скорректированное значение ковариации состояний и ошибок оценки состояния с помощью измеренных системных выходов y[k] в то же время шаг. Если функция измерения имеет дополнительные входные аргументы Um, вы указываете их в качестве входных данных для correct команда. Команда передает эти значения функции измерения.

[CorrectedState,CorrectedCovariance] = correct(obj,y,Um)

correct команда обновляет State и StateCovariance свойства объекта с оценочными значениями, CorrectedState и CorrectedCovariance.

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

[PredictedState,PredictedCovariance] = predict(obj,Us)

predict команда обновляет State и StateCovariance свойства объекта с прогнозируемыми значениями, PredictedState и PredictedCovariance.

Если текущее выходное измерение существует на данном шаге времени, можно использовать correct и predict. Если измерение отсутствует, можно использовать только predict. Дополнительные сведения о том, как эти команды реализуют алгоритмы, см. в разделе Расширенные и незаметные алгоритмы фильтра Калмана для оценки состояния в режиме онлайн.

Порядок реализации команд зависит от наличия измеренных данных. y, Us, и Um для вашей системы:

  • correct тогда predict - Предположим, что на шаге времени k, значение obj.State x ^ [k 'k − 1]. Это значение является состоянием системы в момент времени.k, оценено с использованием измеренных выходов до времени k-1. Также имеется измеренный выходной сигнал. y[k] и вводимые ресурсы Us[k] и Um[k] в то же время шаг.

    Затем сначала выполните correct команда с измеренными системными данными y[k] и дополнительные входные данные Um[k]. Команда обновляет значение obj.State чтобы быть x ^ [k 'k], оценка состояния для времениk, оценено с использованием измеренных выходов до времени k. При выполнении predict команда с вводом Us[k], obj.State теперь сохраняет x ^ [k + 1 | k]. Алгоритм использует это значение состояния в качестве входных данных дляcorrect на следующем шаге времени.

  • predict тогда correct - Предположим, что на шаге времени k, значение obj.State x ^ [k 1 | k − 1]. Также имеется измеренный выходной сигнал.y[k] и ввод Um[k] в то же время шаг, но у вас есть Us[k-1] из предыдущего временного шага.

    Затем сначала выполните predict команда с вводом Us[k-1]. Команда обновляет значение obj.State к x ^ [k 'k − 1]. При выполнении correct команда с входными аргументами y[k] и Um[k], obj.State обновляется с помощью x ^ [k 'k]. Алгоритм использует это значение состояния в качестве входных данных для predict на следующем шаге времени.

Таким образом, в то время как в обоих случаях оценка состояния для времени k, x ^ [k 'k] является одинаковым, если в момент времениk у вас нет доступа к входам функции перехода текущего состояния Us[k], а вместо этого иметь Us[k-1], затем использовать predict сначала, а затем correct.

Для примера оценки состояний с использованием predict и correct команды см. в разделе Оценка состояний в режиме онлайн с помощью расширенного фильтра Калмана или Оценка состояний в режиме онлайн с помощью фильтра частиц.

Представлен в R2016b