【问题标题】:Compute frequency of sinusoidal signal, c++计算正弦信号的频率,c++
【发布时间】:2014-09-30 04:04:59
【问题描述】:

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

【问题讨论】:

  • 我建议阅读formula 以查找正弦波的频率。
  • 我很想收集所有值过零的时间并从那里开始工作。
  • 使用傅里叶变换。

标签: c++ signals


【解决方案1】:

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

【讨论】:

  • 为了获得更准确的结果,请使用多个过零并将交叉次数乘以样本数乘以样本频率。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多