在Python中Matlab的cwt()相当于什么? (连续一维小波变换)

问题描述 投票:8回答:2

我想计算具有不同尺度和时移的信号的小波。

在Matlab中使用cwt()中提供的Wavelet Toolbox函数(连续1-D小波变换),我可以指定我想要的比例作为cwt()的参数,它将返回所有可能的时移:

x = [1, 2, 3, 4];
scales = [1, 2, 3];
wavelet_name = 'db1';
coefs = cwt(x,scales, wavelet_name);

>> coefs =   

   -0.0000   -0.0000   -0.0000    0.0000
   -0.7071   -0.7071   -0.7071   -0.7071
   -1.1553   -1.1553   -1.1553    1.7371

我怎样才能在Python中实现这一目标?

到目前为止,这是我的两次尝试:

  1. PyWavelets(Python中的离散小波变换)中,我看不出如何指定小波的scale参数。
  2. scipy.signal.cwt,我找不到the list of the built-in wavelet functions that I can pass to scipy.signal.cwt:我想至少拥有最常见的小波函数,如sym2和db1。 (例如,见Matlab's built-in wavelet list)。
python matlab signal-processing wavelet
2个回答
3
投票

似乎除了q​​azxswpoi之外还有一些python库用于Wavelet操作:

Pywavelets

这里是scipydocumentation和一个基本代码段的链接。这是非常直观的使用,并有一个相当扩展的github库。

implemented wavelets

PyCWT

这里是import pywt import numpy as np import matplotlib.pyplot as plt num_steps = 512 x = np.arange(num_steps) y = np.sin(2*np.pi*x/32) delta_t = x[1] - x[0] scales = np.arange(1,num_steps+1) wavelet_type = 'morl' coefs, freqs = pywt.cwt(y, scales, wavelet_type, delta_t) plt.matshow(coefs) plt.show() documentation和一个基本代码段的链接。这个库有一个更陡峭的学习曲线,api不是很好,但支持githubcone of influence等功能。

significance testing

您可以使用import pycwt as wavelet import numpy as np import matplotlib.pyplot as plt num_steps = 512 x = np.arange(num_steps) y = np.sin(2*np.pi*x/32) delta_t = x[1] - x[0] scales = np.arange(1,num_steps+1) freqs = 1/(wavelet.Morlet().flambda() * scales) wavelet_type = 'morlet' coefs, scales, freqs, coi, fft, fftfreqs = wavelet.cwt(y, delta_t, wavelet=wavelet_type, freqs=freqs) plt.matshow(coefs.real) plt.show() pip轻松安装它们。

最后,这里还有其他我没有尝试过的参考资料:

  1. conda
  2. one
  3. two

4
投票

您可能想要使用threescipy.signal.cwt包中提供了一些小波函数:

Symlet似乎没有像这样提供,但你可以从scipy.signal.ricker获得它们。

© www.soinside.com 2019 - 2024. All rights reserved.