scipy.signal.cwt()函数的“widths”参数单位

时间:2015-03-03 01:04:17

标签: python scipy wavelet-transform

我对传递给widths的{​​{1}}参数以及scipy.signal.cwt()的扩展名感到困惑。 一个previous and very helpful Stack Overflow question(以及其中的指针)解释了我的大部分困惑。 scipy.signal.find_peaks_cwt()是一个比例数组,用于在卷积数据之前拉伸小波。

令我困惑的一点是, widths 元素的单位是多少?宽度为1意味着小波被拉伸为1" index"宽,其中index是widths元素之间的距离?起初我认为是这种情况,但是(a)宽度可以取非整数值,(b)cwt()结果可以根据宽度而变化。

这是一些代码,说明了我的困惑。为什么最后两行给出不同的结果?

data

结果很接近,但第二次调用在输入数据的元素63处找到一个虚假峰值。因此,我不相信宽度单位是数据向量的索引。但他们还能做些什么呢?如果没有,#generating an arbitrary signal with overlapping gaussian peaks with various npeaks = 6 support = np.arange(0,1.01,0.01) pkx = np.array([0.2, 0.3, 0.38, 0.55, 0.65]) #peak locations pkfun = sum(stats.norm.pdf(support, loc=pkx[i], scale=0.03) for i in range(0,npeaks-1)) #finding peaks for two different setting of widths pkindsOne = sig.find_peaks_cwt(pkfun, widths = np.arange(4,6), wavelet = sig.ricker) pkindsTwo = sig.find_peaks_cwt(pkfun, widths = np.arange(4,6.4), wavelet = sig.ricker) #printing to show difference between calls for ind, el in enumerate(pkindsTwo): print el, pkindsOne[ind] 20 20 36 36 38 38 55 55 63 66 66 91 91 的单位是多少? widthscwt()永远不知道或看到任何x轴单位(例如我在代码中定义的find_peaks_cwt()向量),那么我缺少什么?实际上,当使用非整数宽度时,它是否有意义?

1 个答案:

答案 0 :(得分:5)

我自己也有同样的问题。看一下源代码,我最好的客户就是单位是"样本数"。 scipy.signal.wavelets.cwt中的关键代码行是:

wavelet_data = wavelet(min(10 * width, len(data)), width)

在这里,"小波"是一个函数(母小波的构造函数),它接收参数" length_of_wavelet"和" width_of_wavelet"样本数量。宽度仍然可以是非整数值的原因是(如果我没有错)它表示缩放因子,它可以取任何实数正数,因为它只是影响形状的公式的一个因素小波。