scipy.signal.
zoom_fft#
- scipy.signal.zoom_fft(x, fn, m=None, *, fs=2, endpoint=False, axis=-1)[源代码][源代码]#
计算 x 的 DFT,仅针对 fn 范围内的频率。
- 参数:
- x数组
要转换的信号。
- fnarray_like
一个长度为2的序列 [f1, f2] 给出了频率范围,或者是一个标量,此时假设范围为 [0, fn]。
- mint, 可选
要评估的点的数量。默认值是 x 的长度。
- fsfloat, 可选
采样频率。例如,如果
fs=10
表示 10 kHz,那么 f1 和 f2 也应以 kHz 为单位给出。默认采样频率为 2,因此 f1 和 f2 应在范围 [0, 1] 内,以确保变换低于奈奎斯特频率。- 端点bool, 可选
如果为 True,f2 是最后一个样本。否则,它不包括在内。默认是 False。
- 轴int, 可选
要计算FFT的轴。如果没有给出,则使用最后一个轴。
- 返回:
- 出ndarray
变换后的信号。傅里叶变换将在点 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()