2012-03-04 26 views
0

我想實現一個FFT,我想問一下我所做的事情是否正確。我正在使用GSL(GNU科學庫)進行FFT功能。我一直在閱讀關於FFT的教程,但我仍然想要求某人確認我正朝着正確的方向前進。我是否試圖使用FFT來正確識別輸入信號?

下面是我通過網絡材料想出方法:

The input is a list of the amplitudes of a sin wave generated 
in audacity at 440Hz (A). 

The sample rate is 44100 

# FFT points: 1024 

有人能解釋如何選擇的FFT點數?或者它是否重要。我可能忽略了它,但似乎無法找到選擇此號碼的方法。
編輯:我認爲命名這個FFT窗口比較合適,因爲在樣本中滑動1024個窗口可以找到頻率。

bin size = 44100/1024 = 43.066 

運行FFT後,我有幅度的另一份名單,並根據他們在什麼斌認爲是被檢測的,正確的頻率是多少?所以爲了找到生成信號的頻率,我想找到最高峯?

A bin is defined as a peak if and only if the bin has an amplitude greater than 
2 bins to the left and 2 bins to the right. 

此方法是否正確獲取輸入信號的頻率?

+0

FFT窗口的大小取決於你的需求,你沒有告訴我們。它需要多準確?箱子越小,它們越精確,並且獲得它們所需的榨取數量也越多。 – Brad 2012-03-04 22:16:21

+0

對不起,我需要它能夠識別某人的聲音。我想,我希望能夠實時完成。 – 2012-03-05 01:09:14

回答

2

由於音高可能與峯值頻率不同,因此FFT本身並不能可靠地識別音高。對於音調來說,你想研究基音估計算法,其中一些使用FFT作爲該過程的一部分,但很多則不這樣做。對於使用FFT進行頻譜估計,FFT越長,FFT頻率間隔越接近頻率,這對於在窗口期間估計的頻率是固定的情況是有用的。