如何从DFT中选择频率

时间:2011-05-12 04:13:22

标签: dft

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

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