В этом примере показано, как заменить пользовательскую функцию функцией аппроксимации таблицы подстановки с помощью fiaccel функция.
Для завершения этого примера необходимо установить следующие продукты:
MATLAB ®
Designer™ с фиксированной точкой
Компилятор C
См. раздел Поддерживаемые компиляторы.
Вы можете использовать mex -setup для изменения компилятора по умолчанию. См. раздел Изменение компилятора по умолчанию.
Создайте функцию MATLAB, custom_fcn.m. Это функция, которую требуется заменить.
function y = custom_fcn(x) y = 1./(1+exp(-x)); end
Создание функции-оболочки, вызывающей custom_fcn.m.
function y = call_custom_fcn(x) y = custom_fcn(x); end
Создайте тестовый файл, custom_test.m, которая использует call_custom_fcn.m.
close all x = linspace(-10,10,1e3); for itr = 1e3:-1:1 y(itr) = call_custom_fcn( x(itr) ); end plot( x, y );
Создание объекта конфигурации замены функции для аппроксимации custom_fcn. Укажите дескриптор функции пользовательской функции и задайте для числа точек, используемых в таблице поиска, значение 50.
q = coder.approximation('Function','custom_fcn','CandidateFunction',@custom_fcn, 'NumberOfPoints',50);
Создать coder.FixptConfig объект, fixptcfg. Укажите имя тестового файла и включите числовое тестирование. Свяжите объект конфигурации замены функции с объектом конфигурации с фиксированной точкой.
fixptcfg = coder.config('fixpt'); fixptcfg.TestBenchName = 'custom_test'; fixptcfg.TestNumerics = true; fixptcfg.addApproximation(q);
Создание кода MATLAB с фиксированной точкой.
fiaccel -float2fixed fixptcfg call_custom_fcn
fiaccel генерирует код MATLAB с фиксированной точкой в call_custom_fcn_fixpt.m.
Чтобы просмотреть сгенерированный код с фиксированной точкой, щелкните ссылку на call_custom_fcn_fixpt.
Созданный код содержит аппроксимацию таблицы подстановки, replacement_custom_fcn, для custom_fcn функция. Процесс преобразования с фиксированной точкой выводит диапазоны для функции, а затем использует интерполированную таблицу поиска для замены функции. Таблица подстановки использует 50 точек, как указано. По умолчанию используется линейная интерполяция и минимальное и максимальное значения, обнаруженные при выполнении тестового файла.
Сгенерированная функция с фиксированной точкой, call_custom_fcn_fixpt, вызывает это приближение вместо вызова custom_fcn.
function y = call_custom_fcn_fixpt(x) fm = get_fimath(); y = fi(replacement_custom_fcn(x), 0, 14, 14, fm); end
Теперь можно протестировать созданный код с фиксированной точкой и сравнить результаты с исходной функцией MATLAB. Если поведение сгенерированного кода с фиксированной точкой недостаточно близко соответствует поведению исходного кода, измените метод интерполяции или количество точек, используемых в таблице поиска, а затем восстановите код.