exponenta event banner

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

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

  1. В локальной папке, доступной для записи, создайте функцию use_globals.m.

    function y = use_globals(u)
    %#codegen
    % Declare AR and B as global variables
    global AR;
    global B;
    AR(1) = u + B(1);
    y = AR * 2;

  2. В той же папке создайте тестовый файл, use_globals_tb.m который вызывает функцию.

    u = 55;
    global AR B;
    AR = ones(4);
    B=[1 2 3];
    y = use_globals(u);

  3. На панели инструментов MATLAB на вкладке Приложения в разделе Создание кода щелкните значок приложения Конвертер фиксированных точек.

  4. Чтобы добавить функцию точки входа, use_globals.m в проект на странице «Выбор исходных файлов» перейдите к файлу и нажмите «Открыть». Нажмите кнопку Далее.

  5. На странице Определение типов ввода (Define Input Types) добавьте use_globals_tb.m в качестве тестового файла. Щелкните Автоопределить типы ввода (Autodefine Input Types).

    Приложение определяет из тестового файла тип входных данных u является double(1x1).

  6. Выберите «Да» рядом с пунктом «Использует ли этот код глобальные переменные». По умолчанию приложение Fixed-Point Converter называет первую глобальную переменную в проекте g.

  7. Введите имена глобальных переменных в код. В поле справа от глобальной переменной AR, укажите его тип как double(4x4).

  8. Глобальная переменная B не назначен в use_globals функция. Определите эту переменную как глобальную константу, щелкнув поле справа от константы и выбрав Define Constant Value. Введите значение B как определено в тестовом файле, [1 2 3]. Приложение указывает, что B имеет значение[1 2 3]. Приложение указывает, что AR не инициализирован.

  9. Нажмите кнопку Далее. Приложение создает инструментальную функцию MEX для исходной функции MATLAB. На странице Преобразовать в фиксированную точку (Convert to Fixed-Point) щелкните Смоделировать (Simulate), чтобы смоделировать функцию, собрать информацию о диапазоне и получить предлагаемые типы данных.

  10. Щелкните Преобразовать (Convert), чтобы принять предложенные типы данных и преобразовать функцию в фиксированную точку.

    В сгенерированном коде с фиксированной точкой глобальная переменная AR сейчас AR_g.

    Функция оболочки содержит три глобальные переменные: AR, AR_g, и B, где AR_g устанавливается равным fi-casted AR, и AR устанавливается равным двойному литью AR_g. Глобальная переменная B не имеет отдельной переменной в коде с фиксированной точкой, поскольку она является константой.

    function y = use_globals_fixpt(u)
    %#codegen
    % Declare AR and B as global variables
    fm = get_fimath();
    
    global AR_g;
    global B;
    AR_g(1) = fi(u + B(1), 0, 6, 0, fm);
    y = fi(AR_g * fi(2, 0, 2, 0, fm), 0, 7, 0, fm);
    end
    
    
    function fm = get_fimath()
    	fm = fimath('RoundingMethod', 'Floor',...
     'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision',...
     'MaxProductWordLength', 128, 'SumMode', 'FullPrecision',...
     'MaxSumWordLength', 128);
    end
    

Связанные темы