3

我需要一種算法來檢測純正弦信號的頻率和相位。輸入信號的頻率在0到100 Hz之間變化。簡單高效的算法來檢測正弦信號的頻率和相位

的信號的值被用爲20kHz的頻率捕獲(所以我得到每秒20.000值) - 這是給定的,並且不能被改變。我需要檢測此輸入信號的頻率和相位,並使用PWM產生具有與輸入信號相同頻率的MCU中斷。

任何人都可以建議使用什麼算法來做到這一點簡單和高效?也許Goertzel算法?

+1

http://dsp.stackexchange.com或http://electronics.stackexchange.com/ – user2485710 2014-11-08 18:13:18

+0

快速傅立葉變換。 – 2014-11-08 18:38:06

+2

@HotLicks對於這樣一個簡單的問題,建議FFT不是一個好建議。這就像爲其他簡單的問題提出了蠻力算法。 – 2014-11-08 19:54:16

回答

3

Goertzel算法是好的,用於檢測預定的頻率(或幾個頻率的頻道)。
要找到未知頻率的正弦波,可以使用Fourier transform

峯與最大的幅度將對應於正弦波的頻率,而這種諧波的階段 - 它的階段。

來自FT結果的相位可能易受噪聲影響。更穩健的方法 - 使用具有零相位正弦波(具有相同頻率)的互相關來獲得相移。

上有下一個快了很多FFT實現是fftw.org(移植到任何C編譯器的要求),但我懷疑你真的需要單片機如此複雜庫。取碼好庫裏 - 杜克執行任何40-線,如this one

附:如果你的信號真的是完美的正弦單頻而沒有明顯的噪聲,那麼在並行主題中提出的過零方法會更好。

+1

在此期間這個問題得到了交叉帖/重複http://dsp.stackexchange.com/questions/19057/simple-and-efficient-algorithm-to-detect-frequency-and-phase-of-a-sine-信號 – user2485710 2014-11-08 18:30:40

+0

@ user2485710當我開始寫我的答案時,既沒有您的重定向評論也沒有交叉重複問題:-) – MBo 2014-11-08 18:34:45

+0

@MBo謝謝!你知道我的案例有哪些具體的快速和簡單的實施? – jurij 2014-11-08 18:38:09