本文简要介绍 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 滤波器,然后按因子下采样下.结果采样率为
up / down
倍原始采样率。默认情况下,超出信号边界的值在滤波步骤中被假定为零。- x: array_like
要重新采样的数据。
- up: int
上采样因子。
- down: int
下采样因子。
- axis: 整数,可选
重新采样的 x 轴。默认值为 0。
- window: 字符串、元组或类似数组,可选
用于设计low-pass 滤波器或要采用的 FIR 滤波器系数的所需窗口。详情见下文。
- padtype: 字符串,可选
常量,线,意思是,中位数,最大,最低限度或任何其他支持的信号扩展模式scipy.signal.upfirdn.改变对超出边界的值的假设。如果常量, 假定是cval(默认为零)。如果线假设继续由第一个点和最后一个点定义的线性趋势。意思是,中位数,最大和最低限度像在一样工作np.pad并假设超出边界的值分别是沿轴的数组的平均值、中值、最大值或最小值。
- cval: 浮点数,可选
如果 padtype='constant' 时使用的值。默认为零。
- resampled_x: 数组
重新采样的数组。
参数 ::
返回 ::
注意:
这种多相方法可能比傅里叶方法更快scipy.signal.resample当样本数很大且质数时,或当样本数很大且向上和下共享一个很大的最大公分母。使用的 FIR 滤波器的长度取决于
max(up, down) // gcd(up, down)
,并且多相滤波期间的操作数将取决于滤波器长度和下(参考scipy.signal.upfirdn详情)。参数窗口指定 FIR low-pass 滤波器设计。
如果 window 是 数组 ,则假定它是 FIR 滤波器系数。请注意,FIR 滤波器是在上采样步骤之后应用的,因此应将其设计为以比原始采样频率高 up//gcd(up, down) 倍的采样频率对信号进行操作。此函数的输出将相对于此数组居中,因此如果通常需要 zero-phase 过滤器,则最好通过具有奇数个样本的对称过滤器。
对于任何其他类型的窗户, 函数scipy.signal.get_window和scipy.signal.firwin被调用以生成适当的滤波器系数。
返回向量的第一个样本与输入向量的第一个样本相同。样本之间的间距从
dx
更改为dx * down / float(up)
。例子:
默认情况下,重采样数据的末端上升以满足 FFT 方法下一个周期的第一个样本,而多相方法则接近于零:
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt
>>> 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)
>>> 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()
可以使用 padtype 选项更改此默认行为:
>>> 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')
>>> 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()
相关用法
- Python SciPy signal.resample用法及代码示例
- Python SciPy signal.residue用法及代码示例
- Python SciPy signal.residuez用法及代码示例
- Python SciPy signal.remez用法及代码示例
- Python SciPy signal.ricker用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy signal.chirp用法及代码示例
- Python SciPy signal.iirdesign用法及代码示例
- Python SciPy signal.max_len_seq用法及代码示例
- Python SciPy signal.kaiser_atten用法及代码示例
- Python SciPy signal.oaconvolve用法及代码示例
- Python SciPy signal.hilbert用法及代码示例
- Python SciPy signal.group_delay用法及代码示例
- Python SciPy signal.cheb2ord用法及代码示例
- Python SciPy signal.get_window用法及代码示例
- Python SciPy signal.lfilter用法及代码示例
- Python SciPy signal.morlet用法及代码示例
- Python SciPy signal.coherence用法及代码示例
- Python SciPy signal.dfreqresp用法及代码示例
- Python SciPy signal.TransferFunction用法及代码示例
- Python SciPy signal.dbode用法及代码示例
- Python SciPy signal.bilinear_zpk用法及代码示例
- Python SciPy signal.firls用法及代码示例
- Python SciPy signal.impulse用法及代码示例
- Python SciPy signal.buttord用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.resample_poly。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。