WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

binäre Zahl zusammenfügen

 

fekal
Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 04.02.2013, 12:31     Titel: binäre Zahl zusammenfügen
  Antworten mit Zitat      
Bestes Forum,

ich möchte eine binäre Zahl die in mehrere Spalten eines Arrays aufgeteilt ist (CAN Nachricht) zusammenfügen um deren float ermitteln zu können.
Kennt ihr den Befehl zum zusammenfügen? Google spuckt einfach nichts aus.

Besten Dank
Euer Fekal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.02.2013, 13:41     Titel: Re: binäre Zahl zusammenfügen
  Antworten mit Zitat      
Hallo fekal,

Bitte definiere den vorhandenen Input mit Class und Dimension. "binäre Zahl die in mehrere Spalten eines Arrays aufgeteilt ist" ist noch nicht eindeutig. Auch "zusammenfügen" und "deren float" ist nicht klar.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 04.02.2013, 14:10     Titel:
  Antworten mit Zitat      
Hallo Jan,

Verzeihung, wenn ich meine Frage nicht richtig formuliert habe.

ich kriege Daten aus einem CAN device gesendet. Diese werden als uint8 (warum auch immer) in ein z.B. [1x6] Array gespeichert.

Ich möchte diese nun einzeln in IEEE 754 (8bit ?) wandeln. Dann habe ich immer noch ein [1x6] Array mit IEEE Werten. Um daraus nun eine Dezimalzahl zu bestimmen muss ich die 6 IEEEs zu einer IEEE zusammenfassen [1x1].
Dann kann ich die [1x1] IEEE zu einer Dezimalzahl wandeln.

Sicher höchst umständlich, aber ich sehe gerade keinen anderen Weg.
Momentan hänge ich noch daran uint8 in bin zu wandeln.

Vielen Dank für deine Zeit
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.02.2013, 22:15     Titel:
  Antworten mit Zitat      
Hallo fekal,

Ich verstehe es immer noch nicht ganz. Aber ich weiß, dass es niemals einfach ist eine Frage zu stellen, solange man noch nicht die Antwort kennt.

Also, Du hast als Input z.B.:
Code:
in = uint8([128,62,117,29,206,17])

In was möchtest Du dies nun umwandeln? Ein "IEEE 754 (8bit ?)" kenne ich nicht. IEEE 754 ist der Standard, der z.B. die binäre Representation von Floating Point Zahlen mit 2, 4 (single) und 8 (double) Bytes definiert.

Wie sollen nun die vorhandenen 6*8 Byte= 48 Bits in ein wahrscheinlich gewünschtes 64 bit IEEE 754 Double konvertiert werden?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 04.02.2013, 22:31     Titel:
  Antworten mit Zitat      
Ja, das mit der Frage... Confused

genau, mein Input sieht so aus wie du Ihn beschreibst.

Ich würde den dann in bin wandeln, also
128= 10000000
62= 11100
117 =1110101 etc.

die würden dann erst mal so stehen

Code:
in=bin([10000000,11100,1110101,...])

und sollen dann später so aussehen
Code:
in=bin([10000000111001110101...])

daraus ergibt sich dann nach dem IEEE Standart eine Dezimalzahl mit Exponent, Mantisse, Vorzeichen.

Ich merke gerade, dass das wandeln von uint8 in bin nicht so einfach läuft wie ich mir das vorgestellt habe. Aber wenn das geschafft ist, bräuchte ich den Befehl um die einzelnen bin Werte "zusammen zuschieben"
Das ist die Urfrage meines Threads.
Ich hoffe ich hab nicht nur Unsinn erzählt.

Danke Jan für deine Hilfe auch noch um diese Uhrzeit.
Beste Grüße Fekal
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 20.02.2013, 18:16     Titel:
  Antworten mit Zitat      
Yhiaaaa Laughing , endlich ist die Lösung gefunden:

mit
Code:
        umgewandelt=typecast(uint8([data(1,4) data(1,3) data(1,2) data(1,1)]),'single');
 

Hier von uint8 in single. Das geht sicher auch mit typecast(hex (...),'hex'). Aber ich brauchte das Zusammenschieben um aus ankommenden CAN Nachricht einen wert zu bestimmen. Dafür müssen die einzelne Bits zusammen geschoben werden und umgewandelt. Das übernimmt typecast.
Data ist hier eine Array mit mehreren Feldern in denen die Daten ankommen.

Die umgedrehte Reihenfolge wird von Matlab verlangt. Jetzt müsst Ihr nur noch schauen, in welcher Reihenfolge die CAN Nachricht ankommt.

Beste Grüße
Euer fekal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.02.2013, 22:18     Titel:
  Antworten mit Zitat      
Hallo fekal,

Schön, dass es läuft. Etwas kürzer:
Code:
umgewandelt=typecast(uint8(data(1,[4,3,2,1])), 'single');

Nach 'hex' kann man nicht per TYPECAST konvertieren, da 'hex' kein Datentyp in Matlab ist, sondern nur eine Konversionsvorschrift um von Strings auf Integerwerte zu kommen.

Zitat:
Jetzt müsst Ihr nur noch schauen, in welcher Reihenfolge die CAN Nachricht ankommt.

Müssen wir das? ;-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 22.02.2013, 18:17     Titel:
  Antworten mit Zitat      
Very Happy

Das sieht ja noch schöner aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.