在Python中,什么等同于MatLab的cwt()?(连续一维小波变换)

What is the equivalent of Matlab#39;s cwt() in Python? (continuous 1-D wavelet transform)(在Python中,什么等同于MatLab的cwt()?(连续一维小波变换))

本文介绍了在Python中,什么等同于MatLab的cwt()?(连续一维小波变换)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

在Matlab中,使用Wavelet Toolbox中提供的cwt()函数(连续一维小波变换),我可以将我想要的尺度指定为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)。

推荐答案

除了scipy

之外,似乎还有一些用于小波运算的Python库

小波

这里有一个指向documentation、github的链接和一个基本的用法片段。它使用起来非常直观,并且有一个非常扩展的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

这里有一个指向documentation、github的链接和一个基本的用法片段。此库的学习曲线比较陡峭,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

这篇关于在Python中,什么等同于MatLab的cwt()?(连续一维小波变换)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在Python中,什么等同于MatLab的cwt()?(连续一维小波变换)

基础教程推荐