scipy.signal.

zoom_fft#

scipy.signal.zoom_fft(x, fn, m=None, *, fs=2, endpoint=False, axis=-1)[source]#

僅針對頻率範圍 fn 計算 x 的 DFT。

參數:
x陣列

要轉換的訊號。

fn類陣列

長度為 2 的序列 [f1, f2],表示頻率範圍;或純量,表示範圍為 [0, fn]。

m整數,選用

要評估的點數。預設值為 x 的長度。

fs浮點數,選用

取樣頻率。例如,如果 fs=10 代表 10 kHz,則 f1f2 也會以 kHz 為單位。預設取樣頻率為 2,因此 f1f2 應在 [0, 1] 範圍內,以使轉換保持在奈奎斯特頻率以下。

endpoint布林值,選用

如果為 True,則 f2 是最後一個樣本。否則,不包含在內。預設值為 False。

axis整數,選用

計算 FFT 的軸。如果未給定,則使用最後一個軸。

回傳值:
outndarray

轉換後的訊號。傅立葉轉換將在 f1、f1+df、f1+2df、…、f2 這些點上計算,其中 df=(f2-f1)/m。

另請參閱

ZoomFFT

建立可呼叫的部分 FFT 函數的類別。

註解

選擇預設值是為了使 signal.zoom_fft(x, 2) 等同於 fft.fft(x);並且,如果 m > len(x),則 signal.zoom_fft(x, 2, m) 等同於 fft.fft(x, m)

若要繪製結果轉換的量值圖,請使用

plot(linspace(f1, f2, m, endpoint=False), abs(zoom_fft(x, [f1, f2], m)))

如果需要重複轉換,請使用 ZoomFFT 建構一個專門的轉換函數,該函數可以重複使用而無需重新計算常數。

範例

若要繪製轉換結果,請使用如下程式碼

>>> import numpy as np
>>> from scipy.signal import zoom_fft
>>> t = np.linspace(0, 1, 1021)
>>> x = np.cos(2*np.pi*15*t) + np.sin(2*np.pi*17*t)
>>> f1, f2 = 5, 27
>>> X = zoom_fft(x, [f1, f2], len(x), fs=1021)
>>> f = np.linspace(f1, f2, len(x))
>>> import matplotlib.pyplot as plt
>>> plt.plot(f, 20*np.log10(np.abs(X)))
>>> plt.show()
../../_images/scipy-signal-zoom_fft-1.png