В этом примере показано, как создавать вызовы определенной установленной библиотеки FFTW. Дополнительные сведения о FFTW см. в разделе www.fftw.org.
При моделировании модели, включающей функциональный блок MATLAB, вызывающий функции быстрого преобразования Фурье (FFT) MATLAB ®, программное обеспечение моделирования использует библиотеку, используемую MATLAB для алгоритмов FFT. Если для этой модели создается код C/C + +, по умолчанию генератор кода создает код для алгоритмов БПФ вместо создания вызовов библиотеки БПФ. Чтобы увеличить скорость быстрых преобразований Фурье в сгенерированном коде, укажите, что генератор кода вызывает определенную установленную библиотеку FFTW.
Генератор кода производит вызовы библиотеки FFTW при выполнении всех следующих условий:
Функциональный блок MATLAB вызывает одну из следующих функций MATLAB:fft, fft2, fftn, ifft, ifft2, или ifftn.
Код C/C + + генерируется из модели, включающей функциональный блок MATLAB.
У вас есть доступ к установке библиотеки 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, напишите класс обратного вызова FFT. Предоставление общего доступа к классу обратного вызова другим пользователям, которые хотят использовать эту библиотеку 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.
Создание модели Simulink ®.
Добавьте в модель функциональный блок MATLAB.
В блоке MATLAB Function добавьте код, вызывающий функцию MATLAB FFT. Например, добавьте функцию 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. В диалоговом окне «Параметры конфигурации» задайте для параметра «Пользовательский обратный вызов библиотеки БПФ» значение useMyFFTW.
Класс обратного вызова должен находиться в пути MATLAB.
Создайте модель.
Библиотека FFTW должна быть доступна в среде выполнения. Если библиотека FFTW является общей, используйте переменные среды или параметры компоновщика, чтобы указать расположение библиотеки.
На платформе Windows измените переменную среды PATH.
На платформе Linux измените переменную среды LD_LIBRARY_PATH или используйте rpath вариант компоновщика.
На платформе macOS измените переменную среды DYLD_LIBRARY_PATH или используйте rpath вариант компоновщика.
Чтобы указать rpath linker, можно использовать информацию о построении addLinkFlags метод в updateBuildInfo метод вашего coder.fftw.StandaloneFFTW3Interface класс. Например, для компилятора GCC:
buildInfo.addLinkFlags(sprintf('-Wl,-rpath,"%s"',libPath));
coder.fftw.StandaloneFFTW3Interface