scipy.signal.

decimate#

scipy.signal.decimate(x, q, n=None, ftype='iir', axis=-1, zero_phase=True)[来源]#

应用抗混叠滤波器后对信号进行下采样。

默认情况下,使用 8 阶 Chebyshev I 型滤波器。如果 ftype 为 ‘fir’,则使用带有汉明窗的 30 点 FIR 滤波器。

参数:
xarray_like

要下采样的信号,作为 N 维数组。

qint

下采样因子。使用 IIR 下采样时,建议对高于 13 的下采样因子多次调用 decimate

nint,可选

滤波器的阶(对于 ‘fir’ 低于长度 1)。对于 ‘iir’ 默认为 8,对于 ‘fir’ 默认为下采样因子 20 倍。

ftypestr {‘iir’, ‘fir’} 或 dlti 实例,可选

如果为‘iir’或‘fir’,则指定低通滤波器的类型。如果为 dlti 对象的实例,则在向下采样之前使用该对象进行滤波。

axisint,可选

进行抽取的轴。

zero_phasebool,可选

使用 filtfilt 而不是 lfilter 进行滤波,以防止相移使用 IIR 滤波器时,使用 FIR 滤波器时,则将输出向后移动滤波器的群延迟。推荐使用 True 的默认值,因为通常不需要相移。

0.18.0 版中新增。

返回:
yndarray

向下采样的信号。

另请参见

resample

使用 FFT 方法向上或向下采样。

resample_poly

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

备注

0.18.0 中新增了 zero_phase 关键字。0.18.0 中新增了将 dlti 实例用作 ftype 的可能性。

示例

>>> import numpy as np
>>> from scipy import signal
>>> import matplotlib.pyplot as plt

定义波参数。

>>> wave_duration = 3
>>> sample_rate = 100
>>> freq = 2
>>> q = 5

计算样本数量。

>>> samples = wave_duration*sample_rate
>>> samples_decimated = int(samples/q)

创建余弦波。

>>> x = np.linspace(0, wave_duration, samples, endpoint=False)
>>> y = np.cos(x*np.pi*freq*2)

抽取余弦波。

>>> ydem = signal.decimate(y, q)
>>> xnew = np.linspace(0, wave_duration, samples_decimated, endpoint=False)

绘制原始波和抽取波。

>>> plt.plot(x, y, '.-', xnew, ydem, 'o-')
>>> plt.xlabel('Time, Seconds')
>>> plt.legend(['data', 'decimated'], loc='best')
>>> plt.show()
../../_images/scipy-signal-decimate-1.png