mikrocontroller.net

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


Autor: Das Array (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 Moderator
Autor: Das Array (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie viele Werte pro Reihe hast du insgesamt?

Autor: abraxas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Das Array (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Das Array (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann muß eben ein anderer Weg gegangen werden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Das Array (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Das Array (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Das Array (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Träum weiter.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.