加速快速傅里叶变换的代码生成从MATLAB函数块
这个例子展示了如何生成对特定安装的FFTW库的调用。有关FFTW的更多信息,请参见www.fftw.org.
当您模拟一个包含MATLAB函数调用MATLAB的块®快速傅里叶变换(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
.使用这个示例回调类作为模板。
The MathWorks, Inc.版权所有classdefuseMyFFTW < code .fftw. standalonefftw3interface方法(静态)函数th = getNumThreads code .inline(“总是”);Th = int32(code .const(1));结束函数updateBuildInfo(buildInfo, ctx) fftwLocation =“/ usr / lib / fftw”;includePath = fullfile(fftwLocation,“包括”);buildInfo.addIncludePaths (includePath);libPath = fullfile(fftwLocation,“自由”);%的两倍libName1 =“libfftw3-3”;[~, libExt] = ctx.getStdLibInfo();libName1 = [libName1 libExt];addLinkObjects(buildInfo, libName1, libPath, 1000, true, true);%的单libName2 =“libfftw3f-3”;[~, libExt] = ctx.getStdLibInfo();libName2 = [libName2 libExt];addLinkObjects(buildInfo, libName2, libPath, 1000, true, true);结束结束结束
实现updateBuildInfo
而且getNumThreads
方法。在updateBuildInfo
方法,设置fftwLocation
到库安装的完整路径。集includePath
包含的文件夹的完整路径fftw3.h
.集libPath
到包含库文件的文件夹的完整路径。如果您的FFTW安装使用多个线程,请修改getNumThreads
方法返回要使用的线程数。
可选地,你可以实现这些方法:
getPlanMethod
指定FFTW规划方法。看到coder.fftw.StandaloneFFTW3Interface
.锁
而且解锁
将多线程访问同步到FFTW规划过程。看到同步多线程FFTW规划从MATLAB函数块生成的代码.
通过指定一个FFT回调类生成FFTW调用
创建一个Simul金宝appink®模型。
添加一个MATLAB函数块到模型。
在MATLAB函数块,添加代码,调用MATLAB FFT函数。例如,添加函数
myfft
调用MATLAB函数fft
.函数Y = myfft() t = 0:1/50:10-1/50;X = sin(2* *15*t) + sin(2* *20*t);Y = fft(x);结束
把积木连接起来。
指示代码生成器产生对FFT库回调类中指定的FFTW库的调用
useMyFFTW
.2 .在“配置参数”对话框中设置自定义FFT库回调来useMyFFTW
.回调类必须在MATLAB路径上。
构建模型。
在执行环境中找到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