scipy.signal.

抽取#

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

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

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

参数:
x数组式对象

由等距样本组成的输入信号。如果 x 是多维数组,参数 axis 指定时间轴。

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 滤波器进行重采样。

注意

对于非整数降采样因子,可以使用 resample。有关非恒定采样间隔信号的重采样方法,请查阅 scipy.interpolate 模块。

zero_phase 关键字是在 0.18.0 版本中添加的。将 dlti 实例用作 ftype 的可能性是在 0.18.0 版本中添加的。

示例

>>> 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