mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Messdaten Kompression


Autor: Simon P. (bitteeinbit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @all:

Ich möchte AD-Daten(3-Achsen Gyro) über Funk an einen zentralen Hub 
senden. Da mehrere Knoten an den selben Hub senden und ich die Anzahl 
der "angeschlossenen" Hubs maximieren möchte, wollte ich die Messdaten 
VERLUSTFREI komprimiert übertragen. Ich weiß, dass durch das Rauschen 
nur ein Kompressionsfaktor von ugf. 2 realistisch ist.
Es gibt ja nun mehrere Verfahren (Huffmann, Shannon, ....), aber nachdem 
was ich so gelesen habe ist das Schätzverfahren wohl das Optimalste.
Kennt eine/r von euch zufälligerweise einen fertigen Code für solche 
Komprssionsverfahren? Das ganze kommt in einem MSP430 zum Einsatz und 
der Code sollte in C geschrieben sein. Achja, falls es bei den 
Überlegungen hilft, der Gyro liefert 3 x 500bps x 16 Bit Auflösung = 
24kbps. Ein Funkchip schafft 250kbps und bei dem uC handelt es sich um 
ein MSP430F2618

Danke schon mal für eure Antworten

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wichtig zu wissen wäre wie die Daten sich ändern können. Oder ob es auch 
sein kann das ein Sensor ewig lang keine bewegung hat und damit nur das 
rauschen übertragen wird.

Autor: Simon P. (bitteeinbit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich leider nicht sagen. Die Gyros werden für die Messung von 
Maschinen-Vibrationen eingesetzt. Ich vermute daher mal, dass sich die 
Biester nicht sehr oft im "Leerlauf" befinden.

hab grad noch oben einen kleinen Schreibfehler gefunden: ich meinte 
natürlich "angeschlossene" Knoten und nicht Hubs, den Data-Hub gibs ja 
nur einmal :)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann wird dir vermutlich hier kaum jemand weiter helfen könnnen.

Schreib die Daten doch mal ein eine Datei und lass winzip drüber laufen. 
(aber nicht als text sonder binär sonst ist es für WinZip zu einfach, am 
besten wie bei deiner übertragung)

Einen passenden Kompression kann man nur festlegen wenn man sich den 
Datenstrom anschaut. Pauschal wird man da nichts festlegen können

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vl. solltest du dir auch mal die FSP oder noch besser PSK anschauen und 
fertige Modulationsbausteine verwenden. Sind dann wesentlich effektiver 
und du brauchst keine Sofwaremässige kompression zu realisiseren.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine oben nactürlich FSK und nicht FSP ;)

FSK- Frequenz Shift keying
PSK- Phase Shift keying

Autor: Simon P. (bitteeinbit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast:

Die genannten Modulationsverfahren sind doch nur Art und Weisen wie 
Funkchips ihre Daten durch die Luft schicken, oder etwa nicht? Klar ich 
könnte einfach Chips verwenden, die zb 1Mbps schaffen und somit mehr 
Knoten aufnehmen können.

@Peter:

ich hab leider keine Testdaten oder so zur Hand. Ich entwickle hier 
vollkommen ins Blaue mit Worst-Case, Best-Case Unterscheidungen :)
Es gibt ja eben dieses Schätzverfahren, dass nur die Unterschiede zur 
Schätzung und dem gemessenen Wert überträgt -> weniger Daten also. Auf 
dieses Prinzip bin ich schon vielerorts gestossen, aber nirgends war der 
Code dabei. Ich wollte halt nicht das Rad neu erfinden...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann aber auch zu problemen führen, was ist wenn mal der sender 
nichts empfängt. Dann kommt du mit den Differenzen nicht viel weiter. Du 
musst also regelmässig den Ist-Wert übertragen. Auch wenn die Änderung 
von einer Messung zur nächsten sich über den ganzen wertebereich 
erstecken machst du mit der Differenzübertragung kein gewinn.

Die Differenzübertragung geht also bloss wenn du die maximale größe der 
Differnenz zwischen 2 messungen kennst, wenn wird es schwer. Dann müsste 
in das Protkoll eine größenangeabe mit rein wie "lang" die Differenz ist 
das sind dann aber erstmal zusatz info die du übertragen musst. Im 
schlimmsten fall hast du damit eine negative Kompression.

Ohne echte Daten würde ich mich nicht auf eine Kompression einlassen.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

3 x 500sps x 16 bit und dein Baustein rennt mit 16Mhz.
Dann bleiben etwa 10000 Takte (16e6/(3x500)) pro 16-bit Wert.

Aber warum versendest Du nicht einfach jede x Sekunden gesammelte Daten, 
was bei 8 kByte Ram wohl auch geht.
Du legst Dir einen zirkularen Speicher an und versendest dann immer an 
einem Stück. 3x 1000 Byte entsprächen einer Sekunde.
Also könntest Du etwa 2 Sekunden zwischenspeichern, falls es viele 
Kollisionen beim Funken gibt.Denn für jedes Messwert Tripel eine 
Übertragung zu starten lässt wahrscheinlich nicht mehr als 3 Knoten zu.
Wenn Die Paketgröße beschränkt ist kannst Du ja darauf optimieren.

Gruß Horst

Autor: BinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt u.a. auf die Dynamik der Signale an. Wenn diese klein ist reicht 
es vielleicht nur die Differenzwerte zum vorherigen Signal zu 
übertragen.

Evtl. Sigma-Delta Modulation (s. z.B  Wikipedia). Ist bekannt und es 
gibt fertige Chips. Da ein Funkkanal nur ein Bit zur Zeit überträgt kann 
das geeignet sein.

Autor: Hagen Re (hagen)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>Es gibt ja eben dieses Schätzverfahren, dass nur die Unterschiede zur
>Schätzung und dem gemessenen Wert überträgt -> weniger Daten also. Auf
>dieses Prinzip bin ich schon vielerorts gestossen, aber nirgends war der
>Code dabei. Ich wollte halt nicht das Rad neu erfinden..

Nennt sich ADPCM -> Adaptive Differential Pulse Code Modulation, siehe 
Anhang

Gruß Hagen

Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck Dich mal bei den verlustlosen Audiocodecs um. Je nach Messwerten 
passt das ganz gut ins Profil. Und wenn es um so eine Art Körperschall 
geht ....

Viele Grüße,
 Martin L.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.