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

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

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

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

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

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

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

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

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

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

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

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

  • Тестируйте числа путем запуска тестового файла с применёнными фиксированными точками.

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

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

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

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

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

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

В этой таблице описывается расцветка.

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

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

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

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

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

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

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

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

Цвет полосы покрытияДействие
ЗеленыйЕсли вы ожидаете, что разделы кода будут выполняться чаще, чем показывает покрытие, измените код 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. С помощью этой опции приложение выполняет более быстрый статический анализ. Вычисленные области значений могут быть больше, чем необходимо. Выберите эту опцию в случаях, когда статический анализ занимает больше времени, чем вы можете себе позволить.

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

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

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

  • Ручная настройка предложенного типа данных в приложении.

  • Щелчок правой кнопкой мыши по типу, предложенному инструментом, и выбор 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:

  • Type - исходный тип данных переменной в алгоритме 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 оно обеспечивает:

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

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

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

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

См. также

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