resample#
- scipy.signal.resample(x, num, t=None, axis=0, window=None, domain='time')[source]#
使用傅里叶方法沿给定轴将x重新采样为num个样本。
重新采样后的信号从与x相同的值开始,但采样间隔为
len(x) / num * (x的间隔)
。由于使用了傅里叶方法,因此假设信号是周期性的。- 参数:
- xarray_like
要重新采样的数据。
- numint
重新采样后的信号中的样本数。
- tarray_like, 可选
如果给定了t,则假设它是与x中的信号数据关联的等距样本位置。
- axisint, 可选
重新采样的x的轴。默认值为 0。
- 窗口类似数组、可调用、字符串、浮点数或元组,可选
为傅里叶域中的信号指定应用的窗口。有关详细信息,请参阅下文。
- 域字符串,可选
指出输入x的域的字符串:
time
将输入x视为时域(默认值),freq
将输入x视为频域。
- 返回:
- resampled_x 或 (resampled_x, resampled_t)
重采样的数组或(如果给出了t)包含重采样数组和相应的重采样位置的元组。
另请参阅
decimate
在应用 FIR 或 IIR 滤波器后对信号进行降采样。
resample_poly
使用多相滤波和 FIR 滤波器进行重采样。
注释
参数window控制傅里叶域窗口,它调整傅里叶频谱,然后进行零填充以减轻对您不打算解释为带限的采样信号的重采样值中的振铃。
如果window是函数,则使用它调用具有指示频率箱的输入向量的 vector (即 fftfreq(x.shape[axis]) )。
如果window是与x.shape[axis]长度相同的数组,则假定该窗口会在傅里叶域(dc 和低频优先)中直接应用。
对于任何其他类型的window,将调用函数
scipy.signal.get_window
来生成窗口。返回的向量的第一个采样与输入向量的第一个采样相同。采样之间的间距从
dx
变成dx * len(x) / num
。如果t不是 None,那么仅将其用于计算重采样位置resampled_t
如前所述,
resample
使用 FFT 变换,如果输入或输出采样数目很大且为质数,则可能会非常慢;请参阅scipy.fft.fft
。示例
请注意,重采样数据的结尾会上移以满足下一个周期的第一个采样
>>> import numpy as np >>> from scipy import signal
>>> x = np.linspace(0, 10, 20, endpoint=False) >>> y = np.cos(-x**2/6.0) >>> f = signal.resample(y, 100) >>> xnew = np.linspace(0, 10, 100, endpoint=False)
>>> import matplotlib.pyplot as plt >>> plt.plot(x, y, 'go-', xnew, f, '.-', 10, y[0], 'ro') >>> plt.legend(['data', 'resampled'], loc='best') >>> plt.show()