3

假设一个数字序列(波状数据)。然后我执行 DFT(或 FFT)变换。我想要实现的下一步是找到与数据中包含的真实频率相对应的频率。众所周知,DFT 输出具有实部和虚部 a[i] 和 b[i]。如果我们看一下频谱 (sqrt(a[i]^2+b[i]^2) 那么其中的最大值对应于数据中包含的频率。问题是如何从 DFT 中找到所有频率?当有许多其他峰可能被错误地选择时,就会出现问题。

4

1 回答 1

3

在写荣誉论文时,我在对数据进行光谱分析处理时遇到了类似的问题。

你是对的:要找到主导频率,您通常只需要查看 DFT 中复数值的大小。

不幸的是,您几乎必须编写某种智能算法来识别峰值(频率)。算法的工作方式高度依赖于 DFT 对于您的应用程序的外观。我的 DFT 都具有相似的特征,因此组合一个启发式算法并不难。如果您的 DFT 可以采用任何形式,那么您可能会得到很多误报和/或误报。

我这样做的方法是识别 DFT 中具有高幅度(峰值)的区域,这些区域被低幅度(波谷)包围。您可以将峰和谷之间的最小差异(灵敏度)定义为常数乘以数据的标准偏差。此外,您可以说任何低于某个幅度(阈值)的峰值都将被完全忽略,因为它们只是噪声。

当然,只有在数据中有相对明确定义的频率时,上述技术才会真正起作用。如果您的 DFT 是高度随机的,那么您将需要格外小心谨慎地设置灵敏度和阈值。

不要忘记你的数据的大小是对称的,所以你只需要看一半。

一旦您确定了 DFT 中的频率,不要忘记将其转换为您想要的单位。从内存中,如果您使用时间离散化 dt 采集了 n 个样本,那么如果您在数据点 5(例如)处有一个峰值,其中第一个数据点为 1,则频率为 1/(n*dt) 弧度/时间单位。(我有一段时间没有这样做了,所以这个公式可能会因 Pi 或其他因素而偏离)

于 2011-05-12T05:06:00.660 回答