我对传递给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
的单位是多少? widths
和cwt()
永远不知道或看到任何x轴单位(例如我在代码中定义的find_peaks_cwt()
向量),那么我缺少什么?实际上,当使用非整数宽度时,它是否有意义?
答案 0 :(得分:5)
我自己也有同样的问题。看一下源代码,我最好的客户就是单位是"样本数"。 scipy.signal.wavelets.cwt中的关键代码行是:
wavelet_data = wavelet(min(10 * width, len(data)), width)
在这里,"小波"是一个函数(母小波的构造函数),它接收参数" length_of_wavelet"和" width_of_wavelet"样本数量。宽度仍然可以是非整数值的原因是(如果我没有错)它表示缩放因子,它可以取任何实数正数,因为它只是影响形状的公式的一个因素小波。