predict

Спрогнозируйте состояние и ковариацию ошибки расчета состояния на следующем временном шаге с помощью расширенного или сигма-точечного фильтра Калмана или фильтра частиц

Описание

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

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

пример

[PredictedState,PredictedStateCovariance] = predict(obj) предсказывает оценку состояния и ковариацию ошибки расчета состояния расширенного или сигма-точечного фильтра Калмана или объекта фильтра частиц obj на следующем временном шаге.

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

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

  • x(k) = f(x(k-1)) - для аддитивного технологического шума.

  • x(k) = f(x(k-1),w(k-1)) - для неаддитивного технологического шума.

Где x и w являются состоянием и технологическим шумом системы. Единственными входами для f являются состояния и технологический шум.

пример

[PredictedState,PredictedStateCovariance] = predict(obj,Us1,...Usn) задает дополнительные входные аргументы, если функция перехода состояния системы требует этих входов. Можно задать несколько аргументов.

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

  • x(k) = f(x(k-1),Us1,...Usn) - для аддитивного технологического шума.

  • x(k) = f(x(k-1),w(k-1),Us1,...Usn) - для неаддитивного технологического шума.

Примеры

свернуть все

Оцените состояния осциллятора Ван дер Поля с помощью алгоритма сигма-точечного фильтра Калмана и измеренных выходов данных. Генератор имеет два состояния и один выход.

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

obj = unscentedKalmanFilter(@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.

В этом примере вы использовали 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.

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

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

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 - Использует алгоритм фильтра частиц.

Дополнительные входные параметры в функцию перехода состояния, заданные как входные параметры любого типа. Функция перехода к состоянию, f, задана в StateTransitionFcn свойство объекта. Если функция требует входных параметров в дополнение к значениям состояний и процессов шума, вы задаете эти входы в predict синтаксис команды.

Например, предположим, что ваша функция перехода состояния вычисляет предсказанное состояние x в временной шаг k использование системных входов u(k-1) и временные k-1, в сложение к состоянию x(k-1):

x(k) = f(x(k-1),u(k-1),k-1)

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

[PredictedState,PredictedStateCovariance] = predict(obj,u(k-1),k-1);

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

свернуть все

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

Для получения информации о том, как задать начальные состояния объекта, смотрите extendedKalmanFilter, unscentedKalmanFilter и particleFilter страницы с описанием.

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

Подробнее о

свернуть все

Используя 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|k1]. Это значение является состоянием системы в момент времени 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^[k1|k1]. У вас также есть измеренный выход y[k] и входные Um[k] в то же временной шаг, но вы Us[k-1] с предыдущего временного шага.

    Затем вы сначала выполните predict команда со входными Us[k-1]. Команда обновляет значение obj.State кому x^[k|k1]. Когда вы затем выполняете 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