了解用于振动分析实验的 FFT

信息处理 fft 信号分析 采样 频率
2022-01-30 00:12:22

我试图了解 FFT 如何工作以测量 3D 打印机的振动。我将使用 Arduino Nano 和 MPU6050 加速度计进行此操作。

为了正确地对 Arduino 进行编程,我需要先了解一些关于 FFT 的知识。因此,各种消息来源表明 FFT 适用于 2^n 个样本,例如“FFT 算法适用于有限数量的样本。这个数字需要为 2^n,其中 n 是一个整数(导致 32、64、128、 ETC)”。这实际上意味着什么?据我了解,如果我以 600Hz 的恒定采样率测量加速度 10 秒,我将得到 6000 个样本。这是否意味着我必须删除一些测量数据才能得到 4096 个样本,满足 2^n 个样本条件?或者用零填充我的样本以最终得到 8196 个样本,这也符合规定的条件?

谢谢!

2个回答

是的,没错,FFT 是一种提高 DFT 效率的算法,通过递归计算 DFT 来实现。DFT 是 DTFT 的样本,通过填充样本,您只需使 DTFT 样本分辨率更大,因此,如果您没有任何计算限制,请执行此操作。您的另一个选择是直接计算 DFT,或者使用其他算法,例如 Cooley–Tukey。

以下内容假设您在 PC 上进行信号分析,并且仅使用 Arduino 获取样本并将它们发送到您的 PC。

您的 Arduino Nano 微控制器没有存储一秒钟数据所需的内存。

各种消息来源表明 FFT 适用于 2^n 样本

长度为 2 次方的 FFT 的计算效率特别高。由于您可能不关心计算的效率,因此您不在乎。FFT 只是计算向量 DFT 的一种快速方法,最坏的情况是,仅从 DFT 的教科书公式计算 DFT 平面时,任何长度都是可能的。

这个数字需要是 2^n

那是完全错误的。FFT 存在多种长度,通常可以分解为小于 17 的素因数的任何长度。(据我所知。也许我们今天可以做得更好。)

据我了解,如果我以 600Hz 的恒定采样率测量加速度 10 秒,我将得到 6000 个样本。

听起来不错。

这是否意味着我必须删除一些测量数据才能得到 4096 个样本,满足 2^n 个样本条件?或者用零填充我的样本以最终得到 8196 个样本,这也符合规定的条件?

你可以做任何一个,但你不必这样做;6000 = 2·3·10³ = 2⁴·3·5³ 并且这种长度有多种 FFT 实现。同样,您甚至不必使用 FFT 来计算 DFT。

因此,我真的宁愿根据您的测量问题调整 FFT (DFT) 长度,而不是相反。