Forum: Mikrocontroller und Digitale Elektronik einfache Daten Kompression


von Mat. K. (matthias_kornfield)


Lesenswert?

Hi
ich muss Daten mit 250 samples per second mit 24 bit für 32 Kanäle über 
Bluetooth verschicken.
Wie kann ich meine Daten am einfachsten komprimieren. Es soll von 
rechenzeit her einfach sein. Eine idee?
Was für Effekte wurde ich sehen wenn ich differential PCM benutzen 
wurde. Also den ersten Array von 32 samples der 32 Kanäle unkomprimiert 
übertragen und dann für n samples nur noch die differenz in zum Beispiel 
16 bit Auflösung statt 24 bit. Da hätte ich etwas weniger als 33% 
Bandbreite gespart.
In was für Probleme konte ich rein laufen?
Danke

von Jim M. (turboj)


Lesenswert?

Die 24000 Bytes/sec bekommt man noch über Bluetooth Classic rüber - die 
Module hier liefen mit knapp 40 KByte/sec wenn die Verbindungqualität 
gut war.

Blueooth Low Energy kann das IMHO auch, mann muss dann aber den Kanal 
ausquetschen (4.2 oder 5.0).

Musst Du unbedingt Strom sparen? Ich frage das weil WLAN hier erheblich 
schneller und einfacher wäre...

von der_eine (Gast)


Lesenswert?

Servus,

es fehlen ein paar wichtige Infos.

Auf welcher HW läuft das ganze? Müssen die Daten in Echtzeit übertragen 
werden, oder reicht es Daten zu sammeln und dann ein einem Rutsch zu 
übertragen?
Gibt es für die HW eine (g)zip-libary? Wenn ja, möglicherweise einfach 
die Daten damit komprimieren lassen.

Ansonsten: Überlegen ob man an Genauigkeit oder Übertragungsfrequenz 
sparen kann. 24 Bit ist schon eine sehr hohe Auflösung. Für was braucht 
man so was?

Wenn man nur Differenzdaten überträgt, muß man sich halt überlegen, was 
passiert, wenn mal ein Paket "verloren" geht.

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Hängt stark davon ab was für Daten es sind.
Ist es eher wie ein Rauschen, dann macht Standard-komprimieren kaum 
sinn.
Sind es eher Saubere Signale wie Sinus oder Audio kann man mit dem 
Signal angepassten Algorithmen extrem viel heraushohlen.
Auch interessant, muss es Verlustfrei komprimiert werden damit eine 100% 
exakte Wiederherstellung möglich ist?
Um was für Daten(Formen) handelt es sich denn?

73 55

: Bearbeitet durch User
von Ein Vorschlag (Gast)


Lesenswert?

Ein Stichwort wäre lossless audio compression. Formate wie wav oder aiff 
stammen noch aus Zeiten, als ein PC weniger Leistung hatte als ein 
heutiger Mikrocontroller.

von Mat. K. (matthias_kornfield)


Lesenswert?

Hi
Es geht um echtzeit übertragung von 24 bit x 32 kanal x 250 samples per 
sec= 192 kbs. Controller ist stm32f4 mit 120 Mhz. Allerdings kommt es 
wie gesagt auf Rechenzeit an.

von Jobst M. (jobstens-de)


Lesenswert?

Mat. K. schrieb:
> In was für Probleme konte ich rein laufen?

Z.B. in das Problem, zu wenig Information bekannt zu geben.

Ich nehme an (!) dass es sich um Audio handelt?
Auf welche Datenrate möchtest Du runter?
Mit flac kannst Du 50% sparen, mit Datenreduktion (ogg, mp3, etc.) mehr.
Ob Datenreduktion akzeptiert ist, wissen wir aber auch nicht.
Mit einfacheren Verfahren wird das Potenzial noch geringer.
Ohne Rechenleistung wirst Du also nicht nennenswert Einsparungen 
erzielen.

gzip ist für Audio nur bedingt sinnvoll.

Gruß
Jobst

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Ja was für Daten, schnelle Spannung/Leistung Daten oder langsam ändernde 
wie Temperatursensoren?

Grad für Audio-Daten (Nehme aber von der Kanalanzahl an, dass es sich 
dabei nicht um solche handelt), habe ich selber Algorithmen entwickelt 
die sehr wenig Rechenleistung erfordern (Theoretisch sogar mit Hardware 
in einem GA machbar) sind.

Aber eben:
der_eine schrieb:
> es fehlen ein paar wichtige Infos.

ist halt ein Problem.....

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

Nachtrag: Irrtum, bei 250 Samples/s kann es natürlich kein Audio sein 
...
Um so interessanter, was das für Daten sind.

Gruß
Jobst

von Mat. K. (matthias_kornfield)


Lesenswert?

Es sind vibrations Daten, die sich mit höchstens 120 Hz ändern. Ich will 
ca. 30% runter kommen mit der DatenMenge.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Mat. K. schrieb:
> Es sind vibrations Daten, die sich mit höchstens 120 Hz ändern.
Diese Informationen sind fuer den Kompressionsansatz voellig 
unerheblich.
Viel wichtiger waeren so Dinge wie: Spektrum und Autokorrelation deines 
Signals; wieviel Fehler darf durch die Kompression verursacht werden, 
...
Das sind die entscheidenden Parameter.
Wenn du die nicht weisst, aber du schon Sampledaten hast, dann mach' ein 
paar Tests mit den ueblichen verdaechtigen Algorithmen. Ob deren 
Kompression bei deinen Daten passt und ob du mit deren 
Rechenzeitbeduerfnissen zurechtkommst.

Gruss
WK

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Dan würde ich eine Bitbreiten Reduktion empfehlen.
Soll heißen du packst die 24 Bit in 3 8 Bit Pakete und gibst Idendifyer 
welches der 3 Pakete sich verändert damit kriegst du eine sehr hohe 
Kompression hin und kannst die Daten zu 100% Verlustfrei wieder 
herstellen.

Die Rechenleistung dazu ist nur minimal, brauchst einfach ein genügend 
großer Stack.

So kannst du die Sinuskurven (Was ja Vibrationsdaten in der Regel sind)
Gut komprimieren und wieder Herstellen.
Du sendest dann nur die Pakete die sich wirklich ändern und stellst dann 
per ID die unveränderten Pakete wieder her.

Idendifyer Besteht aus Positionsinfo und Timedomain.

: Bearbeitet durch User
von mm (Gast)


Lesenswert?

Mat. K. schrieb:
> Es sind vibrations Daten, die sich mit höchstens 120 Hz ändern.

Daten, die sich mit max. 120Hz ändern? Dann reicht es doch, auch nur mit 
120 Samples/s zu übertragen - schon mal mehr als 50% gespart.
Oder Vibrationen/Schwingungen von max. 120Hz mit 250 Samples/s 
abgetastet?
Sind da wirklich 24bit notwendig?

von Jester (Gast)


Lesenswert?

Patrick L. schrieb:
> Dan würde ich eine Bitbreiten Reduktion empfehlen.
> Soll heißen du packst die 24 Bit in 3 8 Bit Pakete und gibst Idendifyer
> welches der 3 Pakete sich verändert damit kriegst du eine sehr hohe
> Kompression hin und kannst die Daten zu 100% Verlustfrei wieder
> herstellen.

Wenn sich das höchst wertige Byte ändert, sind die beiden andern Bytes 
natürlich auch betroffen. In dem Fall ist die Kompression ist NULL. Die 
Maximal-Kompression gibt es nur bei sehr kleiner Aussteuerung, 
qualitativ bei ~96dB unter Full-Scale (24bit-Daten).

Da der TO schon ziemlich nahe an der Nyquistfrequenz operiert, kann sich 
das Signal sich von Sample zu Sample um fast 100% ändern. Von einer 
garantierten Kompressionsrate kann man mit deinem Verfahren dann sicher 
nicht mehr reden.

Und ... 120Hz Signalfrequenz @ 250 Samples/s klingt schon sehr sportlich 
- muss doch das Antialiasfilter genau genommen von 0dB (@120Hz) auf 
-144dB (@125Hz) dämpfen. Tut es das nicht, sind die 24bit eh für‘n Popo.

just my 2ct

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Jester schrieb:
> Da der TO schon ziemlich nahe an der Nyquistfrequenz operiert, kann sich
> das Signal sich von Sample zu Sample um fast 100% ändern. Von einer
> garantierten Kompressionsrate kann man mit deinem Verfahren dann sicher
> nicht mehr reden.

Ähm wie fiel "G" hält der Sensor aus? Vibration ist sehr Träge,
Den es gilt Masse x Geschwindigkeit was Physikalische grenzen setzt wenn 
er nicht gerade Molekühle einzeln in Bewegung setzen will...
Ergo gehe ich von nicht all zu großen Sinus der Quelle aus.
Aber da fehlen halt noch Puzzleteile ;-)
Und das mit den Höchswertigen Byte kann man mit einem Algorithmus gut 
berechnen und berücksichtigen den das hat immer bei Sinuskurven einen 
festen Zusammenhang ;-)
Deshalb braucht ja auch der Stack eine Gewisse Größe ;-)

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.