Transformação de wavelet contínua com Scipy.signal (Python): qual é o parâmetro “widths” na função cwt ()? (tempo-frequência)

Eu procuro desenhar um sinal de frequência de tempo com um sinal temporal discreto (passo de amostragem = 0,001s). Eu uso o Python e a biblioteca Scipy.signal. Eu uso a função cwt (dados, wavelet, larguras), que retorna uma matriz, para fazer uma transformação de wavelet contínua, com a complexa morlet wavelet (ou gabor wavelet). Infelizmente, não há muitas documentações desse uso. Os melhores que eu encontrei são: -esta para Matlab (eu tento encontrar o mesmo resultado em escala de tempo), mas naturalmente não tenho acesso às mesmas funções, - Eesta que explicam o que é transformada wavelet contínua, sem detalhes dos parâmetros da wavelet.

Primeiro passo: obtenha um sinal de conversão de escala. Na dúvida, associei diretamente a "largura" da matriz à matriz das possíveis escalas diferentes. Porque não entendi o que é a largura do parâmetro se não for dimensionável. Talvez você me diga "é a largura da sua wavelet atual"! Mas, mesmo agora, não tenho certeza de como a largura do link com a escala… Na documentação do Morlet no Scipy, parece que o link pode ser: "s: Fator de escala, com janela de -s * 2 * pi a + s * 2 * pi ", pensei em largura = 4 * pi * escala (largura = largura da janela). Mas quando desenho as wavelets, mais escala aumenta, mais a largura visual da wavelet diminui ...

Meu segundo problema é encontrar e desenhar o equivalente com frequência. Na literatura, encontro a seguinte fórmula: Fa = Fc / (s * delta), onde Fa é a frequência final, Fc a frequência central de uma wavelet em Hz, é a escala e delta o período de amostragem. Então, ok para escala (se eu encontrar o link com a largura) e delta (= 0,001s), mas é mais complicado com a frequência central da wavelet. Na documentação do scipy, eu acho que: “A frequência fundamental desta wavelet [morlet wavelet] em Hz é dada por f = 2 * s * w * r / M, onde r é a taxa de amostragem [s está aqui Fator de escala, em janela de -s * 2 * pi a + s * 2 * pi. O padrão é 1; w a largura; e M o comprimento da wavelet]. ”Eu acho que é a frequência central, é?

Obrigado

Aqui meu código remanejado para cwt ():

def MyCWT(data, wavelet, scales):

output = zeros([len(scales), len(data)], dtype=complex)

for ind, scale in enumerate(scales):

    window = scale*4*pi*10#Number of points to define correctly the wavelet
    waveletLength = min(window, len(data))#Number of points of the wavelet
    wavelet_data = wavelet(waveletLength, s=scale)#Need to precise w parameter???

    #To see the wavelets:
    plot(wavelet_data)
    xlabel('time (10^-3 sec)')
    ylabel('amplitude')
    title('Morlet Wavelet for scale='+str(scale)+'\nwidth='+str(window))
    show()

    #Concolution to calculate the current line for the current scale:
    z = convolve(data, wavelet_data, mode='same')

    i = 0
    for complexVal in z:
        output[ind][i] = complex(complexVal.real, complexVal.imag)         
        i+=1

return output

questionAnswers(1)

yourAnswerToTheQuestion