Замените Функцию exp на Интерполяционную таблицу

С HDL Coder™ можно обработать функции, которые не поддерживаются для фиксированной точки и заменяют собственные функции. Чтобы заменить пользовательскую функцию на Интерполяционную таблицу, используйте Приложение HDL Coder, или fiaccel codegen функция.

От пользовательского интерфейса

В этом примере показано, как заменить пользовательскую функцию на Интерполяционную таблицу с помощью приложения HDL Coder.

Создайте алгоритм и тестовые файлы

В локальной, перезаписываемой папке:

  1. Создайте функцию MATLAB®, custom_fcn, который является функцией, которую вы хотите заменить.

    function y = custom_fcn(x)
      y = 1./(1+exp(-x));
    end
  2. Создайте функцию обертки, которая вызывает custom_fcn.

    function y = call_custom_fcn(x)
      y = custom_fcn(x);
    end
  3. Создайте тестовый файл, custom_test, который использует call_custom_fcn.

    close all
    
    x = linspace(-10,10,1e3);
    for itr = 1e3:-1:1
       y(itr) = call_custom_fcn( x(itr) );
    end
    plot( x, y );
    

Создайте и Настроенный Проект HDL Coder

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

  2. Чтобы открыть приложение HDL Coder, в командной строке MATLAB, входят hdlcoder. Установите Name на custom_project.prj и нажмите OK. Проект открывается в рабочем пространстве MATLAB.

  3. В окне проекта, на вкладке MATLAB Function, щелкают по ссылке Add MATLAB function. Просмотрите к файлу call_custom_fcn.m, и затем нажмите OK, чтобы добавить файл в проект.

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

  1. К входу define вводит для call_custom_fcn.m, на вкладке MATLAB Function нажмите типы Autodefine.

  2. Добавьте custom_test как тестовый файл, и затем нажимают Run.

    От тестового файла HDL Coder определяет тот x скаляр дважды.

  3. Нажмите Use These Types.

Замените custom_fcn на Интерполяционную таблицу

  1. Чтобы открыть HDL Workflow Advisor, нажмите Workflow Advisor, и в окне Workflow Advisor, нажмите Fixed-Point Conversion.

  2. Заменять custom_fcn с Интерполяционной таблицей, на вкладке Function Replacements, вводят custom_fcn, выберите Lookup Table, и затем щелкните +.

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

  3. Под Run Simulation выберите Log data for histogram, и затем нажмите Run Simulation. Проверьте тот custom_test файл выбран как тестовый файл.

    Симуляция запускается и минимум симуляции отображений инструмента и максимальные области значений на вкладке Variables. HDL Coder строит результаты симуляции в редакторе MATLAB.

Подтвердите фиксированные точки

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

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

  2. Чтобы подтвердить сборку при помощи предложенных типов, нажмите Validate Types.

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

  3. Чтобы просмотреть сгенерированную фиксированную точку, нажмите call_custom_fcn_fixpt ссылка.

    Сгенерированная функция фиксированной точки, call_custom_fcn_fixpt.m, вызовы это приближение вместо того, чтобы вызвать custom_fcn.

    function y = call_custom_fcn_fixpt(x)
      fm = get_fimath();
    
      y = fi(replacement_custom_fcn(x), 0, 14, 14, fm);
    end
    
    function fm = get_fimath()
    	fm = fimath('RoundingMethod', 'Floor',...
    	     'OverflowAction', 'Wrap',...
    	     'ProductMode','FullPrecision',...
    	     'MaxProductWordLength', 128,...
    	     'SumMode','FullPrecision',...
    	     'MaxSumWordLength', 128);
    end

Из командной строки

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

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

Чтобы завершить этот пример, необходимо установить следующие продукты:

Создайте алгоритм и тестовые файлы

  1. Создайте функцию MATLAB, my_fcn.m, это вызывает exp функция.

    function y = my_fcn(x)
      y = exp(x);
    end
    
  2. Создайте тестовый файл, my_fcn_test.m, это использует my_fcn.m.

    close all
    
    x = linspace(-10,10,1e3);
    for itr = 1e3:-1:1
       y(itr) = my_fcn( x(itr) );
    end
    plot( x, y );
    

Сконфигурируйте приближение

Создайте функциональный заменяющий объект настройки аппроксимировать exp функция, с помощью настроек по умолчанию линейной интерполяции и 1 000 точек в интерполяционной таблице.

q = coder.approximation('exp');

Настройте объект настройки

Создайте coder.FixptConfig объект, fixptcfg. Укажите, что тестовый файл называет и включает тестирование численных данных. Сопоставьте функциональный заменяющий объект настройки с объектом настройки фиксированной точки.

fixptcfg = coder.config('fixpt');
fixptcfg.TestBenchName = 'my_fcn_test';
fixptcfg.TestNumerics = true;
fixptcfg.DefaultWordLength = 16;
fixptcfg.addApproximation(q);

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

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

codegen -float2fixed fixptcfg my_fcn

Просмотрите сгенерированную фиксированную точку

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

Сгенерированный код содержит приближение интерполяционной таблицы, replacement_exp, для exp функция. Процесс преобразования фиксированной точки выводит области значений для функции и затем использует интерполированную интерполяционную таблицу, чтобы заменить функцию. По умолчанию интерполяционная таблица использует линейную интерполяцию, 1 000 точек и минимальные и максимальные значения, обнаруженные путем выполнения тестового файла.

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

function y = my_fcn_fixpt(x)
  fm = get_fimath();

  y = fi(replacement_exp(x), 0, 16, 1, fm);
end

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

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

Связанные примеры

Больше о