我已经问过这个问题 2 次,但我仍然感到困惑,因为这在互联网上的任何地方都没有并且解释得当。我在本文档中找到了一些信息,我将应用他们的方法,但理解起来很困惑。这是文档http://www.altera.com/literature/an/an480.pdf。如果有人有时间向我解释,请向我解释本文档中基数 2 阶段的位置,以计算大小 512 的 fft,因为它已被分成 3 个长度为 512 的小序列,然后将 fft 应用于小长度,然后计算它分别将其与旋转因子相结合和相乘。请帮助我,我在这里被困了一个多星期。
FFT 大小 1536 的解决方案
信息处理
fft
2022-02-04 10:50:39
2个回答
很难看出可以在 Peter K. 的答案中添加什么以使其更清晰。这是一段 MATLAB 代码,它展示了整个过程的全部荣耀。只需在 MATLAB 或 octave 中复制和粘贴,您就可以一次单步执行一行。
%% 1536 FFT based on three FFTs of 512 each
n = 1536;
% Create a piece of noise
x = randn(n,1);
% calculate FFT using MATLAB native fft() function.
% We'll use this as a reference to prove it works
fx = fft(x);
% Break down into three signals of 512 points each
p = x(1:3:end);
q = x(2:3:end);
r = x(3:3:end);
% FFT each of those. This is a 512 power-of-two standard FFT
fp = fft(p);
fq = fft(q);
fr = fft(r);
% Do three times periodic extention (just repeat it three times)
fp3 = [fp; fp; fp];
fq3 = [fq; fq; fq];
fr3 = [fr; fr; fr];
% calculate the 1536 twiddle factors
k3 = (0:n-1)';
W3 = exp(-j*2*pi*k3/n);
% assemble the result
fy3 = fp3 + W3.*fq3 + W3.^2.*fr3;
% calculate the error
ferror = fy3-fx;
fprintf('Error = %6.2f dB\n',10*log10(sum(ferror.*conj(ferror))./sum(fx.*conj(fx))));
您的 FFT 大小为。因此,您需要的 FFT 基数是 3 和 2(或其他 2 的幂)。
FFT 的工作方式是将全长 DFT 分解为更小(素数长度)、更简单的 FFT。分解特定长度的方法是查看长度的主要因素。
有关更多详细信息,请参阅拆分基数 FFT 算法的维基百科条目。
编辑
