当前位置: 首页>>代码示例>>用法及示例精选>>正文


python scipy signal.resample_poly用法及代码示例

用法:

scipy.signal.resample_poly(x, up, down, axis=0, window=('kaiser', 5.0), padtype='constant', cval=None)

使用多相滤波沿给定的轴重新采样x。

信号x的上采样因子是上采样的,应用了zero-phase low-pass FIR滤波器,然后信号下采样了因子X的下采样。结果采样率是up / down乘以原始采样率。默认情况下,在滤波步骤中,超出信号边界的值假定为零。

参数:

xarray_like

要重新采样的数据。

upint

上采样因子。

downint

下采样因子。

axisint, 可选参数

重新采样的x轴。默认值为0。

windowstring, tuple, 或 array_like, 可选参数

用于设计low-pass滤波器或要采用的FIR滤波器系数的期望窗口。有关详情,请参见下文。

padtypestring, 可选参数

不变,线,均值,中位数,最大值,最小值或其他任何受信号支持的信号扩展模式scipy.signal.upfirdn。更改关于超出边界的值的假设。如果不变, 假定是cval(默认为零)。如果线假定将继续由第一个点和最后一个点定义的线性趋势。意思, 中位数, 最大值最低并假设超出边界的值分别是沿轴的数组的平均值,中位数,最大值或最小值。

1.4.0版的新函数。

cvalfloat, 可选参数

padtype =“恒定”时使用的值。默认值为零。

1.4.0版的新函数。

返回值:

resampled_x数组

重新采样的数组。

注意:

这种多相方法可能比傅里叶方法更快scipy.signal.resample当样本数量大且质数时,或者当样本数量大且上下共享大的最大公分母时。使用的FIR滤波器的长度取决于max(up, down) // gcd(up, down),多相滤波期间的运算次数将取决于滤波器的长度和(看到scipy.signal.upfirdn有关详细信息)。

参数窗口指定FIR low-pass滤波器设计。

如果window是类array_,则假定它是FIR滤波器系数。请注意,FIR滤波器是在上采样步骤之后应用的,因此应将其设计为对信号以高于原始采样频率up //gcd(up,down)的信号进行操作。该函数的输出将以该数组为中心,因此,如果通常需要zero-phase滤波器,则最好通过一个奇数个采样的对称滤波器。

对于任何其他类型的窗口,函数scipy.signal.get_windowscipy.signal.firwin被调用以产生适当的滤波器系数。

返回向量的第一个样本与输入向量的第一个样本相同。样本之间的间隔从dxdx * down / float(up)

例子:

默认情况下,对于FFT方法,重采样数据的末尾上升,以满足下一个周期的第一个样本,对于多相方法,该值接近于零:

>>> from scipy import signal
>>> x = np.linspace(0, 10, 20, endpoint=False)
>>> y = np.cos(-x**2/6.0)
>>> f_fft = signal.resample(y, 100)
>>> f_poly = signal.resample_poly(y, 100, 20)
>>> xnew = np.linspace(0, 10, 100, endpoint=False)
>>> import matplotlib.pyplot as plt
>>> plt.plot(xnew, f_fft, 'b.-', xnew, f_poly, 'r.-')
>>> plt.plot(x, y, 'ko-')
>>> plt.plot(10, y[0], 'bo', 10, 0., 'ro')  # boundaries
>>> plt.legend(['resample', 'resamp_poly', 'data'], loc='best')
>>> plt.show()
../_images/scipy-signal-resample_poly-1_00_00.png

可以使用padtype选项更改此默认行为:

>>> import numpy as np
>>> from scipy import signal
>>> N = 5
>>> x = np.linspace(0, 1, N, endpoint=False)
>>> y = 2 + x**2 - 1.7*np.sin(x) + .2*np.cos(11*x)
>>> y2 = 1 + x**3 + 0.1*np.sin(x) + .1*np.cos(11*x)
>>> Y = np.stack([y, y2], axis=-1)
>>> up = 4
>>> xr = np.linspace(0, 1, N*up, endpoint=False)
>>> y2 = signal.resample_poly(Y, up, 1, padtype='constant')
>>> y3 = signal.resample_poly(Y, up, 1, padtype='mean')
>>> y4 = signal.resample_poly(Y, up, 1, padtype='line')
>>> import matplotlib.pyplot as plt
>>> for i in [0,1]:
...     plt.figure()
...     plt.plot(xr, y4[:,i], 'g.', label='line')
...     plt.plot(xr, y3[:,i], 'y.', label='mean')
...     plt.plot(xr, y2[:,i], 'r.', label='constant')
...     plt.plot(x, Y[:,i], 'k-')
...     plt.legend()
>>> plt.show()
../_images/scipy-signal-resample_poly-1_01_00.png
../_images/scipy-signal-resample_poly-1_01_01.png

源码:

scipy.signal.resample_poly的API实现见:[源代码]

相关用法

注:本文由纯净天空筛选整理自 scipy.signal.resample_poly。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。