2014-09-29 126 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。您甚至可以使用插值來更準確地估計峯值位置,從而獲得更準確的正弦頻率。這種方法非常強大,但在添加大量噪音後估算頻率非常有用!