MATLAB 和/或 Python 如何处理2n2nFFT中的样本规则

信息处理 matlab fft 采样 Python
2022-02-14 12:14:07

据我所知,FFT 要求原始数据点的数量必须是 2 的幂。

我想知道具有 FFT 函数的 MATLAB 或 Python 之类的工具是否会处理这个事实。

尤其是在 MATLAB 和 Python 中;想象一下,我在一个包含 13000 个样本的文件中有数据样本。如果我想读取此文件并绘制其 FFT,MATLAB 或 Python 的 FFT 函数如何处理该文件?函数是否截断样本并获得样本数为2n在执行算法之前?或者我应该自己取样2n样品在开始?

2个回答

Matlab 不要求样本数是 2 的幂。您可以在Matlab FFT 帮助页面中阅读更多相关信息。
它将处理任何长度的信号,并且不会截断或填充长度,除非您特别说明。
顺便说一句,在帮助页面中它说 Matlab FFT 基于 FFTW。在 FFTW 文档中它说:

FFTW 最擅长处理 2^a 3^b 5^c 7^d 11^e 13^f 形式的大小,其中 e+f 为 0 或 1,其他指数是任意的。其他大小是通过一种缓慢的通用算法计算的(即使对于素数大小,它仍然保持 O(n log n) 的性能)。

Python 没有 FFT,但它由 NumPy、SciPy、pyFFTW 等外部库提供。

这三个库都不关心输入的大小。它可以处理 2 的幂、素数等的长度。但素数长度的计算时间比复合长度长得多,因此用户通常选择有效的大小,或者在计算允许的情况下对它们进行零填充。

所以长度 997(素数)会很慢,但长度 1000(2*2*2*5*5*5)会很快。

其它你可能感兴趣的问题