用NAG函数加速Matlab离散傅立叶变换

用NAG函数加速Matlab离散傅立叶变换,matlab,fft,convolution,Matlab,Fft,Convolution,我想把一些Matlab的傅立叶变换命令翻译成。DFT是: fft(A,n) fft(A,n,dim) ifft(A,[],dim) 其中,A是一个复数向量。例如fft(A,n)是c06fc(real(A),imag(A),'n',n) 问题:我很难找到合适的NAG函数,它们与fft(A,n,dim)和ifft(A,[],dim)的工作相同 背景:我正在使用Bruno Luong的卷积函数计算具有100万个复杂元素的向量卷积,convnfft(A,B,'same')。Luong的函数使用FFT

我想把一些Matlab的傅立叶变换命令翻译成。DFT是:

  • fft(A,n)

  • fft(A,n,dim)

  • ifft(A,[],dim)

其中,
A
是一个复数向量。例如
fft(A,n)
c06fc(real(A),imag(A),'n',n)

问题:我很难找到合适的NAG函数,它们与
fft(A,n,dim)
ifft(A,[],dim)
的工作相同

背景:我正在使用Bruno Luong的卷积函数计算具有100万个复杂元素的向量卷积,
convnfft(A,B,'same')
。Luong的函数使用FFT快速计算卷积,我想通过使用NAG函数进一步加快计算速度。

几句话:

  • MATLAB用于DFT(参见MATLAB)。
    FFTW被认为是最快的FFT库。我真的怀疑NAG的实现是否更快。你不会得到比MATLAB更快的FFT
  • 我看到你在频域中使用乘法,在时域中应用卷积。我只想指出,做这件事并不总是更快。这实际上取决于滤波器的长度与信号的长度。如果过滤器很短,最好在时域中进行
  • 一维卷积的时域复杂度与傅里叶域复杂度 假设滤波器长度为m,信号长度为n(假设n>m)。
    然后,渐近地,Tome域卷积的复杂度为O(mn)。
    然而,要在傅里叶域中应用卷积,必须使滤波器和信号的长度相同,然后复杂性为O(2nlog(n))。
    因此,对于2log(n)>m的情况,最好使用时域卷积


    由于这是渐近分析,实际上需要2log(n)>>m才能获得时域卷积的实际增益。

    你的问题是什么?谢谢@Royi。1.我已经调查了
    fftw
    ,但速度几乎没有改善。2.听起来很有趣。你能提供一些很好的参考资料吗?嗨,你把FFTW和什么做过比较吗?如我上面所写,如果将其与MATLAB进行比较,当您使用
    fft
    ifft
    时,您不会看到增益,因为MATLAB使用FFTW。无论如何,您无法获得比MATLAB内部更快的FFT(也许,只是也许,英特尔MKL FFT在某些情况下更好)。