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, 可选
要评估的点数。 默认为 n。
- fsfloat, 可选
采样频率。 例如,如果
fs=10
代表 10 kHz,则 f1 和 f2 也将以 kHz 为单位给出。 默认采样频率为 2,因此 f1 和 f2 应在 [0, 1] 范围内,以使变换保持在奈奎斯特频率以下。- endpointbool, 可选
如果为 True,则 f2 是最后一个样本。 否则,不包括它。 默认为 False。
- 返回:
- fZoomFFT
用于在 x 上计算缩放 FFT 的可调用对象
f(x, axis=-1)
。
另请参阅
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 表示 f1、f2 直到奈奎斯特频率的值都在 [0, 1) 范围内。对于以弧度表示的 f1、f2 值,应使用 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()
方法
__call__
(x, *[, axis])计算信号的 chirp z 变换。
points
()返回计算 chirp z 变换的点。