Forum: Mikrocontroller und Digitale Elektronik Paare von Zahlen in 8Bit komprimieren


von Das Array (Gast)


Lesenswert?

Ich suche eine mathematische Komprimierungslösung für folgendes Problem:

Ich habe jeweils zwei zusammengehörige Paare:
Wert Eins: 0 bis 255
Wert Zwei: 0 bis 255

Beispiel(Wert Eins, Wert Zwei, Wert Eins,...)
[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0, 
0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170 
,106,39,0,0,104,39,0,0,101,26,0,0,104,39]

Ziel ist nun, diese Informationen möglichst platzsparend in eine Reihe 
von 8Bit-Zahlen zu komprimieren und wieder zu dekomprimieren.

Welcher Algorithmus - in Basic bestenfalls - erreicht dies?

Bei Unklarheiten nachfragen.

: Gesperrt durch User
von Das Array (Gast)


Lesenswert?

Bspw. könnten alle Nullen und anderen gleichen Zahlen in Verbindung 
gebracht werden o.ä.

von Martin (Gast)


Lesenswert?

Wie viele Werte pro Reihe hast du insgesamt?

von abraxas (Gast)


Lesenswert?

Das kann man nur sinnvoll komprimieren wenn diese Zahlenfolge 
Besonderheiten hat, die man ausnutzen kann, für eine x-beliebige Folge 
gibt es keine Kompression von der man sagen kann dass sie immer hilft.
in deinem Bsp sind z.b. Nullen recht häufig --> ist das immer so?

von Detlev T. (detlevt)


Lesenswert?

Hallo Das Array,

der Trick bei eigentlich allen Komprimierungen ist, dass man nicht 
speichern muss, was man vorher schon weiß. Was kannst du über deine 
Daten sagen? Kommen bestimmte Werte/Kombinationen häufiger vor, sind die 
Änderungen zwischen zwei Wertepaaren häufig nur klein oder sie 
wiederholen sich sogar öfters? Davon hängt dann der Algorithmus ab.

Gruß, DetlevT

von Das Array (Gast)


Lesenswert?

Martin: Meinst du den verfügbaren Speicherplatz oder die Anzahl der zu 
speichernden Paare?

abraxas, Detlev T.: Ja, Nullen sind recht häufig. Überhaupt ist das 
Beispiel symptomatisch für alle anderen. Im Grunde sind Wert Eins und 
Wert Zwei nicht alle Zahlen zwischen 0 und 255 sondern nehmen alle 
diskrete Zustände an. Und zwar diese bei Wert Eins:

1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 - 
74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 - 
104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 - 
117 - 118 - 121 - 123 - 120

Ein ähnliches Muster bei Wert Zwei.

von Karl H. (kbuchegg)


Lesenswert?

Das Array schrieb:

> diskrete Zustände an. Und zwar diese bei Wert Eins:
>
> 1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 -
> 74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 -
> 104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 -
> 117 - 118 - 121 - 123 - 120
>
> Ein ähnliches Muster bei Wert Zwei.

Sind immer noch zuviele.
Wenn du jedes aus 1 mit jedem aus 2 kombinieren kannst, gibt es mehr als 
256 verschiedene Kombinationen.
Egal wie du es drehst und wendest, du hast nicht mehr als 256 
unterscheidbare Zustände in einem Byte.

Wenn du da überhaupt etwas kompremieren kannst, dann musst du an der 
zeitlichen Entwicklung der zu übertragenden Reihe ansetzen. Denk aber 
daran: Wenn du nur Differenzen hast, hängt alles davon ab, das keine 
Differenz verloren geht.

von Das Array (Gast)


Lesenswert?

Dann muß eben ein anderer Weg gegangen werden.

von Karl H. (kbuchegg)


Lesenswert?

Das Array schrieb:
> Dann muß eben ein anderer Weg gegangen werden.

Ja.
Das geht aber nur, wenn man weiß wo die Zahlen herkommen; welche 
Charakteristika es gibt; was man ausnutzen kann.
Mit beliebigen Zahlenfolgen von denen man nichts weiß, kann man kaum 
etwas machen.

von Peter (Gast)


Lesenswert?

Das Array schrieb:
> Im Grunde sind Wert Eins und
> Wert Zwei nicht alle Zahlen zwischen 0 und 255 sondern nehmen alle
> diskrete Zustände an. Und zwar diese bei Wert Eins:
>
> 1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 -
> 74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 -
> 104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 -
> 117 - 118 - 121 - 123 - 120

das sind ja nur 46 zustände, also braucht man dafür nur 6bit. Damit 
hätte man schon 25% gespart.
Wie viele Kombinationen von wert1:wert2 gibt es?

von Das Array (Gast)


Lesenswert?

Für Wert Zwei fand ich folgendes(Beispiel ist redundant):

166 - 156 - 10 - 72 - 10 - 34 - 6 - 20 - 10 - 4 - 2 - 3 - 7 - 15 - 30 - 
55 - 6 - 114 - 10 - 239 - 10 - 156 - 10 - 72 - 10 - 34 - 6 - 20 - 10 - 4 
- 2 - 3 - 7 - 15 - 30 - 55 - 6 - 114 - 10 - 239 - 10 - 156 - 10 - 72 - 
34 - 6 - 20 - 10 - 4 - 2 - 3 - 7 - 15 - 30 - 55 - 6 - 114 - 10 - 239

von Das Array (Gast)


Lesenswert?

Alle Kombinationen sind möglich. Aber die gewöhnliche Verteilung ist 
[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0, 
0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170 
,106,39,0,0,104,39,0,0,101,26,0,0,104,39]

PS: Jeweils 0 zufügen

von Peter (Gast)


Lesenswert?

kannst du nicht etwas mehr zu den Werten sagen? Um was geht es dabei? 
Eventuell gibt es ja noch andere zusammenhänge. Muss das ganze 
verlustfrei Komprimiert werden?

von Das Array (Gast)


Lesenswert?

Dazu ist nicht mehr Wissen nötig. Wenn du mir helfen kannst, dann reicht 
das aus.

von Karl H. (kbuchegg)


Lesenswert?

Träum weiter.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.