我搜索以绘制具有离散时间信号的时频信号(采样步长 = 0.001 秒)。我使用 Python 和库 Scipy.signal。我使用函数 cwt(data, wavelet, widths),它返回一个矩阵,用复 morlet 小波(或 gabor 小波)进行连续小波变换。不幸的是,没有很多关于这种用法的文档。我发现的最好的是: -这适用于 Matlab(我试图找到相同的尺度时间结果),但我自然无法使用相同的函数, -这解释了什么是连续小波变换,没有小波参数的详细信息.
第一步:获取比例转换信号。毫无疑问,我直接将数组“宽度”与可能的不同比例的数组相关联。因为,如果不是比例,我不明白什么是参数宽度。也许,你会告诉我“这是你当前小波的宽度”!但是,即使是现在,我也不确定链接宽度与比例的关系......在 Scipy 的 Morlet 文档中,链接似乎可能是:“s: Scaling factor, windowed from -s*2*pi to +s*2 *pi",所以,我认为宽度 = 4*pi*scale(宽度=窗口的宽度)。但是当我绘制小波时,更多的比例增加,更多的小波的视觉宽度减小......
我的第二个问题是找到并绘制频率等价物。在文献中,我找到了这个公式:Fa = Fc / (s*delta),其中 Fa 是最终频率,Fc 是小波的中心频率,以 Hz 为单位,s 是尺度,delta 是采样周期。因此,对于比例(如果我找到与宽度的链接)和增量(= 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