主要内容

加速快速傅里叶变换的代码生成从MATLAB函数

这个例子展示了如何生成对特定安装的FFTW库的调用。有关FFTW的更多信息,请参见www.fftw.org

当您模拟一个包含MATLAB函数调用MATLAB的块®快速傅里叶变换(FFT)函数,仿真软件使用MATLAB所使用的FFT算法库。如果您为该模型生成C/ c++代码,默认情况下,代码生成器将为FFT算法生成代码,而不是生成FFT库调用。要在生成的代码中提高快速傅里叶变换的速度,请指定代码生成器生成对特定安装的FFTW库的调用。

当所有这些条件为真时,代码生成器产生FFTW库调用:

  • 一个MATLAB函数block调用下列MATLAB函数之一:fftfft2fftn传输线ifft2,或ifftn

  • 的模型生成C/ c++代码MATLAB函数块。

  • 您可以访问FFTW库安装,版本3.2或更高版本。

  • 派生的FFT库回调类中指定FFTW库安装coder.fftw.StandaloneFFTW3Interface

  • 你设置自定义FFT库回调配置参数设置为回调类的名称。

安装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方法返回要使用的线程数。

可选地,你可以实现这些方法:

通过指定一个FFT回调类生成FFTW调用

  1. 创建一个Simul金宝appink®模型。

  2. 添加一个MATLAB函数块到模型。

  3. 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);结束

  4. 把积木连接起来。

  5. 指示代码生成器产生对FFT库回调类中指定的FFTW库的调用useMyFFTW.2 .在“配置参数”对话框中设置自定义FFT库回调useMyFFTW

    回调类必须在MATLAB路径上。

  6. 构建模型。

在执行环境中找到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));

另请参阅

相关的话题

外部网站