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

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

Примечание

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

Необходимые условия

Этот пример требует следующих продуктов:

Создайте новую папку и скопируйте соответствующие файлы

  1. Создайте локальную рабочую папку, например c:\dti.

  2. Измените на docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. Скопируйте dti.m и dti_test.m файлы в локальную рабочую папку.

    НапечататьИмяОписание
    Код функцииdti.mФункция MATLAB точки входа
    Тестовый файлdti_test.mСкрипт MATLAB, который тестирует dti.m

 Функция dti

 Функция dti_test

Откройте приложение MATLAB Coder

  1. Перейдите к рабочей папке, содержащей файл для этого примера.

  2. На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.

Выбор исходных файлов

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

Включите преобразование с фиксированной точкой

  1. Установите Numeric Conversion значение Convert to fixed point.

  2. Щелкните Next, чтобы перейти к Define Input Types шагу.

    Окно приложения dti.m по вопросам нарушений кода и готовности генерации кода. Приложение не находит проблемы в dti.m.

Определите входные типы

  1. На странице Define Input Types, чтобы добавить dti_test в качестве тестового файла просмотрите dti_test.m, а затем нажмите Open.

  2. Нажмите Autodefine Input Types.

    Тестовый файл запускается. Приложение определяет из тестового файла, что входной тип u_in является double(1x1).

  3. Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу.

Проверяйте на наличие проблем во время выполнения

На Check for Run-Time Issues шаге генерируется MEX с инструментами. Он запускает тестовый файл dti_test замена вызовов на dti с вызовами сгенерированной MEX-функции. Если приложение находит проблемы, оно выдает предупреждения и сообщения об ошибке. Можно кликнуть сообщение, чтобы выделить проблемный код в окне, где можно отредактировать код.

  1. На странице Check for Run-Time Issues приложение заполняет поле тестового файла именем dti_test, тестовый файл, который вы использовали для определения типов входа.

  2. Нажмите Check for Issues.

    Приложение не обнаруживает проблем.

  3. Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.

Преобразуйте в фиксированную точку

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

    Если функции не поддерживаются для преобразования с фиксированной точкой, приложение отображает их на вкладке Function Replacements.

  2. Щелкните стрелку Analyze.

    1. Выберите Analyze ranges using derived range analysis.

    2. Снимите флажок Analyze ranges using simulation.

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

  3. На странице Convert to Fixed Point, на вкладке Variables, для входа u_in, выберите Static Min и установите его на -1. Установите Static Max значение 1.

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

    Примечание

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

  4. Нажмите Analyze.

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

    В dti function, the clip_status выход имеет минимальное значение -2 и максимум 2.

    % Compute Output
    if (u_state > limit_upper)
        y = limit_upper;
        clip_status = -2;
    elseif (u_state >= limit_upper)
        y = limit_upper;
        clip_status = -1;
    elseif (u_state < limit_lower)
    	y = limit_lower;
        clip_status = 2;
    elseif (u_state <= limit_lower)
    	y = limit_lower;
        clip_status = 1;   
    else        
        y = u_state;
        clip_status = 0;
    end
    

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

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

  5. Чтобы преобразовать алгоритм с плавающей точкой в фиксированную точку, нажмите Convert.

    В процессе преобразования с фиксированной точкой программное обеспечение проверяет предлагаемые типы и генерирует следующие файлы в codegen\dti\fixpt папка в локальной рабочей папке:

    • dti_fixpt.m - версия с фиксированной точкой dti.m.

    • dti_wrapper_fixpt.m - этот файл преобразует значения данных с плавающей точкой, предоставленные тестовым файлом, в фиксированные точки, определенные для входов во время преобразования. Приложение подает эти значения с фиксированной точкой в преобразованный проект с фиксированной точкой, dti_fixpt.m.

    • dti_fixpt_report.html - этот отчет показывает сгенерированный код фиксированной точки и результаты инструментирования с фиксированной точкой.

    • dti_report.html - этот отчет показывает исходный алгоритм и результаты инструментирования с фиксированной точкой.

    • dti_fixpt_args.mat - MAT-файл, содержащий структуру для входных параметров, структуру для выходных аргументов и имя файла с фиксированной точкой.

    Если во время валидации возникают ошибки или предупреждения, они отображаются на вкладке Output. См. «Проверка типов».

  6. В списке Output Files выберите dti_fixpt.m. Приложение отображает сгенерированный код с фиксированной точкой.

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

    1. Щелкните стрелку Settings.

    2. Разверните настройки Plotting and Reporting и установите Plot with Simulation Data Inspector равными Yes.

    3. Щелкните стрелку Test. Выберите Log inputs and outputs for comparison plots. Нажмите Test.

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

    4. Можно использовать Данные моделирования Inspector, чтобы просмотреть информацию о запуске с плавающей и фиксированной точками и сравнить результаты. Для примера сравните значения с плавающей и фиксированной точками для выхода y, выберите y. Нажмите Compare. Установите Baseline на исходный запуск и Compare to на прогон конвертера. Нажмите Compare.

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

  8. На вкладке Verification Output приложение предоставляет ссылку на Fixed_Point Report.

    Чтобы открыть отчет, щелкните ссылку dti_fixpt_report.html.

  9. Щелкните Next, чтобы перейти к Generate Code шагу.

Сгенерируйте код С с фиксированной точкой

  1. В диалоговом окне Generate установите Build source равным Fixed-Point и Build type к Source Code.

  2. Установите Language значение C.

  3. Щелкните Generate, чтобы сгенерировать библиотеку с помощью настроек проекта по умолчанию.

    MATLAB Coder создает проект и генерирует статическую библиотеку на C и вспомогательные файлы в подпапке по умолчанию codegen/lib/dti_fixpt.

  4. Приложение отображает сгенерированный код для dti_fixpt.c. В сгенерированном коде C переменным присваиваются типы данных с фиксированной точкой.

  5. Щелкните Next, чтобы перейти на страницу Finish Workflow.

    На странице Finish Workflow приложение отображает сводные данные проекта и ссылки на сгенерированные выходные файлы.