scipy.signal.
cwt#
- scipy.signal.cwt(data, wavelet, widths, dtype=None, **kwargs)[源代码][源代码]#
连续小波变换。
自 1.12.0 版本弃用: scipy.signal.cwt 在 SciPy 1.12 中已被弃用,并将在 SciPy 1.15 中移除。我们建议使用 PyWavelets 替代。
对 data 执行连续小波变换,使用 wavelet 函数。CWT 使用 wavelet 函数对 data 进行卷积,该函数由宽度参数和长度参数表征。wavelet 函数可以是复数。
- 参数:
- 数据(N,) ndarray
要执行变换的数据。
- 小波函数
小波函数,它应该接受2个参数。第一个参数是返回向量的点数(len(wavelet(length,width)) == length)。第二个是宽度参数,定义小波的大小(例如,高斯的标准差)。请参阅
ricker
,它满足这些要求。- 宽度(M,) 序列
用于变换的宽度。
- dtype数据类型,可选
输出所需的数据类型。如果 wavelet 的输出是实数,则默认为
float64
;如果是复数,则默认为complex128
。Added in version 1.4.0.
- kwargs
传递给小波函数的键值参数。
Added in version 1.4.0.
- 返回:
- cwt: (M, N) ndarray
将具有 (len(widths), len(data)) 的形状。
注释
Added in version 1.4.0.
对于非对称、复数值的小波,输入信号与小波数据的时反复共轭进行卷积 [1]。
length = min(10 * width[ii], len(data)) cwt[ii,:] = signal.convolve(data, np.conj(wavelet(length, width[ii], **kwargs))[::-1], mode='same')
参考文献
[1]S. Mallat, “A Wavelet Tour of Signal Processing (3rd Edition)”, Academic Press, 2009.
示例
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt >>> t = np.linspace(-1, 1, 200, endpoint=False) >>> sig = np.cos(2 * np.pi * 7 * t) + signal.gausspulse(t - 0.4, fc=2) >>> widths = np.arange(1, 31) >>> cwtmatr = signal.cwt(sig, signal.ricker, widths)
备注
对于cwt矩阵绘图,建议翻转y轴
>>> cwtmatr_yflip = np.flipud(cwtmatr) >>> plt.imshow(cwtmatr_yflip, extent=[-1, 1, 1, 31], cmap='PRGn', aspect='auto', ... vmax=abs(cwtmatr).max(), vmin=-abs(cwtmatr).max()) >>> plt.show()