предсказать

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

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

Синтаксис

[PredictedState,PredictedStateCovariance] = predict(obj)
[PredictedState,PredictedStateCovariance] = predict(obj,Us1,...Usn)

Описание

пример

[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;

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

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

for k = 1:size(y)
    [CorrectedState,CorrectedStateCovariance] = correct(obj,y(k));
    [PredictedState,PredictedStateCovariance] = predict(obj);
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, смотрите Используя, предсказывают и исправляют Команды.

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

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')

rmpath(fullfile(matlabroot,'examples','control','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;

Можно теперь оценить состояние системы с помощью команд correct и predict. Вы передаете значения 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)

Входные параметры

свернуть все

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

  • 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