extendedKalmanFilter

Создайте расширенный объект фильтра Калмана для онлайн-оценки состояния

Описание

пример

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState) создает расширенный объект фильтра Калмана для онлайн-оценки состояния нелинейной системы дискретного времени. StateTransitionFcn - функция, которая вычисляет состояние системы в момент k времени, учитывая вектор состояния в момент времени k -1. MeasurementFcn является функцией, которая вычисляет выходное измерение системы в момент времени k, учитывая состояние в момент k. InitialState задает начальное значение оценок состояния.

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

пример

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,Name,Value) задает дополнительные атрибуты расширенного объекта фильтра Калмана с помощью одного или нескольких Name,Value аргументы в виде пар.

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn) создает расширенный объект фильтра Калмана с помощью заданных функций перехода и измерения. Перед использованием predict и correct команды, задайте начальные значения состояния с помощью записи через точку. Для примера - для системы с двумя состояниями с начальными значениями состояний [1;0], задайте obj.State = [1;0].

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,Name,Value) задает дополнительные атрибуты расширенного объекта фильтра Калмана с помощью одного или нескольких Name,Value аргументы в виде пар. Перед использованием predict и correct команды, задайте начальные значения состояния используя Name,Value аргументы в виде пар или запись через точку.

пример

obj = extendedKalmanFilter(Name,Value) создает расширенный объект фильтра Калмана со свойствами, заданными с помощью одного или нескольких Name,Value аргументы в виде пар. Перед использованием predict и correct команды, задайте функцию перехода состояния, функцию измерения и начальные значения состояния используя Name,Value аргументы в виде пар или запись через точку.

Описание объекта

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

Рассмотрим объект с x состояниями, входными u, выходными y, технологическими шумовыми w и шумовыми v измерения. Предположим, что можно представлять объект как нелинейную систему.

Алгоритм вычисляет оценки состояния x^ нелинейной системы с использованием заданных Вами функций перехода и измерения. Программа позволяет вам задать шум в этих функциях как аддитивный или неаддитивный:

  • Условия аддитивного шума - Переходы состояний и уравнения измерений имеют следующую форму:

    x[k]=f(x[k1],us[k1])+w[k1]y[k]=h(x[k],um[k])+v[k]

    Здесь f является нелинейной функцией перехода состояния, которая описывает эволюцию состояний x от одного временного шага до следующего. Нелинейная функция измерения h связана x к измерениям y в временной шаг k. w и v являются нулевым средним, некоррелированным процессом и измерительными шумами, соответственно. Эти функции могут также иметь дополнительные входные параметры, которые обозначаются us и um в уравнениях. Для примера дополнительные аргументы могут быть временным шагом k или входы u в нелинейную систему. Таких аргументов может быть несколько.

    Обратите внимание, что условия шума в обоих уравнениях аддитивны. То есть x(k) линейно связан с технологическим шумом w(k-1), и y(k) линейно связан с шумом измерения v(k).

  • Неаддитивные Условия Шума - Программное обеспечение также поддерживает более комплексный переход состояния и функции измерения, где x состояния [k] и y измерения [k] являются нелинейными функциями технологического шума и шума измерения, соответственно. Когда члены шума неаддитивны, переход состояния и уравнение измерений имеют следующую форму:

    x[k]=f(x[k1],w[k1],us[k1])y[k]=h(x[k],v[k],um[k])

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

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

Можно использовать следующие команды с extendedKalmanFilter объекты:

КомандаОписание
correct

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

predict

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

residualВерните различие между фактическими и предсказанными измерениями.
clone

Создайте другой объект с теми же значениями свойств объекта.

Не создавать дополнительные объекты с помощью синтаксиса obj2 = obj. Любые изменения, внесенные в свойства нового объекта, созданные таким образом (obj2) также измените свойства исходного объекта (obj).

Для extendedKalmanFilter свойства объекта, см. Свойства.

Примеры

свернуть все

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

В этом примере используйте ранее записанные и сохраненные функции перехода и измерения, vdpStateFcn.m и vdpMeasurementFcn.m. Эти функции описывают дискретное приближение к осциллятору Ван дер Поля с параметром нелинейности mu, равным 1. Генератор имеет два состояния.

Задайте начальное предположение для двух состояний. Вы задаете предположение как M- элемент строку или вектор-столбец, где M количество состояний.

initialStateGuess = [1;0];

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

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,initialStateGuess);

Объект имеет структуру по умолчанию, где шум процесса и измерения являются аддитивными.

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

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

Поскольку система имеет два состояния, а шум процесса является аддитивным, шум процесса является 2-элементным вектором, а ковариация шума процесса является матрицей 2 на 2. Предположим, что нет перекрестной корреляции между терминами шума процесса, и оба члена имеют одинаковое отклонение 0,01. Можно задать ковариацию шума процесса как скаляр. Программа использует скалярное значение, чтобы создать диагональную матрицу 2 на 2 с 0,01 на диагоналях.

Задайте ковариацию технологического шума во время конструкции объекта.

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0],...
    'ProcessNoise',0.01);

Также можно задать шумовые ковариации после конструкции объекта с помощью записи через точку. Для примера задайте ковариацию шума измерения как 0,2.

obj.MeasurementNoise = 0.2;

Поскольку система имеет только один выход, шум измерения является вектором с 1 элементом и MeasurementNoise свойство обозначает отклонение шума измерения.

Создайте расширенный объект фильтра Калмана для осциллятора Ван дер Поля с двумя состояниями и одним выходом. Используйте ранее написанные и сохраненные функции перехода и измерения, vdpStateFcn.m и vdpMeasurementFcn.m. Задайте начальные значения для двух состояний как [2; 0 ].

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

Расширенный алгоритм фильтра Калмана использует якобианы переходного состояния и функции измерения для оценки состояния. Вы записываете и сохраняете якобианские функции и предоставляете их как указатели на функцию объекту. В этом примере используйте ранее написанные и сохраненные функции vdpStateJacobianFcn.m и vdpMeasurementJacobianFcn.m.

obj.StateTransitionJacobianFcn = @vdpStateJacobianFcn;
obj.MeasurementJacobianFcn = @vdpMeasurementJacobianFcn;

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

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

obj = extendedKalmanFilter('HasAdditiveMeasurementNoise',false);

Задайте функцию перехода состояния и функции измерения. Используйте ранее написанные и сохраненные функции, vdpStateFcn.m и vdpMeasurementNonAdditiveNoiseFcn.m.

Функция перехода состояния записывается, принимая, что технологический шум является аддитивным. Функция измерения записывается, принимая, что шум измерения неаддитивен.

obj.StateTransitionFcn = @vdpStateFcn;
obj.MeasurementFcn = @vdpMeasurementNonAdditiveNoiseFcn;

Задайте начальные значения для двух состояний как [2; 0].

obj.State = [2;0];

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

Рассмотрим нелинейную систему с входными 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);

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

свернуть все

Переходная функция f состояния, заданная как указатель на функцию. Функция вычисляет вектор состояния Ns-element системы на временной шаг k, учитывая вектор состояния на временной шаг k-1. Ns - количество состояний нелинейной системы.

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

Входы функции, которую вы записываете, зависят от того, задаете ли вы шум процесса как аддитивный или неаддитивный в HasAdditiveProcessNoise свойство объекта:

  • HasAdditiveProcessNoise is true - шум процесса w является аддитивным, и функция перехода состояния задает, как состояния развиваются как функция от значений состояния на предыдущем временном шаге:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - расчетное состояние во времени k, и Us1,...,Usn - любые дополнительные входные аргументы, требуемые функцией перехода вашего состояния, такие как входы или шаг расчета. Во время оценки вы передаете эти дополнительные аргументы в predict команда, которая в свою очередь передает их в функцию перехода состояния.

  • HasAdditiveProcessNoise является ложным - шум процесса является неаддитивным, и функция перехода состояния также задает, как состояния развиваются как функция шума процесса:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

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

Функция h измерения, заданная как указатель на функцию. Функция вычисляет выходной вектор измерения N-элемента нелинейной системы на временном шаге k, учитывая вектор состояния на временном шаге k. N - количество измерений системы. Вы записываете и сохраняете функцию измерения и используете ее для создания объекта. Для примера, если vdpMeasurementFcn.m является функцией измерения, задайте MeasurementFcn как @vdpMeasurementFcn. Можно также задать MeasurementFcn как указатель на функцию для анонимной функции.

Входы функции зависят от того, задаете ли вы шум измерения как аддитивный или неаддитивный в HasAdditiveMeasurementNoise свойство объекта:

  • HasAdditiveMeasurementNoise is true - Измерительный шум v является аддитивным, и функция измерения определяет, как измерения развиваются как функция от значений состояния:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) - это расчетный выход и расчетное состояние во времени k, и Um1,...,Umn все необязательные входные параметры, требуемые вашей функцией измерения. Для примера, если вы используете несколько датчиков для отслеживания объекта, дополнительным входом может стать положение датчика. Во время оценки вы передаете эти дополнительные аргументы в correct команда, которая в свою очередь передает их в функцию измерения.

  • HasAdditiveMeasurementNoise является ложным - шум измерения является неаддитивным, и функция измерения также определяет, как формируется выходное измерение как функция шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

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

Начальное значение оценки состояния, заданное как Ns элемент, где Ns - количество состояний в системе. Задайте начальные значения состояния на основе ваших знаний о системе.

Заданное значение сохранено в State свойство объекта. Если вы задаете InitialState как вектор-столбец, затем State также является вектор-столбец, и predict и correct команды возврата оценки состояния в виде вектора-столбца. В противном случае возвращается вектор-строка.

Если вам нужен фильтр с переменными с одной точностью с плавающей точкой, задайте InitialState как переменный вектор с одной точностью. Для примера - для двухгосударственной системы с переходом состояний и функциями измерения vdpStateFcn.m и vdpMeasurementFcn.m, создайте расширенный объект фильтра Калмана с начальными оценками состояния [1;2] следующим образом:

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

Типы данных: double | single

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Использование Name,Value аргументы для задания свойств extendedKalmanFilter объект во время создания объекта. Для примера создать расширенный объект фильтра Калмана и задать ковариацию шума процесса как 0,01:

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,'ProcessNoise',0.01);

Свойства

свернуть все

extendedKalmanFilter свойства объекта имеют три типа:

  • Настраиваемые свойства, которые можно задать несколько раз, или во время конструкции объекта с помощью Name,Value аргументы или любое время после во время оценки состояния. После создания объекта используйте запись через точку для изменения настраиваемых свойств.

    obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState);
    obj.ProcessNoise = 0.01;

    Настраиваемые свойства State, StateCovariance, ProcessNoise, и MeasurementNoise.

  • Нетронутые свойства, которые можно задать один раз, либо во время конструкции объекта, либо после с помощью понятия точки. Задайте эти свойства перед оценкой состояния используя correct и predict. The StateTransitionFcn, MeasurementFcn, StateTransitionJacobianFcn, и MeasurementJacobianFcn свойства относятся к этой категории.

  • Нетронутые свойства, которые необходимо задать во время конструкции объекта. The HasAdditiveProcessNoise и HasAdditiveMeasurementNoise свойства относятся к этой категории.

Характеристики шума измерения, заданные как одно из следующих значений:

  • true - Измерительный шум v является аддитивной. Функция измерения h которая задана в MeasurementFcn имеет следующую форму:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) - это расчетный выход и расчетное состояние во времени k, и Um1,...,Umn все необязательные входные параметры, требуемые вашей функцией измерения.

  • false - Шум измерения неаддитивен. Функция измерения задает, как выходное измерение развивается как функция состояния и шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

HasAdditiveMeasurementNoise является свойством nontunable, и его можно задать только во время конструкции объекта. Вы не можете изменить его с помощью записи через точку.

Характеристики технологического шума, заданные как одно из следующих значений:

  • true - Технологический шум w является аддитивной. Функция перехода f заданная в StateTransitionFcn имеет следующую форму:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - расчетное состояние во времени k, и Us1,...,Usn - любые дополнительные входные параметры, требуемые функцией перехода состояния.

  • false - Технологический шум неаддитивен. Функция перехода состояния задает, как состояния развиваются как функция состояния и обрабатывают шум на предыдущем временном шаге:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

HasAdditiveProcessNoise является свойством nontunable, и его можно задать только во время конструкции объекта. Вы не можете изменить его с помощью записи через точку.

Функция h измерения, заданная как указатель на функцию. Функция вычисляет выходной вектор измерения N-элемента нелинейной системы на временном шаге k, учитывая вектор состояния на временном шаге k. N - количество измерений системы. Вы записываете и сохраняете функцию измерения и используете ее, чтобы создать объект. Для примера, если vdpMeasurementFcn.m является функцией измерения, задайте MeasurementFcn как @vdpMeasurementFcn. Можно также задать MeasurementFcn как указатель на функцию для анонимной функции.

Входы функции зависят от того, задаете ли вы шум измерения как аддитивный или неаддитивный в HasAdditiveMeasurementNoise свойство объекта:

  • HasAdditiveMeasurementNoise is true - Измерительный шум v является аддитивным, и функция измерения определяет, как измерения развиваются как функция от значений состояния:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) - это расчетный выход и расчетное состояние во времени k, и Um1,...,Umn все необязательные входные параметры, требуемые вашей функцией измерения. Для примера, если вы используете несколько датчиков для отслеживания объекта, дополнительным входом может стать положение датчика. Во время оценки вы передаете эти дополнительные аргументы в correct команда, которая в свою очередь передает их в функцию измерения.

  • HasAdditiveMeasurementNoise является ложным - шум измерения является неаддитивным, и функция измерения также определяет, как формируется выходное измерение как функция шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

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

MeasurementFcn является свойством nontunable. Вы можете задать его один раз, прежде чем использовать correct команда либо во время конструкции объекта, либо с использованием записи через точку после конструкции объекта. Вы не можете изменить его после использования correct команда.

Якобиан функции h измерения, заданный как одно из следующего:

  • [] - Якобиан численно вычисляется при каждом вызове correct команда. Это может увеличить время вычислений и числовую неточность оценки состояния.

  • указатель на функцию - вы записываете и сохраняете функцию Якобиана и задаете указатель на функцию. Для примера, если vdpMeasurementJacobianFcn.m - якобианская функция, задайте MeasurementJacobianFcn как @vdpMeasurementJacobianFcn.

    Функция вычисляет частные производные функции измерения относительно состояний и шума измерения. Количество входов в функцию Якобяна должно равняться количеству входов в функцию измерения и должно быть задано в том же порядке в обеих функциях. Количество выходов якобианской функции зависит от HasAdditiveMeasurementNoise свойство:

    • HasAdditiveMeasurementNoise is true - Функция вычисляет частные производные функции измерения относительно состояний (h/x). Вывод как N -by - Ns якобианской матрицы, где N - количество измерений системы и Ns - количество состояний.

    • HasAdditiveMeasurementNoise is false - Функция также возвращает второй выход, который является частной производной функции измерения относительно членов шума измерения (h/v). Второй выход возвращается как N -by V якобианская матрица, где V - количество членов шума измерения.

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

MeasurementJacobianFcn является свойством nontunable. Вы можете задать его один раз, прежде чем использовать correct команда либо во время конструкции объекта, либо с использованием записи через точку после конструкции объекта. Вы не можете изменить его после использования correct команда.

Ковариация шума измерения, заданная как скаляр или матрица в зависимости от значения HasAdditiveMeasurementNoise свойство:

  • HasAdditiveMeasurementNoise is true - Задайте ковариацию как скаляр или N матрицу -by N, где N - количество измерений системы. Задайте скаляр, если нет перекрестной корреляции между терминами шума измерения и все члены имеют одинаковое отклонение. Программа использует скалярное значение, чтобы создать N -by N диагональную матрицу.

  • HasAdditiveMeasurementNoise is false - Задайте ковариацию как V -by - V матрицу, где V - количество членов шума измерения. MeasurementNoise должен быть задан перед использованием correct. После того, как вы задаете MeasurementNoise как матрица впервые, чтобы затем изменить MeasurementNoise можно также задать его как скаляр. Задайте как скаляр, если нет перекрестной корреляции между терминами шума измерения и все члены имеют одинаковое отклонение. Программа расширяет скаляр до V -by V диагональной матрицы со скаляром на диагоналях.

MeasurementNoise является настраиваемым свойством. Изменить его можно с помощью записи через точку.

Ковариация шума процесса, заданная как скаляр или матрица в зависимости от значения HasAdditiveProcessNoise свойство:

  • HasAdditiveProcessNoise is true - Задайте ковариацию как скаляр или Ns матрицу -by Ns, где Ns - количество состояний системы. Задайте скаляр, если нет перекрестной корреляции между терминами шума процесса, и все члены имеют одинаковое отклонение. Программа использует скалярное значение, чтобы создать Ns -by Ns диагональную матрицу.

  • HasAdditiveProcessNoise is false - Задайте ковариацию как W -by - W матрицу, где W - количество членов шума процесса. ProcessNoise должен быть задан перед использованием predict. После того, как вы задаете ProcessNoise как матрица впервые, чтобы затем изменить ProcessNoise можно также задать его как скаляр. Задайте как скаляр, если нет перекрестной корреляции между терминами шума процесса и все члены имеют одинаковое отклонение. Программа расширяет скаляр до W -by W диагональной матрицы.

ProcessNoise является настраиваемым свойством. Изменить его можно с помощью записи через точку.

Состояние нелинейной системы, заданное как вектор размера Ns, где Ns - количество состояний системы.

Когда вы используете predict команда, State обновляется предсказанным значением на временном шаге k используя значение состояния на временном шаге k -1. Когда вы используете correct команда, State обновляют оценочным значением на временной шаг k используя измеренные данные на временной шаг k.

Начальное значение State - значение, заданное в InitialState входной параметр во время создания объекта. Если вы задаете InitialState как вектор-столбец, затем State также является вектор-столбец, и predict и correct команды возврата оценки состояния в виде вектора-столбца. В противном случае возвращается вектор-строка. Если вы хотите фильтр с переменными с одной точностью с плавающей точкой, вы должны задать State как переменная с одной точностью во время конструкции объекта с использованием InitialState входной параметр.

State является настраиваемым свойством. Изменить его можно с помощью записи через точку.

Ковариация ошибки расчета состояния, заданная как скаляр или Ns -by - Ns матрица, где Ns - количество состояний системы. Если вы задаете скаляр, программа использует скалярное значение, чтобы создать Ns -by Ns диагональную матрицу.

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

Когда вы используете predict команда, StateCovariance обновляется предсказанным значением на временном шаге k используя значение состояния на временном шаге k -1. Когда вы используете correct команда, StateCovariance обновляют оценочным значением на временной шаг k используя измеренные данные на временной шаг k.

StateCovariance является настраиваемым свойством. Вы можете изменить его с помощью записи через точку после использования correct или predict команды.

Переходная функция f состояния, заданная как указатель на функцию. Функция вычисляет вектор состояния Ns-element системы на временной шаг k, учитывая вектор состояния на временной шаг k-1. Ns - количество состояний нелинейной системы.

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

Входы функции, которую вы записываете, зависят от того, задаете ли вы шум процесса как аддитивный или неаддитивный в HasAdditiveProcessNoise свойство объекта:

  • HasAdditiveProcessNoise is true - шум процесса w является аддитивным, и функция перехода состояния задает, как состояния развиваются как функция от значений состояния на предыдущем временном шаге:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - расчетное состояние во времени k, и Us1,...,Usn - любые дополнительные входные аргументы, требуемые функцией перехода вашего состояния, такие как входы или шаг расчета. Во время оценки вы передаете эти дополнительные аргументы в predict команда, которая в свою очередь передает их в функцию перехода состояния.

  • HasAdditiveProcessNoise является ложным - шум процесса является неаддитивным, и функция перехода состояния также задает, как состояния развиваются как функция шума процесса:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

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

StateTransitionFcn является свойством nontunable. Вы можете задать его один раз, прежде чем использовать predict команда либо во время конструкции объекта, либо с использованием записи через точку после конструкции объекта. Вы не можете изменить его после использования predict команда.

Якобиан функции f перехода состояния, заданный как одно из следующего:

  • [] - Якобиан численно вычисляется при каждом вызове predict команда. Это может увеличить время вычислений и числовую неточность оценки состояния.

  • указатель на функцию - вы записываете и сохраняете функцию Якобиана и задаете указатель на функцию. Для примера, если vdpStateJacobianFcn.m - якобианская функция, задайте StateTransitionJacobianFcn как @vdpStateJacobianFcn.

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

    • HasAdditiveProcessNoise is true - Функция вычисляет частную производную функции перехода состояния относительно состояний (f/x). Выходом является Ns -by Ns якобианская матрица, где Ns - количество состояний.

    • HasAdditiveProcessNoise is false - Функция должна также вернуть второй выход, который является частной производной функции перехода состояния относительно членов шума процесса (f/w). Второй выход возвращается как Ns -by W якобианская матрица, где W - количество членов шума процесса.

Расширенный алгоритм фильтра Калмана использует Якобиан, чтобы вычислить ковариацию ошибки расчета состояния.

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

StateTransitionJacobianFcn является свойством nontunable. Вы можете задать его один раз, прежде чем использовать predict команда либо во время конструкции объекта, либо с использованием записи через точку после конструкции объекта. Вы не можете изменить его после использования predict команда.

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

свернуть все

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

Когда вы используете predict, obj.State и obj.StateCovariance обновляются предсказанным значением на временном шаге k используя значение состояния на временном шаге k -1. Когда вы используетеcorrect, obj.State и obj.StateCovariance обновляют оцененными значениями на временной шаг k используя измеренные данные на временной шаг k.

Вопросы совместимости

расширить все

Поведение изменено в R2020b

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

.
Введенный в R2016b
Для просмотра документации необходимо авторизоваться на сайте