PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenreduktion



tomdul
15.02.2007, 20:06
Habe mir mal über folgendes Gedanken gemacht:
Ich habe einen Datenlogger gebaut, der 4 analoge Datensätze (je 10-Bit)
in jeweils einem Wort in einem externen EEprom abspeichert.
Bei einem 8K-Byte-EEprom kann ich nun 1000 Datensätze speichern.

Da der 10-Bit Datensatz einer Zahl von 0-1023 entspricht, ergeben 4 Datensätze bei der Addition max. 4092.
Ein Wort kann aber eine Zahl von 0-65535 darstellen.

Wie kann man nun die 4 10-Bit Zahlen so in ein Wort packen, dass man sie anschliessend wieder zurückrechnen kann.

Wenn sich dafür eine Lösung finden würde, könnte man 4000 Datensätze speichern.

Pascal
15.02.2007, 20:31
Deine 4 Messwerte benötigen im Moment ja 4*2*8Bit = 64Bit
Brauchen tust du aber nur 4*10Bit = 40Bit

Du kannst also (64 - 40)Bit = 24Bit = 3Byte sparen, wenn du die Werte bitweise zusammenpackst. Dabei kann ich dir leider nicht helfen, da ich mit BASCOM überhaupt keine Erfahrung hab. Ich könnte dir höchstens in c helfen.

tomdul
15.02.2007, 21:00
Stimmt, die Idee ist mir auch schon gekommen, und ich habe auch schon darüber nachgedacht dann 6 * 10 Bit zuspeichern. Dann wären nur 4 Bit verschenkt.

Pascal
15.02.2007, 21:04
Vom Aufwand her dürfte es doch keinen Unterschied geben, ob du das ganze in 5 oder 6 Bytes speicherst. Aber bei erster Methode mit 5Bytes kannst du mehr Datensätze speichern.

Wenn ich mich recht erinner, hat auch mal jemand was gemeint, dass man die unteren zwei Bits auch weglassen kann, da die eh mehr zufällig sind. Dann könntest du die 4 Werte auch in 4Bytes unterbekommen.

SIGINT
15.02.2007, 21:45
@Pascal:
Ich hab mal gehört, daß nur das LSB unbrauchbar sein soll... hängt aber eventuell auch von der Wandlergeschwindigkeit ab.

@tomdul:
Wenn die Messwerte nicht mit gleicher Wahrscheinlichkeit auftauchen und du eventuell noch genug Rechenzeit hast, dann könntest du auch eine Huffman-Kodierung einsetzen. Im Netz findet man einige Informationen dazu. Ich würde so vorgehen:
Zuerst würde ich eine ganze Weile lang Messwerte aufnehmen und dann unkompremiert abspeichern. Dann würde ich die Messwerte als HEX-Zahlen darstellen lassen und die Verteilung der Ziffern 0-9 und Buchstaben A-F bestimmen (die häufigkeit, wie oft diese im ganzen Datensatz vorhanden sind). Daraus würde ich dann den Binärbaum zusammenstellen, den ich beim Codier und Decodiervorgang benutze. Das hat den großen Vorteil, daß der AVR nicht den Binärbaum erstellen muss.

Gruß,
SIGINT