Автоматизированное преобразование фиксированной точки

Автоматизированные возможности преобразования фиксированной точки

Можно преобразовать код MATLAB® с плавающей точкой в фиксированную точку с помощью приложения MATLAB Coder™ или в командной строке с помощью codegen функциональный -float2fixed опция. Можно принять решение предложить типы данных на основе данных об области значений симуляции, выведенных (также известный статическими) данные об области значений или оба.

Можно вручную ввести статические области значений. Эти вручную вводимые области значений более приоритетны по сравнению с областями значений симуляции, и приложение использует их при предложении типов данных. Кроме того, можно изменить и заблокировать предложенный тип так, чтобы приложение не могло изменить его. Для получения дополнительной информации смотрите Предложенные типы данных Блокировки.

Для списка поддерживавших функций MATLAB и функций, смотрите Функции языка MATLAB, Поддерживавшие для Автоматизированного Преобразования Фиксированной точки (Fixed-Point Designer).

Во время преобразования фиксированной точки вы можете:

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

  • Предложите дробные длины на основе размеров слова по умолчанию.

  • Предложите размеры слова на основе дробных длин по умолчанию.

  • Оптимизируйте целые числа.

  • Задайте запасы прочности для данных min симуляции / макс. данных.

  • Подтвердите это, можно разработать проект с предложенными типами данных.

  • Протестируйте численные данные путем выполнения тестового файла с примененными фиксированными точками.

  • Просмотрите гистограмму битов, которые использует каждая переменная.

  • Обнаружьте переполнение.

Покрытие кода

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

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

Отображения приложения панель покрытия, на которую наносят цветную маркировку, слева от кода.

Эта таблица описывает расцветку.

Цвет панели покрытияУказывает
Зеленый

Одна из следующих ситуаций:

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

  • Функция точки входа выполняет одно время, и код выполняет одно время.

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

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

Когда вы устанавливаете свой курсор на панель покрытия, цветное выделение расширяет по коду. Для каждого раздела кода, отображения приложения число раз, которое выполняет раздел.

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

Цвет панели покрытияДействие
ЗеленыйЕсли вы ожидаете, что разделы кода выполнятся более часто, чем покрытие показывает, или измените код MATLAB или тестовые файлы.
ОранжевыйЭто поведение ожидается для кода инициализации, например, инициализации персистентных переменных. Если вы ожидаете, что код выполнится больше чем в один раз, или изменит код MATLAB или тестовые файлы.
КрасныйЕсли код, который не выполняется, является состоянием ошибки, это поведение приемлемо. Если вы ожидаете, что код выполнится, или изменит код MATLAB или тестовые файлы. Если код записан консервативно и имеет пределы верхней и нижней границы, и вы не можете изменить тестовые файлы, чтобы достигнуть этого кода, добавить статические минимальные и максимальные значения. Смотрите Вычисление Выведенные Области значений.

Покрытие кода включено по умолчанию. Выключите его только после того, как вы проверили, что у вас есть соответствующее покрытие тестового файла. Выключение покрытия кода может ускорить симуляцию. Выключить покрытие кода, на странице Convert to Fixed Point:

  1. Кликните по стреле Analyze.

  2. Снимите флажок Show code coverage.

Предложение типов данных

Приложение предлагает типы данных с фиксированной точкой на основе вычисленных областей значений и размера слова или дробной установки длины. Вычисленные области значений основаны на данных об области значений симуляции, выведенные данные об области значений (также известный как статические области значений), или оба. Если при запуске симуляцию и вычисляете выведенные области значений, приложение объединяет симуляцию и выведенные области значений.

Примечание

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

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

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

Выполнение симуляции

Во время преобразования фиксированной точки приложение генерирует оснащенную MEX-функцию для вашего файла MATLAB точки входа. Если сборка завершается без ошибок, отображения приложения скомпилировали информацию (тип, размер, сложность) для функций и переменных в вашем коде. Чтобы перейти к локальным функциям, кликните по вкладке Functions. Если ошибки сборки происходят, приложение предоставляет сообщения об ошибке, которые соединяются со строкой кода, которая вызвала проблемы сборки. Необходимо исправить эти ошибки прежде, чем запустить симуляцию. Используйте ссылку, чтобы перейти к незаконной строке кода в редакторе MATLAB и изменить код, чтобы устранить проблему. Если ваш код использует функции, которые не поддерживаются для преобразования фиксированной точки, отображения приложения их на вкладке Function Replacements. Смотрите Функциональные Замены.

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

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

Если тестовый файл перестал работать, ошибки отображены на вкладке Output.

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

Опционально, можно выбрать к данным логов для гистограмм. После выполнения симуляции можно просмотреть гистограмму для каждой переменной. Для получения дополнительной информации см. Данные логов для Гистограммы.

Вычисление выведенных областей значений

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

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

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

Когда вы выбираете Compute Derived Ranges, выполнение приложения выведенный анализ области значений, чтобы вычислить статические области значений для переменных в вашем алгоритме MATLAB. Когда анализ завершен, статические области значений отображены на вкладке Variables. Если запуск производит +/-Inf выведенные области значений, рассмотрите области значений определения для всех персистентных переменных.

Опционально, можно выбрать Quick derived range analysis. При использовании этой опции приложение выполняет более быстрый статический анализ. Вычисленные области значений могут быть больше, чем необходимый. Выберите эту опцию в случаях, где статический анализ занимает больше времени, чем можно предоставить.

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

Блокировка предложенных типов данных

Можно заблокировать предложенные типы данных против изменений приложением с помощью одного из следующих методов:

  • Установка Manually предложенный тип данных в приложении.

  • Щелчок правой кнопкой по типу, предложенному инструментом и выбор Lock computed value.

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

  • Вручную перезапись его.

  • Щелчок правой кнопкой по нему и выбор Undo changes. Это действие разблокировало только выбранный тип.

  • Щелчок правой кнопкой и выбор Undo changes for all variables. Это действие разблокировало все заблокированные предложенные типы.

Просмотр функций

Во время шага Convert to Fixed Point процесса преобразования фиксированной точки можно просмотреть список функций в проекте на левой панели. Этот список также включает функциональные специализации и методы класса. Когда вы выбираете функцию из списка, код MATLAB для этой функции или метода класса отображен в окне кода и переменных, которые они используют, отображены на вкладке Variables.

После преобразования левая панель также отображает список выходных файлов включая версию фиксированной точки исходного алгоритма. Если ваша функция не специализирована, приложение сохраняет исходное имя функции в имени файла фиксированной точки и добавляет суффикс фиксированной точки. Например, здесь версия фиксированной точки ex_2ndOrder_filter.m ex_2ndOrder_filter_fixpt.m.

Классы

Информация об отображениях приложения для класса и каждого из его методов. Например, рассмотрите класс, Counter, это имеет статический метод, MAX_VALUE, и метод, next.

Если вы выбираете класс, отображения приложения класс и его свойства на вкладке Variables.

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

Специализации

Если функция специализирована, списки приложений каждая специализация и нумерует их последовательно. Например, рассмотрите функцию, dut, это вызывает подфункции, foo и bar, многократно с различными входными типами.

function y = dut(u, v)
 
tt1 = foo(u);
tt2 = foo([u v]);
tt3 = foo(complex(u,v));
 
ss1 = bar(u);
ss2 = bar([u v]); 
ss3 = bar(complex(u,v));
 
y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3);
 
end
 
function y = foo(u)
  y = u * 2;
end
 
function y = bar(u)
  y = u * 4;
end

Если вы выбираете функцию верхнего уровня, отображения приложения все переменные на вкладке Variables.

Если вы выбираете структурный вид, приложение также отображает номера строки для вызова каждой специализации.

Если вы выбираете специализацию, отображения приложения только переменные, которые использует специализация.

В сгенерированной фиксированной точке количество каждой специализации фиксированной точки совпадает с номером в списке Source Code, который дает возможность прослеживать между версиями и фиксированной точки с плавающей точкой вашего кода. Например, сгенерированная фиксированная точка функционируют для foo > 1 назван foo_s1.

Просмотр переменных

Вкладка Variables предоставляет следующую информацию для каждой переменной в функции, выбранной в панели Navigation:

  • Ввод Исходный тип данных переменной в алгоритме MATLAB.

  • Sim Min и Sim Max — Минимальные и максимальные значения, присвоенные переменной в процессе моделирования.

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

  • Static Min и Static Max — Статические минимальные и максимальные значения.

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

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

  • Whole Number — Являются ли все значения, присвоенные переменной в процессе моделирования, целыми числами.

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

  • Предложенный тип данных с фиксированной точкой для заданного слова (или часть) длина. Предложенные типы данных используют numerictype обозначение. Например, numerictype(1,16,12) обозначает фиксированную точку со знаком с размером слова 16 и дробной длиной 12. numerictype(0,16,12) обозначает фиксированную точку без знака с размером слова 16 и дробной длиной 12.

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

Можно также просмотреть и отредактировать переменную информацию в панели кода путем установки курсора на имя переменной.

Можно использовать Ctrl+F искать переменные в коде MATLAB и на вкладке Variables. Приложение подсвечивает случаи в коде и отображает только переменную с указанным именем на вкладке Variables.

Просмотр информации для классов MATLAB

Отображения приложения:

  • Код для классов MATLAB и покрытие кода для методов класса в окне кода. Используйте список Source Code на странице Convert to Fixed Point, чтобы выбрать который метод класса или метод класса просмотреть. Если вы выбираете метод класса, приложение подсвечивает метод в окне кода.

  • Информация о классах MATLAB на вкладке Variables.

Данные логов для гистограммы

К данным логов для гистограмм:

  • На странице Convert to Fixed Point кликните по стреле Analyze.

  • Выберите Log data for histogram.

  • Нажмите Analyze Ranges.

После симуляции, чтобы просмотреть гистограмму для переменной, на вкладке Variables, кликают по полю Proposed Type для той переменной.

Гистограмма предоставляет спектр предложенного типа данных и процент значений симуляции, которые покрывает предложенный тип данных. Нагрузки на долото отображены вдоль Оси X и процента случаев вдоль Оси Y. Каждый интервал в гистограмме соответствует немного в двоичном слове. Например, эта гистограмма отображает область значений для переменной типа numerictype(1,16,14).

Можно просмотреть эффект изменения предложенных типов данных:

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

  • Выбор или очистка Signed.

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

Функциональные замены

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

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

Примечание

Используя эту таблицу, можно заменить имена функций, но вы не можете заменить шаблоны аргумента.

Если экранирование готовности генерации кода отключено, список неподдерживаемых функций на вкладке Function Replacements может быть неполным или неправильным. В этом случае добавьте функции вручную. Смотрите Готовность Генерации кода экранировать в Приложении MATLAB Coder.

Проверка типов

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

Если ошибки или предупреждения происходят во время валидации, они отображены на вкладке Output. Если ошибки или предупреждение происходят:

  • На вкладке Variables смотрите предложенные типы и вручную измененные типы, чтобы проверить, что они допустимы.

  • На вкладке Function Replacements проверьте, что вы обеспечили функциональные замены для неподдерживаемых функций.

Тестирование численных данных

После преобразования кода к фиксированной точке и проверке предложенных типов данных с фиксированной точкой, нажмите Test, чтобы проверить поведение алгоритма MATLAB фиксированной точки. По умолчанию, если вы добавили тестовый файл, чтобы задать входные параметры или запустить симуляцию, приложение использует этот тестовый файл, чтобы протестировать численные данные. Опционально, можно добавить тестовые файлы и выбор, чтобы запустить больше чем один тестовый файл. Приложение сравнивает числовое поведение сгенерированной фиксированной точки код MATLAB с исходным кодом MATLAB с плавающей точкой. Если вы выбираете, чтобы регистрировать вводы и выводы для графиков сравнения, приложение генерирует дополнительный график для каждого скалярного выхода. Этот график показывает результаты и фиксированной точки с плавающей точкой и различие между ними. Для нескалярных выходных параметров только показывают информацию об ошибке.

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

Обнаружение переполнения

Когда тестирование численных данных, выбор Use scaled doubles to detect overflows включают обнаружение переполнения. Когда эта опция выбрана, выполнение приложения преобразования симуляция с помощью масштабируемых двойных версий предложенных фиксированных точек. Поскольку масштабированный удваивается, хранят их данные в с двойной точностью, с плавающей точкой, они выполняют арифметику в полном спектре. Они также сохраняют свои настройки фиксированной точки, таким образом, они могут сообщить, когда расчет выходит из области значений фиксированной точки..

Если приложение обнаруживает переполнение на его вкладке Overflow, оно обеспечивает:

  • Список переменных и выражений, которые переполнились

  • Информация, на сколько каждой переполненной переменной

  • Ссылка на переменные или выражения в окне кода

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

Смотрите также

Обнаружьте переполнение