我对widths
传递给scipy.signal.cwt()
和扩展的参数感到困惑scipy.signal.find_peaks_cwt()
。以前的一个非常有用的 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
我在代码中定义的向量),那么我错过了什么?实际上,什么时候使用非整数宽度有意义?