2014-09-29 515 views
2

我有一个正弦信号,我想计算频率。 我试图实现一些东西,但看起来非常困难,任何想法? 到目前为止,我有一个向量与时间步和价值,我怎么能从这个频率? 谢谢正弦信号的计算频率,C++

+1

我会建议阅读[公式](http://en.wikipedia.org/wiki/Sine_wave)来查找正弦波的频率。 – Grice 2014-09-29 19:45:04

+3

我会试图收集价值过零的所有时间,并从那里开始工作。 – Galik 2014-09-29 19:47:32

+2

使用傅里叶变换。 – user763305 2014-09-29 19:56:02

回答

4

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

+2

为了获得更准确的结果,请使用许多过零点,并取样品数量上的交叉点数量乘以样品的频率。 – 2014-09-29 20:09:57

2

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

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

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

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