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