1. 程式人生 > >numpy中的fft和scipy中的fft,fftshift以及fftfreq

numpy中的fft和scipy中的fft,fftshift以及fftfreq

numpy中有一個fft的庫,scipy中也有一個fftpack的庫,各自都有fft函式,兩者的用法基本是一致的:

舉例:


可以看到, numpy.fft.fft(x, n = 10) 和 scipy.fftpack.fft(x, n = 10)兩者的結果完全相同。其中,第一個引數x表示輸入的序列,第二個引數n制定FFT的點數,n值如果沒有的話,那麼就預設輸入序列的個數為FFT的點數兩者雖然相同,但是scipy.fftpack.fft的效率更高,推薦優先使用。另外,numpy和scipy中都有fftshift,用於將FFT變換之後的頻譜顯示範圍從[0, N]變為:[-N/2, N/2-1](N為偶數)                  或者[-(N-1)/2, (N-1)/2](N為奇數)對於上面例子中的資料,對比如下:



對比上面兩組資料可以看出,fftshift只是對fft的結果的順序進行了調整。fftfreq的說明:
在畫頻譜圖的時候,要給出橫座標的數字頻率,這裡可以用fftfreq給出,對於fftfreq的說明如下:scipy.fftpack.fftfreq(n, d=1.0)第一個引數n是FFT的點數,一般取FFT之後的資料的長度(size)第二個引數d是取樣週期,其倒數就是取樣頻率Fs,即d=1/Fs需要說明的是,DFT變換中,頻率的解析度為Fs/n=1/d*nfftfreq得到的結果為各個數字頻率 k*Fs/n = k/d*n最終fftfreq輸出的數字頻率的結果為

舉例如下:


fftshift也可以應用在數字頻率上,即


最後,可以利用freq_shift作為橫座標,xfn_shift的幅值mag_shift作為縱座標,作圖如下: