![](/img/trans.png)
[英]What is the equivalent of Matlab's cwtft() in Python? (continuous morlet wavelet transform)
[英]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中實現這一目標?
到目前為止,這是我的兩次嘗試:
scipy.signal.cwt
,我找不到可以傳遞給scipy.signal.cwt的內置小波函數列表 :我想至少擁有最常見的小波函數,如sym2和db1。 (例如,參見Matlab的內置小波列表 )。 您可能希望使用scipy.signal.cwt
。 scipy.signal
包中提供了一些小波函數:
scipy.signal.daub(1)
scipy.signal.morlet
scipy.signal.ricker
Symlet似乎沒有像這樣提供,但您可以從daub
獲取它們。
似乎有一些python庫可以用於除了scipy
之外的Wavelet操作:
這是文檔 , 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()
這是文檔 , 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
輕松安裝它們。
最后,這里還有其他我沒有嘗試過的參考資料:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.