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

时间:2014-09-29 19:40:40

标签: c++ signals

我有一个类似正弦曲线的信号,我想计算频率。 我试图实现一些东西,但看起来非常困难,任何想法? 到目前为止,我有一个带有时间步长和值的向量,我怎样才能从中得到频率? 谢谢

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

  1. 执行音频的FFT。
  2. 将每个复数值乘以其复共轭。
  3. 执行音频的逆FFT。
  4. 最左边的峰值始终是最高的(因为信号总是与自身最相关)。然而,第二高峰可用于计算正弦波的频率。

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