Forum: FPGA, VHDL & Co. Datenkomprimierung für Lan-Übertragung


von Patrick B. (p51d)


Lesenswert?

Hallo allerseits

Ich habe eine neue FPGA Aufgabe gefasst. Ein FFT Core von Xilinx 
generiert 26-Bit Imaginär- und Realwerte mit 200MHz. Bis jetzt wurde der 
Leistungsbetrag von 52-Bit auf eine 31-Bit Fliesskomma Zahl umgerechnet. 
Damit das Gigabit-Lan mit der Datenmenge zurecht kam musste ich die 
Frames weiter reduzieren.

Nun werden aber die Real- und Imaginärwerte benötigt. Die Umrechnung 
über Fliesskomma geht hier nicht mehr, da die Zahl auf dem PC nicht 100% 
rekonstruiert werden kann.

Gibt es eine Möglichkeit Datenmenge und Busbreite auf dem FPGA zu 
reduzieren damit das G-Lan wieder nachkommt und die Werte auf dem PC 
komplett rekonstruiert werden können? Ich habe bis jetzt den GZIP Core 
von Xilinx angeschaut, aber es scheint als würde dieser nur mit Dateien 
zurecht kommen.

Gruss
Patrick

von Horst (Gast)


Lesenswert?

Kommt ganz darauf an wie viel Redundanz deine Daten enthalten. Wenn das 
eine komplette Gleichverteilung ist, lässt sich da ohne Verluste nichts 
machen.

von Peter II (Gast)


Lesenswert?

Wie groß ist denn der Overhead für die Übertragung? Wie viele Nutzdaten 
must du denn übertragen?

von Patrick B. (p51d)


Lesenswert?

Mhm, die Daten entsprechen dem Spektrum. Wieviel Redundanz da drinn ist 
kann ich momentan nicht sagen.

Die Übertragung generiert praktisch kein Overhead. Die Daten werden über 
UDP versendet. Gemäss Hersteller sind 25Msps @ 32Bit möglich (entspricht 
800MBit/s Nutzdaten). Für eine simple Antenne reicht es aktuell aus. 
Leider wollen Sie mehrere Antennen synchron abtasten um ein Beamforming 
zu erreichen... dadurch wird das Netzwerk weiter ausgelastet und die 
Datenrate muss entsprechend weiter reduziert werden.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Patrick B. schrieb:
> Mhm, die Daten entsprechen dem Spektrum. Wieviel Redundanz da drinn ist
> kann ich momentan nicht sagen.

dann schreibe doch mal die Daten in eine Datei und packe sie mal mit 
verschiedenen Programmen.

Es könnte sein, das bei mehre Antennen mehr Redundanzen vorhanden sind.

Damit würde ich es mal auf den PC testen. Aber keine Ahnung wie man das 
in einen FPGA bekommt

https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)

von J. S. (engineer) Benutzerseite


Lesenswert?

Gfs kann man die Daten funktionell noch reduzieren: Die Spiegelspektren 
wurden schon beseitigt, nehme ich an und Du hast auch geprüft, ob man 
den Betrag alleine übertragen kann. Oft ist die Phase ja nicht unbedingt 
relevant.

Ansonsten gelten die üblichen Methoden der verlustlosen Datenkompression 
mit all ihren Nachteilen, u.a. der Latenz die infolge der Datenpakete 
entstehen, auf die die Kompression angewendet wird.
So richtig effektiv wird das mit einer fortgesetzten Differenzbildung, 
also einem unendlich langem Paket und wachsendem Wörterbuch. Das wird 
nach hinten raus immer effektiver - allerdings decken viele FFt-Daten 
irgendwann auch mal allemöglichen Kombinationen ab und es endet im 
Rauschen.

von Horst (Gast)


Lesenswert?

Patrick B. schrieb:
> Leider wollen Sie mehrere Antennen synchron abtasten um ein Beamforming
> zu erreichen...

Genau an der Stelle entsteht eine Menge Redundanz. Ist aber sicherlich 
nicht einfach diese raus zu bekommen. Im Idealfall hat man aber ja ein 
und das gleiche Signal mit entsprechender Verzögerung und bei unendlich 
feiner Abtastung reichen zwei Elemente um den Rest perfekt zu 
prädizieren. In Realität würde man dann eben Residual-Codierung machen.
Stellt sich jetzt noch die Frage wie groß die Latenz werden darf. 
Entsprechend kompliziert wäre eine Prädiktion um dann residual coding zu 
machen.

Letztendlich passiert in der Arrayprozessierung aber nicht ohne Grund 
sehr viel im FPGA. Die enormen, parallen Datenmenge sind perfekt für 
eine vollständige Prozessierung im FPGA.

von Markus F. (mfro)


Lesenswert?

Ich kann mir nicht vorstellen, daß gzip u. Konsorten hier geeignet sind.

Ich würde mich eher bei den Video-Codecs umschauen. MPEG-4 ALS z.B. ist 
ein verlustloses Audio-Kompressionsverfahren, das auch mit 
Gleitkommawerten umgehen kann.

Vielleicht gibt's da ja sogar irgendwo was Fertiges ...

von Strubi (Gast)


Lesenswert?

Moin,

wenn die Spektralwerte nur der Charakterisierung dienen, könntest Du sie 
auch einfach in einen Quantisierer jagen - analog JPEG, aufgebohrt auf 
eine höhere Bittiefe. Falls du dabei noch uninteressante Bereiche 
ausblenden kannst, hast du mit dem nachgeschalteten Huffman-Encoder 
gleich nochmal etwas "Gewinn", aber ev. musst du die Hufftables auf 
deine typischen FFT-Daten optimieren (wenn du was wavelet-artiges 
vorhast).
Was darüber hinausgeht, ist für FPGAs nicht gerade kostenlos oder von 
der Stange zu finden, oder schlicht einfach vom Aufwand her eher für ne 
CPU geeignet, aber wenn du einen Zynq hast...
Generisches ZIP ist für synchrones low-latency-Prozessing eher nicht so 
geeignet und braucht Speicher, das wird dann schon mal ein Gestöpsel.

Gruss,

- Strubi

von Daniel A. (daniel-a)


Lesenswert?

Patrick B. schrieb:
> Die Übertragung generiert praktisch kein Overhead. Die Daten werden über
> UDP versendet.

Wieviele bytes packst du denn in soein UDP Frame?
Könntest du eventuell eine Datei mit Beispieldaten hochladen, damit man 
sich eine passende Komprimirung ausdenken kann?

von Patrick B. (p51d)


Lesenswert?

Die Paketgrösse beträgt 360 Samples @32Bit. Darauf und auf die UDP 
Kommunikation habe ich leider keinen Einfluss, da dies vom SDR 
Hersteller definiert ist.

Ich packe aktuell bei den Daten auf Bit31 ein Frame-Start Flag zur 
Synchronisation und die Bits 30-0 enthalten die FFT Werte.
Beim Spektrum selber wird auch nur noch der Bereich innerhalb der 
Anti-Aliasing Filter übertragen. Und selbst da musste ich um Faktor 8 
reduzieren.

Aktuell versuche ich die Real und Imaginärwerte mit custom Float Zahlen 
(6 Bits für Exponent und 9 für Mantisse) zu übertragen. So komme ich auf 
den 32Bit Wert... (plus Framestart Flag).

Da wie gewohnt die Zeit drängt, versuche ich einmal mit diesem Ansatz zu 
einem Resultat zu kommen. Aber es gibt sicher noch bessere Lösungen.

Ein Beispiel-Datensatz kann ich noch nachliefern, falls die 
float-Umrechnereich funktioniert.

von Pandur S. (jetztnicht)


Lesenswert?

Mehrere Antennen liefern ja daselbe Signal, nur etwas phasenverschonben. 
Ich wuerd als durch kreuzkorrelation die Phase schon im FPGA 
herausfinden, was ja eigenlich nur einem Delay entspricht.

Glaubst du extern die Rechenleistung zu haben um diese Funtionalitaet 
nachzubilden ? Eher nicht.

von Horst (Gast)


Lesenswert?

Oh D. schrieb:
> Mehrere Antennen liefern ja daselbe Signal, nur etwas phasenverschonben.
> Ich wuerd als durch kreuzkorrelation die Phase schon im FPGA
> herausfinden, was ja eigenlich nur einem Delay entspricht.
>
> Glaubst du extern die Rechenleistung zu haben um diese Funtionalitaet
> nachzubilden ? Eher nicht.

Das meinte ich ja letztendlich auch schon, aber das scheint nicht zu 
gehen, weil:

Patrick B. schrieb:
> Darauf und auf die UDP
> Kommunikation habe ich leider keinen Einfluss, da dies vom SDR
> Hersteller definiert ist.

von Praktiker (Gast)


Lesenswert?

Zwei Netzwerkschnittstellen?

von J. S. (engineer) Benutzerseite


Lesenswert?

Praktiker schrieb:
> Zwei Netzwerkschnittstellen?

Brächte hier wohl nur einen Faktor 2 :-)  Da wird man wohl um ein Mehr 
an Prozessierung IM FPGA nicht herumkommen. Ich kenne die Problematik 
ebenfalls aus einigen Projekten, sowohl was Bildübertragung über UDP, 
als auch beam forming / Radar angeht.


Oh D. schrieb:
> Mehrere Antennen liefern ja daselbe Signal, nur etwas phasenverschoben.
Das stimmt leider nicht 100%ig. Es gilt streng genommen nur für das 
Zielsignal und auch dann nur bei symmetrischen Reflektionen. Sobald 
mehrere Empfänger im Spiel sind gibt es pro Signal eine Werteschar an 
(mehr oder weniger !) identischen Reflektionen und ungewollte Störungen, 
die zudem noch durch die Richtcharakteristik der Antennen im Spektrum 
deformiert sind. Der Denkansatz, das im FPGA zu machen ist aber komplett 
richtig. Es gibt da mehrere Lösungen, partielle Informationen aus den 
Signalen herauszuziehen und nur - sagen wir - die komprimierte Info an 
das übergeordnete System zu übertragen. Aber die Details kann ich hier 
aus diversen Gründen nicht posten. Es gibt dazu aber auch Einige, das 
öffentlich publiziert ist.

> Ich wuerd als durch kreuzkorrelation die Phase schon im FPGA
> herausfinden, was ja eigenlich nur einem Delay entspricht.
Ja, aber da müssen die Signale entsprechen aufbereitet werden, um hohe 
Genauigkeiten zu erzielen, oder man braucht trotz Pulskompression elend 
lange Integrationszeiten, um die Störungen rauszukriegen.

Um das effektiv zu machen, muss man Annahmen über den Spektralverlauf 
des gesuchten Signals machen und - soweit es sich um aktives Radar 
handelt - auch entsprechend(es) senden. Ich kann da aus versändlichen 
Gründen keine Details nennen, aber das Prinzip ist, so zu senden, dass 
man einfach "empfangen" kann und die Korrelationen zu einfachen, knappen 
Werten führen, die dann "oben" auf die transformierten 
Sendeinformationen angewendet werden, um die echten Signalinformationen 
zu generieren. Führt aber hier jetzt zu weit.

In jedem Fall wird man sich funktionell etwas überlegen müssen (da ganz 
grob gedacht) ein weitgehend ausgelastetes Gigabit Ethernet in der Regel 
schon erheblich mehr Informationen liefert, als eine handelsübliche 
CPU-Plattform permanent verarbeiten kann. Die Daten müssen also 
irgendwie runterprozessiert werden und das im Idealfall dort, wo sie 
entstehen, also in einer schlauen, denkenden Antenne, die weiß, was die 
anderen senden, gesendet haben und gerade empfangen, bzw empfangen 
werden.

von Bernhard (Gast)


Lesenswert?

Ich würde die Daten nicht per IP/UDP sondern RAW im Ethernet-Frame 
verschicken.
Das geht natürlich nur im lokalen Netz, ist aber von der 
Übertragungskapazität her gesehen die beste Variante.

Ein Ethernet-Frame fasst bis zu 1500 Bytes, bei Jumbo-Frames gehen (je 
nach Hardware) bis 9000 Bytes.

von J. S. (engineer) Benutzerseite


Lesenswert?

Da lässt sich aber nicht viel einsparen und kompliziert das Debuggen. 
UDP ist auch von der Ausnutzung der Bandbreite nicht so weit weg von RAW 
und ungeachtet dessen muss ohnehin irgendein Protokoll drauf, für das 
Format. Das wird das Problem nicht lösen.

So wie ich die Aufgabe verstehe, muss hier eine Datenkompression von 
Faktor 3-4 her, um bei der selben Bandbreite zu bleiben, da es "mehrere 
Antennen" sein sollen.

von Markus F. (mfro)


Lesenswert?

Bernhard schrieb:
> Ich würde die Daten nicht per IP/UDP sondern RAW im Ethernet-Frame
> verschicken.

um pro Paket 28 Byte (also 1,87 bzw. 0.3 %) Protokoll-Overhead 
loszuwerden? Das wird's wohl nicht rausreissen ...

von Patrick B. (p51d)


Lesenswert?

Das Anwendungsgebiet umfasst aktuell 3 Bereiche, die ich nicht 
detailliert kommunizieren darf.
Zum Einen soll es aber für den Unterricht des Lehrer für die Beamforming 
Thematik verwenet werden (wieso auch immer mit solchen Frequenzen und 
nicht im Audio Bereich).

Zum Anderen befinden sich 2 Projekte in der Entwicklungsphase, bei denen 
die Leute die Optimierung der Alorithmen gerne auf dem PC offline machen 
möchten. Dann braucht es nicht für jeden neuen Versuch gleich einen 
Ortswechsel. Aktuell sollen 4-8 Antennen synchron abgetastet und dann 
eben die Werte auf dem PC weiter verwendet werden. In einer Endversion 
soll das ganze dann schon im FPGA untergebracht werden (da dort 4 Kanäle 
direkt verdrahtet sind), aber wenn man für jede Änderung im VHDL/Verilog 
dann wieder 40min warten kann bis die Synthese durch ist, und sowieso 
nie alles so schön Programm-mässig debuggen kann ist der PC-Ansatz am 
Anfang doch besser.

Ich habe heute noch erfahren, das die verwendeten SDR auch noch 10G Lan 
haben. Demnach sehe ich hier immerhin noch etwas Reserve.

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Es bleibt trotzdem bei der Thematik, dass das im PC nicht zu verarbeiten 
ist - auch nicht per 10GB. Also geht nur offline und dann ist die 
Transferrate egal. Dein Lehrer müsste da eigentlich drauf gekommen sein, 
eine solche reine Evaluierung von SV-Algorithmen im PC mit einfach einem 
limitierten Datenbestand durchzuführen.

Auch sonst, werden neue Algorithmen, Matcher und Follower offline in 
MATLAB mit gesampelten Daten getestet und dies sogar immer mit 
denselben, bis die Algos final stehen. Daneben werden sogar generische 
Daten und real time Simulatoren genutzt. Erst dann geht es in die 
Hardware.

Es würde also vollkommen reichen, einen snapshot einiger ms zu empfangen 
und diese langsam in den PC zu überspielen. Dafür reicht dann sogar USB 
2.0. :-)

: Bearbeitet durch User
von Duke Scarring (Gast)


Lesenswert?

Jürgen S. schrieb:
> Es bleibt trotzdem bei der Thematik, dass das im PC nicht zu verarbeiten
> ist - auch nicht per 10GB.
10 GBit/s lassen sich problemlos verlustfrei in den RAM schaufeln.
BTDT.
Aber verarbeitet (im Sinne von signal processing) ist da noch nix, das 
ist richtig.

> Auch sonst, werden neue Algorithmen, Matcher und Follower offline in
> MATLAB mit gesampelten Daten getestet und dies sogar immer mit
> denselben, bis die Algos final stehen. Daneben werden sogar generische
> Daten und real time Simulatoren genutzt. Erst dann geht es in die
> Hardware.
Das wäre auch mein Ansatz. Erst wenn der Algorithmus was taugt, kann er 
auf FPGA-Technologie umgesetzt werden.

Duke

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.