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
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.
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 :)
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
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.
Meine oben nactürlich FSK und nicht FSP ;) FSK- Frequenz Shift keying PSK- Phase Shift keying
@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...
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.
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
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.
>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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.