2017-10-28 148 views
1

我有44100Hz的音頻,這意味着每秒有44100個採樣。我想分析它,所以我將數據分成長度爲1024的子數組。如何解釋scipy.fftpack.fft的輸出?

對於每個陣列,我應用傅立葉變換(fft),它將返回一個複數數組。這些數字應該是轉變和階段價值。

結果的長度爲1024,就像一個塊。但我不知道,陣列的哪個元素對應於哪個頻率。我檢查了documentation,但我能夠發現的唯一情況是結果是對稱的,我可以跳過第一部分。

from scipy.fftpack import fft 

res = fft(chunk) 

但是,怎麼可能找出結果中給定索引處的頻率是多少?

回答

2

您可以直接通過FFT純音進行查看。在這裏,我比較:常數函數(零頻率),頻率1(週期=採樣間隔),頻率2(週期=半取樣間隔的),等等:

import numpy as np 
from scipy.fftpack import fft 
arr = np.linspace(0, 2*np.pi, 9)[:-1] 
for k in range(5): 
    print np.round(np.abs(fft(np.cos(k*arr))), 10) 

結果:

[ 8. 0. 0. 0. 0. 0. 0. 0.] 
[ 0. 4. 0. 0. 0. 0. 0. 4.] 
[ 0. 0. 4. 0. 0. 0. 4. 0.] 
[ 0. 0. 0. 4. 0. 4. 0. 0.] 
[ 0. 0. 0. 0. 8. 0. 0. 0.] 

因此,第0項是常數項,項1和-1是針對其週期是我們採樣的時間間隔的頻率;條目2和-2的週期是採樣時間間隔的一半; 3和-3爲採樣時間間隔的三分之一等,直到我們達到Nyquist frequency

對於大小爲1024的一個示例:

  • 1和-1是採樣速率
  • 2的頻率1/1024和-2是採樣率的頻率一千零二十四分之二
  • 3和-3是採樣速率
  • 的頻率1024分之3...
  • 512爲奈奎斯特頻率,採樣率的1/2 = 512/1024