value in matlab-struct auslesen
Verfasst: Mittwoch 12. November 2025, 12:59
Hallo,
ich habe folgendes Problem: Ich habe eine Reihe an matlab-Dateien, in denen mehrere Messkanäle sind (Data_x_Channel). Zu jedem Data-Channel gehört ein Header-Channel (Data_x_Header). Ich brauche aus jeder matlab-Datei einen bestimmten Kanal. Theoretisch könnte man ihn immer gleich zuweisen, sodass es z.B. immer Channel_5_Data ist. Über die gesamte Messreihe hat sich aber etwas an der Messkonfiguration geändert, sodass dieser Sensor nicht über die gesamte Messreihe den gleichen Kanal hat. Ich kann inzwischen die header und deren content in einer txt-datei für jede der matlab-dateien abspeichern, um manuell nachzuschauen, welche nummer ich jetzt für meinen gesuchten Kanal nutzen muss. Es ergibt sich also in der txt-Datei folgendes Muster:
In matlab sind die Header ein 1x1 struct mit 4 Feldern, davon ist ein Feld SignalName mit Value. Ich brauche immer die Value GNSS_Speed. Das bedeutet, wenn die Value = GNSS_Speed ist, soll der dazugehörige Datenkanal genommen werden.
Mein Ansatz war folgender:
An anderer Stelle kommt dann:
Jetzt bin ich mir unsicher, wie in Python der struct zu extrahieren ist. Der Header an sich ist ein numpy.void oder numpy.ndarray mit shape (1,1) und header["SignalName"] liefert ein Array, jedoch nicht den String.
Wie lässt sich das Problem lösen? Gibt es eine elegantere Methode, die ich übersehen habe?
ich habe folgendes Problem: Ich habe eine Reihe an matlab-Dateien, in denen mehrere Messkanäle sind (Data_x_Channel). Zu jedem Data-Channel gehört ein Header-Channel (Data_x_Header). Ich brauche aus jeder matlab-Datei einen bestimmten Kanal. Theoretisch könnte man ihn immer gleich zuweisen, sodass es z.B. immer Channel_5_Data ist. Über die gesamte Messreihe hat sich aber etwas an der Messkonfiguration geändert, sodass dieser Sensor nicht über die gesamte Messreihe den gleichen Kanal hat. Ich kann inzwischen die header und deren content in einer txt-datei für jede der matlab-dateien abspeichern, um manuell nachzuschauen, welche nummer ich jetzt für meinen gesuchten Kanal nutzen muss. Es ergibt sich also in der txt-Datei folgendes Muster:
Code: Alles auswählen
### Fahrtx ###
Channel_1_Data: [[0.000][1.000][2.000]]
Channel_1_Header: [[(array(['204,08973'], dtype='<U9'), array (['s'], dtype='<U1'), usw.
Channel_2_Data: [...]
Channel_2_Header: [...] usw.
Mein Ansatz war folgender:
Code: Alles auswählen
def find_channel_with_pattern(mat_data, pattern):
for key in mat_data.keys():
if key.endswith("_Header"):
header = mat_data[key]
if hasattr(header, "dtype") and "SignalName" in header.dtype.names:
signal_name = header["SignalName"][0][0]
if isinstance(signal_name, str) and pattern in signal_name:
return key.replace("_Header", "_Data")
return None
Code: Alles auswählen
speed_channel = find_channel_with_pattern(mat, "GNSS_Speed")
if speed_channel is None:
print(f"Kein Kanal mit GNSS_Speed im Header in {mat_file_path} gefunden")
return
Wie lässt sich das Problem lösen? Gibt es eine elegantere Methode, die ich übersehen habe?