Научная статья на тему 'Программная реализация фильтра Калмана с использованием приложения Matlab Coder для генрации кода в формате с фиксированной точкой shape \* MERGEFORMAT'

Программная реализация фильтра Калмана с использованием приложения Matlab Coder для генрации кода в формате с фиксированной точкой shape \* MERGEFORMAT Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1249
153
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ФИЛЬТР КАЛМАНА / ФОРМАТ ДАННЫХ С ПЛАВАЮЩЕЙ И ФИКСИРОВАННОЙ ТОЧКОЙ / ГЕНЕРАЦИЯ ПРОГРАММНОГО КОДА / KALMAN FILTER / FLOATING AND FIXED POINT DATA FORMAT / PROGRAM CODE GENERATION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Макаров А.А., Рыжкова Е.А.

Калмановская фильтрация совместно с линейно-квадратичным регулятором позволяет решить задачу линейно-квадратичного гауссовского управления. Благодаря своей эффективности фильтр Калмана можно встретить в GPS-приемниках, обработчиках показаний датчиков, при реализации систем управления. Для разработки алгоритма фильтра Калмана может быть использован пакет MATLAB. Однако, реализуемый таким способом алгоритм, ориентирован на работу с данными в формате с плавающей точкой (IEEE 754). Микроконтроллеры и цифровые сигнальные процессоры, используемые в большинстве встраиваемых систем, этот формат не поддерживают. Поэтому разработка алгоритмов, ориентированных на процессоры с фиксированной точкой с использованием MATLAB’а представляет собой задачу, имеющую практическое значение.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Макаров А.А., Рыжкова Е.А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Программная реализация фильтра Калмана с использованием приложения Matlab Coder для генрации кода в формате с фиксированной точкой shape \* MERGEFORMAT»

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ФИЛЬТРА КАЛМАНА С ИСПОЛЬЗОВАНИЕМ ПРИЛОЖЕНИЯ MATLAB CODER ДЛЯ ГЕНРАЦИИ КОДА В ФОРМАТЕ С ФИКСИРОВАННОЙ ТОЧКОЙ

Макаров А.А.1, Рыжкова Е.А.2

'профессор, 2профессор кафедры автоматики и промышленной электроники. Российский государственный университет им. А.Н. Косыгина

АННОТАЦИЯ

Калмановская фильтрация совместно с линейно-квадратичным регулятором позволяет решить задачу линейно-квадратичного гауссовского управления. Благодаря своей эффективности фильтр Калмана можно встретить в GPS-приемниках, обработчиках показаний датчиков, при реализации систем управления. Для разработки алгоритма фильтра Калмана может быть использован пакет MATLAB. Однако, реализуемый таким способом алгоритм, ориентирован на работу с данными в формате с плавающей точкой (IEEE 754). Микроконтроллеры и цифровые сигнальные процессоры, используемые в большинстве встраиваемых систем, этот формат не поддерживают. Поэтому разработка алгоритмов, ориентированных на процессоры с фиксированной точкой с использованием MATLAB^ представляет собой задачу, имеющую практическое значение.

Ключевые слова: фильтр Калмана, формат данных с плавающей и фиксированной точкой, генерация программного кода Keywords: Kalman filter, floating and fixed point data format, program code generation

Фильтр Калмана — эффективный рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и за-шумленных измерений, широко используется в инженерных и эконометрических приложениях: от радаров и систем технического зрения до оценок параметров макроэкономических моделей. Калма-новская фильтрация является важной частью теории управления, играет большую роль в создании систем управления. Совместно с линейно-квадратичным регулятором фильтр Калмана позволяет решить задачу линейно-квадратичного гауссовского управления. Фильтр Калмана и линейно-квадратичный регулятор представляют собой возможное решение большинства фундаментальных задач в теории управления. Фильтр Калмана — это, распространённый алгоритм фильтрации, используемый во многих областях науки и техники [4]. Благодаря своей простоте и эффективности его можно встретить в GPS-приемниках, обработчиках показаний датчиков, при реализации систем управления и т.д. Любой измерительный прибор обладает некоторой погрешностью, на него может оказывать влияние большое количество внешних и внутренних воздействий, что приводит к тому, что информация с него оказывается зашумленной. Чем сильнее зашумлены данные, тем сложнее обрабатывать такую информацию. Фильтр - это алгоритм обработки данных, который убирает шумы и лишнюю информацию. В фильтре Калмана есть возможность задать априорную информацию о характере системе, связи переменных и на основании этого строить более точную оценку, но даже в простейшем случае (без ввода априорной информации) он дает отличные результаты.

Для разработки алгоритма фильтра Калмана может быть использован пакет MATLAB. Однако, реализуемый таким способом алгоритм, ориентирован на работу с данными в формате с плавающей точкой (IEEE 754). Микроконтроллеры и цифровые

сигнальные процессоры, используемые в большинстве встраиваемых систем этот формат не поддерживают на уровне процессорного ядра и поддержка таких данных возлагается на компилятор языка высокого уровня, чаще всего Си, что не всегда приемлемо с точки зрения быстродействия. Кроме того процессоры с фиксированной точкой являются более дешёвыми, менее энергопотребляющими и имеющими более высокие частоты тактирования (при прочих равных условиях). При «ручном» переводе кода в формат с фиксированной точкой требуется написание большого числа комментариев, чтобы сделать код понимаемым, а также необходимо использовать сдвиговые операции для выполнения операции умножения, в случае использования подхода, основанного не генерации кода при помощи Fixed-Point Designer и MATLAB Coder необходимость в этом отпадает [2]. Процесс разработки выглядит следующим образом: Разработка собственно алгоритма в MATLAB^, затем преобразование в фиксированную точку при помощи приложения FIXED POINT DESIGNER, затем генерация кода C/C++ при помощи MATLAB Coder и Embedded Coder [1,3] для поддерживаемого микроконтроллера или цифрового сигнального процессора.

В исходном файле содержится следующий алгоритм фильтра Калмана:

% Copyright 2009 - 2010 The MathWorks, Inc. function y = kalman01(z) %#eml % Initialize state transition matrix dt=1;

A=[ 1 0 dt 0 0 0;... 0 1 0 dt 0 0;... 0 0 1 0 dt 0;... 0 0 0 1 0 dt;... 0 0 0 0 1 0 ;... 0 0 0 0 0 1 ]; % Measurement matrix H = [ 1 0 0 0 0 0; 0 1 0 0 0 0 ]; Q = eye(6);

R = 1000 * eye(2); % Initial conditions persistent x_est p_est if isempty(x_est) x_est = zeros(6, 1); p_est = zeros(6, 6); end

% Predicted state and covariance

x_prd = A * x_est;

p_prd = A * p_est * A' + Q;

% Estimation

S = H * p_prd' * H' + R;

B = H * p_prd';

klm_gain = (S \ B)';

% Estimated state and covariance

x_est = x_prd + klm_gain * (z - H * x_prd);

p_est = p_prd - klm_gain * H * p_prd;

% Compute the estimated measurements

y = H * x_est;

end

Для исходного файла должно быть проведено автоопределение типов данных при помощи MATLAB Coder. Это выполняется при помощи отдельного тестового файла:

% Copyright 2009 - 2010 The MathWorks, Inc.

function 0bjTrack01(position)

%#eml

% Figure setup numPts = 300; figure;hold;grid; % Kalman filter loop for idx = 1: numPts % Get the input data z = position(:,idx);

% Use Kalman filter to estimate the location

y = kalman01(z);

% Plot the results

plot_trajectory(z,y);

end

hold;

end

Далее следует следует произвести преобразование кода в формат с фиксированной точкой и ва-лидацию типов данных. В рассматриваемом случае на этом этапе возникает ошибка: Fixed point converter does not have yet handle ' mldivide function( operator УУ nodes.

Необходимо заменить оператор klm_gain = (S \ B)'; на следующий код: %klm_gain = (S \ B)'; invS = mat_inv_2x2(S); klm_gain = (invS*B)'; function invM = mat_inv_2x2(M) detM = M(1,1)*M(2,2) - M(1,1)*M(2,1); adjoint = [ M(2,2) -M(1,2); -M(2,1) M(1,1)]; if (abs(detM)) < 1.e-10 invM = zeros(2, 2); else

invM = adjoint/detM;

end

end

С учётом внесённых изменений может быть получен код с фиксированной точкой для одного из поддерживаемых в МЛТЬЛВ'е микроконтроллеров и цифровых сигнальных процессоров. Затем можно провести валидацию полученного кода. Литература

1. Мартин Г., Зарринкуб Х. От MATLAB к EMBEDDED C. Электронные компоненты. №7, 2012. - с.49-50.

2. Bhurat H. Introducing Fixed-Point Designer for MATLAB and Simulink [Электронный ресурс]. -Режим доступа: http://www.mathworks.com/vid-eos/introducing-fixed-point-designer-for-matlab-and-simulink-81554.html. Требуется регистрация.

3. Zarrinkoub Н. Generate C Code from MATLAB Functions Using the Embedded MATLAB Subset [Электронный ресурс]. - Режим доступа: http://www.mathworks.com/videos/generate-c-code-from-matlab-functions-using-the-embedded-matlab-subset-81679.html. Требуется регистрация.

4. Grewal М. S., Andrews A. P. Kalman filtering. Theory and Practice Using MATLAB. 4th Edition. New Jersey: - John Wiley & Sons, 2015. - 639 p.

УСТАНОВКА ДЛЯ СЕЛЕКТИВНОГО ЛАЗЕРНОГО СПЕКАНИЯ _ВЫСОКОТЕМПЕРАТУРНЫХ ПОЛИМЕРОВ*_

* Данная работа проводилась в рамках государственного контракта № 14^56.17.21.49-МК от 22 февраля 2017 г.

ЧАСТЬ 2 (ЧАСТЬ 1 в выпуске № 7 (52) / 2018 1 часть)

Назаров Алексей Петрович1'а, Скорняков Иннокентий Алексеевич1'ь,

Шишковский Игорь Владимирович2'с

ФГБОУВО «МГТУ «СТАНКИН», Россия 127055, Москва, Вадковский пер. 1 2ФГБУН Физический институт им. П.Н. Лебедева РАН, Россия 443011, Самара, Ново-Садовая, 221

АННОТАЦИЯ: В данной работе представлена конструкция аддитивной установки для селективного лазерного спекания высокотемпературных полимерных материалов, отличающаяся оригинальной системой контроля юстировки устройства нанесения слоев порошка полиэфирэфиркетона. Приведены ее кинематическая и лазерно-оптическая схемы. Описаны основные контуры охлаждения. Технические и конструкторские решения, предложенные нами, позволяют проводить селективное лазерное спекание целого

i Надоели баннеры? Вы всегда можете отключить рекламу.