使用Scipy.signal(Python)进行连续小波变换:cwt()函数中的参数“ widths”是什么? (时间频率)

我搜索绘制带有离散时间信号的时频信号(采样步长= 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了解更多信息.

上一篇:python-使用线性插值调整numpy ndarray的大小


下一篇:使用Komodo和Anaconda在python中导入scipy.misc.pilutil?