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

时间:2014-05-19 15:39:11

标签: python matlab signal-processing wavelet

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

在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中的离散小波变换)中,我不知道如何指定小波的缩放参数。
  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)。

2 个答案:

答案 0 :(得分:4)

您可能希望使用scipy.signal.cwtscipy.signal包中提供了一些小波函数:

Symlet似乎没有像这样提供,但您可以从daub获取它们。

答案 1 :(得分:2)

似乎除了scipy以外,还有一些Python库可用于Wavelet操作:

Pywavelets

这里是documentationgithub的链接和使用的基本代码段。它使用起来非常直观,并且具有implemented wavelets的扩展库。

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

PyCWT

这里是documentationgithub的链接和使用的基本代码段。该库的学习曲线更陡峭,并且api不太好,但是支持诸如cone of influencesignificance 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()

您可以使用pipconda轻松地安装它们。

最后,这是我没有尝试使用的其他参考:

  1. one
  2. two
  3. three