大小的 FFT 不是 2 的幂

信息处理 fft
2021-12-24 16:10:18

我的问题是关于不是 2 的幂的信号的输入大小,我们必须考虑它。一些解决方案说,假设如果我们想取 1800 的 fft,我们应该将它补零直到 2048 的长度,使其成为 2 的幂,然后应用基数 2 算法。但也有其他解决方案应用不同算法的组合而无需零填充,然后计算所需的 FFT。我的问题是,如果我们使用不同算法的组合来计算大小为 1800 的 fft,如果我们必须取 1800 的 fft,是否将信号零填充到长度为 2048结果是一样的。

2个回答

得到的 FFT 将有所不同:不是在频率 for for处计算它们 . 但是,信息没有退化。2πn/1800  n=01799  2πn/2048  n=02047  

两种方法都是正确的:使用 1800 或 2048。我会使用“最小能量解决方案”(即最简单、最懒惰的解决方案)。这通常使用 2048 长度变换。

人们倾向于使用 radix-2 变换,因为他们不知道更好。似乎有很多关于 FFT 必须是 2 次方的错误信息。没有这样的约束。此外,他们可能不了解体面的非基数 2 算法,例如FFTW和其他库中可用的算法。

要看到任何长度的 FFT 都是信息保留的:

假设您的长度为 1800 的数据位于x. 表格X = fft(x,2048);(或不同于 1800 的其他长度)。
找到xx = ifft(X);
看看是什么sum(abs(x-xx(1:1800)));

另请参阅此问题及其答案。

需要了解的是,由于结果(和源)是谨慎的,FFT 并不是真正的傅立叶变换,而是实际上是傅立叶级数的发展。这意味着任何 FFT 的结果都不是单个数据块的变换,而是由相同数据块的无限级联组成的周期性信号的变换,有或没有由填充长度组成的分隔. (假设我分析的数据看起来像«m»,转换将是«...mmmmm...»或«... mmmmm ...»的发展,它们不是同一个信号。)

因此,没有填充意味着一个人将隐含地添加或删除源数据中的高频故障,这些故障来自于一个块的结尾和下一个块的开头(这是相同的)连接的不连续性。一个极端的例子是分析一个包含所有相同值的块。不填充的填充将在连续信号和矩形信号之间产生差异。

这样做的另一个结果是,填充越长,结果就越接近单个数据突发的变换,并且变换的分辨率越高。说无论经过,信息都不会退化,这并不完全准确。会有(以有限的方式),因为舍入错误和使用更长的缓冲区可能有助于防止它(再次,以非常有限的方式)。