cupyx.scipy.signal.resample#

cupyx.scipy.signal.resample(x, num, t=None, axis=0, window=None, domain='time')[source]#

沿给定轴使用傅里叶方法将 x 重采样到 num 个样本。

重采样的信号与 x 的起始值相同,但以 len(x) / num * (x 的间距) 的间距采样。由于使用了傅里叶方法,因此假定信号是周期性的。

参数:
  • x (array_like) – 要重采样的数据。

  • num (int) – 重采样信号中的样本数量。

  • t (array_like, 可选) – 如果给定 t,则假定它是与 x 中的信号数据关联的样本位置。

  • axis (int, 可选) – 要重采样的 x 的轴。默认为 0。

  • window (array_like, 可调用对象, 字符串, float, 或 tuple, 可选) – 指定应用于傅里叶域信号的窗口。详情请参阅下文。

  • domain (字符串, 可选) –

    一个字符串,指示输入 x 的域

    time (时域)

    将输入 x 视为时域数据。(默认)

    freq (频域)

    将输入 x 视为频域数据。

返回值:

返回重采样后的数组,或者,如果给定了 t,则返回一个包含重采样数组和相应重采样位置的元组。

返回类型:

resampled_x or (resampled_x, resampled_t)

另请参阅

decimate

在应用 FIR 或 IIR 滤波器后对信号进行下采样。

resample_poly

使用多相滤波和 FIR 滤波器进行重采样。

注意

参数 window 控制傅里叶域中的一个窗口,该窗口在零填充之前对傅里叶谱进行渐缩处理,以减轻对于您不打算解释为带限的采样信号在重采样值中出现的振铃效应。

如果 window 是一个函数,则会调用它,输入是一个指示频率 bin 的向量(例如 fftfreq(x.shape[axis]))。

如果 window 是一个与 x.shape[axis] 长度相同的数组,则假定它是直接应用于傅里叶域的窗口(首先是直流分量和低频分量)。

对于任何其他类型的 window,会调用 cusignal.get_window 函数来生成窗口。

返回向量的第一个样本与输入向量的第一个样本相同。样本之间的间距从 dx 变为 dx * len(x) / num

如果 t 不是 None,则它代表旧的样本位置,并且新的样本位置以及新的样本也将被返回。

如上所述,resample 使用 FFT 变换,如果输入或输出样本的数量很大且为素数,FFT 变换可能会非常慢;请参阅 scipy.fftpack.fft

示例

请注意,重采样数据的末端会上升以与下一周期的第一个样本相遇

>>> import cupy as cp
>>> import cupyx.scipy.signal import resample
>>> x = cupy.linspace(0, 10, 20, endpoint=False)
>>> y = cupy.cos(-x**2/6.0)
>>> f = resample(y, 100)
>>> xnew = cupy.linspace(0, 10, 100, endpoint=False)
>>> import matplotlib.pyplot as plt
>>> plt.plot(cupy.asnumpy(x), cupy.asnumpy(y), 'go-', cupy.asnumpy(xnew),                 cupy.asnumpy(f), '.-', 10, cupy.asnumpy(y[0]), 'ro')
>>> plt.legend(['data', 'resampled'], loc='best')
>>> plt.show()