Unidades do argumento "widths" para a função scipy.signal.cwt ()
Estou confuso sobre owidths
parâmetro que é passado parascipy.signal.cwt()
e por extensão ascipy.signal.find_peaks_cwt()
. UMApergunta anterior e muito útil sobre Stack Overflow (e dicas) explicaram a maior parte da minha confusão. owidths
é uma variedade de escalas pelas quais esticar a wavelet antes da convolução com seus dados.
O ponto que me confundiu ainda é,quais são as unidades dos elementos dewidths
? Uma largura de 1 significa que a wavelet é esticada para ter um "índice" de largura, em que índice é a distância entre os elementos dedata
? Inicialmente, presumi que fosse esse o caso, mas (a) as larguras podem assumir valores não inteiros e (b) os resultados cwt () podem variar dependendo das larguras.
Aqui está um código que ilustra minha confusão. Por que as duas últimas linhas apresentam resultados diferentes?
#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
Os resultados estão próximos, mas a segunda chamada encontra um pico falso no elemento 63 dos dados de entrada. Portanto, não estou convencido de que as unidades de largura sejam índices do vetor de dados. Mas o que mais eles poderiam ser? Caso contrário, quais são as unidades dowidths
? cwt()
efind_peaks_cwt()
nunca conhece ou vê unidades do eixo x (por exemplo, osupport
vetor definido no meu código), então o que estou perdendo? Quando, na prática, faz sentido usar larguras não inteiras?