scipy.signal.

ZoomFFT#

class scipy.signal.ZoomFFT(n, fn, m=None, *, fs=2, endpoint=False)[原始碼]#

建立可呼叫的縮放 FFT 轉換函數。

這是 chirp z 轉換 (CZT) 的特化版本,用於一組單位圓上等間隔的頻率,用於更有效率地計算 FFT 的一部分,而不是計算整個 FFT 再截斷。

參數:
nint

訊號的大小。

fnarray_like

長度為 2 的序列 [f1, f2],給定頻率範圍,或純量,假設範圍為 [0, fn]。

mint, optional

要評估的點數。預設值為 n

fsfloat, optional

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

endpointbool, optional

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

返回:
fZoomFFT

可呼叫物件 f(x, axis=-1),用於計算 x 的縮放 FFT。

另請參閱

zoom_fft

用於計算縮放 FFT 的便利函數。

註解

選擇預設值使得 f(x, 2) 等效於 fft.fft(x),並且如果 m > len(x),則 f(x, 2, m) 等效於 fft.fft(x, m)

取樣頻率為 1/dt,訊號 x 中樣本之間的時間步長。單位圓對應於從 0 到取樣頻率的頻率。預設取樣頻率 2 表示高達奈奎斯特頻率的 f1f2 值在 [0, 1) 範圍內。對於以弧度表示的 f1f2 值,應使用 2*pi 的取樣頻率。

請記住,縮放 FFT 只能內插現有 FFT 的點。它不能幫助解析兩個單獨的附近頻率。頻率解析度只能通過增加採集時間來提高。

這些函數是使用 Bluestein 演算法(與 scipy.fft 一樣)實作的。[2]

參考文獻

[1]

Steve Alan Shilling, “A study of the chirp z-transform and its applications”, pg 29 (1970) https://krex.k-state.edu/dspace/bitstream/handle/2097/7844/LD2668R41972S43.pdf

[2]

Leo I. Bluestein, “A linear filtering approach to the computation of the discrete Fourier transform,” Northeast Electronics Research and Engineering Meeting Record 10, 218-219 (1968).

範例

要繪製轉換結果,請使用類似以下的程式碼

>>> import numpy as np
>>> from scipy.signal import ZoomFFT
>>> 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
>>> transform = ZoomFFT(len(x), [f1, f2], len(x), fs=1021)
>>> X = transform(x)
>>> 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-ZoomFFT-1.png

方法

__call__(x, *[, axis])

計算訊號的 chirp z 轉換。

points()

傳回計算 chirp z 轉換的點。