MATLAB:查找离散傅立叶变换的更快方法

我正在尝试在matlab中编写与内置fft函数基本相同的代码。因此,可以计算任何给定输入向量的离散傅立叶变换。

变换由

给出
%                    N
%      X(k) =       sum  x(n)*exp(-j*2*pi*(k-1)*(n-1)/N),1 <= k <= N.
%                   n=1

现在我创建了自己的代码来执行此操作,但是当我查看计算时间时,计算工作量约为200倍。显然,我想减少这一点。

在我的代码的计算部分下面,其中y是输出向量。

N=length(input_vector)

for k = 1:N
        y(k)=0;
        for n = 1:N
            term = input_vector(n)*exp(-2*pi*1i*(n-1)*(k-1)/N);
            y(k)=y(k)+term;
        end
end

现在,我认为由于for循环和带有y(k)=y(k)+term的一行而导致计算量很大,因为这种情况发生在所有迭代中。我认为我应该能够通过使用向量/矩阵表示法或通过使用具有虚拟变量的函数来使其更小,然后迭代这些函数。但是我不知道如何开始这个过程。

任何帮助或建议将不胜感激。

oxiang741 回答:MATLAB:查找离散傅立叶变换的更快方法

使用implicit expansion可以大大减少算法的计算时间:

% Vector length
N = length(input_vector);

% Vectorized DFT algorithm
y = sum(input_vector.*exp(-2*pi*1i*[0:N-1].'*[0:N-1]/N),2);

但是有两个缺点:

  1. 向量化将消耗大量内存(因为向量N * N 必须创建)
  2. 它不会比内置功能更快。
本文链接:https://www.f2er.com/3160507.html

大家都在问