|
|
Binäre Zahlendarstellung aus .log-Datei auslesen |
|
knorkwurst |

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 18:13
Titel: Binäre Zahlendarstellung aus .log-Datei auslesen
|
 |
Hallo Community,
ich habe ein Problem beim richtigen auslesen einer Datei. Ich habe eine "testaufnahme.log" Datei, in der nur Einsen und Nullen stehen. Jeweils 16 aufeinander folgende Zahlen sollen einen Messwert darstellen, die hintereinander in einem Vektor stehen sollen. Ich schaffe es nicht die Datei richtig auszulesen damit in jeder Vektorspalte die jeweiligen 16bit drin stehen(erster Eintrag=die ersten 16 Einsen und Nullen; zweiter Eintrag=die nächsten 16 Einsen und Nullen; usw.). Mit "bin2dec" kann ich diese danach ja einfach umwandeln. Ich habe schon das MathWorks: Documentation Center durchsucht und mit den Befehlen:
herumgespielt, aber noch nicht die richtige Lösung gefunden.
Kann mir jemand ein Codebespiel zeigen, in dem man sieht wie man Matlab sagt, dass es eine bestimmte Anzahl von Zahlen aus einer Datei in eine Vektorspalte schreibt?
Grüße Dennis
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 19:30
Titel:
|
 |
Hallo,
eine Beispieldatei wäre hilfreich.
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 20:38
Titel:
|
 |
Hallo Harald,
zum rumprobieren habe ich mir jetzt mal eine einfache "test.txt" Datei erstellt, mit den Zahlen von 0 bis 7 in Binärdarstellung (nur 8bit, noch nicht 16bit-Darstelllung).
Wenn ich den Befehl
benutze kann ich die Unterteilung ja einfach mit Satzzeichen wie ";" erreichen, wenn ich einfach nach jeder 8. Ziffer dieses einfüge. Das habe ich schon herausgefunden und der Vektor A hat dann in jeder Spalte die 8 Einsen und Nullen.
Meine Dateien die ich benutzen will haben diese Satzzeichen aber nicht.
Gruß
Dennis
Beschreibung: |
|
 Download |
Dateiname: |
test.txt |
Dateigröße: |
64 Bytes |
Heruntergeladen: |
396 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 21:04
Titel:
|
 |
Hallo,
hier ginge es so:
Es ist gut möglich, dass es auch effizienter ginge. Das ist aber vor allem auf das Dateiformat zutreffend! Warum nicht die Datei als Binärdatei abspeichern statt als Datei, in der 0 und 1 als Text enthalten sind?!
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 21:41
Titel:
|
 |
Danke erstmal
Ich beschäftige mich damit noch nicht so lange und habe daher noch nicht viel Erfahrung.
Wenn ich die Daten als Binärdatei speichere, kann ich den Befehl "fread(fid)" nehmen oder?
Hatte das schon ausprobiert, aber da gabs Probleme weil die Daten 2er Komplement sind und Matlab immer die Nullen weggelassen hat (z.B. wurde aus 00001100 immer 1100 und somit ein falscher Wert). Deswegen hatte ich es zum Testen einfach erstmal nur normal Binär geschrieben.
Beschreibung: |
nochmal ein kurzer Ausschnitt von Daten als RAW-Format |
|
 Download |
Dateiname: |
testaufnahme.zip |
Dateigröße: |
274 Bytes |
Heruntergeladen: |
308 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 21:57
Titel:
|
 |
Hallo,
bei fread ist das entscheidende, dass die Daten im richtigen Format eingelesen werden. In der Doku findest du mehr dazu, welche Formate es gibt.
Welche Werte beinhaltet deine Datei denn?
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 22:38
Titel:
|
 |
Hallo,
ein Messwert beinhaltet immer ein 8bit Low-Byte und ein 8bit Highbyte, die zusammen als 16bit 2er-Komplement ausgewertet werden müssen(die Werte liegen also zwischen −32768 und +32767).
Das Format pro Byte ist "unsigned char" (habe einen Mikrocontroller in C-Programmiert) und bei Matlab müsste es dann uint8 sein glaub ich. Das High und Low-Byte zusammen sollten am Ende ein "uint16" sein, was ich per
in eine Decimal-Zahl umwandeln kann dachte ich mir.
Gruß
Dennis
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 22:52
Titel:
|
 |
Hallo,
ich komme nicht aus der Ecke und kann mit Beschreibungen wie 2er-Komplement nicht viel anfangen.
Hilfreich wäre wie gesagt die Information, welche Werte die Datei denn enthält - sprich, was die Nullen und Einsen im Klartext ergeben sollen.
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 23:25
Titel:
|
 |
Hallo,
die Nullen und Einsen ergeben einfach nur einen Wert, mit dem ich weiterrechnen muss und den ich später noch plotten möchte (z.B. 3 m/s oder 22°C, jenachdem was für einen Sensor ich anspreche). Mir gehts nur um den Befehl, mit dem ich quasi die Werte, die aus 16bit bestehen, aus der Datei in einen Vektor oder Matrix schreiben kann.
"fread(fid)" wird in der Documentation in Bezug auf Binärdarstellung immer benutzt, also dachte ich das muss ich auch benutzen, habe es nur noch nicht richtig hinbekommen.
Gruß
Dennis
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 31.03.2014, 23:37
Titel:
|
 |
Hallo,
Zitat: |
die Nullen und Einsen ergeben einfach nur einen Wert, |
und welche Werte sind das in deinem Beispiel? Ich habe fread mit verschiedenen Formaten auf deine Datei angewendet und würde dir gerne sagen, welches Format das richtige ist. Dazu müsste ich aber wissen, welche Zahlen bei dieser Beispieldatei denn herauskommen sollen.
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.04.2014, 00:03
Titel:
|
 |
Hallo,
habe nochmal schnell eine neue einfache Datei erstellt. Dort ist eine Temperaturmessung als Kommazahl enthalten (Messwert an sich wieder 16bit lag). Die ersten 8bit sind die Zahl vor dem Komma und sollten bei einem Wert von 23 sein. Die jeweils zweiten 8bit sind die Nachkommastellen und schwanken zwischen einem Wert von 80 und 100.
Gruß
Dennis
Beschreibung: |
|
 Download |
Dateiname: |
testaufnahme2.zip |
Dateigröße: |
221 Bytes |
Heruntergeladen: |
332 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.04.2014, 09:31
Titel:
|
 |
Hallo,
Zitat: |
Die jeweils zweiten 8bit sind die Nachkommastellen und schwanken zwischen einem Wert von 80 und 100. |
D.h. die Zahlen sollen insgesamt zwischen 23.8 und 24 schwanken, oder worauf beziehen sich die 80 und 100?
Hier ein erster Versuch:
Der Nachkommateil stimmt wohl noch nicht so ganz. Das bekommst du aber vielleicht besser hin als ich, weil du ja weißt, wie das interpretiert werden muss.
Grüße,
Harald
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.04.2014, 09:41
Titel:
|
 |
Vielen Dank,
die 80 bis 100 beziehen sich auf den Binärwert den man direkt aus den Einsen und Nullen ablesen kann, die Umrechnung in den Temperaturwert hab ich noch nicht gemacht, aber das ist einfach.
Werde das gleich mal versuchen umzusetzten.
Gruß Dennis
|
|
|
knorkwurst |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.04.2014, 13:15
Titel:
|
 |
Hallo,
es funktioniert nun wie ich es haben möchte. Aber jetzt tritteinanderes Problem auf. Wenn ich "bin2dec(a)" benutzen möchte, müssen die Werte von a als "binarystr" (z.B. a=['1011':'1101':'1110']) vorhanden sein. In meinem Modell sind die Werte in a aber nur binary (z.B. a=[1011:1101:1110]). Gibt es einen Befehl mit dem ich "binary" zu "binarystr" machen kann? (sowas wie "bin2binstr(a)" gibts ja nicht)
Gruß
Dennis
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.04.2014, 13:28
Titel:
|
 |
Hallo,
dieses a sieht merkwürdig aus. Bitte den Code posten, wie a zustandekommt. Das hilft nicht nur bei der Nachvollziehbarkeit, sondern kann auch für andere interessant sein, die ein ähnliches Problem haben.
num2str könnte helfen, aber wie gesagt: hängt davon ab, wie a genau aussieht.
Grüße,
Harald
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|