В этом примере показано, как сгенерировать вызовы определенной установленной библиотеки FFTW. Для получения дополнительной информации о FFTW, смотрите www.fftw.org.
Когда вы симулируете модель, которая включает блок MATLAB Function, который вызывает функции быстрого преобразования Фурье (FFT) MATLAB®, программное обеспечение симуляции пользуется библиотекой, которой MATLAB пользуется для Алгоритмов бпф. Если вы генерируете код C/C++ для этой модели, по умолчанию, генератор кода производит код для Алгоритмов бпф вместо того, чтобы произвести вызовы библиотеки FFT. Чтобы увеличить скорость быстрых преобразований Фурье в сгенерированном коде, укажите, что генератор кода производит вызовы определенной установленной библиотеки FFTW.
Генератор кода производит вызовы библиотеки FFTW, когда все эти условия верны:
Блок MATLAB Function вызывает один из них MATLAB functions:fftfft2fftnifftifft2, или ifftn.
Вы генерируете код C/C++ из модели, которая включает блок MATLAB Function.
У вас есть доступ к установке библиотеки FFTW, версии 3.2 или позже.
Вы задаете установку библиотеки FFTW в классе коллбэка библиотеки FFT, который выводит из coder.fftw.StandaloneFFTW3Interface.
Вы устанавливаете параметр конфигурации Custom FFT library callback на имя класса коллбэка.
Если у вас нет доступа к установленной библиотеке FFTW, версии 3.2 или позже, то необходимо установить тот.
Для платформы Linux® или платформы Mac, рассмотрите использование диспетчера пакетов, чтобы установить библиотеку FFTW.
Для платформы Windows®, в дополнение к .dll файлы, у вас должен быть .lib импортируйте библиотеки, как описано в замечаниях по установке Windows о веб-сайте FFTW.
Смотрите инструкции по установке для своей платформы на веб-сайте FFTW.
Чтобы задать вашу установку библиотеки FFTW, запишите класс коллбэка БПФ. Совместно используйте класс коллбэка с другими, которые хотят пользоваться этой библиотекой FFTW для вызовов FFTW.
Класс коллбэка должен вывести из абстрактного класса coder.fftw.StandaloneFFTW3Interface. Используйте этот класс коллбэка в качестве примера в качестве шаблона.
% copyright 2017 The MathWorks, Inc. classdef useMyFFTW < coder.fftw.StandaloneFFTW3Interface methods (Static) function th = getNumThreads coder.inline('always'); th = int32(coder.const(1)); end function updateBuildInfo(buildInfo, ctx) fftwLocation = '/usr/lib/fftw'; includePath = fullfile(fftwLocation, 'include'); buildInfo.addIncludePaths(includePath); libPath = fullfile(fftwLocation, 'lib'); %Double libName1 = 'libfftw3-3'; [~, libExt] = ctx.getStdLibInfo(); libName1 = [libName1 libExt]; addLinkObjects(buildInfo, libName1, libPath, 1000, true, true); %Single libName2 = 'libfftw3f-3'; [~, libExt] = ctx.getStdLibInfo(); libName2 = [libName2 libExt]; addLinkObjects(buildInfo, libName2, libPath, 1000, true, true); end end end
Реализуйте updateBuildInfo и getNumThreads методы. В updateBuildInfo метод, набор fftwLocation к полному пути для вашей установки библиотеки. Установите includePath к полному пути папки, которая содержит fftw3.h. Установите libPath к полному пути папки, которая содержит файлы библиотеки. Если ваша установка FFTW использует несколько потоков, измените getNumThreads метод, чтобы возвратить количество потоков, которые вы хотите использовать.
Опционально, можно реализовать эти методы:
getPlanMethod задавать FFTW планирование метода. Смотрите coder.fftw.StandaloneFFTW3Interface.
lock и unlock синхронизировать многопоточный доступ к процессу планирования FFTW. Смотрите Синхронизируют Многопоточный FFTW, Планирующий в Коде, Сгенерированном от блока MATLAB function.
Создайте модель Simulink®.
Добавьте блок MATLAB Function в модель.
В блоке MATLAB Function добавьте код, который вызывает функцию БПФ MATLAB. Например, добавьте функциональный myfft это вызывает функцию MATLAB fft.
function y = myfft() t = 0:1/50:10-1/50; x = sin(2*pi*15*t) + sin(2*pi*20*t); y = fft(x); end
Соедините блоки.

Укажите, что генератор кода производит вызовы библиотеки FFTW, заданной в классе коллбэка библиотеки FFT useMyFFTW. В диалоговом окне Configuration Parameters, набор Custom FFT library callback к useMyFFTW.
Класс коллбэка должен быть на пути MATLAB.
Создайте модель.
Библиотека FFTW должна быть доступной в вашей среде выполнения. Если библиотека FFTW совместно используется, используйте переменные окружения или опции компоновщика, чтобы задать местоположение библиотеки.
На платформе Windows измените переменную окружения PATH.
На платформе Linux измените переменную окружения LD_LIBRARY_PATH или используйте rpath опция компоновщика.
На macOS платформе измените переменную окружения DYLD_LIBRARY_PATH или используйте rpath опция компоновщика.
Задавать rpath опция компоновщика, можно использовать информацию о сборке addLinkFlags метод в updateBuildInfo метод вашего coder.fftw.StandaloneFFTW3Interface класс. Например, для компилятора GCC:
buildInfo.addLinkFlags(sprintf('-Wl,-rpath,"%s"',libPath));
coder.fftw.StandaloneFFTW3Interface