Автомасштабирование и Curve Fitting

Приложение и затронутые темы

Приложение, предполагаемое для этого примера, является автоматическим отслеживанием маршрута на дороге. Мы покажем, как соответствовать полиному к шумным данным, представляющим контур маршрута дороги перед автомобилем.

Пример использует это приложение аппроксимирования кривыми, чтобы проиллюстрировать несколько тем, включая:

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

  • Преобразование модели с плавающей точкой к инструментам автомасштабирования использования фиксированной точки

  • Сокращение вычисления и моделирование "оффлайновых" вычислений с помощью инвариантных сигналов

Во многих приложениях аппроксимирования кривыми цель состоит в том, чтобы оценить коэффициенты полинома младшего разряда. Полином затем используется в качестве модели для наблюдаемых шумных данных. Например, если квадратичный полином должен использоваться, существует три коэффициента (a, b и c), чтобы оценить:

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

Этот пример сначала проиллюстрирует некоторые из этих тезисов в MATLAB®, и затем переместится в модель Simulink®.

Модель сигнала для дороги

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

% Model of roadway
Duration = 2;        % Distance that we look ahead
N = 25;              % Total number of sensors providing estimates of road boundary
Ts = Duration / N;   % Sample interval
FracPeriod = 0.5;    % Fraction of period of sinusoid to match
% y will contain the simulated sensor outputs
y = sin(2*pi* [0:(N-1)]' * (FracPeriod/N)) + sqrt(0.3) * randn(N,1);

Решение линейной системы Используя матричную факторизацию

В этом примере неизвестные являются коэффициентами каждого термина в полиноме. Поскольку полином, который мы будем использовать в качестве модели всегда, начинает с нашего текущего положения на дороге, постоянный термин в полиноме принят, чтобы быть нулем, и мы только должны оценить коэффициенты для линейных и условий высшего порядка. Мы настроим матричное уравнение Ax=y, таким образом что

  • y содержит датчик выходные параметры.

  • x содержит полиномиальные коэффициенты, которые мы должны получить.

  • A является постоянной матрицей, связанной с порядком полинома и местоположениями датчиков.

Мы решим уравнение с помощью QR-факторизации можно следующим образом:

и

где pinv () представляет псевдоинверсию. Учитывая матрицу А, следующий код может использоваться, чтобы реализовать решение этого матричного уравнения. Факторинг A позволяет для более легкого решения системы.

[Q, R] = qr(A);
z = Q' * y;
x = R \ z;
yhat = A * x;
plot(0:N-1,y,'k',0:N-1,yhat,'rs')

Ради полноты мы отмечаем, что матрица А Вандермонда может быть сформирована с помощью следующего кода:

Npoly = 3; % Order of polynomial to use in fitting
v = [0:Ts:((N-1)*Ts)]';
A = zeros(length(v), Npoly);
for i = Npoly : -1 : 1
    A(:,i) = v.^i;
end

Поскольку A является постоянным, так Q и R. Они могут быть предварительно вычислены. Поэтому единственное вычисление, требуемое как новые данные о датчике, получено, x=R \(Q '*y).

Если у нас есть оценки полиномиальных коэффициентов, мы можем восстановить полином с любой гранулярностью, которой мы желаем - мы не ограничиваемся восстановлением только в точках, где у нас первоначально были данные:

Перемещение в Simulink® и подготовку к реализации фиксированной точки

Затем мы восстанавливаем эту проблему и ее решение в окружении Simulink. Окончательный поставляемый компонент, который мы имеем в виду, является реализацией фиксированной точки фрагмента во время выполнения алгоритма, подходящего для развертывания во встроенной среде.

Модель, которая реализовывает это приложение подбора кривых, концептуально разделена на четыре части:

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

  • Оффлайновые вычисления, которые могут быть реализованы в плавающей точке с инвариантными сигналами.

  • Вычисления во время выполнения, которые должны быть реализованы в фиксированной точке.

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

Модель в качестве примера параметризована таким же образом как код MATLAB выше. Чтобы видеть параметры модели, перейдите к рабочему пространству модели, которое доступно от Model Explorer. Выберите View> Model Explorer и Model Workspace (в средней панели) и попробуйте следующее:

  • Установите порядок полинома к 1 (Npoly=1) и повторно инициализируйте рабочую область. Модель теперь попытается соответствовать прямой линии к шумным входным данным.

  • Замедлите уровень искривления в данных установкой FracPeriod к 0,3. Подгонка кривой еще лучше теперь, поскольку существует меньше искривления в данных.

Когда это - наше намерение реализовать эту модель с помощью вычислений с фиксированной точкой, один из первых вопросов должен быть, поддерживают ли необходимые компоненты фиксированную точку. Блок QR Factorization в DSP System Toolbox™ в настоящее время не поддерживает типы данных с фиксированной точкой, поэтому застревают мы? Ответ нет. Матрица, которая должна быть учтена, не зависит от данных во время выполнения. Это только зависит от вещей как порядок полинома, шага расчета и окна наблюдения. Таким образом мы принимаем, что матрица будет учтена "оффлайн". Оффлайновые вычисления могут быть смоделированы в Simulink с помощью инвариантных сигналов.

Сигнал в Simulink становится инвариантным путем установки шага расчета соответствующего исходного блока к Inf и включения Встроенной оптимизации параметров на диалоговом окне Параметров конфигурации. Этой модели включили цвета шага расчета (Отображение> Шаг расчета> Цвета). Пурпурная часть модели имеет бесконечный шаг расчета - его вывод вычисляется однажды, прежде чем модель начнет моделировать и будет затем использоваться остальной частью модели во время времени выполнения. Оффлайновые вычисления, которые это представляет, могут на самом деле быть вычислены в плавающей точке и затем их выводе, просто преобразованном в фиксированную точку для использования остальной частью модели во времени выполнения.

Выполнение модели производит вывод, подобный тому из кода MATLAB выше, за исключением того, что это запускается постоянно. Снимок состояния вывода модели показывают ниже:

Рабочий процесс для плавания точки к преобразованию фиксированной точки

Мы будем теперь работать к перереализации этой системы с помощью данных фиксированной точки. Обратите внимание на то, что, даже если система фиксированной точки является окончательным поставляемым компонентом, обычно желательно запуститься путем реализации его в плавающей точке и затем преобразования что функциональная реализация в фиксированную точку. В остатке от этого примера мы проиллюстрируем этот рабочий процесс путем преобразования модели выше от плавающей точки до фиксированной точки. Fixed-Point Tool в Simulink упрощает этот рабочий процесс. Откройте этот инструмент из своей модели путем выбора Fixed-Point Tool... из Проекта Типа данных в соответствии с меню Analysis. Первичные функциональности, которые мы будем использовать, являются переопределением типа данных и автомасштабированием. Переопределение типа данных является удобным способом переключить целую модель или подсистему между операцией и фиксированной точки с плавающей точкой. Автомасштабирование автоматически предлагает желательное масштабирование для различных количеств фиксированной точки в модели или подсистеме. Масштабирование задает местоположение двоичной точки в заданном размере слова для каждого количества.

Используя переопределение типа данных с моделями фиксированной точки

Часто удобно двинуться вперед-назад между с плавающей точкой и типами данных с фиксированной точкой, когда вы оптимизируете модель для поведения фиксированной точки. Обычно желательно для поведения фиксированной точки совпадать с поведением с плавающей точкой максимально тесно. Чтобы видеть эффект переопределения типа данных с моделью в качестве примера, попробуйте следующее:

  • Откройте Fixed-Point Tool и заметьте, что он установил переопределение Типа данных на Double, который является причиной, что модель в настоящее время запускает с двойной точностью данные с плавающей точкой.

  • Установите переопределение Типа данных на Use local settings использовать типы данных, первоначально заданные для каждой подсистемы.

  • Запустите модель и обратите внимание, что она теперь использует типы данных с фиксированной точкой во фрагменте во время выполнения модели, которую мы хотим встроить. Выходные результаты являются теперь неправильными, как проиллюстрировано в графике ниже. Кроме того, многочисленные предупреждения записаны в окно команды MATLAB. Неправильные результаты и предупреждения состоят оба в том вследствие того, что модель правильно еще не сконфигурирована для выполнения фиксированной точки.

Предложение оптимизированных настроек фиксированной точки и автомасштабирование модели

Если при запуске модель с данными фиксированной точки, можно заметить, что модель правильно не масштабируется. Давайте попытаемся зафиксировать это.

Настройка систем фиксированной точки является сложной задачей. Каждое количество фиксированной точки должно иметь свой размер слова со знаком и дробную длину (местоположение двоичной точки) набор. Во многих случаях размер слова и со знаком известен, но двоичная точка должна быть расположена. В DSP System Toolbox мы используем длину части количества, чтобы установить местоположение двоичной точки. Дробная длина является количеством битов справа от двоичной точки.

В порядке установить масштабирование вас может выполнить общую процедуру, обрисованную в общих чертах в разделе "Workflow for Floating Point to Fixed-Point Conversion" выше. А именно,

  • В Fixed-Point Tool, набор переопределение Типа данных модели к Double и его режим инструментирования Фиксированной точки к Minimums, maximums, and overflows.

  • Запустите модель. Необходимо будет вручную остановить модель, если время остановки все еще установлено в Inf.

  • В Автоматической панели ввода данных снятие флажка Делает предложение Со знаком, Делает предложение для Наследованных и флажков С плавающей точкой. Это гарантирует, что только дробные длины предложены Fixed-Point Tool.

  • Нажмите кнопку типов данных Propose на Fixed-Point Tool.

  • Примите или отклоните каждую предложенную дробную длину в средней панели Fixed-Point Tool. Перед принятием обратите внимание, что записи в предложенном дробном столбце длины (ProposedDT) доступны для редактирования. Первоначально предложенная дробная длина является самым большим значением, которое не производит переполнение с текущими данными, таким образом обеспечивая максимальное разрешение при предотвращении переполнения. Дополнительная высота помещения может опционально быть включена с помощью параметров запаса прочности Процента на Fixed-Point Tool.

  • Нажмите Apply принял, что кнопка типов данных на Fixed-Point Tool применила принятые дробные длины назад в модель. Каждая принятая дробная длина изменяется на диалоговом окне соответствующего блока. В порядке позволить принятым дробным длинам вступать в силу в модели, обратите внимание, что настройки фиксированной точки блока не могут быть установлены в наследованные режимы, такие как Same as input или Inherit via internal rule, а скорее должны быть установлены в явный режим, такой как Binary point scaling.

  • После автомасштабирования, задержанного переопределения Типа данных к Use local settings и выполнения модель снова. Результаты фиксированной точки теперь подобны тем, мы наблюдали использование, с плавающей точкой.