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

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

Примечание

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

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

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

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

  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

Откройте приложение Fixed-Point Converter

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

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

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

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

  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, чтобы перейти к Convert to Fixed Point шагу.

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

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

    Если функции не поддерживаются для преобразования с фиксированной точкой, приложение отображает их на вкладке 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, чтобы перейти на страницу Finish Workflow.

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

Интеграция кода с фиксированной точкой

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

  1. Копировать dti_fixpt.m в локальную рабочую папку.

  2. Чтобы получить fimath свойства для входного параметра, посмотрите на get_fimath функция в dti_fixpt.m.

    function fm = get_fimath()
    	fm = fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128);
    end
    

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

  4. Сгенерируйте MEX-функцию для dti_fixpt.m.

    fm = fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128);
    fiaccel dti_fixpt -args {fi( 0, 1, 16, 14, fm )}

    fiaccel генерирует MEX-функцию, dti_fixpt_mex, в текущей папке.

  5. Теперь можно вызвать эту MEX-функцию вместо исходного алгоритма MATLAB.