ZoomFFT#
- class scipy.signal.ZoomFFT(n, fn, m=None, *, fs=2, endpoint=False)[source]#
创建可调用的 Zoom FFT 转换函数。
这是针对单位圆周围一组等距频率的 chirp z 转换 (
CZT
) 的缩略形式,用于比计算整个 FFT 并截断更有效地计算 FFT 的一部分。- 参数:
- nint
信号大小。
- fnarray_like
给出频率范围的长度-2 序列 [f1, f2],或标量,范围 [0, fn] 用于假定。
- mint,可选
要评估的点数。默认值为 n。
- fs浮点数,可选
采样频率。例如,如果
fs=10
表示 10 kHz,那么 f1 和 f2 也将以 kHz 为单位给出。默认采样频率为 2,因此 f1 和 f2 应在 [0, 1] 范围内以使转换低于奈奎斯特频率。- endpointbool,可选
如果 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 表示 f1,f2 值在 [0, 1) 范围内,直至奈奎斯特频率。对于以弧度表示的 f1,f2 值,应使用 2*pi 的采样频率。
请记住,缩放 FFT 只能插补现有 FFT 的点。它无法帮助分辨两个单独的相邻频率。只有增加采集时间才能提高频率分辨率。
这些函数使用布鲁斯坦算法(与
scipy.fft
一样)实现。 [2]参考资料
[1]史蒂夫·艾伦·希林,“啁啾 z 转换及其应用”研究,第 29 页(1970 年) https://krex.k-state.edu/dspace/bitstream/handle/2097/7844/LD2668R41972S43.pdf
[2]利奥·I·布鲁斯坦,“一种计算离散傅立叶变换的线性滤波方法”,东北电子研究与工程会议记录 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()
方法