试图对长度为2的向量进行快速傅立叶变换

时间:2018-01-22 22:10:23

标签: fft octave

如果操作正确,则应该有运行时间O(n log n)。

function d = ffTU(f)

n = [size(f)](1);

if n==1
  d = f;
  return;

else

  even=ffTU(f(2:2:end,:));
  odd =ffTU(f(1:2:end,:));

  for k=0:(n/2)-1
    T(k+1)= exp(-2i*pi*k/n)*odd(k+1);

  end

  for k=0:(n/2)-1
    d(k+1) = even(k+1) + T(k+1) + even(k+1) - T(k+1);
  end

end

我一直收到这些错误:

error: ffTU: A(I): index out of bounds; value 2 out of bound 1
error: called from
    ffTU at line 16 column 11

我知道我必须调整函数的索引,但我认为我已经解决了这个问题。

1 个答案:

答案 0 :(得分:1)

在循环之前预先分配T

T = zeros(n/2,1);

或者更好的是,在没有循环的情况下计算它:

k = (0:(n/2)-1).';
T = exp(-2i*pi*k/n).*odd(:);

您应该对d执行类似操作。

您还需要测试输入是否均匀。

而不是

n = [size(f)](1);

DO

n = size(f,1);

但是如果你的输入不是列向量,那就不好了。用

修复它
f = f(:);
n = size(f,1);

您计算d时出现错误,因为您将其设为2*evenT未使用T-T==0