Forum: FPGA, VHDL & Co. einfacher Datenkompressor benötigt


von H.M. (Gast)


Lesenswert?

Ich arbeite über Glasfaser (proprietäres Proto) und habe leichte 
Bandbreitenprobleme, weil die Koppler nicht mehr können. Ich müsste nun 
entweder eine zweite Leitung benutzen (sehr teuer) oder eine 
Datenkompression einschalten. Ich sende unkomprimierte scans von 
Temperaturprofilen einer Wärmekontrastfolie. Eine verlustbehaftete 
Kompression wie mpg, was sich anbieten würde, scheidet aber aus, weil 
die Daten weiterverabeitet und ausgewertet werden müssen. Es geht dabei 
um minimale Änderungen von einem zum nächsten scan.

Momentan schiebe ich 16 Kanäle mit je 50 scans pro Sekunde über eine 
10MHz-Leitung (SPI). Ich würde gerne 24 Kanäle schaffen, brauche also 
50%. Möglich sein, müsste es, denn wenn man die Bilder oben empfangen 
hat, und im PC mit ZIP komprimiert, dann schrumpfen die auf etwa 1/4 
zusammen.

So etwas wie ZIP wäre optimal, gfs auf einer geringen Kompressionsstufe, 
damit es weniger auffällig ist.

von H.M. (Gast)


Lesenswert?

H.M. schrieb:
> weniger auffällig ist

weniger auf*wändig* ist, wollte ich schreiben.

Eingefallen ist mir noch, dass ISDN z.B. auch angeblich Datenkompression 
macht. Kennt sich hier jemand mit soetwas aus, oder hat einen guten 
Vorschlag ?

von A. S. (rava)


Lesenswert?

du kannst dir mal png ansehen, das dürfte die Einzelbilder ganz gut 
zusammenbekommen.

Da du hier im FPGA-Forum bist und ein eigenes Protokoll verwendest, 
kannst du auch überlegen, ob du mit einfachsten Mitteln deine gewünschte 
Kompressionsrate erreichen kannst.
Ich weiß jetzt nicht, wie deine Bilder aussehen - aber vielleicht könnte 
man nur Änderungen relativ zum Vorgängerpixel übertragen (wird in 
manchen Modi von png) so gemacht. Dann kannst du dir noch überlegen, ob 
"Vorgängerpixel" zeitlich oder räumlich zu verstehen ist ;-)

von Mike (Gast)


Lesenswert?

Wenn du viele regelmäßige Farbverläufe hast, dann könntest du ja mal das 
Delta zwischen 2 aufeinander folgenden Pixeln bestimmen und die 
Unterschiede durch einen RLE-Encoder jagen.

Alternativ könntest du dich an einem der vielen Kompressionsverfahren 
versuchen. Z.B. LZ77 oder LZW. Ist nur die Frage wie man das effizient 
in einem FPGA hinbekommt.

Dummerweise hast du hier aber keine garantierte Kompressionsrate. D.h. 
die Bilder könnten unter Umständen auch größer werden.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Es geht dabei
> um minimale Änderungen von einem zum nächsten scan.

Dann übertrage nur die Änderung. Die ist doch nur minimal.
Setzt voraus, du hast genug Platz um die Daten zu halten.

Ich habe mich mit Dekompression schon im FPGA und damit indirekt auch 
mit Kompression auf dem FPGA beschäftigt.

Die Datenrate kann mit einer Kompression nicht gantiert werden. Da du 
aber über die Datenänderung viel weißt, kannst du in die Kompression 
viel Vorwissen hienstecken. Das ist effektiver als jeder doofer 
Algorithmus.

JPEG hat in der Kompression drei Stufen:
-Cosinustransformation
-Quantisierung
-Huffman


Der Datenverlust entsteht in der Quantisierung. Die 
Cosinustransformation selbst ist verlustfrei. Jepg spart die Information 
an scharfen Kanten.

Bei einem Wärmebild sollte es keine scharfen Kanten geben.


Warum nimmst du nicht Ethernet? Das gibt es auch in Glasfasertechnik und 
deine Datenraten sind bei 1Gbit.

R. Doss

von H.M. (Gast)


Lesenswert?

Ja, Ethernet wäre fein, aber ich kann an der Hardware nichts ändern, 
weil auch alte Systeme gerüstet werden sollen und die will man 
verständlicherweise nicht umbauen.

In einem Wärmebild gibt es es zunächst keine scharfen Kanten, aber die 
Auflösung der Sensoren ist so, dass die Steilheit dennoch 15% pro Pixel 
sein kein, d.h. schon über 5-8 Pixel wird von 10% auf 90% gestuert.

Nein, es gibt praktisch keine reproduzierbaren Farbverläufe. Jedes Bild 
ist individuell, zumindest muss eine minimale Abweichung vollständig 
transportiert werden, da Differenzbilder erzeugt werden müssen. Ich kann 
also nicht etwas etwas ähnliches zusammenfassen.

Ich bräuchte so etwas wie RAR in VHDL.

von dall (Gast)


Lesenswert?

Wieso schließt du dann die Vorschläge alle aus? Es hört sich eher immer 
mehr so an als würde z.b. differenz zum Bild vorher oder zu 
Nachbarpixeln Sinn machen...

von Lattice User (Gast)


Lesenswert?

Nach nur 2 minuten mit Google:

http://opencores.org/project,deflatecore

von H.M. (Gast)


Lesenswert?

Das mit den Differenzen habe ich schon getestet, es ergeben sich andere 
Zahlen, aber es gibt kaum Repetition und die Änderungen sind in 
derselben Grössenordnung. Es ist halt auch viel Rauschen und 
niederfrequente Überlagerung drin, dass erst in nachfolgenden System 
weggerechnet werden kann und soll.

Lattice User schrieb:
> Nach nur 2 minuten mit Google:
> http://opencores.org/project,deflatecore
Development status: Alpha :-(

von Vanilla (Gast)


Lesenswert?

Hallo H.M.

was mir an der ganzen Diskussion um geeignete oder einfache 
Kompressionen fehlt ist die Information was dir an FPGA zur Verfuegung 
steht ( Platz, Preis, elektrische Leistung).

Bei 10MBaud? koennte man z.B. sogar an eine Implementation in Software 
nachdenken, (CPU im FPGA).
Du schreibst, dass Du Versuche in RAR (einem Losless Kompressor) gemacht 
hast, deren Ergebnisse 1/4 der Ausgangsgroesse waren.

Die Frage die sich nun aber stellt:
Sind deine Versuche representativ oder kann der Fall auftreten, dass die 
Kompression mit den in RAR enthaltenen Algorithmen eine Endgroesse > 
Eingangsgroesse erzeugt...

Wenn NEIN, kannst Du dies beweisen? Falls nicht (nur die 
Wahrscheinlichkeit gegen unendlich geht, oder jedenfalls sehr hoch ist), 
wie gehst Du (darfst) mit dem Fall um?

Falls Du die Fragen fuer dich zufriedenstellend beantworten kannst, 
kannst Du auf die Suche gehen, einen (oder mehrere Lossless) Algorithmen 
herauszusuchen und zu implementieren...

Auf der anderen Seite sprichst Du davon dass dein Sensorsignal verauscht 
ist etc. Waere es dann nicht sinnvoller deine Sensordaten gleich einmal 
geeignet zu filtern und sich dann nochmal vor die Frage zu stellen, wie 
die zu uebertragenenden Daten zu dezimieren sind?

Gruss

Vanilla

von Bürovorsteher (Gast)


Lesenswert?

Lossless: 
http://www.analog.com/en/audiovideo-products/video-compression/adv601lc/products/product.html

Ist aber eigentlich für CCIR 601; ob das für deine Anwendung geht, lässt 
sich aus der Ferne schlecht sagen.

> Ich arbeite über Glasfaser (proprietäres Proto) und habe leichte
> Bandbreitenprobleme, weil die Koppler nicht mehr können.

Was benutzt du denn da? Vllt hätte ich da eine Idee.

von Lattice User (Gast)


Lesenswert?

H.M. schrieb:
> Lattice User schrieb:
>> Nach nur 2 minuten mit Google:
>> http://opencores.org/project,deflatecore
> Development status: Alpha :-(

Wenn dich Alpha abschreckt und du nicht selbst einen LZ core schreiben 
willst/kannst, bleibt dir nichts anderes den Geldbeutel zu zücken. Z.B: 
dafür:
http://www.heliontech.com/comp_lzrw.htm

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

H.M. schrieb:
> Das mit den Differenzen habe ich schon getestet, es ergeben sich andere
> Zahlen, aber es gibt kaum Repetition und die Änderungen sind in


Das ist der Punkt, den hast du noch nicht verstanden:

Die Zahlen sind jetzt anders verteilt. Es gibt viel mehr Zahlen mit 
einem kleinen Wert und wenige Zahlen mit einem großen Wert. Es gibt viel 
mehr Nullen in den höherwertigen Bits!!!!!!
Der Informationsgehalt ist anders.

Jetzt gibt es  Algorithmen wie z.B. Huffman die Lauflängen codiert sind.
Da wird die Bitbreite für die Zahl reduziert, weil die höheren Bits 
keine Information mehr haben.

von Vanilla (Gast)


Lesenswert?

Bürovorsteher schrieb:
> Lossless:
> http://www.analog.com/en/audiovideo-products/video...

Wie kommst Du darauf, dass der Lossless ist?
Zitat: "visually loss-less"...

Auf der anderen Seite eroeffnet der TO:
> Es ist halt auch viel Rauschen und niederfrequente Überlagerung drin, dass erst 
in nachfolgenden System weggerechnet werden kann und soll.

Der Baustein macht eine auf JPEG2000 besierende Wafeletreansformation 
und eine daraufbasierende Reduktion von Frequenzanteilen. Wenn ich den 
TO richtig verstehe, darf ich da im Voraus nicht eingreifen. Sprich der 
ADV601 faellt dann eher aus?!

Wirklich Lossless waere z.B. im JPEG-LS festgelegt. Da gibt es auch 
entsprechende Cores zu kaufen.

von Bürovorsteher (Gast)


Lesenswert?

> Wie kommst Du darauf, dass der Lossless ist?

Weil der in professionellen D1-MAZ von Sony bzw Thomson eingesetzt 
wurde, deren Kompression als verlustlos beworben wurde. Bei niedrigen 
Kompressionsraten bis etwa 1 zu 10 hat das wohl auch sehr gut 
funktioniert,
diese MAZ waren vor 10 Jahren der Goldstandard aller Fernsehsender.

Möglicherweise liegen die Anforderungen des TO wesentlich höher, als ich 
annehme, dann ist der Schaltkreis nicht einsetzbar. Ein Versuch mit der 
Video-Pipe-Baugruppe könnte hier schnell zur Klärung beitragen.

Eine Bandbreitenerhöhung erscheint mir einfacher zu sein. Hierzu gibt es 
eine nette AN von Avagotech "Fiber Optic Components Cookbook". Dort sind 
Billiglösungen bis 160 Mbit/s vorgestellt.

von slow (Gast)


Lesenswert?

Unsinn. D1 Maschine waren bei Sendern nie groß verbreitet.
Digi-Beta und IMX dagegen schon (Kompression ca. 3 oder 2 zu 1)

D1 und auch Ampex DCT waren eher bei Filmabtastungen und hochwertigen 
Bearbeitungen zu finden, aber nicht bei Sendern.

von Bürovorsteher (Gast)


Lesenswert?

Du hast recht, nicht die Sender waren es.
Ich hatte für Entwicklungsarbeiten beim digitalen Fernsehen ein von der
Telekom bereitgestelltes Gerät, deswegen meine falsch globalisierende 
Aussage.

von Uwe (Gast)


Lesenswert?

Vorher Rauschen rausfiltern, Differenzbilder übertragen, RLE

von Uwe (Gast)


Lesenswert?

Rauschen kann man nicht Verlußtfrei Komprimieren. Und wenn Rauschen + 
Signal komprimiert werden Sollen dann kann dein Signal nur so gut wie 
das Rauschen komprimiert werden.

von Vanilla (Gast)


Lesenswert?

Bürovorsteher schrieb:
>> Wie kommst Du darauf, dass der Lossless ist?

> Weil der in professionellen D1-MAZ von Sony bzw Thomson eingesetzt
> wurde, deren Kompression als verlustlos beworben wurde. Bei niedrigen
> Kompressionsraten bis etwa 1 zu 10 hat das wohl auch sehr gut
> funktioniert,
> diese MAZ waren vor 10 Jahren der Goldstandard aller Fernsehsender.

Na, dass die D1 nicht bei den Broadcastern verbreitet war, ging ja jetzt 
schon durch, is aber auch egal.

Wenn in der Qualitaetseingangskontrolle schon alles als fehlerhaftes 
Sourcematerial zurueckgeweist, was zu hohe Frequenzanteile aufweist, so 
laesst sich eine 2:1 kompression natuerlich relativ einfach 
"verkaufen"...

von Logibaer (Gast)


Lesenswert?

Die Daten scheinen sich ja durchaus komprimieren zu lassen, wie die 
Anmerkung des OP (ZIP, RAR) andeutet. Also gibt es in den Daten 
Redundanz.

Ich empfehle, die Daten mal genau zu analysieren, denn wie ebenfalls 
angemerkt wurde, lässt sich Rauschen nicht so ohne Weiteres 
wegoptimieren und RLE-Codieren, weil es kaum idente Muster gibt.

Huffman ist natürlich denkbar, erfordert aber grosse Tabellen, in denen 
gesucht und sortiert wird, was im FPGA auch nicht so einfach ist und 
sofort auf die Latenz geht.

Eine einfache Bilddatenkompression gibt es eben nicht.

von (prx) A. K. (prx)


Lesenswert?

Uwe schrieb:

> Rauschen kann man nicht Verlußtfrei Komprimieren. Und wenn Rauschen +
> Signal komprimiert werden Sollen dann kann dein Signal nur so gut wie
> das Rauschen komprimiert werden.

Yep, aber wenn, wie bei üblichem Bildrauschen, die Amplitude vom 
Rauschen gering ist, dann sind Bilddifferenzverfahren mit statischer 
Huffman-Codierung der Differenz durchaus erfolgversprechend. Letztlich 
ist das die Grundlage von MPEG, nur kommen dort noch Bewegungserkennung 
und Unterdrückung von Bits hinzu.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Huffman ist natürlich denkbar, erfordert aber grosse Tabellen, in denen
> gesucht und sortiert wird, was im FPGA auch nicht so einfach ist und
> sofort auf die Latenz geht.

Es werden keine großen Tabellen angelegt. Da würden die FPGAs auch 
platzen. Die Anzahl der Knoten ist beschränkt. Die Wertebereiche werden 
nur komprimiert. Jedem Huffman codewort folgt eine Zahl die dem Offset 
von dem richtigen Wert entspricht. Es gibt nicht für jeden Wert ein Code 
wort!
So wird Huffman in der Praxis angewandt.

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.