Ich würde gerne die Hilbert spectrum als 3D-Plot (d. H. 2D-Array) in Python berechnen. Das Hilbert-Spektrum ist eine Funktion der Form time x frequency -> amplitude
, die jedem Zeit- und Frequenzpaar einen Amplitudenwert zuweist.Erstellen Sie ein 2D-Array (3D-Plot) aus zwei 1D-Arrays (2D-Plots) in Python (zur Berechnung des Hilbert-Spektrums)
Die Methode zur Berechnung des Spektrums nimmt ein oder mehrere 2D-Signale als Eingabe auf, die jeweils zwei Komponenten haben: time -> frequency
und time -> amplitude
. Nehmen Sie als Beispiel ein einzelnes Signal a
. y1
wären die Frequenzwerte, y2
die Amplitudenwerte.
a_x = [1,2,3]
a_y1 = [1,2,1]
a_y2 = [4,5,6]
Ich mag würde, diese beiden 2D-Plots in einem 3D-Plot, so dass X x Y1 -> Y2
zu transformieren.
a(1,1) = 4
a(2,2) = 5
a(3,1) = 6
Die realen Werte wären Floats. Meine bisherige Lösung bestand darin, die Werte für Maximum und Minimum in y1
zu nehmen und ein Gitter mit einer vorbestimmten Genauigkeit wie 0,01 zu initialisieren. In diesem Beispiel:
y1_max = np.amax(a_y1)
y1_min = np.amin(a_y2)
# Initialise 2d array of zeros
hilbert_spectrum = np.zeros((len(a_x), len(np.linspace(y1_min, y1_max, 0.01)))
würde ich dann in dem Netz als solches füllen:
# Fit the old y1 values into new grid
y1_grid = np.floor((a_y1 - y1_min)/0.01).astype(np.int)
# Fill the 2D hilbert spectrum
hilbert_spectrum[1, y1_grid[0]] = 4
hilbert_spectrum[2, y1_grid[1]] = 5
hilbert_spectrum[3, y1_grid[2]] = 6
Dies ist jedoch kompliziert wird, wenn es mehr als ein Eingangssignal ist. Gibt es einen mathematischeren/prägnanteren Weg, dies zu tun? Die Ausgabe sollte ein 2D-Array sein, das für weitere Berechnungen verwendet werden kann.
Könnten Sie mir bitte zeigen, wo ich den aktuellen 2D-Array von diesem erhalten kann? Ich wusste, dass ich die Punkte mit Matplotlib plotten könnte, aber ich muss das 2D-Array bekommen, ohne es zu plotten. Entschuldigung, wenn meine Frage nicht klar genug war. – Irondwarf
Ich bot etwas wie Delaunay Triangulation, die Sie von 'scipy.spatial.Delaunay' erhalten können. Die Datenstruktur, die Sie erhalten, ist kein 2D-Array. Es ist ein Graph (siehe: https://en.wikipedia.org/wiki/Graph_(abstract_data_type)). –
Sorry, ich sehe nicht, wie ich das 2D-Array aus dem Graphen erzeugen würde. Vielleicht ist es nur mein Unverständnis für die Triangulation. – Irondwarf