簡體   English   中英

在Python中Matlab的cwt()相當於什么? (連續一維小波變換)

[英]What is the equivalent of Matlab's cwt() in Python? (continuous 1-D wavelet transform)

我想計算具有不同尺度和時移的信號的小波。

在Matlab中使用小波工具箱中提供的cwt()函數(連續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 ,我找不到可以傳遞給scipy.signal.cwt的內置小波函數列表 :我想至少擁有最常見的小波函數,如sym2和db1。 (例如,參見Matlab的內置小波列表 )。

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

Symlet似乎沒有像這樣提供,但您可以從daub獲取它們。

似乎有一些python庫可以用於除了scipy之外的Wavelet操作:

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不是很好,但支持功能,如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輕松安裝它們。

最后,這里還有其他我沒有嘗試過的參考資料:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM