是否可以使用 32 点 FFT 和 16 点 FFT 计算 48 点 FFT?

信息处理 fft 离散信号 信号分析 自由度
2022-02-10 04:27:20

我必须使用仅支持 2 次幂的长度的 N 点 FFT 库函数计算 48 点 FFT。

是否可以使用 32 点 FFT 和 16 点 FFT 计算 48 点 FFT?如果不是,实现 48 点 FFT 的最有效方法是什么?

2个回答

如果不是,实现 48 点 FFT 的最有效方法是什么?

三个 16 点 FFT 加上一组 3 点“蝴蝶”。

Matlab 示例

%% Do a 48 point FFT, this is NOT efficient but shows the principle
n = 48;
nFFT = 16;
x0 = randn(n,1); % test vector
fx0 = fft(x0); % reference
x1 = reshape(x0,3,nFFT)'; % reshape into 3 N-16 vectors
fx1 = fft(x1);   % 3 FFTs 16 points each
fx2 = [fx1; fx1; fx1]; % periodic repetition for easy butterfly code
W = exp(-1i*2*pi*(0:n-1)'/n); % twiddle factor, N = 48
% execute a 3 point "butterfly"
fy = fx2(:,1) + fx2(:,2).*W + fx2(:,3).*W.^2;
% calculate and print error
d = (fy-fx0);
fprintf('Relative Error = %6.2fdB \n',20*log10(sum(abs(d))./sum(abs(fx0))));

不,那是不可能的。您可以使用 radix-N 方法从多个 16 点 FFT 中拼凑出 48 点 FFT 的 48 点 FFT。

您甚至可以使用拆分基数算法从 32 点和 16 点 FFT 拼凑出 48 点 FFT - 但它不会

使用 32 点 FFT 和 16 点 FFT 的 48 点 FFT

使用多个 32 点 FFT 和多个 16 点 FFT 的 48 点 FFT

但是,在实践中,您将希望通过 Radix-2-combine 16 点 FFT 来实现 32 点 FFT,因此这种选择只是通过 16 点 FFT 实现 48-FFT 的“尴尬”方式,反正。