Python中与Matlab的cwt()函数等效的是什么?(连续1-D小波变换)

8
我想计算一个信号的小波,在不同的比例尺和时间偏移下。
在Matlab中使用Wavelet Toolbox提供的cwt()函数(连续1-D小波变换),我可以将所需的比例尺作为参数传递给cwt(),它会返回所有可能的时间偏移。请保留HTML标签。
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 中,我找不到可以传递给scipy.signal.cwt的内置小波函数列表:我想至少拥有最常见的小波函数,例如sym2和db1。(例如,请参阅Matlab的内置小波列表。)

由于这个问题没有得到答案,我已经在Quora上发布了它:https://www.quora.com/What-is-the-equivalent-of-Matlabs-cwt-in-Python-continuous-1-D-wavelet-transform - Franck Dernoncourt
1
我发布了一个答案,您介意看一下吗?我很想知道您是否找到了更好的库可以使用。 - Matteo
@Matteo 谢谢你的回答,我在我的这边没有找到更好的库。 - Franck Dernoncourt
1
@Frank - 感谢您的快速回复。真的很遗憾,因为没有什么可以与Matlab工具箱相媲美的Python工具箱。Pywavelets是我的选择,但是他们没有影响锥或显著性测试,这真的限制了使用。 - Matteo
@Matteo 听起来不错,我点赞了(上个月)并且现在接受了! - Franck Dernoncourt
2个回答

3

看起来有一些 Python 库可以进行小波操作,除了 scipy

Pywavelets

这里是使用链接的文档GitHub和基本代码片段。它很直观易用,并且具有一个相当广泛的小波实现库

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

这是一个链接,文档Github,还有一个基本的使用片段。这个库有比较陡峭的学习曲线,API不够友好,但支持像“影响锥”或“显著性测试”之类的功能。

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. 一个

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接