exponenta event banner

Создание кода для оценки состояния в режиме онлайн в MATLAB

Код C/C + + можно создать из кода MATLAB ®, который используетextendedKalmanFilter, unscentedKalmanFilter и particleFilter объекты для оценки состояния в режиме онлайн. Код C/C + + генерируется с помощью codegen (Кодер MATLAB) из программного обеспечения MATLAB Coder™. Созданный код используется для развертывания алгоритмов оценки в оперативном режиме на встроенной цели. Можно также развернуть онлайн-код оценки, создав автономное приложение с помощью программного обеспечения MATLAB Compiler™.

Для генерации кода C/C + + для оценки состояния в режиме онлайн:

  1. Создайте функцию для объявления объекта фильтра постоянным и инициализации объекта. Объект определяется как постоянный для поддержания состояний объекта между вызовами.

    function [CorrectedX] = ukfcodegen(output)
    % Declare object as persistent.
    persistent obj;
    if isempty(obj)
    % Initialize the object.
    obj = unscentedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0]);
    obj.MeasurementNoise = 0.01;
    end
    % Estimate the states.
    CorrectedX = correct(obj,output);
    predict(obj);
    end

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

    В ukfcodegen.m функция, постоянный объект инициализируется с условием if isempty(obj) для обеспечения инициализации объекта только один раз при первом вызове функции. Последующие вызовы функции выполняют только predict и correct для обновления оценок состояния. Во время инициализации необходимо указать неперестраиваемые свойства объекта, такие как StateTransitionFcn (указано в ukfcodegen.m как vdpStateFcn.m) и MeasurementFcn (указано в ukfcodegen.m как vdpMeasurementFcn.m). После этого можно указать только настраиваемые свойства. Дополнительные сведения см. в разделе Настраиваемые и не настраиваемые свойства объекта.

    В функциях перехода и измерения состояния необходимо использовать только те команды, которые поддерживаются для создания кода. Список этих команд см. в разделе Функции и объекты, поддерживаемые для генерации кода C/C + + (кодер MATLAB). Включить директиву компиляции%#codegen в этих функциях, чтобы указать, что предполагается создать код для функции. Добавление этой директивы дает команду анализатору кода MATLAB помочь в диагностике и устранении нарушений, которые могут привести к ошибкам при создании кода. В качестве примера введите vdpStateFcn.m в командной строке.

  2. Создание кода C/C + + и MEX-файлов с помощью codegen (Кодер MATLAB) из программного обеспечения кодера MATLAB.

    codegen ukfcodegen -args {1}

    Синтаксис -args {1} задает пример аргумента для функции. Аргумент задает измерения и типы данных аргумента функции output как скаляр с двойной точностью.

    Примечание

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

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

    Затем для создания кода используйте следующий синтаксис.

    codegen ukfcodegen -args {{single(1)}
  3. Используйте созданный код.

    • Созданный код C/C + + используется для развертывания оценки состояния в оперативном режиме на встроенной цели.

    • Используйте созданный MEX-файл для тестирования скомпилированного кода C/C + + в MATLAB. Сгенерированный MEX-файл также полезен для ускорения моделирования алгоритмов оценки состояния в MATLAB.

      Загрузите оценочные данные. Предположим, что выходные данные хранятся в measured_data.mat файл.

      load measured_data.mat output
      

      Оцените состояния путем вызова созданного MEX-файла.

      for i = 1:numel(output)
          XCorrected = ukfcodegen_mex(output(i));
      end

    В этом примере создается код C/C + + для компиляции MEX-файла. Чтобы создать код для других целей, см. разделcodegen (Кодер MATLAB) в документации кодера MATLAB.

Настраиваемые и не настраиваемые свойства объекта

Тип свойстваРасширенный объект фильтра КалманаНезараженный объект фильтра КалманаОбъект фильтра частиц
Настраиваемые свойства, которые можно указать несколько раз либо во время построения объекта, либо после этого с помощью точечной нотацииState, StateCovariance, ProcessNoise, и MeasurementNoiseState, StateCovariance, ProcessNoise, MeasurementNoise, Alpha, Beta, и Kappa Particles и Weights
Неперестраиваемые свойства, которые можно задать только один раз либо во время построения объекта, либо после использования точечной нотации, но до использования predict или correct командыStateTransitionFcn, MeasurementFcn, StateTransitionJacobianFcn, и MeasurementJacobianFcnStateTransitionFcn и MeasurementFcnStateTransitionFcn, MeasurementLikelihoodFcn, StateEstimationMethod, StateOrientation, ResamplingPolicy и ResamplingMethod
Неперестраиваемые свойства, которые необходимо указать при построении объектаHasAdditiveProcessNoise и HasAdditiveMeasurementNoiseHasAdditiveProcessNoise и HasAdditiveMeasurementNoise 

См. также

| |

Связанные темы