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

4
我想用离散时间信号(采样间隔为0.001秒)绘制时频信号。我使用Python和Scipy.signal库中的函数cwt(data, wavelet, widths)进行连续小波变换,使用复杂Morlet小波(或Gabor小波)。不幸的是,这种用法的文档很少。我找到的最好的文档是: - this针对Matlab(我试图找到相同的比例-时间结果),但我自然无法访问相同的函数, - 以及this解释了什么是连续小波变换,但没有给出小波参数的详细说明。
第一步:获取一个比例-转换信号。如果有疑问,我会直接将“widths”数组与可能不同比例的数组相关联。因为,如果宽度不是比例参数,我就不明白它是什么了。也许,你会告诉我“它是当前小波的宽度”!但是,即使现在,我也不确定如何将宽度与比例联系起来...在Scipy的Morlet文档中,似乎链接可以是:“s:缩放因子,从-s*2*pi到+s*2*pi进行窗口化”,所以,我认为宽度=4*pi*scale(窗口的宽度)。但是当我绘制小波时,比例越大,小波的视觉宽度就越小...
我的第二个问题是找到并绘制相应的频率。在文献中,我发现了这个公式:Fa = Fc / (s*delta),其中Fa是最终频率,Fc是Hz中小波中心频率,s是比例尺,delta是采样周期。所以,如果我能找到与宽度链接的比例尺(ok),和采样周期(=0.001秒),那么小波中心频率就更加复杂了。在scipy文档中,我发现:“该小波[莫尔小波]的基本频率以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

1
类似的问题在这里:http://dsp.stackexchange.com/q/15358/29 - endolith
1个回答

5
widths参数是一组宽度大小的数组,波形将被拉伸到这些宽度大小之后再与数据进行卷积。
您应该选择一个范围,从稍微小于预期信号宽度的值开始,直到稍微大于预期信号宽度。您提供的值越多,计算速度就越慢,但分辨率越高。
请查看文档或参考文献"Bioinformatics (2006) 22 (17): 2059-2065. doi: 10.1093/bioinformatics/btl355"以获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接