使用NAG函数加速Matlab DFT

时间:2017-01-16 12:03:55

标签: matlab fft convolution

我想将一些Matlab傅立叶变换命令FFTsIFFTs翻译成NAG functions。 DFT是:

  • fft(A,n)

  • fft(A,n,dim)

  • ifft(A,[],dim)

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

问题:我无法找到与fft(A,n,dim)ifft(A,[],dim)执行相同工作的相应NAG功能。

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

1 个答案:

答案 0 :(得分:0)

几点评论:

  1. MATLAB使用FFTW进行DFT(参见MATLAB fftw()) FFTW被认为是最快的FFT库。我真的怀疑NAG的实施速度更快。您将获得比MATLAB中更快的FFT。
  2. 我看到你在频域中使用乘法在时域中应用卷积。我只是注意到它并不总是更快。它实际上取决于滤波器的长度与信号长度的比较。如果过滤器很短,则最好在时域中进行。
  3. 时域复杂度与一维卷积的傅里叶域

    假设滤波器长度为m且信号长度为n(假设n> m) 然后,渐近地,Tome Domain Convolution的复杂度为O(mn) 然而,要在傅立叶域中应用卷积,必须使滤波器和信号的长度相同,然后复杂度为O(2nlog(n))。
    因此,对于案例2log(n)> m最好使用Time Domain Convolution。

    由于这是实践中的渐近分析,因此需要2log(n)>> m在时域卷积上有实际的增益。