scipy.signal.

decimate#

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

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

默认情况下,使用 8 阶切比雪夫 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, 可选

通过在使用 IIR 滤波器时使用 filtfilt 而不是 lfilter 来防止相移,并在使用 FIR 滤波器时将输出向后移动滤波器群延迟。建议使用默认值 True,因为通常不希望出现相移。

0.18.0 版本中新增。

返回:
yndarray

降采样后的信号。

另请参见

resample

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

resample_poly

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

说明

zero_phase 关键字在 0.18.0 中添加。在 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