我正在尝试在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
的行,因此我认为计算量很大,因为这种情况发生在所有迭代中。我认为我应该能够通过使用向量/矩阵表示法或通过使用具有虚拟变量的函数来使其更小,然后迭代这些函数。但是我不知道如何开始这个过程。
任何帮助或建议将不胜感激。
我正在尝试在matlab中编写与内置fft函数基本相同的代码。因此,计算任何给定输入向量的离散傅立叶变换。转换由%...
使用implicit expansion,您可以大大减少算法的计算时间: