通过使用FFTW库调用加速生成的独立代码中的快速傅里叶变换
这个示例展示了如何在生成独立代码(静态库、动态链接库或可执行程序)时生成对特定已安装的FFTW库的调用。有关FFTW的更多信息,请参见www.fftw.org.
当您从MATLAB生成一个MEX函数时®代码包含快速傅里叶变换(FFT)函数,代码生成器使用MATLAB用于FFT算法的库。如果生成独立的C/ c++代码,默认情况下,代码生成器为FFT算法生成代码,而不是生成FFT库调用。要在生成的独立代码中提高快速傅里叶变换的速度,请指定代码生成器生成对特定安装的FFTW库的调用。
当所有这些条件都为真时,代码生成器产生FFTW库调用:
安装FFTW库
如果您无法访问已安装的FFTW库(3.2或更高版本),则必须安装一个。Linux操作系统®平台或Mac平台,考虑使用包管理器来安装FFTW库。对于Windows®平台,除了. dll
文件,你一定有. lib
如FFTW网站上的Windows安装说明所述,导入库。
参见您的平台的安装说明FFTW网站.
写一个FFT回调类
要指定FFTW库的安装,请编写一个FFT回调类。与其他希望在独立代码中使用这个FFTW库进行FFTW调用的人共享回调类。
回调类必须从抽象类派生coder.fftw.StandaloneFFTW3Interface
.使用这个示例回调类作为模板。
版权所有2017 MathWorks, Inc。classdefuseMyFFTW < coder.fftw. standalone efftw3接口方法(静态)函数th = getNumThreads coder.inline“总是”);Th = int32(coder.const(1));结束函数updateBuildInfo(buildInfo, ctx) fftwLocation =“/ usr / lib / fftw”;includePath = fullfile(fftwLocation,“包括”);buildInfo.addIncludePaths (includePath);libPath = fullfile(fftwLocation,“自由”);%的两倍libName1 =“libfftw3-3”;[~, libeext] = ctx.getStdLibInfo();libName1 = [libName1 libeext];addLinkObjects(buildInfo, libName1, libPath, 1000, true, true);%的单libName2 =“libfftw3f-3”;[~, libeext] = ctx.getStdLibInfo();libName2 = [libName2];addLinkObjects(buildInfo, libName2, libPath, 1000, true, true);结束结束结束
实现updateBuildInfo
和getNumThreads
方法。在updateBuildInfo
方法,设置fftwLocation
到库安装的完整路径。集includePath
的文件夹的完整路径fftw3.h
.集libPath
到包含库文件的文件夹的完整路径。如果您的FFTW安装使用多个线程,请修改getNumThreads
方法返回要使用的线程数。
可选地,你可以实现这些方法:
getPlanMethod
指定FFTW规划方法。看到coder.fftw.StandaloneFFTW3Interface
.锁
和解锁
同步多线程访问的FFTW规划过程。看到同步多线程访问的FFTW规划在生成的独立代码.
通过指定FFT库回调类生成FFTW库调用
在独立的C代码中生成FFTW库调用:
编写一个调用MATLAB快速傅里叶变换函数的MATLAB函数。例如,写一个函数
myfft
调用MATLAB函数fft
.函数Y = myfft()% # codegenT = 0:1/50:10-1/50;X = sin(2* *15*t) + sin(2* *20*t);Y = fft(x);结束
为静态库、动态链接库或可执行程序定义代码生成配置对象。例如,为动态链接库定义配置对象。
CFG = coder.config(“dll”);
指定FFTW回调类
useMyFFTW
.cfg。CustomFFTCallback =“useMyFFTW”;
回调类必须在MATLAB路径上。
生成的代码。
codegenmyfft配置cfg报告
在执行环境中找到FFTW库
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