projekte:das:dvbs
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
projekte:das:dvbs [2015/02/01 18:41] – Netzwerk-Protokoll thasti | projekte:das:dvbs [2015/02/02 10:36] (aktuell) – [Netzwerkprotokoll] thasti | ||
---|---|---|---|
Zeile 19: | Zeile 19: | ||
* Können die FrameSync-Eingänge einfach durch den Reset ersetzt werden / sind sie notwendig? | * Können die FrameSync-Eingänge einfach durch den Reset ersetzt werden / sind sie notwendig? | ||
- | Bis nach dem Interleaver ist die Struktur byteweise, danach arbeitet sie bit-seriell. Die Pipeline muss vor dem RS-Encoder aller 188 Byte angehalten werden können, damit der RS-Encoder seine sechs Paritätsbytes einschieben kann. | + | Bis nach dem Interleaver ist die Struktur byteweise, danach arbeitet sie bit-seriell. Die Pipeline muss vor dem RS-Encoder aller 188 Byte angehalten werden können, damit der RS-Encoder seine sechs Paritätsbytes einschieben kann. Die Spezifikation |
- | + | ||
- | === Controller === | + | |
- | Aufgabe: | + | |
- | * Datenstrom überwachen (Frame-Syncronität) | + | |
- | * Steuersignale für die einzelnen Komponenten erzeugen | + | |
- | * noch keine Modulspec! | + | |
- | + | ||
- | === Netzwerk-RX === | + | |
- | Aufgabe: | + | |
- | * Empfang von UDP-Paketen (Sanity-Check) | + | |
- | * Weiterreichen der Nutzdaten an FIFO | + | |
- | * keine Modulspec hier (implementiert Stefan) | + | |
- | + | ||
- | === Netzwerk-TX === | + | |
- | Aufgabe: | + | |
- | * Auswerten der FIFO-Signale und Erzeugung von UDP-Nachichten zur Datenflusskontrolle | + | |
- | * Wenn FIFO fast leer: "Mach schneller" | + | |
- | * Wenn FIFO fast voll: "Mach langsamer" | + | |
- | * keine Modulspec hier (implementiert Stefan) | + | |
- | + | ||
- | === FIFO === | + | |
- | Aufgabe: | + | |
- | * MPEG-Datenstrom von Ethernet entgegennehmen und an Encoder weitergeben | + | |
- | * Signalisierung der noch vorhandenen Daten (zu viel / zu wenig) | + | |
- | * keine Modulspec hier (schon vorhanden) | + | |
- | + | ||
- | === Scrambler === | + | |
- | Aufgabe: | + | |
- | * Scrambling der Daten entsprechend Spec - Seite 9 | + | |
- | * http:// | + | |
- | * LFSR Reset aller 8 Pakete | + | |
- | * Erstes Byte jedes Pakets (Syncword) nicht gescramblet, | + | |
- | * Erstes Byte des ersten von acht Paketen invertieren. | + | |
- | * Ein Ausgangsbyte pro Eingangsbyte (Clock Enable verwenden) | + | |
- | + | ||
- | === RS-Encoder === | + | |
- | Aufgabe: | + | |
- | * Verkürzten RS-Code auf jeweils einen MPEG-Frame anwenden (Spec Seite 10) | + | |
- | * Paritätsbytes einfügen | + | |
- | * Sync-Signal signalisiert das erste Byte des Pakets | + | |
- | * Bei jedem Clock Enable ein Ausgangsbyte erzeugen! | + | |
- | * 188x Clock Enable pro Eingangsbyte | + | |
- | * 6x Clock Enable für die Paritätsbytes (keine neuen Eingangsdaten anliegend). | + | |
- | + | ||
- | === Interleaver === | + | |
- | Aufgabe: | + | |
- | * Vertauschen der Byte-Reihenfolge (Spec Seite 10) | + | |
- | * Implementierung mit Dual-Port-RAM - Berechnung der Indizes | + | |
- | * Bei jedem Clock-Enable ein Eingangsbyte lesen und ein Ausgangsbyte erzeugen | + | |
- | * Sync-Eingang verwenden um Scrambler auf Pfad 0 (keine Verzögerung) | + | |
- | + | ||
- | === P/ | + | |
- | Aufgabe: | + | |
- | * Byteweisen Datenstrom in Bitweisen Datenstrom wandeln | + | |
- | * Bei jedem Clock-Enable-Puls ein neues Ausgangsbit erzeugen | + | |
- | * " | + | |
- | + | ||
- | === Convolutional Coder === | + | |
- | Aufgabe: | + | |
- | * Faltungskode auf serielle Daten anwenden (Seite 12) | + | |
- | * Bei jedem clk_en ein neues Bit reinschieben und die X/ | + | |
- | + | ||
- | === Mapping === | + | |
- | Aufgabe: | + | |
- | * Mapping auf I/Q-Symbole (Seite 13) | + | |
- | * Eingang: Bits, Ausgang: Signed x-bit-Vektoren (entsprechend Spec) | + | |
- | * optional: Puncturing - wird erstmal weggelassen | + | |
- | * bei jedem Clock-Enable ein Symbol mappen | + | |
- | + | ||
- | === Interpolator === | + | |
- | Aufgabe: | + | |
- | * Einfügen von Nullen in den Datenstrom | + | |
- | * bei jedem Clock-Enable einen Ausgangswert produzieren | + | |
- | * länge parametrisierbar | + | |
- | * Ausgang = 0, wenn nur clock-enable | + | |
- | * Ausgang = Eingangswert, | + | |
- | + | ||
- | === Baseband Filter === | + | |
- | Aufgabe: | + | |
- | * Spectral Shaping mit RRC-Filter | + | |
- | * FIR-Filter, Koeffizienten berechnen (gnuradio firdes.root_raised_cosine, | + | |
- | * Datenlänge parametrisierbar | + | |
- | * Filterordnung parametrisierbar? | + | |
- | * Bei jedem Clock-Enable ein neues Eingangsbyte lesen und ein Ausgangsbyte schreiben | + | |
==== Berechnung Bitrate des MPEG2-TS ==== | ==== Berechnung Bitrate des MPEG2-TS ==== | ||
Zeile 120: | Zeile 36: | ||
* 6 Mbit/s * 0,921 = 5,529 Mbit/ | * 6 Mbit/s * 0,921 = 5,529 Mbit/ | ||
* Also Gesamtechnung: | * Also Gesamtechnung: | ||
+ | |||
+ | Bei Weglassen des Puncturing (Code Rate 1/2) ist die Sendesymbolrate (=Bitrate nach RS) ein ganzzahliger Teiler der Systemfrequenz. Die Bitrate des TS errechnet sich nur durch Multiplikation mit dem Reed-Solomon-Overhead-Faktor. Folgende Tabelle fasst erreichbare Datenraten bei 50MHz Systemtakt zusammen. | ||
+ | |||
+ | ^ Clock-Divider ^ Brutto-Datenrate ^ Netto-(TS)-Datenrate ^ | ||
+ | | 1 | 50 MSym/s | 46,08 MBit/s | | ||
+ | | 2 | 25 MSym/s | 23,04 MBit/s | | ||
+ | | 3 | 16,67 MSym/s | 15,36 MBit/s | | ||
+ | | 4 | 12,5 MSym/s | 11,51 MBit/s | | ||
+ | | 5 | 10 MSym/s | 9,22 MBit/s | | ||
+ | | 6 | 8,33 MSym/s | 7,68 MBit/s | | ||
+ | | 7 | 7,14 MSym/s | 6,58 MBit/s | | ||
+ | | 8 | 6,25 MSym/s | 6,76 MBit/s | | ||
+ | |||
+ | Es muss bedacht werden: Der Interpolator am Ausgang (der zur Entlastung der Anforderungen des Ausgangsfilters vorhanden mindestens mit Faktor 2 interpolieren sollte) verhindert das Verwenden von 1 als Divider. Außerdem muss der RRC-Filter seine Operationen möglicherweise serialisieren, | ||
+ | |||
==== Netzwerkprotokoll ==== | ==== Netzwerkprotokoll ==== | ||
Zeile 144: | Zeile 75: | ||
* 0x00: FIFO hat unteren Schwellwert erreicht - Datenrate erhöhen | * 0x00: FIFO hat unteren Schwellwert erreicht - Datenrate erhöhen | ||
* 0x01: FIFO hat oberen Schwellwert erreicht - Datenrate erniedrigen | * 0x01: FIFO hat oberen Schwellwert erreicht - Datenrate erniedrigen | ||
+ | * 0x02: FIFO hat normalen Füllstand erreicht | ||
* 0x02: (optional) FIFO ist leer, einmalig | * 0x02: (optional) FIFO ist leer, einmalig | ||
* 0x03: (optional) FIFO ist voll, einmalig | * 0x03: (optional) FIFO ist voll, einmalig | ||
- | Pakete werden nicht wiederholt, bevor die entsprechende Bedingung nicht verlassen wurde (FIFO wieder auf normalen Füllzustand zurückgekehrt). | + | Pakete werden nicht wiederholt, bevor die entsprechende Bedingung nicht verlassen wurde. |
projekte/das/dvbs.1422816077.txt.gz · Zuletzt geändert: 2015/02/01 18:41 von thasti