2015-03-03 17 views
5

我對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矢量),所以我錯過了什麼?實際上,何時使用非整數寬度有意義?

回答

5

我自己也有同樣的問題。查看源代碼,我最好的客戶是這些單元處於「樣本數量」。 scipy.signal.wavelets.cwt內的鍵代碼行是:

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

這裏,「小波」是樣本的數目接收參數「length_of_wavelet」和「width_of_wavelet」的函數(母小波的助洗劑) 。寬度仍然可以是非整數值的原因是(如果我沒有錯的話),它代表縮放因子,它可以取任何實數正數,因爲它只是影響形狀的公式的一個因子小波。