本文介绍了在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中实现这一点?
以下是我到目前为止的两次尝试:
- 在PyWavelets(Python中的离散小波变换)中,我不知道如何指定小波的Scale参数。
- 在
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
:
小波
这里有一个指向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 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
或conda
轻松安装它们。
最后,以下是我还没有尝试使用的其他引用:
- one
- two
- three
这篇关于在Python中,什么等同于MatLab的cwt()?(连续一维小波变换)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!