我有一个2048点FFT IP,如何使用它来计算512点FFT?
有不同的方法可以实现这一点,但最简单的方法是将输入数据复制4次,以获得2048个样本的信号。注意,DFT(FFT计算的内容)可以被视为假定输入信号被无限复制。因此,我们只是提供了这个无限长周期信号的更大“视野”。
结果得到的FFT将有512个非零值,在它们之间有零值。每个非零值的大小也将是512点FFT产生的大小的四倍,因为有四倍的输入样本(即使正向变换没有归一化,在反向变换中使用1/N归一化常被应用)。
以下是MATLAB的验证:
data = randn(1,512);
ft = fft(data); % 512-point FFT
data = repmat(data,1,4);
ft2 = fft(data); % 2048-point FFT
ft2 = ft2(1:4:end) / 4; % 512-point FFT
assert(all(ft2==ft))
2048/512 = 4
输出(即在基于0的索引系统中的output[0]
、output[3]
等)来获得结果。x = [1,2,3,4]
fft(x)
ans> 10.+0.j,
-2.+2.j,
-2.+0.j,
-2.-2.j
x = [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0]
fft(x)
ans> 10.+0.j, 6.499-6.582j, -0.414-7.242j, -4.051-2.438j,
-2.+2.j, 1.808+1.804j, 2.414-1.242j, -0.257-2.3395j,
-2.+0.j, -0.257+2.339j, 2.414+1.2426j, 1.808-1.8042j,
-2.-2.j, -4.051+2.438j, -0.414+7.2426j, 6.499+6.5822j