计算正弦信号的频率,c++

Compute frequency of sinusoidal signal, c++

本文关键字:频率 c++ 信号 计算      更新时间:2023-10-16

我有一个正弦形状的信号,我想计算频率。我试图实现一些东西,但看起来很困难,知道吗?到目前为止,我有一个带有时间步长和值的向量,我如何从中得到频率?感谢

如果输入信号是完美的正弦曲线,则可以使用正0交叉点之间的时间来计算频率。找到信号从负变为正的两个连续实例,并测量其间的时间,然后将该数字反转,从周期转换为频率。请注意,这仅与采样间隔一样准确,并且不考虑任何潜在的混叠。

您可以尝试自动关联信号。通过以下步骤可以快速计算自相关:

  1. 对音频执行FFT
  2. 将每个复数值与其复共轭相乘
  3. 执行音频的反向FFT

最左边的峰值将总是最高的(因为信号总是与自身相关最好)。然而,第二高峰可以用于计算正弦曲线的频率。

例如,如果第二个峰值出现在50点的偏移(滞后)处,并且采样率为16kHz,并且窗口为1秒,则结束频率为16000/50或320Hz。您甚至可以使用插值来获得峰值位置的更准确估计,从而获得更准确的正弦频率。这种方法非常强烈,但在添加了大量噪声后,非常适合估计频率!