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

10
我对传递给scipy.signal.cwt()以及扩展到scipy.signal.find_peaks_cwt()widths参数感到困惑。一篇之前非常有用的Stack Overflow问题(以及其中的指针)解释了我的大部分困惑。 widths是一个比例数组,用于在与数据卷积之前拉伸小波。

仍然让我困惑的是,元素的widths单位是什么? 宽度为1是否意味着将小波拉伸为一个“索引”宽度,其中索引是data元素之间的距离? 起初,我认为是这种情况,但是(a)宽度可以采用非整数值,并且(b)cwt()结果可能因宽度而异。

以下是说明我的困惑的一些代码。 为什么最后两行会产生不同的结果?

#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

结果非常接近,但第二次调用在输入数据的第63个元素处发现了一个虚假峰。因此,我不确定宽度的单位是否为数据向量的索引。但是它们还能是什么呢?如果不是,widths的单位是什么?cwt()find_peaks_cwt()从未知道或看到任何x轴单位(例如我在代码中定义的support向量),那么我错过了什么?在实际情况下,何时使用非整数宽度才有意义?
1个回答

8

我也有同样的问题。通过查看源代码,我的最佳猜测是单位为“样本数”。scipy.signal.wavelets.cwt中的关键代码行是:

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

在这里,“小波”是一个函数(母小波的构建器),它接收“小波长度”和“小波宽度”(以采样数表示)作为参数。之所以宽度仍然可以是非整数值,是因为(如果我没记错的话)它代表了缩放因子,可以取任何实数正数,因为它只是影响小波形状的公式中的一个因子。

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