2016-09-17 6 views
0

Ich muss Gleitkommazahlen (4 Byte) auf 1 Byte (0 bis 0xFF) komprimieren, um an ein anderes Gerät zu senden. Die Gleitkommazahlen reichen von -100000.0 bis 100000.0.komprimieren 4 Byte Gleitkommadaten auf 1 Byte

Das andere Gerät wird von 1 Byte zurück in Gleitkommazahlen decodieren. Wie geht das mit minimalem Datenverlust?

Danke, JC

+0

Convert zu byte durch Multiplikation mit 127/100000, dann das Gegenteil zu dekomprimieren? Aber warum nicht einfach vier Bytes anstelle von einem übertragen? – Timtech

+0

Danke für den Vorschlag! Der Grund für die Übertragung eines Bytes liegt an der Kommunikationsbandbreite. –

+0

Okay, aber stellen Sie sicher, dass Sie nicht nur 4 Bytes in 1 komprimieren können. Die maximalen eindeutigen Werte, die ein Datenbyte darstellen kann, ist 256 (2^8). – Timtech

Antwort

1

Eine Lösung ist die Quantisierung zu verwenden. Teilen Sie 100000 auf 127 Intervalle. Senden Sie die Intervallnummer, zu der Float gehört, und ein Vorzeichen auf dem niedrigsten oder höchsten Bit

In Ihrem Fall ist das Intervall = 787,4 Zum Beispiel haben Sie Eingabe wie 100. Senden 1. Eingabe 1000,147732. Send 2 Auf dem Gerät können Sie die Nummer nach ihrem Intervall wiederherstellen. Die einfachste Lösung besteht darin, die Nummer als Mitte des Intervalls wiederherzustellen. Zum Beispiel wird jeder Float, der zum ersten Intervall gehört, als 393.7 wiederhergestellt. Wenn Sie Statistiken für die Verteilung der Ziffern haben und diese nicht einheitlich sind, können Sie sie umgehen, indem Sie die Intervalllänge ändern und häufigere Floats genauer quantisieren