predict

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

Описание

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

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

пример

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

Вы создаете obj использование extendedKalmanFilter, unscentedKalmanFilter или particleFilter команды. Вы задаете функцию изменения состояния и функцию измерения вашей нелинейной системы в obj. Вы также задаете, являются ли условия шума процесса и измерения дополнением или недополнением в этих функциях. 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')

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

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

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

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

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

addpath(fullfile(matlabroot,'examples','ident','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')

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

Рассмотрите нелинейную систему с входом 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, которые в свою очередь передают их функциям изменения состояния и измерения, соответственно.

Откорректируйте оценку состояния измерением yK]=0.8 и вход uK]=0.2 на временном шаге k.

correct(obj,0.8,0.2)

Предскажите состояние на следующем временном шаге, учитывая uK]=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 команды, смотрите Оценочные состояния Онлайн Используя состояния Сигма-точечного фильтра Калмана или Оценки Онлайн с помощью Фильтра частиц.

Введенный в R2017b