我對widths
參數感到困惑,該參數被傳遞給scipy.signal.cwt()
並且被擴展爲scipy.signal.find_peaks_cwt()
。 A previous and very helpful Stack Overflow question(和其中的指針)解釋了我的大部分困惑。 widths
是一組縮放數據的縮放數組。scipy.signal.cwt()函數的「寬度」參數的單位
讓我困惑的一點仍然是,widths
元素的單位是什麼?寬度是否意味着小波被拉伸爲一個「索引」寬,其中索引是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
矢量),所以我錯過了什麼?實際上,何時使用非整數寬度有意義?