ZoomFFT#
- class scipy.signal.ZoomFFT(n, fn, m=None, *, fs=2, endpoint=False)[源代码][源代码]#
创建一个可调用的缩放FFT变换函数。
这是对单位圆周围等间隔频率集合的 chirp z-变换 (
CZT) 的专门化,用于比计算整个 FFT 并截断更有效地计算 FFT 的一部分。- 参数:
- n整数
信号的大小。
- fnarray_like
一个长度为2的序列 [f1, f2] 给出了频率范围,或者是一个标量,此时假设范围为 [0, fn]。
- mint, 可选
要评估的点数。默认值为 n。
- fsfloat, 可选
采样频率。例如,如果
fs=10表示 10 kHz,那么 f1 和 f2 也应以 kHz 为单位给出。默认采样频率为 2,因此 f1 和 f2 应在范围 [0, 1] 内,以确保变换低于奈奎斯特频率。- 端点bool, 可选
如果为 True,f2 是最后一个样本。否则,它不包括在内。默认是 False。
方法
- 返回:
- fZoomFFT
可调用对象
f(x, axis=-1)用于在 x 上计算缩放傅里叶变换。
参见
zoom_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, “chirp z-变换及其应用的研究”, 第29页 (1970) https://krex.k-state.edu/dspace/bitstream/handle/2097/7844/LD2668R41972S43.pdf
[2]Leo I. Bluestein, “一种线性滤波方法用于计算离散傅里叶变换,” 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()