文档

通过使用FFTW库调用加速生成的独立代码中的快速傅里叶变换

这个示例展示了如何在生成独立代码(静态库、动态链接库或可执行程序)时生成对特定已安装的FFTW库的调用。有关FFTW的更多信息,请参见www.fftw.org

当您从MATLAB生成一个MEX函数时®代码包含快速傅里叶变换(FFT)函数,代码生成器使用MATLAB用于FFT算法的库。如果生成独立的C/ c++代码,默认情况下,代码生成器为FFT算法生成代码,而不是生成FFT库调用。要在生成的独立代码中提高快速傅里叶变换的速度,请指定代码生成器生成对特定安装的FFTW库的调用。

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

  • 您的MATLAB代码调用以下函数之一:fftfft2fftn传输线ifft2,或ifftn

  • 生成独立的C/ c++代码。

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

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

  • 你设置CustomFFTCallback配置参数为回调类的名称。在MATLAB编码器™App,使用自定义FFT库回调设置。

安装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);结束结束结束

实现updateBuildInfogetNumThreads方法。在updateBuildInfo方法,设置fftwLocation到库安装的完整路径。集includePath的文件夹的完整路径fftw3.h.集libPath到包含库文件的文件夹的完整路径。如果您的FFTW安装使用多个线程,请修改getNumThreads方法返回要使用的线程数。

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

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

在独立的C代码中生成FFTW库调用:

  1. 编写一个调用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);结束

  2. 为静态库、动态链接库或可执行程序定义代码生成配置对象。例如,为动态链接库定义配置对象。

    CFG = coder.config(“dll”);

  3. 指定FFTW回调类useMyFFTW

    cfg。CustomFFTCallback =“useMyFFTW”;

    回调类必须在MATLAB路径上。

  4. 生成的代码。

    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));

另请参阅

相关的话题

外部网站

这个话题有帮助吗?