Kontinuierliche Wavelet-Transformation mit Scipy.signal (Python): Was ist der Parameter “widths” in der Funktion cwt ()? (Zeit-Frequenz)

Ich suche, um ein Zeit-Frequenz-Signal mit einem diskreten zeitlichen Signal zu zeichnen (Abtastschritt = 0,001 Sekunden). Ich benutze Python und die Bibliothek Scipy.signal. Ich benutze die Funktion cwt (Daten, Wavelet, Breiten), die eine Matrix zurückgibt, um eine kontinuierliche Wavelet-Transformation mit dem komplexen Morlet-Wavelet (oder Gabor-Wavelet) durchzuführen. Leider gibt es nicht viele Dokumentationen zu dieser Verwendung. Das Beste, was ich gefunden habe, sind:diese für Matlab (ich versuche das gleiche Skalenergebnis zu finden), aber ich habe natürlich keinen Zugriff auf die gleichen Funktionen, - unddiese die erklären, was eine kontinuierliche Wavelet-Transformation ist, ohne Einzelheiten der Wavelet-Parameter.

Erster Schritt: Erhalten Sie ein Signal für die Skalenumsetzung. Im Zweifelsfall habe ich das Array "widths" direkt mit dem Array der möglichen unterschiedlichen Maßstäbe verknüpft. Weil ich nicht verstanden habe, was Parameterbreite ist, wenn sie nicht skaliert ist. Vielleicht würden Sie mir sagen, "es ist die Breite Ihres aktuellen Wavelets"! Aber selbst jetzt bin ich mir nicht sicher, wie die Linkbreite mit der Skalierung zusammenhängt ... In der Morlet-Dokumentation in Scipy scheint es, dass der Link sein könnte: "s: Skalierungsfaktor, Fenster von -s * 2 * pi bis + s * 2 * pi ", also dachte ich, dass width = 4 * pi * scale (width = width of the window) ist. Aber wenn ich die Wavelets zeichne, nimmt der Maßstab zu und die visuelle Breite des Wavelets nimmt ab ...

Mein zweites Problem ist, das Äquivalent mit der Frequenz zu finden und zu zeichnen. In der Literatur finde ich diese Formel: Fa = Fc / (s * delta), wobei Fa die Endfrequenz ist, Fc die Mittenfrequenz eines Wavelets in Hz, s die Skala und Delta die Abtastperiode. Also, ok für Skalierung (wenn ich den Zusammenhang mit der Breite finde) und Delta (= 0,001 Sek.), Aber es ist komplizierter mit der Mittenfrequenz des Wavelets. In der scipy-Dokumentation stelle ich fest, dass: „Die Grundfrequenz dieses Wavelets [morlet Wavelet] in Hz ist gegeben durch f = 2 * s * w * r / M, wobei r die Abtastrate ist [s ist hier Skalierungsfaktor, Fenster von -s * 2 * pi bis + s * 2 * pi. Standard ist 1; w die Breite; und M die Länge des Wavelets]. "Ich denke, es ist die Mittenfrequenz, oder?

Danke

Hier mein remanierter Code für 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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage