我搜索绘制带有离散时间信号的时频信号(采样步长= 0.001秒).我使用Python和Scipy.signal库.我使用函数cwt(data,wavelet,widths),该函数返回一个矩阵,以复杂的morlet小波(或gabor小波)进行连续小波变换.不幸的是,没有太多关于这种用法的文档.我发现的最好的是:
-Matlab的this(我试图找到相同的比例时间结果),但是我自然无法使用相同的功能,
–this解释了什么是连续小波变换,没有小波参数的详细信息.
第一步:获取刻度转换信号.毫无疑问,我直接将数组“宽度”与可能不同比例的数组相关联.因为,如果参数宽度不定比例,我不知道它是什么.也许,你会告诉我“这是当前小波的宽度”!但是,即使是现在,我仍然不确定链接的宽度如何缩放……在Scipy的Morlet文档中,链接似乎可能是:“ s:缩放因子,从-s * 2 * pi到s * 2 *窗口化pi”,因此,我认为width = 4 * pi * scale(宽度=窗口的宽度).但是当我绘制小波时,更多的比例增加,小波的可视宽度减小更多…
我的第二个问题是找到并画出与频率相等的值.在文献中,我发现以下公式:Fa = Fc /(s * delta),其中Fa是最终频率,Fc是小波的中心频率,单位为Hz,s为比例,为采样周期.因此,可以选择比例尺(如果我找到了宽度的链接)和增量(= 0.001秒),但由于小波的中心频率而变得更加复杂.在scipy文档中,我发现:“此小波[morlet小波]的基本频率以Hz为单位,由f = 2 * s * w * r / M给出,其中r是采样率[s是此处的缩放因子,加窗从-s * 2 * pi到s * 2 * pi.默认值为1; w宽度;和M小波的长度].“我认为这是中心频率,对吗?
谢谢
这是我为cwt()复制的代码:
def MyCWT(data, wavelet, scales):
output = zeros([len(scales), len(data)], dtype=complex)
for ind, scale in enumerate(scales):
window = scale*4*pi*10#Number of points to define correctly the wavelet
waveletLength = min(window, len(data))#Number of points of the wavelet
wavelet_data = wavelet(waveletLength, s=scale)#Need to precise w parameter???
#To see the wavelets:
plot(wavelet_data)
xlabel('time (10^-3 sec)')
ylabel('amplitude')
title('Morlet Wavelet for scale='+str(scale)+'\nwidth='+str(window))
show()
#Concolution to calculate the current line for the current scale:
z = convolve(data, wavelet_data, mode='same')
i = 0
for complexVal in z:
output[ind][i] = complex(complexVal.real, complexVal.imag)
i+=1
return output
解决方法:
widths参数是在将小波与数据卷积之前将小波拉伸到的宽度大小的数组.
您应该选择一个范围,该范围的起始值应比预期的信号宽度稍小,但要稍大一些.您提供的值越多,计算速度越慢,但分辨率越高.
查阅documentation或参考的纸Bioinformatics (2006) 22 (17): 2059-2065. doi: 10.1093/bioinformatics/btl355了解更多信息.