GPS Daten komprimieren mit 8bitter und wenig SRAM?

Gast #3725716
Leider ist selbst der kurze $GPGLL Satz mit 44 Byte noch viel zu groß.
Ich dachte da mehr an 4 Byte pro Position...

Das Problem ist doch schon mindestens 14 Jahre alt :-/
Gast #3725808
Kai R. schrieb:
> Leider ist selbst der kurze $GPGLL Satz mit 44 Byte noch viel zu groß.

Was hindert dich daran die benötigten Werte aus dem 44 Byte heraus zu 
ziehen und von ASCII (ein Byte pro Zeichen) in eine Platzsparende 
Binärform zu überführen.

Beim Einkaufen kaufts Du doch auch nicht den ganzen Supermarkt. ;-)
#3725895
Kai R. schrieb:
> Leider ist selbst der kurze $GPGLL Satz mit 44 Byte noch viel zu groß.
> Ich dachte da mehr an 4 Byte pro Position...
>
> Das Problem ist doch schon mindestens 14 Jahre alt :-/

Bei einem GPS-Fix einmal pro Sekunde über 14 Jahre mal 44 Bytes pro Fix 
sind das:
14  365  86400 * 44 Bytes = 19426176000 Bytes = ca. 19426 MB

Damit bekommst Du in 14 Jahren eine 32 GB SD-Karte zu knapp zweidrittel 
vollgeschrieben.

Warum willst Du die Daten komprimieren, wenn sie locker unkomprimiert zu 
verarbeiten sind?

Und falls Dir 44 Bytes zu viel sind:
- LAT in Millionstel Grad ==> long
- LON in Millionstel Grad ==> long
- Sekunden ab z.B. 1.1.2000 ==> long
3 * sizeof(long) = 12 Bytes

Dann bekommst Du auf eine 32 GB SD-Karte mehr als 84 Jahre Aufzeichnung 
mit sekündlichem GPS-Fix drauf.
Gast #3726698
>Leider hab ich nur ~20 kbit frei (es ist kein neues Design).

Das sind 2,5kB. Kleb dir einen SPI Flash mit 4MB unter
die Platine. Dann hat dein leiden ein Ende. Oder
tausch den vorhandenen Speicher aus wenns geht.
#3726705
Schau Dir erst mal das Signal an. Wahrscheinlich kannst Du einfach 2 
Datensatzformate definieren. Eines mit der kompletten Position (das dann 
groß ist), und eines mit Differenzen. Das kleine mit den Differenzen 
kannst du dann für jede Positionsangabe verwenden. Falls die Differenz 
mal größer ist, kannst Du die vollständige Position abspeichern. Das ist 
so ein Kompromiss zwischen Aufwand und Größe.

Willst Du das ideal machen, mach folgendes:
Speichere nur Differenzen, wobei Du entweder die Anfangsposition direkt 
speicherst, oder von der Anfangsposition 0 ausgehst (und dann eine große 
Position hast).
Messe erst mal ein paar Strecken durch, und bilde die Differenzen 
zwischen den Positionsdaten. Mach eine Häufigkeitsverteilung über diese 
Differenzen, und bestimme dann, zum Beispiel über den Huffman 
Algorithmus die optimale Kodierung für jede Differenz. Wahrscheinlich 
wirst Du dann für kleine Differenzen weniger Bits haben als für große. 
Richtig gemacht wird das ideal.
Die Tabelle die Du zur Umsetzung brauchst kannst Du ja konstant auf 
beiden Seiten haben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.