假设有一个数字序列(波状数据)。然后我执行DFT (或FFT)转换。下一步我想要实现的是找到与数据中包含的真实频率相对应的频率。正如我们所知,DFT输出有实部和虚部ai和bi。如果我们查看频谱(sqrt(ai^2+bi^2) ),那么其中的最大值对应于包含在数据中的频率。问题是如何从DFT中找到所有频率?当存在许多可能被错误选择的其他峰值时,问题就出现了。
发布于 2011-05-12 13:06:01
当我写我的荣誉论文时,我在对数据进行光谱分析处理时也遇到了类似的问题。
你是对的:要找到主要频率,你通常只需要查看DFT中复数值的大小。
不幸的是,您几乎必须编写某种智能算法来识别峰值(频率)。算法的工作方式高度依赖于应用程序的DFT外观。我的DFT都有相似的特征,所以把一个启发式算法组合在一起并不是太难。如果你的DFT可以采取任何形式,那么你可能会得到很多假阳性和/或假阴性。
我这样做的方法是识别DFT中被低幅度(低谷)包围的高幅度(峰)的区域。您可以将波峰和波谷之间的最小差值(灵敏度)定义为常数乘以数据的标准差。此外,您可以说,任何低于某个幅度(阈值)的峰值都会被完全忽略,因为它们只是噪声。
当然,只有当您的数据中有相对定义良好的频率时,上述技术才会真正起作用。如果你的DFT是高度随机的,那么你需要格外小心地设置敏感度和阈值。
不要忘记,您的数据量是对称的,因此您只需查看其中的一半。
一旦你确定了你的DFT中的频率,别忘了把它转换成你想要的单位。从内存中,如果您使用时间离散化dt采集了n个样本,那么如果您在数据点5(例如)有一个峰值,其中第一个数据点是1,那么频率是每个时间单位1/(n*dt)弧度。(我已经有一段时间没有这样做了,所以公式可能会偏离Pi或其他因素)
https://stackoverflow.com/questions/5973221
复制相似问题