-
Die
vorliegende Erfindung betrifft das Codieren und Decodieren von Daten
in Kommunikationssystemen, und im Besonderen betrifft sie Kommunikationssysteme,
die Daten codieren und decodieren, um Fehler und Lücken in übertragenen
Daten zu berücksichtigen,
und um von mehr als einer Quelle stammende übertragene Daten effektiv zu
nutzen.
-
Die Übertragung
von Dateien zwischen einem Sender und einem Empfänger über einen Übertragungs- bzw. Kommunikationskanal
ist Vielfach Gegenstand in der Literatur. Vorzugsweise möchte ein
Empfänger
eine genaue Kopie der durch einen Sender über einen Kanal übertragenen
Daten mit einer bestimmten Sicherheit empfangen. Wenn der Kanal
keine perfekte Wiedergabetreue aufweist (was für nahezu alle physikalisch
realisierbaren Systeme zutrifft), ist es ein Problem, wie mit während der Übertragung
verloren gegangenen oder verstümmelten
Daten verfahren wird. Die Behandlung von verloren gegangenen Daten
(Löschungen)
ist häufig
leichter als die Behandlung verstümmelter Daten (Fehler), da
der Empfänger
nicht immer feststellen kann, ob es sich bei verstümmelten
Daten um fehlerhaft empfangene Daten handelt.
-
Viele
Fehlerkorrekturcodes wurden entwickelt, um Löschungen zu korrigieren bzw.
zu beheben (so genannte „Löschcodes") und/oder um Fehler
zu korrigieren („Fehlerkorrekturcodes"). Für gewöhnlich wird
der jeweils verwendete Code auf der Basis bestimmter Informationen über die
fehlende Wiedergabetreue des Kanals ausgewählt, über den die Daten übertragen
werden sowie auf der Basis der Art der übertragenen Daten. Wenn zum
Beispiel bekannt ist, dass der Kanal lange Perioden der fehlenden
Wiedergabetreue aufweist, so kann sich ein Fehlerbündelcode
für diese
Anwendung am besten eignen. Wenn nur kurze, seltene Fehler erwartet
werden, kann sich ein einfacherer Paritätscodes am besten eignen.
-
Die
Dateiübertragung
zwischen mehreren Sendern und/oder mehreren Empfängern über einen Kommunikationskanal
wird in der Literatur ebenfalls umfassend behandelt. Für gewöhnlich setzt
die Dateiübertragung
von mehreren Sendern eine Koordination zwischen der Mehrzahl von
Sendern voraus, um es zu ermöglichen,
dass die Sender eine Duplizierung ihrer Bemühungen so gering wie möglich halten.
Wenn in einem typischen System mit mehreren Sendern, bei dem eine
Datei an einen Empfänger
gesendete wird, die Sender nicht koordinieren, welche Daten sie
wann übertragen,
sondern stattdessen einfach Segmente der Datei senden, so ist es
wahrscheinlich, dass ein Empfänger
viele nutzlose bzw. unbrauchbare doppelte Segmente empfängt. Wenn
im ähnlichen
Fall verschiedene Empfänger
eine Übertragung
von einem Sender zu unterschiedlichen Zeitpunkten zusammenführen, so
ist es ein Problem sicherzustellen, dass alle Daten, welche die
Empfänger
von dem Sender empfangen, brauchbar bzw. nützlich sind. Zum Beispiel wird
angenommen, dass der Sender kontinuierlich Daten zu der gleichen
Datei überträgt. Wenn
der Sender lediglich Segmente der ursprünglichen Datei überträgt bzw.
sendet und einige Segmente verloren gehen, so ist es wahrscheinlich,
dass ein Empfänger
viele unbrauchbare bzw. nutzlose Segmente doppelt empfängt, bevor
er eine Kopie jedes Segments in der Datei empfängt.
-
Ein
weiteres Problem bei der Auswahl eines Codes ist das für die Übertragung
verwendete Protokoll. Im Fall des weltweit eingesetzten Internet-Netzwerks,
das als „Internet" bekannt ist (mit
großem „I"), wird ein Paketprotokoll
für die
Datenübertragung
verwendet. Das Protokoll wird Internet Protocol oder kurz „IP" genannt. Wenn eine
Datei oder ein Datenblock über
ein IP-Netzwerk übertragen
werden soll, wird die Datei oder der Block in Eingangssymbole gleicher
Größe partitioniert,
und die Eingangssymbole werden in konsekutiven Paketen platziert.
Ein paketorientiertes Codierungsformat auf Paketbasis kann sich
entsprechend eignen. Die „Größe" eines Eingangssymbols
kann in Bit gemessen werden, unabhängig davon, ob das Eingangssymbol tatsächlich in
einen Bitstrom aufgeteilt wird oder nicht, wobei ein Eingangssymbol
eine Größe von M
Bit aufweist, wenn das Eingangssymbol aus einem Alphabet von 2M Symbolen ausgewählt wird.
-
Das
Transport Control Protocol („TCP") ist ein Punkt-zu-Punkt-Paketsteuerungsformat
mit einem Quittungs- bzw. Bestätigungsmechanismus,
das häufig
eingesetzt wird. TCP eignet sich gut für direkte Eins-zu-Eins-Übertragungen,
wobei sich der Sender und der Empfänger beide darüber einigen,
wann die Übertragung
erfolgt und empfangen wird, und wobei beide sich darüber einig
sind, welche Sender und Empfänger
verwendet werden. TCP eignet sich häufig jedoch nicht für Übertragungen
von einem Teilnehmer an viele Teilnehmer oder von vielen Teilnehmern
an viele Teilnehmer, oder für Übertragungen,
bei denen der Sender und der Empfänger unabhängig voneinander bestimmen,
wann und wo sie Daten senden oder empfangen.
-
Beim
Einsatz von TCP überträgt ein Sender
geordnete Pakete, und der Empfänger
bestätigt
den Empfang jedes Pakets. Wenn ein Paket verloren geht, wird keine
Bestätigung
an den Sender übertragen,
und der Sender sendet das Paket noch einmal. Der Paketverlust hat
eine Reihe von Ursachen. Im Internet tritt ein Paketverlust häufig aufgrund
von sporadischen Überlastungen
auf, welche bewirken, dass der Puffermechanismus in einem Router
an seine Kapazitätsgrenzen
stößt, was
dazu führt,
dass er eingehende Pakete verliert. In Verbindung mit Protokollen
wie TCP/IP ermöglicht
es das Quittungsparadigma, dass Pakete ohne Totalverlust verloren
gehen, da die verloren gegangenen Pakete einfach erneut übertragen
werden können,
und zwar entweder als Reaktion auf eine fehlende Bestätigung bzw.
Quittung oder als Reaktion auf eine explizite Anforderung seitens
des Empfängers.
In beiden Fällen
erfordert ein Quittungsprotokoll einen Rückkanal von dem Empfänger zu
dem Sender.
-
Obwohl
sich quittungsbasierte Protokolle allgemein für viele Anwendungen eignen
und auch in der Praxis weit verbreitete Anwendung im aktuellen Internet
finden, sind sie jedoch für
bestimmte Anwendungen ineffizient und teilweise nicht realisierbar.
Im Besonderen liefern quittungsbasierte Protokolle schlechte Ergebnisse
in Netzwerken mit hohen Latenzzeiten, hohen Paketverlustraten, unkoordinierten
Empfängeranmeldungen
und -abmeldungen und/oder in hohem Maße asymmetrischer Bandbreite.
Bei hohen Latenzzeiten benötigen
Bestätigungen
eine lange Zeit, um vom Empfänger
zurück
zu dem Sender zu gelangen. Eine hohe Latenz kann dazu führen, dass
die Zeit insgesamt vor einer neuen Übertragung zu lange dauert.
Hohe Paketverlustraten verursachen ebenfalls Probleme, wenn mehrere
neue Übertragungen
des gleichen Pakets nicht ihr Ziel erreichen, was zu einer langen
Verzögerung
führt,
um das letzte oder die letzten paar erfolglosen Pakete zu erhalten.
-
„Unkoordinierte
Empfängeranmeldungen
und -abmeldungen" bezieht
sich auf Situationen, in denen jeder Empfänger zu einer gerade aktiven Übertragungssitzung
nach eigenem Ermessen hinzustoßen
bzw. sich anmelden oder diese verlassen bzw. sich abmelden kann.
Diese Situation ist typisch für
das Internet, wobei Dienste der nächsten Generation wie etwa „Video
on Demand" und andere
Dienste zukünftig
von Netzwerkanbietern angeboten werden. Wenn in dem kennzeichnenden
System ein Empfänger
zu einer gerade aktiven Übertragung
hinzustößt oder
diese verlässt,
und zwar ohne Koordination der Sender, so erfährt der Empfänger wahrscheinlich
einen Verlust einer großen
Anzahl von Paketen, wobei in hohem Maße ungleichartige Verlustmuster
von den verschiedenen Empfängern
wahrgenommen werden.
-
Asymmetrische
Bandbreie bezeichnet den Fall, wenn ein Umkehrdatenpfad von dem
Empfänger
zu dem Sender (der Rückkanal)
weniger verfügbar
oder kostengünstiger
ist als der Vorwärtspfad.
Die asymmetrische Bandbreite kann es für den Empfänger unzulässig langsam und/oder teuer
machen, häufig
zu bestätigen,
und wobei weniger häufige
Bestätigungen
wiederum Verzögerungen
hinzufügen
können.
-
Ferner
lassen sich Protokolle mit Quittungsbestätigung nicht gut für die Übermittlung
bzw. Rundsendung (Broadcasting) skalieren, wenn ein Sender eine
Datei gleichzeitig an mehrere Benutzer sendet. Zum Beispiel wird
angenommen, dass ein Sender eine Datei über einen Satellitenkanal an
mehrere Empfänger übermittelt.
Jeder Empfänger
kann ein anderes Muster des Paketverlustes erfahren. Protokolle,
die auf der Bestätigung
von Daten (entweder positiv oder negativ) basieren, um die Datei
zuverlässig
zustellen zu können,
erfordern einen Rückkanal
von jedem Empfänger
zu dem Sender, und wobei dies bereitzustellen, mit zu hohen Kosten
verbunden sein kann. Ferner erfordert dies, dass ein komplexer und
leistungsstarker Sender in der Lage ist, alle von den Empfängern übermittelten
Bestätigungs-
bzw. Quittungsdaten entsprechend zu behandeln. Ein weiterer Nachteil
ist es, dass für
den Fall, dass verschiedene Empfänger
unterschiedene Paketanordnungen verlieren, eine erneute Übermittlung
der Pakete erforderlich ist, die nur einige wenige der Empfänger nicht
erhalten haben, was den Empfang überflüssiger doppelter
Pakete seitens der anderen Empfänger bewirkt.
Eine andere Situation, der in einem Kommunikationssystem auf Bestätigungsbasis
nicht gut behandelt wird, ist es, wenn Empfänger asynchron mit dem Empfang
einer Sitzung beginnen können,
d.h. der Empfänger kann
mit dem Datenempfang in der Mitte einer Übertragungssitzung beginnen.
-
Verschiedene
komplexe Systeme bzw. Formate wurden vorgeschlagen, um die Leistung
des Systems bzw. des Formats auf Bestätigungsbasis zu verbessern,
wie etwa TCP/IP für
Multicast- oder Broadcast-Anwendungen. Keines dieser Formate wurde
bis heute aus verschiedenen Gründen
eindeutig angenommen. Zum einen lassen sich Protokolle auf Bestätigungsbasis
nicht gut skalieren, wenn ein Empfänger Informationen von mehreren
Sendern erhält,
wie etwa in einem Satellitenübertragungsnetzwerk
der unteren Erdumlaufbahn („LEO"). In einem LEO-Netzwerk
passieren die LEO-Satelliten aufgrund ihrer Umlaufbahn die jeweilige Position
sehr schnell, so dass der Empfänger
einen bestimmten Satelliten jeweils nur für einen kurzen Zeitraum im
Blickfeld hat. Um dies auszugleichen umfasst das LEO-Netzwerk viele
Satelliten, und die Empfänger werden
zwischen den Satelliten übergeben,
wenn ein Satellit den Horizont verlässt und ein anderer erscheint. Wenn
ein Protokoll auf Bestätigungsbasis
eingesetzt werden würde,
um Zuverlässigkeit
sicherzustellen, so wäre
wahrscheinlich ein komplexes Übergabeprotokoll
erforderlich, um die zu dem entsprechenden Satelliten zurückkehrenden
Bestätigungen
bzw. Quittungen zu koordinieren, da ein Empfänger häufig ein Paket von einem Satelliten
empfangen würde,
während
er noch das Paket an einen anderen Satelliten bestätigt.
-
Als
Alternative zu einem Protokoll auf Bestätigungsbasis wird in der Praxis
teilweise ein Protokoll auf Karussellbasis eingesetzt. Ein Karussellprotokoll
partitioniert eine Eingangsdatei in Eingangssymbole gleicher Länge, wobei
jedes Eingangssymbol in einem Paket platziert wird, und wobei danach
kontinuierlich durch alle Pakete verlaufen wird und alle Pakete übertragen
werden. Ein Hauptnachteil eines Protokolls auf Karussellbasis ist
es, dass für
den Fall, dass ein Empfänger
auch nur ein Paket verpasst, der Empfänger einen ganzen Zyklus warten
muss, bis er wieder die Chance hat, das verpasste Paket zu empfangen.
Eine weitere Möglichkeit,
dies zu betrachten, ist es, dass ein Protokoll auf Karussellbasis große Mengen
nutzloser bzw. überflüssiger,
doppelt empfangener Daten bewirken kann. Wenn ein Empfänger zum
Beispiel Pakete von dem Anfang des Karussells empfängt, den
Empfang eine gewisse Zeit lang unterbricht und danach wieder am
Anfang des Karussells mit dem Empfang beginnt, so kommt es zu einer
großen
Anzahl von nutzlosen, doppelt empfangenen Paketen.
-
Eine
vorgeschlagene Lösung
für die
vorstehenden Probleme ist das Vermeiden des Einsatzes eines Protokolls
auf Bestätigungsbasis
und stattdessen Löschcodes
wie etwa Reed-Solomon-Codes
einzusetzen, um die Zuverlässigkeit
zu erhöhen.
Ein Merkmal der verschiedenen Löschcodes
ist es, dass wenn eine Datei in Eingangssymbole segmentiert wird,
die in Paketen zu dem Empfänger
gesendet werden, der Empfänger
die Pakete decodieren kann, um die ganze Datei zu rekonstruieren,
sobald ausreichend viele Pakete empfangen worden sind, und zwar
allgemein unabhängig
davon, welche Pakete empfangen worden sind. Diese Eigenschaft macht
Quittungen auf Paketebene überflüssig, da
die Datei wiederhergestellt werden kann, auch wenn Pakete verloren
gehen. Viele Löschcodelösungen können jedoch
nicht die Probleme des Protokolls auf Bestätigungsbasis lösen oder
führen
zu neuen Problemen.
-
Ein
Problem bei vielen Löschcodes
ist es, dass sie eine übermäßige Rechenleistung
oder sehr viel Speicher für
deren Einsatz benötigen.
Ein Codierungsformat, das kürzlich
für Kommunikationsanwendungen entwickelt
worden ist, das eine gewisse Effizienz der Rechenleistung und des
Speichers im Einsatz aufweist, ist das Tornado-Codierungsformat.
Tornado-Codes sind
Reed-Solomon-Codes dahingehend ähnlich,
dass eine Eingangsdatei durch K Eingangssymbole dargestellt wird
und für
die Bestimmung von N Ausgangssymbolen verwendet wird, wobei N vor
Beginn des Codierungsverfahrens feststeht. Die Codierung mit Tornado-Codes
ist allgemein deutlich schneller als die Codierung mit Reed-Solomon-Codes,
da die durchschnittliche Anzahl der erforderlichen Rechenoperationen
zur Erzeugung der N Tornado-Ausgangssymbole proportional zu N ist
(im dreistelligen Bereich der Assembly-Codeoperationen mal N), und
wobei die Gesamtanzahl der erforderlichen Rechenoperationen zum
Decodieren der ganzen Datei ebenfalls proportional zu N ist.
-
Tornado-Codes
besitzen Geschwindigkeitsvorteile gegenüber Reed-Solomon-Codes, wobei
sie jedoch auch verschiedene Nachteile aufweisen. Erstens muss die
Anzahl der Ausgangssymbole N vor dem Codierungsvorgang bestimmt
werden. Dies führt
zu Ineffizienzen, wenn die Verlustrate von Paketen zu hoch geschätzt wird,
und wobei Fehler auftreten können,
wenn die Verlustrate von Paketen zu niedrig geschätzt wird. Dies
ist der Fall, da ein Tornado-Decodierer eine bestimmte Anzahl von
Ausgangssymbolen (im Besonderen K + A Ausgangssymbole, wobei A im
Vergleich zu K klein ist) erfordert, um die ursprüngliche
Datei zu decodieren und wiederherzustellen, und wenn die Anzahl
der verloren gegangenen Ausgangssymbole größer ist als N – (K + A),
so kann die ursprüngliche
Datei nicht wiederhergestellt werden. Diese Einschränkung ist
allgemein für
viele Kommunikationsprobleme akzeptabel, sofern N um mindestens
den tatsächlichen
Paketverlust größer als
K + A gewählt
wird, wobei dies jedoch eine Vorausschätzung des Paketverlusts voraussetzt.
-
Ein
weiterer Nachteil von Tornado-Codes ist es, dass sie einen Codierer
und Decodierer voraussetzen, um auf bestimmte Weise hinsichtlich
einer Graphenstruktur einig zu werden. Tornado-Codes erfordern eine Vorverarbeitungsstufe
an dem Decodierer, wo der Graph gestaltet wird, einen Vorgang, der
das Decodieren erheblich verlangsamt. Ferner ist ein Graph für eine bestimmte
Dateigröße spezifisch,
so dass ein neuer Graph für
jede verwendete Dateigröße verwendet
werden muss. Ferner lassen sich die durch die Tornado-Codes benötigten Graphen
zur schwer konstruieren, und sie erfordern unterschiedliche individuelle
Festlegungen von Parametern für
Dateien unterschiedlicher Größe, um die
beste Leistung zu erzielen. Diese Graphen weisen eine signifikante
Größe auf und
erfordern eine signifikante Speicherkapazität für deren Speicherung sowohl bei
dem Sender als auch bei dem Empfänger.
-
Darüber hinaus
erzeugen Tornado-Codes genau die gleichen Ausgangssymbole in Bezug
auf einen festen Graphen und eine Eingangsdatei. Diese Ausgangssymbole
umfassen K ursprüngliche
Eingangssymbole und N – K
redundante Symbole. Ferner kann N praktisch ein nur kleines Vielfaches
von K sein, wie etwa das 1,5- oder 2-fache von K. Somit ist es sehr
unwahrscheinlich, dass ein Empfänger,
der von der gleichen Eingangsdatei unter Verwendung des gleichen
Graphen von mehr als einem Empfänger
erzeugte Ausgangssymbole empfängt,
eine hohe Anzahl nutzloser doppelter Ausgangssymbole empfängt.
-
Der
Grund dafür
ist es, dass die N Ausgangssymbole zeitlich vorher festgelegt werden
und es sich um die gleichen N Ausgangssymbole handelt, die auch
von jedem Sender jedes Mal übertragen
werden, wenn die Symbole gesendet werden, und ferner die gleichen
N Symbole darstellen, die von dem Empfänger empfangen werden. Zum
Beispiel wird angenommen, dass N = 1500 und K = 1000 ist, und ein
Empfänger
empfängt
900 Symbole von einem Satelliten, bevor der Satellit am Horizont
verschwindet. Wenn die Satelliten nicht koordiniert und synchronisiert
sind, kann es sein, dass die von dem Empfänger von dem nächsten Satelliten
empfangenen Tornado-Codesymbole nicht additiv sind, da der nächste Satellit
die gleichen N Symbole überträgt, was
wahrscheinlich dazu führt,
dass der Empfänger
Kopien vieler der bereits empfangenen 900 Symbole empfängt, bevor
100 neue Symbole empfangen werden, die zur Wiederherstellung der
Eingangsdatei erforderlich sind.
-
Benötigt wird
somit ein einfacher Löschcode,
der keine übermäßige Rechenleistung
oder Speicherkapazität
an einem Sender oder einem Empfänger
für eine
Implementierung erfordert, und der eingesetzt werden kann, um eine
Datei in einem System effizient mit einem oder mehreren Sendern
und/oder einem oder mehreren Empfängern effizient zu verteilen,
ohne dass eine Koordination zwischen den Sendern und Empfängern erforderlich
ist.
-
„A Digital
Fountain Approach to Reliable Distribution of Bulk Date" von J. W. Byers
et al., Oktober 1998, Computer Communications Review Association
for Computing Machinery, New York, USA, offenbart ein Verfahren
zum Kommunizieren unter Verwendung von Tornado-Codes. Byers zeigt
den Einsatz einer Graphenstruktur zur Abbildung von Abhängigkeiten
zwischen Quellensymbolen (Eingangssymbolen) und Ausgangssymbolen.
Unter Verwendung dieser graphischen bzw. Graphenstruktur können ein
Codierer und ein Decodierer die Anzahl der Eingangssymbole und die
Liste der Anzahl von Eingangssymbolen zur Verwendung bei der Erzeugung
eines Ausgangssymbols bestimmen.
-
Vorgesehen
ist gemäß einem
Aspekt der vorliegenden Erfindung ein Verfahren zum Erzeugen einer Gruppe
von Ausgangssymbolen, wobei eine Gruppe mindestens aus zwei Ausgangssymbolen
besteht, wobei jedes Ausgangssymbol aus einem Ausgangsalphabet ausgewählt wird,
und wobei die Gruppe so beschaffen ist, dass eine Eingangsdatei
(101), die eine geordnete Mehrzahl von Eingangssymbolen
(IS) umfasst, die jeweils aus einem Eingangsalphabet ausgewählt werden,
aus einer Anordnung derartiger Gruppen wiederhergestellt werden
kann, wobei das Verfahren die folgenden Schritte umfasst:
- a) das Ermitteln eines Schlüssels I für die Gruppe, wobei der Schlüssel aus
einem Schlüsselalphabet
ausgewählt
wird, und wobei die Anzahl der möglichen
Schlüssel
in dem Schlüsselalphabet
effektiv unbegrenzt ist im Verhältnis
zu der Anzahl der Eingangssymbole in der Eingangsdatei für jede erwartete
Größe der Eingangsdatei;
- b) das Berechnen gemäß einer
vorbestimmten Funktion von I einer Liste AL(I) für die Gruppe (710),
wobei AL(I) W(I) der Gruppe zugeordneter Eingangssymbole anzeigt,
und wobei die Gewichtungen W positive ganze Zahlen darstellen, die
zwischen mindestens zwei Werten variieren und größer sind als Eins für mindestens
einen Wert von I; und
- c) das Erzeugen eines Ausgangssymbolwertes (B(I)) für jedes
Ausgangssymbol in der Gruppe aus einer vorbestimmten Funktion der
durch AL(I) angezeigten zugeordneten Eingangssymbole.
-
Bevorzugte
Merkmale sind in den Unteransprüchen
definiert.
-
In
einigen Ausführungsbeispielen
variiert die Anzahl der Ausgangssymbole in einer Gruppe G(I) von Gruppe
zu Gruppe, abhängig
von dem Schlüssel
(I). In anderen Ausführungsbeispielen
ist G(I) auf einen bestimmten positiven ganzzahligen Wert b festgelegt
für alle
Gruppen von Ausgangssymbolen für
alle Schlüssel (I).
-
In
einem Decodierungsvorgang zum Decodieren der gemäß der vorliegenden Erfindung
erzeugten Ausgangssymbole werden die folgenden Schritte für jede empfangene
Gruppe von Ausgangssymbolen ausgeführt: 1) Identifizieren des
Schlüssels
I der empfangenen Gruppe von b Ausgangssymbolen; 2) Identifizieren der
Gruppengröße G(I);
3) Identifizieren der empfangenen Gruppe von Ausgangssymbolwerten
B(I) = B – 1(I), ...,
B – G(I)(I)
für die
Gruppe der Ausgangssymbole; 3) Bestimmen der Gewichtung W(I) der
Gruppe von Ausgangssymbolen; 4) Bestimmen von Positionen für die W(I)
zugeordneten Eingangssymbole, die der Gruppe von Ausgangssymbolen
zugeordnet sind; und 5) Speichern von B(I) = B – 1(I), ..., B – G(I) in
einer Tabelle, die die Gruppen der Ausgangssymbole enthält, und
Speichern der Gewichtung W(I) und der Positionen der zugeordneten
Eingangssymbole. Der folgende Ablauf wird danach wiederholt angewandt,
bis keine ungenutzten Gruppen von Ausgangssymbolen mit einem Schlüssel I mehr
existieren, so dass die Gewichtung der Gruppe höchstens G(I) beträgt: 1) für jede gespeicherte
Gruppe von Ausgangssymbolen mit einem Schlüssel I mit einer Gewichtung
von b' < G(I) und nicht
bezeichnet als eine „verbrauchte" Gruppe von Ausgangssymbolen,
das Berechnen der Positionen J – 1,
..., J – b' der eindeutigen
verbleibenden b' nicht
wiederhergestellten Eingangssymbole, die der Gruppe von Ausgangssymbolen
auf der Basis des Schlüssels
1 zugeordnet sind; 2) Berechnen der unbekannten Werte für die Eingangssymbole
J – 1,
..., J – b' aus der Gruppe von
Ausgangssymbolen und den bekannten Werten der anderen Eingangssymbole,
die der Gruppe zugeordnet sind; 3) Identifizieren der Gruppen von
Ausgangssymbolen in der Gruppe der Ausgangssymboltabelle, die mindestens
zugeordnet die Eingangssymbole J – 1, ..., J – b' aufweisen; 4) Herabsetzen
der Gewichtungen jeder der identifizierten Gruppen von Ausgangssymbolen
um eins für
jede Zuordnung aus J – 1,
..., Jb'; und 5)
Bezeichnen von Eingangssymbolen J – 1, ..., J – b' als wiederhergestellt
und der Gruppe von Ausgangssymbolen mit dem Schlüssel I als verbraucht. Diese
Vorgehensweise wird wiederholt, bis die geordnete Anordnung von
Eingangssymbolen wiederhergestellt ist, d.h. bis die ganze Eingangsdatei
vollständig
wiederhergestellt worden ist.
-
Ein
Vorteil der vorliegenden Erfindung ist es, dass sie es nicht erfordert,
dass der Empfänger
den Empfang an einem bestimmten Punkt der Übertragung beginnt, und dass
der Sender nach der Erzeugung einer bestimmten Anzahl von Gruppen
von Ausgangssymbolen nicht unterbrochen bzw. beenden muss, da der
Sender eine praktisch unbegrenzte Anordnung von Gruppen von Ausgangssymbolen
für jede
gegebene Eingangsdatei senden kann.
-
Vielmehr
kann der Empfänger
den Empfang beginnen, wenn er dazu bereit ist sowie von jedem möglichen
Ort aus, und er kann Pakete, die Gruppen von Ausgangssymbolen in
einer wahlfreien Anordnung oder in einer arbiträren Anordnung enthalten behandeln
und dabei die gute Möglichkeit
besitzen, dass der Großteil der
empfangenen Daten Daten mit „zusätzlichen
Informationen" darstellt,
d.h. Daten, die den Wiederherstellungsprozess unterstützen und
keine bereits zur Verfügung
stehenden Informationen duplizieren. Die Tatsache, dass unabhängig voneinander
erzeugte (häufig
zufällig
ohne Bezug zueinander) Datenströme
mit hinzugefügten
Informationen codiert werden, führt
zu vielen Vorteilen, da dies die Erzeugung und den Empfang durch
mehrere Quellen ermöglicht
sowie verlässliche
Löschungen
und unkoordiniertes Anmelden und Abmelden.
-
Die
Art der hierin offenbarten Erfindung sowie deren Vorteile werden
in Bezug auf die als Beispiele beschriebenen bevorzugten Ausführungsbeispiele,
die nur die restlichen Teile der Patentschrift betreffen, und den
beigefügten
Zeichnungen besser verständlich.
In den Zeichnungen zeigen:
-
1 ein
Blockdiagramm eines Kommunikationssystems gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung;
-
2 ein
Blockdiagramm des Codierers aus 1 in näheren Einzelheiten;
-
3 eine
Darstellung, wie eine Gruppe von Ausgangssymbolen aus einer Anordnung
zugeordneter Eingangssymbole erzeugt werden kann;
-
4 ein
Blockdiagramm eines grundlegenden Decodierers, wie dieser in dem
Kommunikationssystem aus 1 verwendet
werden kann;
-
5 ein
Blockdiagramm eines alternativen Decodierers;
-
6 ein
Flussdiagramm eines Prozesses, den ein Decodierer wie etwa der Decodierer
aus 5 einsetzen kann, um Eingangssymbole aus einer
Anordnung von Gruppen von Ausgangssymbolen wiederherzustellen;
-
7 ein
Flussdiagramm eines Prozesses, der durch einen Empfangsorganisator
wie etwa den Empfangsorganisator aus 5 eingesetzt
werden kann, um empfangene Gruppen von Ausgangssymbolen zu organisieren;
-
8(a) ein Flussdiagramm eines Prozesses, der durch
einen Wiederherstellungsprozessor wie etwa den Wiederherstellungsprozessor
aus 5 eingesetzt werden kann, um empfangene Gruppen
von Ausgangssymbolen zu verarbeiten;
-
die 8(b)–8(c) ein Flussdiagramm von Teilen einer Variation
des Prozesses aus 8(a), wobei die Abbildung aus 8(b) die in dem Wiederherstellungsprozess ausgeführten Schritte
zeigt, einschließlich
der zeitversetzten Verarbeitung; und wobei 8(c) die
zeitversetzte Verarbeitung zeigt;
-
9 ein
Blockdiagramm der Zuordnungseinrichtung aus 2 in näheren Einzelheiten;
-
10 ein Flussdiagramm eines Prozesses, der durch
eine Zuordnungseinrichtung wie etwa die Zuordnungseinrichtung aus 9 eingesetzt
werden kann, um schnell die Zuordnung von Eingangssymbolen zu Gruppen
von Ausgangssymbolen zu bestimmen;
-
11 ein Blockdiagramm des Gewichtungsselektors
aus 2 in näheren
Einzelheiten;
-
12 ein Flussdiagramm eines Prozesses, der durch
einen Gewichtungsselektor wie etwa den Gewichtungsselektor aus 11 eingesetzt werden kann, um eine Gewichtung
für eine
bestimmte Gruppe von Ausgangssymbolen zu bestimmen;
-
13 ein Flussdiagramm eines Prozesses zum Decodieren
für einen
Decodierer, der nicht besonders effizient sein muss;
-
14 ein Blockdiagramm eines effizienteren Decodierers;
-
15 ein Flussdiagramm eines Prozesses zum Decodieren,
der unter Verwendung des Decodierers aus 14 implementiert
werden kann, zum effizienteren Decodieren als die in Bezug auf die
Abbildungen der 12 und 13 beschriebene
Decodierung;
-
16 ein Diagramm eines Beispiels für ein Dokument
und eine empfangene Gruppe von Ausgangssymbolen für den Decodierungsprozess
aus 15;
-
17 die Inhalte von Tabellen in einem Decodierer
während
dem Decodierungsprozess aus 15;
-
18 ein Diagramm, dass den Inhalt einer Gewichtungssortierungstabelle
zeigt, wie diese während dem
Decodierungsprozess aus 15 verwendet
werden kann;
-
19 eine Ausführungsliste,
die während
dem Decodierungsprozess aus 15 gebildet
werden kann;
-
20 den Fortschritt des Wiederherstellungsprozesses
in Form einer Darstellung der decodierbaren Anordnungsgröße im Vergleich
zu der Anzahl der Eingangssymbole, die für eine ideale Verteilung wiederhergestellt
werden;
-
21 den Fortschritt des Wiederherstellungsprozesses
in Form einer Darstellung der decodierbaren Anordnungsgröße im Vergleich
zu der Anzahl der Eingangssymbole, die für eine solide Gewichtungsverteilung wiederhergestellt
werden;
-
22 eine Darstellung eines Punkt-zu-Punkt-Kommunikationssystems
zwischen einem Sender (Sender) und einem Empfänger unter Verwendung eines
Codierers und eines Decodierers gemäß der Darstellung in den vorstehenden
Abbildungen;
-
23 eine Darstellung eines Rundfunkkommunikationssystems
zwischen einem Sender und mehreren Empfängern (von denen nur einer
dargestellt ist) unter Verwendung eines Codierers und eines Decodierers
gemäß der Darstellung
in den vorstehenden Abbildungen;
-
24 eine Darstellung eines Kommunikationssystems
gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung, wobei ein Empfänger eine Gruppe von Ausgangssymbolen
von mehreren, für
gewöhnlich unabhängigen Sendern
empfängt;
und
-
25 eine Darstellung eines Kommunikationssystems
gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung, wobei mehrere, möglicher Weise unabhängige Empfänger Gruppen
von Ausgangssymbolen von mehreren, für gewöhnlich unabhängigen Sendern
empfangen, so dass eine Eingangsdatei schneller empfangen werden
kann, als wenn nur ein Empfänger
und/oder ein Sender verwendet werden würde.
-
Anhang
A zeigt ein Quellcodeprotokoll eines Programms zur Implementierung
einer Gewichtungsverteilung.
-
In
den hierin beschriebenen Beispielen wird ein Codierungssystem bzw.
Codierungsformat beschrieben, das als „Gruppenkettenreaktionscodierung" (englisch: „Group
Chain Reaction Coding")
bezeichnet wird, wobei davor die Bedeutung und der Umfang verschiedener
Begriffe beschrieben wird, die in der vorliegenden Beschreibung
verwendet werden.
-
Bei
der Gruppenkettenreaktionscodierung werden Gruppen von Ausgangssymbolen
durch den Sender nach Bedarf aus der Eingangsdatei erzeugt. Jede
Gruppe von Ausgangssymbolen kann erzeugt werden, ohne Bezug darauf,
wie andere Gruppen von Ausgangssymbolen erzeugt werden. Zu jedem
Zeitpunkt kann der Sender das Erzeugen von Gruppen von Ausgangssymbolen
unterbrechen, und es muss keine Einschränkungen dahingehend geben,
wann der Sender das Erzeugen von Ausgangssymbolen unterbricht oder
wieder aufnimmt. Eine Datenunvollständigkeit tritt auf, wenn ein
Empfänger
nicht mit dem Datenempfang beginnt, bis einige der Daten diesen
bereits passiert haben, wobei der Empfänger den Datenempfang beendet,
bevor die Übertragung
endet, oder der Empfänger
unterbricht und beginnt den Datenempfang neu absatzweise.
-
Als
ein Beispiel für
Datenunvollständigkeit
kann ein sich bewegender Satellitensender Daten übertragen, die eine Eingangsdatei
darstellen, und er kann die Übertragung
beginnen, bevor sich ein Empfänger
in Reichweite befindet. Wenn sich der Empfänger in Reichweite befindet,
können
Daten empfangen werden, bis sich der Satellit aus der Reichweite
heraus bewegt, wobei der Empfänger
seine Satellitenschüssel
zu diesem Zeitpunkt (wobei er während
dieser Zeit keine Daten empfängt)
neu ausrichten kann, um den Empfang der Daten zu der gleichen Eingangsdatei
zu beginnen, die von einem anderen Satelliten übertragen wird, der sich in die
Reichweite bewegt hat. Wie dies beim Lesen der vorliegenden Beschreibung deutlich
werden sollte, handelt es sich bei der Datenunvollständigkeit
um einen Sonderfall des Löschens
von Daten, da der Empfänger die
Datenunvollständigkeit
(und der Empfänger
weist auch die gleichen Probleme auf) so behandeln kann, als befände sich
der Empfänger
die ganze Zeit in Reichweite, wobei der Kanal alle Daten jedoch
bis zu dem Punkt verloren hat, an dem der Empfänger mit dem Datenempfang begonnen
hat. Wie dies ferner in Bezug auf das Design bzw. den Aufbau von
Kommunikationssystemen allgemein bekannt ist, können detektierbare Fehler auch
ein Äquivalent
für Fehler
sein, indem einfach alle Datenblöcke
oder Symbole fallen gelassen werden, die detektierbare Fehler aufweisen.
-
Als
ein weiteres Beispiel lassen Router absichtlich Pakete fallen, wenn
ihre Puffer voll oder nahezu voll (verstopft) sind, und Router können Pakete
auch dann absichtlich fallen lassen, wenn sie konkurrierenden Paketen
Vorrang geben und/oder um Beschränkungen
hinsichtlich der Rate durchzusetzen.
-
Bei
einigen Kommunikationssystemen empfängt ein Empfänger Daten,
die von mehreren Sendern oder einem Sender erzeugt worden sind unter
Verwendung mehrerer Verbindungen. Um zum Beispiel ein Download zu
beschleunigen, kann ein Empfänger
gleichzeitig eine Verbindung mit mehr als einem Sender herstellen,
um die gleiche Datei betreffende Daten zu übertragen. Als weiteres Beispiel
können
bei einer Multicast-Übertragung
mehrere Multicast-Datenströme übermittelt
werden, um Empfängern
eine Verbindung mit einem oder mehreren dieser Ströme zu ermöglichen,
um die Gesamtübertragungsrate
an die Bandbreite des Kanals anzugleichen, der sie mit dem Sender
verbindet. In all diesen Fällen
muss sichergestellt werden, dass alle übermittelten Daten für einen
Empfänger
zur unabhängigen
Nutzung zur Verfügung
stehen, d.h. die Mehrzahl von Quellendaten ist zwischen den Strömen nicht
redundant, selbst wenn die Übertragungsraten
sich für
die verschiedenen Ströme
deutlich unterscheiden, und wenn beliebige Verlustmuster gegeben
sind.
-
Im
Allgemeinen handelt es sich bei der Übermittlung bzw. Übertragung
um die Handlung des Transports von Daten von einem Sender zu einem
Empfänger,
und zwar über
einen Kanal, der den Sender mit dem Empfänger verbindet. Der Kanal kann
ein Echtzeitkanal sein, wobei der Kanal die Daten direkt, wenn der
Kanal die Daten erhält,
von dem Sender zu dem Empfänger
transportiert, oder es kann sich um einen Speicherkanal handeln,
der einige oder alle Daten auf dem Weg von dem Sender zu dem Empfänger speichert.
Ein Beispiel für
die letztgenannte Lösung
ist ein Plattenspeicher oder eine andere Speichervorrichtung. In
diesem Beispiel, kann ein Programm oder ein Baustein bzw. eine Vorrichtung,
das bzw. der bzw. die Daten erzeugt, als Sender gelten, der Daten
zu einer Speichervorrichtung überträgt. Der
Empfänger
ist das Programm oder die Vorrichtung, das bzw. die die Daten aus
der Speichervorrichtung liest. Die Mechanismen, die der Sender verwendet, um
die Daten in die Speichervorrichtung zu bringen, die Speichervorrichtung
selbst und die Mechanismen, die der Empfänger verwendet, um die Daten
von der Speichervorrichtung zu erhalten, bilden gemeinsam den Kanal.
Wenn eine Möglichkeit
besteht, dass diese Mechanismen oder die Speichervorrichtung Daten
verlieren können,
so würde
dies als Datenlöschung
in dem Kanal behandelt werden.
-
Wenn
der Sender und der Empfänger
durch einen Datenlöschkanal
getrennt sind, wird es bevorzugt, keine exakte Kopie einer Eingangsdatei
zu übertragen,
sondern stattdessen Daten zu übertragen,
die aus der Eingangsdatei erzeugt werden, welche die Wiederherstellung
von Löschungen
unterstützen.
Ein Codierer ist eine Schaltung, ein Modul oder ein Codesegment,
das diese Aufgabe erfüllt.
Eine mögliche
Betrachtungsweise des Betriebs des Codierers ist es, dass der Codierer
Gruppen von Ausgangssymbolen aus den Eingangssymbolen erzeugt, wobei
eine Folge von Eingangssymbolwerten die Eingangsdatei darstellt.
Jedes Eingangssymbol würde
somit eine Position in der Eingangsdatei und einen Wert aufweisen.
Ein Decodierer ist eine Schaltung, eine Vorrichtung, ein Modul oder
ein Codesegment, das die Eingangssymbole aus den Gruppen von Ausgangssymbolen,
die von dem Empfänger
empfangen werden, wiederherstellt.
-
Die
Gruppenkettenreaktionscodierung ist nicht auf eine bestimmte Art
von Eingangssymbol beschränkt,
wobei die Art von Eingangssymbol jedoch häufig durch die Anwendung vorgegeben
ist. Für
gewöhnlich
werden die Werte für
die Eingangssymbole aus einem Alphabet von 2M Symbolen
für bestimmte
positive ganze Zahlen M ausgewählt.
In diesen Fällen
kann ein Eingangssymbol durch eine Folge von M Datenbits der Eingangsdatei
dargestellt werden. Der Wert von M wird häufig auf der Basis der Einsätze der
Anwendungen, dem Kanal und der maximalen Größe einer Gruppe bestimmt. Zum
Beispiel kann bei einem Internet-Kanal auf Paketbasis ein Paket
mit einer Nutzinformationsgröße von 1024
Byte geeignet sein (ein Byte entspricht 8 Bits). Wenn für diese
Beispiel angenommen wird, dass jedes Paket eine Gruppe von Ausgangssymbolen
aufweist und acht Bytes an Zusatzinformationen, und wenn angenommen
wird, dass alle Gruppen vier Ausgangssymbole umfassen, so wäre eine
Eingangssymbolgröße von M
= (1024 – 8)/4
bzw. 254 Bytes angemessen. Als ein weiteres Beispiel verwenden einige
Satellitensysteme den MPEG-Paketstandard, wobei die Nutzinformationen
jedes Pakets 188 Bytes umfassen. Wenn in diesem Beispiel angenommen
wird, dass jedes Paket eine Gruppe von Ausgangssymbolen und vier
Bytes Zusatzinformationen aufweist, und wenn angenommen wird, dass
alle Gruppen zwei Ausgangssymbole umfassen, so wäre eine Symbolgröße von M
= (188 – 4)/2
bzw. 92 Bytes angemessen. In einem Allround- Kommunikationssystem unter Verwendung
der Gruppenkettenreaktionscodierung kann es sich bei den anwendungsspezifischen
Parametern, wie etwa der Eingangssymbolgröße (d.h. M, die Anzahl der
durch ein Eingangssymbol codierten Bits), um durch die Anwendung
festgelegte Variablen handeln.
-
Jede
Gruppe von Ausgangssymbolen weist einen Wert für jedes der Ausgangssymbole
in der Gruppe auf. In einem bevorzugten Ausführungsbeispiel, das nachstehend
näher beschrieben
ist, weist jede Gruppe von Ausgangssymbolen einen Bezeichner auf,
der als deren „Schlüssel" bezeichnet wird.
Vorzugsweise kann der Schlüssel
für jede
Gruppe von Ausgangssymbolen leicht durch den Empfänger bestimmt
werden, so dass der Empfänger
eine Gruppe von Ausgangssymbolen von anderen Gruppen von Ausgangssymbolen
unterscheiden kann. Vorzugsweise unterscheidet sich der Schlüssel einer
Gruppe von Ausgangssymbolen von den anderen Schlüsseln aller anderen Gruppen
von Ausgangssymbolen. Ebenfalls vorzugsweise weist die Übermittlung
so wenige Daten auf wie möglich,
damit ein Empfänger
den Schlüssel
einer empfangenen Gruppe von Ausgangssymbolen bestimmen kann.
-
In
einer einfachen Form der Verschlüsselung
handelt es sich bei der Folge von Schlüsseln für aufeinander folgende Gruppen
von Ausgangssymbolen, die durch einen Codierer erzeugt werden, um
eine Folge konsekutiver ganzer Zahlen. In diesem Fall wird jeder
Schlüssel
als „Folgenummer" bezeichnet. In dem
Fall, wenn in jedem übertragenen
Paket eine Gruppe von Ausgangssymbolen vorhanden ist, kann die Folgenummer
in dem Paket enthalten sein. Da die Folgenummern für gewöhnlich in
einer geringen Anzahl von Bytes Platz finden, wie zum Beispiel in
vier Bytes, ist es in bestimmten Systemen wirtschaftlich, die Folgenummer
in Verbindung mit der Gruppe von Ausgangssymbolwerten vorzusehen.
Zum Beispiel führt
der Einsatz von UDP Internetpaketen mit jeweils 1024 Bytes mit einer
Zuordnung von vier Bytes in jedem Paket für die Folgenummer nur zu einem
sehr geringen Overhead von 0,4%.
-
In
anderen Systemen wird es bevorzugt, einen Schlüssel aus mehr als einem Datenstück zu bilden. Zum
Beispiel wird ein System herangezogen, das einen Empfänger aufweist,
der mehr als einen aus der gleichen Eingangsdatei empfangenen Datenstrom
von einem oder mehreren Sendern empfängt, wobei es sich bei den übertragenen
Daten um einen Paketstrom handelt, der jeweils eine Gruppe von Ausgangssymbolen aufweist.
Wenn all diese Ströme
die gleiche Anordnung von Folgenummern als Schlüssel verwenden, so ist es wahrscheinlich,
dass der Empfänger
Gruppen von Ausgangssymbolen mit den gleichen Folgenummern empfängt. Da
Gruppen von Ausgangssymbolen mit dem gleichen Schlüssel oder
in diesem Fall mit der gleichen Folgenummer identische Informationen
zu der Eingangsdatei aufweisen, bewirkt dies den nutzlosen Empfang
doppelter Daten durch den Empfänger.
Somit wird es in einem solchen Fall bevorzugt, dass der Schlüssel einen
eindeutigen Strombezeichner gepaart mit einer Folgenummer umfasst.
-
Zum
Beispiel kann der eindeutige Bezeichner eines Datenstroms für einen
Strom von UDP Internetpaketen die IP-Adresse des Senders und die
Port-Nummer aufweisen, die der Sender für die Übermittlung der Pakete verwendet.
Da die IP-Adresse des Senders und die Port-Nummer bzw. die Anschlussnummer
des Stroms Bestandteile des Headers jedes UDP Pakets sind, ist in
jedem Paket kein zusätzlicher
Platz erforderlich, um sicherzustellen, dass diese Teile des Schlüssels für einen
Empfänger
verfügbar
sind. Der Sender muss in jedes Paket nur eine Folgenummer in Verbindung
mit der entsprechenden Gruppe von Ausgangssymbolen einfügen, und
der Empfänger
kann den vollständigen
Schlüssel
einer empfangenen Gruppe von Ausgangssymbolen aus der Folgenummer
und dem Paket-Header wiederherstellen. Für einen Strom von IP-Multicast-Paketen
kann der eindeutige Bezeichner eines Datenstroms als weiteres Beispiel
eine IP-Multicast-Adresse aufweisen. Da die IP-Multicast-Adresse Teil des Headers jedes
IP-Multicast-Pakets ist, gelten die vorstehenden Ausführungen
zu UDP Paketen auch für
diesen Fall.
-
Die
Verschlüsselung
durch die Position der Gruppe von Ausgangssymbolen wird bevorzugt,
sofern dies möglich
ist. Die Positionsverschlüsselung
kann gute Ergebnisse für
das Auslesen von Gruppen von Ausgangssymbolen von einer Speichervorrichtung
liefern, wie etwa einer CD-ROM (Compact Disk Read-Only-Memory), wobei der
Schlüssel
einer Gruppe von Ausgangssymbolen der Position auf der CD-ROM entspricht (d.h.
Spur, plus Sektor, plus Position in dem Sektor, etc.). Die Positionsverschlüsselung
kann auch gute Ergebnisse für
ein Übertragungssystem
auf Schaltungsbasis liefern, wie etwa ein ATM-System (Asynchroner
Transfermodus bzw. ATM-Übermittlungsverfahren),
wobei geordnete Zellen mit Daten mit strengen zeitlichen Einschränkungen übermittelt
werden. Bei dieser Art der Verschlüsselung kann der Empfänger den
Schlüssel
einer Gruppe von Ausgangssymbolen wiederherstellen, ohne dass Platz
für die
explizite Übermittlung
des Schlüssels
erforderlich ist. Die Positionsverschlüsselung erfordert natürlich, dass
die Positionsinformationen verfügbar
und zuverlässig
sind.
-
Die
Verschlüsselung
nach Position kann auch mit anderen Verschlüsselungsverfahren kombiniert
werden. Ein Beispiel ist ein Paketübertragungssystem, bei dem
jedes Paket mehr als eine Gruppe von Ausgangssymbolen aufweist.
In diesem Fall kann der Schlüssel
der Gruppe von Ausgangssymbolen aus einem eindeutigen Strombezeichner,
einer Folgenummer und der Position der Gruppe von Ausgangssymbolen
in dem Paket konstruiert werden. Da die Datenlöschungen allgemein zu dem Verlust
ganzer Pakete führen,
empfängt
der Empfänger
allgemein ein ganzes Paket. In diesem Fall kann der Empfänger den
Schlüssel
einer Gruppe von Ausgangssymbolen aus dem Header des Pakets (der
einen eindeutigen Strombezeichner aufweist), der Folgenummer in
dem Paket und der Position der Gruppe von Ausgangssymbolen in dem
Paket wiederherstellen.
-
Eine
weitere in bestimmten Systemen bevorzugte Form der Verschlüsselung
ist die wahlfreie Verschlüsselung.
In diesen Systemen wird eine Zufallszahl (oder eine Pseudozufallszahl)
erzeugt, die zumindest als Teil des Schlüssels für jede Gruppe von Ausgangssymbolen
verwendet und explizit mit der Gruppe von Ausgangssymbolen übertragen
wird. Eine Eigenschaft der Zufallsverschlüsselung ist es, dass der Anteil
der Schlüssel,
welche den gleichen Wert aufweisen, wahrscheinlich gering ist, selbst
in Bezug auf Schlüssel,
die von verschiedenen Sendern an unterschiedlichen physischen Orten
erzeugt werden (in der Annahme, dass der Bereich der möglichen
Schlüssel
groß genug
ist). Diese Form der Verschlüsselung
kann gegenüber
anderen Formen in bestimmten Systemen aufgrund der Einfachheit der
Implementierung einen Vorteil aufweisen.
-
Wie
dies bereits vorstehend beschrieben worden ist, ist die Gruppenkettenreaktionscodierung
nützlich,
wenn eine Datenlöschung
erwartet wird oder wenn der Empfänger
den Empfang nicht genau dann beginnt und beendet, wenn eine Übertragung
beginnt und endet. Der letzt genannte Zustand wird hierin als „Datenunvollständigkeit" bezeichnet. Diese
Bedingungen wirken sich nicht nachteilig auf das Kommunikationsverfahren aus,
wenn die Gruppenkettenreaktionscodierung eingesetzt wird, da die
empfangenen Daten der Gruppenkettenreaktionscodierung in hohem Maße unabhängig sind,
so dass Informationen hinzugefügt
werden. Wenn die meisten wahlfreien Sammlungen von Gruppen von Ausgangssymbolen
ausreichend unabhängig
sind, so dass sie größtenteils
Informationen hinzufügen,
was bei den vorstehend beschriebenen Systemen der Gruppenkettenreaktionscodierung
der Fall ist, so kann eine geeignete Anzahl von Paketen für die Wiederherstellung
einer Eingangsdatei verwendet werden. Wenn durch eine Bündelstörung, die
eine Datenlöschung
bewirkt, hunderte von Paketen verloren gehen, können zusätzliche einhundert Pakete nach
dem Bündel
aufgenommen werden, um den Verlust der gelöschten Pakete auszugleichen.
Wenn tausende von Paketen verloren gehen, da ein Empfänger nicht
mit einem Sender abgestimmt war, als dieser mit dem Senden begonnen
hat, kann der Empfänger
diese tausende von Paketen einfach aus einer anderen Übermittlungsperiode
aufnehmen oder von einem anderen Sender. Bei der Gruppenkettenreaktionscodierung
ist ein Empfänger
nicht darauf beschränkt, eine
bestimmte Anordnung von Paketen aufzunehmen, so dass er bestimmte
Pakete von einem Sender empfangen, zu einem anderen Sender wechseln,
einige Pakete verlieren, den Anfang oder das Ende einer bestimmten Übermittlung
verpassen und trotzdem eine Eingangsdatei wiederherstellen kann.
Die Möglichkeit,
zu einer Übertragung
hinzuzustoßen
oder diese ohne Empfänger-Sender-Koordination zu verlassen,
vereinfacht das Kommunikationsverfahren in hohem Maße.
-
Eine grundlegende
Implementierung
-
Die Übermittlung
einer Datei unter Verwendung der Gruppenkettenreaktionscodierung
umfasst das Erzeugen, das Bilden oder Extrahieren von Eingangssymbolen
aus einer Eingangsdatei, wobei die Eingangssymbole in eine oder
mehrere Gruppen von Ausgangssymbolen codiert werden, wobei jede
Gruppe von Ausgangssymbolen auf der Basis ihres Schlüssels unabhängig von
allen anderen Gruppen von Ausgangssymbolen erzeugt wird, und wobei
die Gruppen von Ausgangssymbolen über einen Kanal an einen oder
mehrere Empfänger übermittelt
werden. Das Empfangen (und rekonstruieren) einer Kopie der Eingangsdatei
unter Verwendung der Gruppenkettenreaktionscodierung umfasst das
Empfangen einer bestimmten Anordnung oder Unteranordnung von Gruppen
von Ausgangssymbolen von einem oder mehreren Datenströmen sowie
das Decodieren der Eingangssymbole aus den Werten und Schlüsseln der
empfangenen Gruppen von Ausgangssymbolen.
-
Wie
dies nachstehend im Text beschrieben wird, kann der Decodierer ein
Eingangssymbol aus den Werten einer oder mehrerer Gruppen von Ausgangssymbolen
wiederherstellen und möglicherweise
aus Informationen zu den Werten anderer Eingangssymbole, die bereits
wiederhergestellt worden sind. Der Decodierer kann einige Eingangssymbole
aus einigen Gruppen von Ausgangssymbolen wiederherstellen, was es
dem Decodierer wiederum ermöglicht,
andere Eingangssymbole der decodierten Eingangssymbole und der vorher empfangenen
Gruppen von Ausgangssymbolen zu decodieren, und so weiter, was somit
eine „Kettenreaktion" der Wiederherstellung
von Eingangssymbolen einer an dem Empfänger rekonstruierten Datei
bewirkt.
-
Die
Aspekte der Erfindung werden nachstehend in Bezug auf die Abbildungen
beschrieben.
-
Die
Abbildung aus 1 zeigt ein Blockdiagramm eines
Kommunikationssystems 100, das die Gruppenkettenreaktionscodierung
einsetzt. In dem Kommunikationssystem 100 wird eine Eingangsdatei 101 oder ein
Eingangsstrom 105 an einen Eingangssymbolgenerator 110 bereitgestellt.
Der Eingangssymbolgenerator 110 erzeugt eine Folge von
einem oder mehreren Eingangssymbolen (IS(0), IS(1), IS(2), ...)
aus der Eingangsdatei oder dem Eingangsstrom, wobei jedes Eingangssymbol
einen Wert und eine Position aufweist (in der Abbildung aus 1 als
ganze Zahl in Klammern angegeben). Wie dies bereits vorstehend im
Text beschrieben worden ist, handelt es sich bei den möglichen Werten
für die
Eingangssymbole, d.h. das Alphabet, für gewöhnlich um ein Alphabet von
2M Symbolen, so dass jedes Eingangssymbol
einen Code für
M Bits der Eingangsdatei aufweist. Der Wert von M wird allgemein
bestimmt durch den Einsatz des Kommunikationssystems 100, wobei
ein Allround-System
auch eine Symbolgrößeneingabe
für den
Eingangssymbolgenerator 110 aufweisen kann, so dass M von
Einsatz zu Einsatz veränderlich
ist. Die Ausgabe des Eingangssymbolgenerators 110 wird an
einen Codierer 115 bereitgestellt.
-
Der
Schlüsselgenerator 120 erzeugt
einen Schlüssel
für jede
Gruppe von Ausgangssymbolen, die durch den Codierer 115 erzeugt
wird. Jeder Schlüssel
wird gemäß einem
der vorstehend beschriebenen Verfahren oder einem vergleichbaren
Verfahren erzeugt, das sicherstellt, dass ein großer Anteil
der für
die gleiche Eingangsdatei erzeugten Schlüssel einzigartig ist, unabhängig davon,
ob die Schlüssel
durch diesen oder einen anderen Schlüsselgenerator erzeugt werden.
Zum Beispiel kann der Schlüsselgenerator 120 eine
Kombination des Ausgangs eines Zählers 125,
eines eindeutigen Strombezeichners 130 und/oder des Ausgangs
eines Zufallsgenerators 135 für die Erzeugung jedes Schlüssels verwenden.
Die Ausgabe des Schlüsselgenerators 120 wird
an den Codierer 115 bereitgestellt.
-
Aus
jedem durch den Schlüsselgenerator 120 erzeugten
Schlüssel
I erzeugt der Codierer 115 eine Gruppe von Ausgangssymbolen,
wobei eine Anordnung von Symbolwerten B(I) aus den Eingangssymbolen durch
den Eingangssymbolgenerator bereitgestellt wird. Die Werte b jeder
Gruppe von Ausgangssymbolen wird auf der Basis des jeweiligen Schlüssels und
einer bestimmten Funktion einer oder mehrerer der Eingangssymbole
erzeugt, wobei diese hierin als die „zugeordneten Eingangssymbole" der Gruppe von Ausgangssymbolen oder
einfach als „Zuordnungen" bezeichnet werden.
Die Auswahl der Funktion (die „Wertefunktion") und der Zuordnungen
erfolgt gemäß einem
nachstehend im Text näher
beschriebenen Verfahren. Für
gewöhnlich, jedoch
nicht immer, ist M für
Eingangssymbole und Ausgangssymbole gleich, d.h. ein Eingangssymbol
weist die gleiche Länge
auf wie ein Ausgangssymbol.
-
In
einigen Ausführungsbeispielen
wird die Anzahl K von Eingangssymbolen durch den Codierer zur Auswahl
der Zuordnungen verwendet. Wenn K nicht vorab bekannt ist, wie etwa
dann, wenn es sich bei der Eingabe um eine Streaming-Datei handelt, so
kann K auch einen Schätzwert
darstellen. Der Wert von K kann auch durch den Codierer 115 für die Zuordnung
von Speicherplatz für
die Eingangssymbole verwendet werden.
-
Der
Codierer 115 stellt Gruppen von Ausgangssymbolen an ein Übertragungsmodul 140 bereit.
Das Übertragungsmodul 140 wird
ferner der Schlüssel
jeder der Gruppen von Ausgangssymbolen durch den Schlüsselgenerator 120 bereitgestellt.
Das Übertragungsmodul 140 überträgt die Gruppen
von Ausgangssymbolen und abhängig
von dem eingesetzten Verschlüsselungsverfahren
kann das Übertragungsmodul 140 auch bestimmte
Daten über
die Schlüssel
der übermittelten
Gruppen von Ausgangssymbolen über
einen Kanal 145 an ein Empfangsmodul 150 übertragen.
Für den
Kanal 145 wird angenommen, dass es sich um einen Löschkanal
handelt, wobei dies keine Voraussetzung für einen ordnungsgemäßen Betrieb
des Kommunikationssystems 100 ist. Die Module 140, 145 und 150 können jeweils
beliebige geeignete Hardwarekomponenten, Softwarekomponenten, physische
Medien oder eine beliebige Kombination dieser Optionen darstellen,
sofern das Übertragungsmodul 140 in
der Lage ist, Gruppen von Ausgangssymbolen und alle etwaig erforderlichen
Daten zu den Schlüsseln
zu dem Kanal 145 zu übertragen
und das Empfangsmodul 150 in der Lage ist, Gruppen von Ausgangssymbolen
zu empfangen und möglicherweise
bestimmte Daten in Bezug auf deren Schlüssel von dem Kanal 145.
Der Wert von K, wenn dieser zur Bestimmung der Zuordnungen verwendet
wird, kann über den
Kanal 145 übertragen
oder gemäß Vereinbarung
zwischen dem Codierer 115 und dem Decodierer vorab festgelegt
werden.
-
Wie
dies bereits vorstehend im Text beschrieben worden ist, kann es
sich bei dem Kanal 145 um einen Echtzeitkanal handeln,
wie etwa einen fad durch das Internet oder eine Broadcast-Verbindung von einem
Fernsehsender zu einem Fernsehempfänger oder eine Telefonverbindung
von einem Punkt zu einem anderen, oder der Kanal 145 kann
einen Speicherkanal darstellen, wie etwa eine CD-ROM, ein Diskettenlaufwerk,
eine Website oder dergleichen. Der Kanal 145 kann auch
eine Kombination aus einem Echtzeitkanal und einem Speicherkanal
darstellen, wie etwa ein Kanal, der gebildet wird, wenn eine Person
eine Eingangsdatei von einem Personalcomputer über eine Telefonleitung zu
einem Internet Service Provider (ISP) überträgt, wobei die Eingangsdatei
von einem Webserver gespeichert und in der Folge über das
Internet zu einem Empfänger übertragen
wird.
-
Da
für den
Kanal 145 angenommen wird, dass es sich um einen Löschkanal
handelt, nimmt das Kommunikationssystem 100 keine Eins-zu-Eins-Korrespondenz
zwischen den Gruppen von Ausgangssymbolen, die das Empfangsmodul 150 verlassen
und der Gruppe von Ausgangssymbolen, die in das Übertragungsmodul 140 eintreten
an. Wenn der Kanal 145 in der Praxis ein Paketnetzwerk
umfasst, kann es sein, dass das Kommunikationssystem 100 nicht
einmal in der Lage ist, anzunehmen, dass die relative Anordnung
bzw. Ordnung von zwei beliebigen oder mehr Paketen während dem
Verlauf durch den Kanal 145 erhalten bleibt. Der Schlüssel der
Gruppen von Ausgangssymbolen wird unter Verwendung von einem oder
mehreren der vorstehend beschriebenen Verschlüsselungsformate bestimmt und
wird nicht unbedingt durch die Reihenfolge bzw. Anordnung bestimmt,
in der die Gruppen von Ausgangssymbolen das Empfangsmodul 150 verlassen.
-
Das
Empfangsmodul 150 stellt die Gruppe von Ausgangssymbolen
an einen Decodierer 155 bereit, und alle Daten, die das
Empfangsmodul 150 über
die Schlüssel
der Gruppen von Ausgangssymbolen empfängt, werden einem Schlüsselregenerator 160 bereitgestellt.
Der Schlüsselregenerator 160 regeneriert
die Schlüssel
für die
empfangenen Gruppen von Ausgangssymbolen und stellt diese Schlüssel an
den Decodierer 155 bereit.
-
Der
Decodierer 155 verwendet die durch den Schlüsselregenerator 160 bereitgestellten
Schlüssel
in Verbindung mit den entsprechenden Gruppen von Ausgangssymbolen,
um die Eingangssymbole (erneut IS(0), IS(1), IS(2), ...) wiederherzustellen.
Der Decodierer 155 stellt die wiederhergestellten Eingangssymbole an
einen eine Einrichtung zum Wiederzusammensetzen der Eingangsdatei
bzw. einen Eingangsdatei-Reassembler 165, der eine Kopie 170 der
Eingangsdatei 101 oder des Eingangsstroms 105 erzeugt.
-
Ein grundlegender
Codierer
-
Die
Abbildung aus 2 zeigt ein Blockdiagramm eines
Ausführungsbeispiels
des Codierers aus 1. Das Blockdiagramm aus 2 wird
nachstehend in Bezug auf die Abbildung aus 3 beschrieben, bei
der es sich um ein Diagramm handelt, das das logische Äquivalent
eines Teils der Verarbeitung zeigt, die durch den Codierer aus 2 dargestellt
ist.
-
Dem
Codierer 115 werden Eingangsymbole und ein Schlüssel für jede Gruppe
von zu erzeugenden Ausgangssymbolen bereitgestellt. Gemäß der Abbildung
werden K Eingangssymbole in einem Eingangssymbolpuffer 205 gespeichert.
Der Schlüssel
I (bereitgestellt durch den Schlüsselgenerator 120 aus 1)
ist eine Eingabe in den Wertefunktionsselektor 210, den
Gruppengrößenselektor 212,
den Gewichtungsselektor (215) und die Zuordnungseinrichtung 220.
Die Anzahl der Eingangssymbole K wird ebenfalls an die vier Komponenten 210, 212, 215 und 220 bereitgestellt.
Eine Recheneinrichtung 225 ist so gekoppelt, dass sie Ausgaben
des Wertefunktionsselektors 210, des Gruppengrößeselektors 212,
des Gewichtungsselektors 215, der Zuordnungseinrichtung 220 und
des Eingangssymbolpuffers 205 empfängt und einen Ausgang für die Gruppe
von Ausgangssymbolwerten aufweist. Hiermit wird festgestellt, dass
andere äquivalente
Anordnungen in Bezug auf die Elemente aus 2 verwendet
werden können,
und wobei dies nur ein Beispiel für einen Codierer gemäß der vorliegenden
Erfindung darstellt.
-
Im
Betrieb werden die K Eingangssymbole in dem Eingangssymbolpuffer 205 empfangen
und gespeichert. Wie dies bereits vorstehend im Text beschrieben
worden ist, weist jedes Eingangssymbol eine Position (d.h. ihre
ursprünglichen
Position in der Eingangsdatei) und einen Wert auf. Die Eingangssymbole
müssen nicht
in ihrer entsprechenden Reihenfolge in dem Eingangssymbolpuffer 205 gespeichert
werden, sofern die Position der gespeicherten Eingangssymbole bestimmt
werden kann.
-
Sofern
dieser verwendet wird, bestimmt der Gruppengrößenselektor 212 eine
Gruppengröße G(I)
aus dem Schlüssel
I und aus der Anzahl der Eingangssymbole K. Bei einer Variation
ist die Gruppengröße G(I)
für alle
I gleich (d.h. G(I) = b, wobei b eine positive ganze Zahl ist).
Bei dieser Variation ist der Gruppengrößenselektor 212 nicht
erforderlich, und die Recheneinrichtung 225 kann mit dem
Wert von b konfiguriert werden. Zum Beispiel kann die Gruppengröße für alle I
auf vier gesetzt werden, d.h. G(I) = b = 4, und wobei jede Gruppe von
Ausgangssymbolen vier Ausgangssymbole umfasst. In bestimmten Ausführungsbeispielen
sorgt der Einsatz kleiner Werte von b, wie etwa 2 oder 3, oder sorgen
kleine variierende Werte von G(I) für einen effizienten Codierer.
-
Bei
b = 1 ist das Ergebnis im Wesentlichen übereinstimmend mit dem Codierer,
der in dem U.S. Patent US-A-6.307.987 (Luby I) beschrieben ist.
-
Unter
Verwendung des Schlüssels
I und der Anzahl der Eingangssymbole K bestimmt der Gewichtungsselektor 215 die
Anzahl W(I) von Eingangssymbolen, die „Zuordnungen" zu der Gruppe der
Ausgangssymbole mit dem Schlüssel
1 darstellen. Unter Verwendung des Schlüssels I, der Gewichtung W(I)
und der Anzahl von Eingangssymbolen K, bestimmt die Zuordnungseinrichtung 220 die
Liste AL(I) der Positionen der Eingangssymbole, die der Gruppe von
Ausgangssymbolen zugeordnet sind. Hiermit wird festgestellt, dass W(I)
nicht einzeln oder explizit berechnet werden muss, wenn die Zuordnungseinrichtung 220 AL(I)
erzeugen kann, ohne W(I) vorher zu kennen. Nachdem AL(I) erzeugt
worden ist, kann W(I) leicht bestimmt werden, da sie der Anzahl
der Zuordnungen in AL(I) entspricht.
-
Wenn
I, W(I) und AL(I) bekannt sind, können die G(I) Werte B(I) =
B – 1(I),
..., B – G(I)
der Gruppe von Ausgangssymbolen durch die Recheneinrichtung 225 auf
der Basis der Wertefunktion F(I) 210 berechnet werden.
Eine Eigenschaft einer geeigneten Wertefunktion ist es, dass sie
die Bestimmung unbekannter Werte für bis zu G(I) Zuordnungen in
AL(I) aus der Gruppe von Ausgangssymbolwerten B(I) und aus den bekannten Werten
für die
anderen Zuordnungen in AL(I) ermöglicht.
-
Eine
in diesem Schritt bevorzugte Wertefunktion ist die Reed-Solomon-Wertefunktion,
da diese diese Eigenschaft erfüllt,
leicht berechnet und leicht invertiert werden kann.
-
Für die Reed-Solomon-Wertefunktion
werden die Werte B(I) aus den Werten der Zuordnungen in AL(I) gemäß dem Reed-Solomon-Codierungsformat
berechnet. Bei dieser Methode entsprechen die Reed-Solomon redundanten
Symbole B(I), und gemeinsam mit den Eingangssymbolen in AL(I) bilden
diese Symbole einen codierten Block, der unter Verwendung des Reed-Solomon-Codierungsformats
codiert ist.
-
Andere
geeignete Wertefunktionen können
stattdessen ebenfalls eingesetzt werden, einschließlich des
Einsatzes der XOR-Wertefunktion,
wenn die Gruppengröße gleich
eins ist, einschließlich
Verfahren auf der Basis von Polynomen über endlichen Feldern, einschließlich Verfahren
auf der Basis linearer Gleichungssysteme, einschließlich Verfahren
auf der Basis von Cauchy-Matrizen über endlichen Feldern oder
einschließlich anderer
MDS-Codes (für
welche Reed-Solomon-Codes
ein Beispiel sind).
-
Eine
Kombination verschiedener Wertefunktionen, die von der Anzahl der
Zuordnungen der Gruppe von Ausgangssymbolen abhängig ist, kann ebenfalls verwendet
werden. Wenn zum Beispiel die Anzahl der Zuordnungen W(I) gleich
G(I) ist, so kann die Identitätsfunktion
verwendet werden, d.h. für
i = 1, ..., G(I), entspricht der Wert des i-ten Ausgangssymbols
in der Gruppe B_i(I) = IS(P_i), wobei P_1, ..., P_G(I) die Positionen
der G(I) Zuordnungen darstellen. Wenn die Anzahl der Zuordnungen
W(I) gleich G(I) + 1 ist, so kann für i = 1, ..., G(I) der Wert
des i-ten Ausgangssymbols in der Gruppe gleich B_i(I) = IS(P_i)XOR
IS(P_i + 1) sein, wobei P_1, ..., P_G(I) + 1 die Positionen der
G(I) + 1 Zuordnungen darstellt.
-
Wenn
die Anzahl der Zuordnungen W(I) größer ist als G(I) + 1, so kann
eine Reed-Solomon-Wertefunktion verwendet werden.
-
Wenn
der Wertefunktionsselektor 210 eingesetzt wird, so bestimmt
er ein Werteverfahren oder eine Funktion F(I) aus dem Schlüssel I und
K, wobei F(I) zum Berechnen eines Wertes für I verwendet wird. Bei einer
Variation verwendet der Wertefunktionsselektor 210 das
gleiche Verfahren oder die gleiche Funktion F für alle I. Bei dieser Variation
ist der Wertefunktionsselektor 210 nicht erforderlich,
und die Recheneinrichtung 225 kann mit der Wertefunktion
F konfiguriert werden. Die Wertefunktion kann zum Beispiel einen
Reed-Solomon-Codierer für
alle I darstellen, d.h. die Gruppe der Ausgangssymbolwerte umfasst
G(I) redundante Symbole, die durch einen Reed-Solomon-Codierer auf
der Basis der Werte aller Zuordnungen berechnet werden.
-
Für jeden
Schlüssel
I bestimmt der Gewichtungsselektor 215 eine Gewichtung
W(I) aus I und K. Bei einer Variation wählt der Gewichtungsselektor 215 W(I)
unter Verwendung des Schlüssels
I aus, um zuerst eine wahlfrei erscheinende Zahl zu erzeugen, und
wobei diese Zahl verwendet wird für den Verweis des Wertes von
W(I) in einer Verteilungstabelle, der in dem Gewichtungsselektor 215 gespeichert
wird. Eine nähere Beschreibung
der möglichen
Gestaltung einer Verteilungstabelle und des möglichen Zugriffs auf diese
folgt nachstehend im Text. Nachdem der Gewichtungsselektor 215 W(I)
bestimmt hat, wird dieser Wert an die Zuordnungseinrichtung 220 und
die Recheneinrichtung 225 bereitgestellt.
-
Die
Zuordnungseinrichtung 220 bestimmt eine Liste AL(I) der
Positionen der W(I) Eingangssymbole, die dem aktuellen Ausgangssymbol
zugeordnet sind. Die Zuordnung basiert auf dem Wert von I, auf dem
Wert von W(I) und von K (sofern zutreffend). Nachdem die Zuordnungseinrichtung 220 AL(I) bestimmt
hat, wird AL(I) an die Recheneinrichtung 225 bereitgestellt.
Unter Verwendung der Liste AL(I), der Gewichtung W(I) und entweder
der durch den Wertefunktionsselektor 210 bereitgestellten
Wertefunktion oder einer vorab ausgewählten Wertefunktion F, greift
die Recheneinrichtung 225 auf die W(I) Eingangssymbole
zu, referenziert durch AL(I) in dem Eingangssymbolpuffer 205,
um den Wert B(I) = B_1(I), ..., B_b(I) für die aktuelle Gruppe von Ausgangssymbolen
zu berechnen, wobei b entweder der durch den Gruppengrößenselektor 212 bereitgestellten Gruppengröße G(I)
entspricht oder einem vorab ausgewählten, festgelegten werden.
Ein Beispiel für
ein Verfahren zur Berechnung von AL(I) ist nachstehend ausgeführt, wobei
jedoch stattdessen auch ein anderes geeignetes Verfahren eingesetzt
werden kann. Vorzugsweise gibt das Verfahren bzw. der Ablauf jedem
Eingangssymbol ungefähr
die gleiche Chance, als Zuordnung für eine bestimmte Gruppe von
Ausgangssymbolen ausgewählt
zu werden, und wobei die Auswahl so erfolgt, dass der Decodierer
den Versuch wiederholen kann, wenn dem Decodierer AL(I) nicht bereits
zur Verfügung
steht.
-
Der
Codierer 115 gibt danach B(I) = B_1(I), ..., B_b(I) aus.
Folglich führt
der Codierer 115 die Handlung aus 3 aus,
d.h. er erzeugt eine Gruppe von Ausgangssymbolwerten B(I) = B_1(I),
..., B_b(I) als eine Wertefunktion der ausgewählten Eingangssymbole. In dem
dargestellten Beispiel handelt es sich bei der Wertefunktion um
eine Reed-Solomon-Codierung mit einer auf 2 festgelegten Gruppengröße b, wobei
die Gewichtung W(I) der Gruppe von Ausgangssymbolen gleich 3 ist,
und wobei sich die zugeordneten Eingangssymbole (die Zuordnungen)
an den Positionen 0, 2 und 3 befinden und die entsprechenden Werte
IS(0), IS(2) und IS(3) aufweisen. Die Gruppe von Ausgangssymbolen
kann somit wie folgt berechnet werden:
B_1(I) = RS_1(IS(0),
IS(2), IS(3))
B_2(I) = RS_2(IS(0), IS(2), IS(3))
für diesen
Wert von I. In diesem Fall entspricht RS_i(*) dem durch den Reed-Solomon-Codierer
erzeugten Symbolwert, der für
das Argument eingesetzt wird, um das i-te redundante Symbol zu erzeugen.
-
Die
erzeugten Gruppen von Ausgangssymbolen werden danach wie vorstehend
beschrieben übermittelt
und empfangen. Hierin wird angenommen, dass eine Ausgangssymbole
der Gruppen von Ausgangssymbolen verloren gegangen oder die Ordnung
verloren haben können
oder durch einen oder mehrere Codierer erzeugt worden sind. Es wird
jedoch angenommen, dass die Gruppen von Ausgangssymbolen, die empfangen werden,
mit einer Indikation ihres Schlüssels
I empfangen worden sind und einer gewissen Sicherheit, dass ihre
Werte B(I) = B_1(I), ..., B_b(I) präzise sind. Wie dies in der
Abbildung aus 1 dargestellt ist, werden diese
empfangenen Gruppen von Ausgangssymbolen in Verbindung mit ihren
entsprechenden Schlüsseln,
die aus ihrer Indikation durch den Schlüsselregenerator 160 wiederhergestellt
worden sind, und der Wert von K in den Decodierer 155 eingegeben.
-
Die
Anzahl der Bits M, die in einem Eingangssymbol (d.h. die Größe) codiert
sind, ist von der Anwendung abhängig.
Die Größe eines
Ausgangssymbols und die Anzahl b der Ausgangssymbole in einer Gruppe sind
ebenfalls von der Anwendung abhängig,
wobei sie auch von dem Kanal abhängig
sein können.
Wenn es sich bei der typischen Eingangsdatei zum Beispiel um eine
Datei mit mehreren Megabyte handelt, so kann die Daten in tausende,
zehntausende oder hunderttausende von Eingangssymbolen unterteilt
werden, wobei jedes Eingangssymbol wenige Bytes, Bytes im zweistelligen
Bereich, Bytes im dreistelligen Bereich oder Bytes im vierstelligen
Bereich umfasst.
-
In
bestimmten Fällen
kann das Codierungsverfahren vereinfacht werden, wenn die Ausgangssymbolwerte
und die Eingangssymbolwerte die gleiche Größe aufweisen (d.h. darstellbar
durch die gleiche Anzahl von Bits oder ausgewählt aus dem gleichen Alphabet).
Wenn dies der Fall ist, so ist die Eingangssymbolwertegröße begrenzt,
wenn die Ausgangssymbolwertegröße begrenzt
ist, wie etwa für
den Fall, dass gewünscht wird,
Gruppen von Ausgangssymbolen in Paketen zu platzieren und jede Gruppe
von Ausgangssymbolen in ein Paket mit begrenzter Größe passen
muss, und wenn die Größe b jeder
Gruppe auf einen festen Wert festgelegt ist. Wenn bestimmte Daten
zu dem Schlüssel übertragen
werden, um den Schlüssel
an dem Empfänger wiederherzustellen,
so wäre
die Gruppe der Ausgangssymbole vorzugsweise ausreichend klein, um
den Wert und die Daten zu dem Schlüssel in einem Paket unterzubringen.
-
Obwohl
die Positionen der Eingangssymbole für gewöhnlich konsekutiv sind, wie
dies bereits vorstehend im Text beschrieben worden ist, sind die
Schlüssel
in vielen Implementierungen weit davon entfernt, konsekutiv zu sein.
Wenn eine Eingangsdatei zum Beispiel in 60.000 Eingangssymbole aufgeteilt
wird, würden
die Positionen für
die Eingangssymbole von 0 bis 59.999 reichen, während in einer der vorstehend
genannten Implementierungen jeder Schlüssel unabhängig als eine zufällige 32-Bit-Zahl
ausgewählt
werden kann, und wobei die Gruppen von Ausgangssymbolen kontinuierlich
erzeugt und übermittelt
werden kann, bis der Sender angehalten wird. Wie dies hierin dargestellt
ist, ermöglicht
die Gruppenkettenreaktionscodierung die Wiederherstellung der Eingangsdatei
mit 60.000 Symbolen aus jeder ausreichend großen Sammlung (60.0000 plus eine
gewisse Heraufsetzung von A) von Ausgangssymbolen, unabhängig davon,
wo in der Ausgangssequenz diese Gruppen von Ausgangssymbolen verwendet
worden sind.
-
Ein grundlegender
Decodierer
-
Die
Abbildung aus 4 zeigt ein Ausführungsbeispiel
des Decodierers 155 in näheren Einzelheiten, wobei viele
Teile dem Codierer 115 aus 2 entsprechen.
Der Decodierer 155 umfasst einen Wertefunktionsselektor 210,
einen Gruppenselektor 212, einen Gewichtungsselektor 215,
eine Zuordnungseinrichtung 220, einen Puffer 405,
der eine Gruppe von Ausgangssymbolen speichert, einen Reduzierer 415,
eine Wiederherstellungseinrichtung 420 und einen Wiederherstellungspuffer 425.
Wie bei dem Codierer sind der Gruppenselektor 212 und der
zum Speichern der Gruppengröße zugewiesene
Speicher optional und können
weggelassen werden, wenn die Gruppengröße für alle Gruppen von Ausgangssymbolen
gleich ist. In ähnlicher
Weise sind der Wertefunktionsselektor 210 und der in dem
Puffer 405 zum Speichern der Beschreibung der Wertefunktion
zugewiesene Platz optional und können
weggelassen werden, wenn die Wertefunktion für alle Gruppen von Ausgangssymbolen
gleich gewesen ist. Verschiedene Einträge des Wiederherstellungspuffers 425 sind
dargestellt, wobei einige Eingangsymbole wiederhergestellt sind
und andere noch unbekannt sind. Zum Beispiel wurden in der Abbildung
aus 4 die Eingangssymbole an den Positionen 0, 2,
5 und 6 wiederhergestellt, während
die Eingangssymbole an den Positionen 1, 3 und 4 noch nicht wiederhergestellt
sind.
-
Der
Decodierer 155 führt
im Betrieb für
jede empfangene Gruppe von Ausgangssymbolen mit dem Schlüssel I und
den Werten B(I) = B_1(I), ..., B_b(I) folgendes aus. Der Schlüssel I wird
an den Wertefunktionsselektor 210, den Gruppenselektor 212,
den Gewichtungsselektor 215 und die Zuordnungseinrichtung 220 bereitgestellt.
Unter Verwendung von K und des Schlüssels I bestimmt der Gewichtungsselektor 215 die
Gewichtung W(I). Unter Verwendung von K, dem Schlüssel I und
von W(I) erzeugt die Zuordnungseinrichtung 220 die Liste
AL(I) von W(I) Positionen der Eingangssymbole, die der Gruppe von
Ausgangssymbolen zugeordnet sind. Optional wählt der Gruppenselektor 212 unter
Verwendung von K und I die Gruppengröße G(I) aus. Optional wählt der
Wertefunktionsselektor 210 unter Verwendung von K und I
eine Wertefunktion F(I) aus. Danach werden I, B(I), W(I) und AL(I),
optional G(I) und optional F(I) in einer Zeile des Puffers 405 gespeichert.
Der Gruppenselektor 212, der Wertefunktionsselektor 210,
der Gewichtungsselektor 215 und die Zuordnungseinrichtung 220 führen für den Decodierer 155 die
gleiche Operation aus wie dies bereits für den Codierer 115 beschrieben
worden ist. Im Besonderen entsprechen die Gruppengröße G(I),
die Wertefunktion F(I), die Gewichtung W(I) und die Liste AL(I),
erzeugt durch den Gruppenselektor 212, durch den Wertefunktionsselektor 210,
durch den Gewichtungsselektor 215 und durch die Zuordnungseinrichtung 220 aus 5 einander
für den
gleichen Schlüssel
I wie für
die entsprechenden Teile, die in 4 dargestellt
sind. Wenn K von Eingangsdatei zu Eingangsdatei variiert, so kann
dies von dem Codierer auf herkömmliche
Art und Weise dem Decodierer mitgeteilt werden, wie etwa durch Aufnahme
in einen Nachrichtenkopf bzw. Nachrichten-Header.
-
Die
Wiederherstellungseinrichtung 420 tastet den Puffer 405 nach
Gruppen von Ausgangssymbolen ab, die darin gespeichert sind und
eine Gewichtung aufweisen, die höchstens
der Gruppengröße entspricht. Diese
Symbole werden hierin als Elemente einer „decodierbaren Anordnung" bezeichnet. Für Wertefunktionen mit
den vorstehend beschriebenen Eigenschaften befinden sich Gruppen
von Ausgangssymbolen mit einer Gewichtung von höchstens ihrer Gruppengröße in der
decodierbaren Anordnung, da die unbekannten Werte von Eingangssymbolen
bis zu deren Gruppengröße aus der
Gruppe von Ausgangssymbolen bestimmt werden können und den bekannten Werten
der anderen Eingangssymbole, die Zuordnungen darstellen. Wenn hingegen
eine Wertefunktion verwendet wird, die es ermöglicht, dass Eingangssymbole
durch eine Gruppe von Ausgangssymbolen unter einer Bedingung decodiert
werden, die von der Bedingung einer Gewichtung von höchstens
ihrer Gruppengröße abweicht,
so würde
dieser Zustand verwendet werden, um zu bestimmen, ob sich eine Gruppe
von Ausgangssymbolen in der decodierbaren Anordnung befindet. Zur
klareren Darstellung wird in den hierin beschriebenen Beispielen
angenommen, dass es sich bei der decodierbaren Anordnung um die Gruppen
von Ausgangssymbolen mit einer Gewichtung von höchstens ihrer Gruppengröße handelt,
und wobei Erweiterungen dieser Beispiele auf andere die Wertefunktion
decodierbaren Bedingungen wird aus der vorliegenden Beschreibung
deutlich.
-
Wenn
die Wiederherstellungseinrichtung 420 eine Gruppe von Ausgangssymbolen
mit dem Schlüssel I
findet, die sich in der decodierbaren Anordnung befindet, so entspricht
die Gruppe von Ausgangssymbolen B(I) = B_1(I), ..., B_G(I)(I), und
optional wird die Wertefunktion F(I) zum Wiederherstellen der Werte
W(I) unbekannter Eingangssymbole verwendet, die in AL(I) aufgeführt sind,
und wobei die rekonstruierten Eingangssymbole an der entsprechenden
Position für
diese Eingangssymbole in dem Wiederherstellungspuffer 425 platziert
werden. Wenn W(I) deutlich kleiner ist als die Gruppengröße G(I),
so kann die Wiederherstellungseinrichtung 420 die Eingangssymbolwerte
wiederherstellen, die bereits unabhängig wiederhergestellt worden sind.
In diesem Fall kann die Wiederherstellungseinrichtung 420 die
unabhängig
wiederhergestellten Eingangssymbolwerte fallen lassen, die bestehenden
wiederhergestellten Eingangssymbole überschreiben oder die Werte
der Eingangssymbole vergleichen, die unabhängig erhalten worden sind,
und einen Fehler ausgeben, wenn sie sich unterscheiden. Die Wiederherstellungseinrichtung 420 stellt
somit Eingangssymbole wieder her, jedoch nur aus Gruppen von Ausgangssymbolen
in der decodierbaren Anordnung. Wenn eine Gruppe von Ausgangssymbolen
aus der decodierbaren Anordnung zum Wiederherstellen eines Eingangssymbols
verwendet wird, kann sie gelöscht
werden, um Platz in dem Puffer 405 einzusparen. Das Löschen der „verbrauchten" Gruppe von Ausgangssymbolen
stellt ferner sicher, dass die Wiederherstellungseinrichtung 420 nicht
dauerhaft erneut auf diese Gruppe von Ausgangssymbolen zugreift.
-
Zuerst
wartet die Wiederherstellungseinrichtung 420, bis mindestens
eine Gruppe von Ausgangssymbolen empfangen wird, die ein Element
der decodierbaren Anordnung ist. Wenn die eine Gruppe von Ausgangssymbolen
zur Wiederherstellung unbekannter Eingangssymbolwerte verwendet
wird, wäre
die decodierbare Anordnung wieder leer, mit der Ausnahme, dass eine
andere Gruppe von Ausgangssymbolen eine Funktion einiger dieser
gerade wiederhergestellten Eingangssymbole sein kann und bis zu
der Gruppengröße anderer
noch nicht wiederhergestellter Eingangssymbole. Das Rekonstruieren
von Eingangssymbolen aus einem Element der decodierbaren Anordnung
kann somit das Hinzufügen
weiterer Gruppen von Ausgangssymbolen zu der decodierbaren Anordnung
bewirken. Der Vorgang der Reduzierung der Gruppen von Ausgangssymbolen,
um diese zu der decodierbaren Anordnung hinzuzufügen, wird durch den Reduzierer 415 ausgeführt.
-
Der
Reduzierer 415 tastet den Puffer 405 und den Wiederherstellungspuffer 425 ab,
um Gruppen von Ausgangssymbolen zu finden, die Listen AL(I) aufweisen,
welche Positionen der Eingangssymbole auflisten, die wiederhergestellt
worden sind. Wenn der Reduzierer 415 eine derartige „reduzierbare" Gruppe von Ausgangssymbolen
mit dem Schlüssel
I findet, berechnet er W(I) so neu, dass sie der Anzahl der Eingangssymbolwerte
entspricht, die unter den Eingangssymbolen in AL(I) noch nicht wiederhergestellt
worden sind.
-
Die
Aktion des Reduzierers 415 reduziert die Gewichtungen der
Gruppen von Ausgangssymbolen in dem Puffer 405. Wenn die
Gewichtung einer Gruppe von Ausgangssymbolen auf höchstens
die Gruppengröße reduziert
wird (oder ein anderer decodierbarer Zustand für andere Wertefunktionen auftritt),
so wird diese Gruppe von Ausgangssymbolen zu einem Element der decodierbaren
Anordnung, wobei diese danach durch die Wiederherstellungseinrichtung 420 behandelt
werden kann. Wenn in der Praxis eine ausreichende Anzahl von Gruppen
von Ausgangssymbolen empfangen worden ist, erzeugen der Reduzierer 415 und
die Wiederherstellungseinrichtung 420 eine Kettenreaktionscodierung,
wobei die Wiederherstellungseinrichtung 420 die decodierbare
Anordnung decodiert, um mehr Eingangssymbole wiederherzustellen,
wobei der Reduzierer 415 die frisch wiederhergestellten
Eingangssymbole verwendet, um mehr Gruppen von Ausgangssymbolen
zu reduzieren, so dass diese zu der decodierbaren Anordnung hinzugefügt werden
und so weiter, bis alle Eingangssymbole aus der Eingangsdatei wiederhergestellt
worden sind.
-
Der
Decodierer aus 4 stellt Eingangssymbole in
geradliniger Art und Weise wieder her, ohne Speicher, Rechenzyklen
oder Übertragungszeit
groß zu
berücksichtigen.
Wenn der Decodiererspeicher, die Decodierungszeit oder die Übertragungszeit
(welche die Anzahl der empfangenen Gruppen von Ausgangssymbolen
beschränkt)
beschränkt
sind, kann der Decodierer so optimiert werden, dass er die beschränkten Ressourcen
besser nutzt.
-
Ein effizienterer
Decodierer
-
Die
Abbildung aus 5 zeigt ein bevorzugtes Ausführungsbeispiel
einer effizienteren Implementierung eines Decodierers 500 in
näheren
Einzelheiten. Hier wird für
die Wertefunktion angenommen, dass es sich um die Reed-Solomon-Wertefunktion handelt. Ähnliche
Implementierungen, die potenziell effizienter sein können, gelten
in Bezug auf die Wertefunktionen auch abweichend von der Reed-Solomon-Wertefunktion. In Bezug
auf die Abbildung aus 5 umfasst der Decodierer 500 eine
Gruppe von Ausgangssymbolen Datenstruktur 505 (nachstehend
GOSDS 505), eine Eingangssymbol-Datenstruktur (nachstehend
ISDS 510), einen decodierbaren Anordnungsstapel 515 (nachstehend
DSS 515), einen Empfangsorganisator 520 und einen Wiederherstellungsprozessor 525.
-
Die
GOSDS 505 ist eine Tabelle, die Informationen zu den Gruppen
von Ausgangssymbolen speichert, wobei die Zeile R der GOSDS 505 Informationen über die
R-te Gruppe von Ausgangssymbolen speichert, die empfangen wird.
Eine Variable R verfolgt die Anzahl der Gruppen von Ausgangssymbolen,
die empfangen worden sind und wird auf Null initialisiert. Die GOSDS 505 speichert
die Felder SCHLÜSSEL
(KEY), WERT (VALUE) und GEWICHTUNG (WEIGHT) für jede Zeile, wobei die Felder
in Spalten angeordnet sind. Das Feld SCHLÜSSEL speichert den Schlüssel der
Gruppe von Ausgangssymbolen. Das Feld WERT speichert die Gruppe
von Ausgangssymbolwerten. Das Feld GEWICHTUNG speichert die ursprüngliche
Gewichtung der Gruppe von Ausgangssymbolen. Die GEWICHTUNG einer
Gruppe von Ausgangssymbolen wird im Zeitverlauf reduziert, bis sie
höchstens
der Gruppengröße entspricht
und kann danach zur Wiederherstellung von Eingangssymbolen verwendet
werden.
-
Die
ISDS 510 ist eine Tabelle, die Informationen zu Eingangssymbolen
speichert, wobei die Zeile P speichert Informationen zu dem Eingangssymbol
an der Position P. Für
jede Zeile weist die ISDS 510 einen Speicher für das Feld
REC_VAL auf, das letztlich den Wert des wiederhergestellten Eingangssymbols
annimmt, ein Feld REC_IND, wobei das Feld auf alle Werte „nein" initialisiert wird
und anzeigt, ob Eingangssymbole wiederhergestellt worden sind oder
nicht, und mit einem Feld RL. Wenn ein Eingangssymbol wiederhergestellt
wird, wird das Feld REC_IND des Eingangssymbols auf „ja" verändert. Die
RL Spalte wird vollständig auf
die Werte „leere
Liste" initialisiert.
Wenn Gruppen von Ausgangssymbolen empfangen werden, die ein Eingangssymbol
als Zuordnung aufweisen, so wird die Zeilenzahl in der GOSDS 505 der
Gruppe von Ausgangssymbolen zu der RL Liste für das Eingangssymbol hinzugefügt.
-
Die
DSS 515 ist ein Stapel, der Informationen über eine
decodierbare Anordnung speichert. Eine Variable S verfolgt die Größe der decodierbaren
Anordnung und ist auf Null initialisiert. In der DSS 515 speichert die
Spalte OUT_ROW die Zeilenzahlen in der GOSDS 505 der Gruppen
von Ausgangssymbolen.
-
In
einem Ausführungsbeispiel
arbeitet der Decodierer 500 wie folgt und gemäß der Darstellung
in 6, wobei die entsprechenden Schritte aus 6 in
der Beschreibung des Ablaufs in Klammern angegeben sind. Zuerst
wird die ISDS 510 gemäß der vorstehenden
Beschreibung initialisiert, und sowohl R als auch S werden auf Null
initialisiert (605). Wenn eine neue Gruppe von Ausgangssymbolen
empfangen wird (610), d.h. der Schlüssel I und die Gruppe der Ausgangssymbolwerte
B(I) = B_1(I), ..., B_G(I)()), wird KEY(R) auf I gesetzt und VALUE(R)
wird auf B(I) = B_1(I), ..., B_G(I)(I) in der GOSDS 505 gesetzt
(615). Der Empfangsorganisator 520 wird danach aufgerufen,
um die empfangene Gruppe der Ausgangssymbole zu verarbeiten, wobei
der Schlüssel
I in der Zeile R der GOSDS 505 gespeichert wird (620).
Dies beinhaltet das Hinzufügen
von Informationen zu der GOSDS 505 und DSS 515 unter
entsprechender Verwendung der in der ISDS 510 gespeicherten
Informationen, wie dies in dem Flussdiagramm aus 7 dargestellt
ist. Danach wird R um eins inkrementiert (625), um zu bewirken,
dass die nächste
Gruppe von Ausgangssymbolen in der nächsten Zeile der GOSDS 505 gespeichert
wird. Danach wird der Wiederherstellungsprozessor 525 aufgerufen,
um die Gruppen der Ausgangssymbole in der decodierbaren Anordnung
zu verarbeiten und um neuen Gruppen von Ausgangssymbolen zu der
decodierbaren Anordnung hinzuzufügen
(630). Dies umfasst das Hinzufügen und Löschen zu der und aus der decodierbaren
Anordnung, die in der DSS 515 gespeichert ist, wobei Abschnitte
der ISDS 510 und der GOSDS 505 entsprechend verwendet
und modifiziert werden, wie dies in dem Flussdiagramm aus 8(a) und/oder 8(b) dargestellt
ist. Der Decodierer 500 überwacht bzw. verfolgt die
Anzahl der wiederhergestellten Eingangssymbole, und wenn diese Anzahl
K erreicht, d.h. wenn alle Eingangssymbole wiederhergestellt worden
sind, beendet der Decodierer 500 erfolgreich seinen Betrieb,
wobei ansonsten zu dem Schritt 610 zurückgekehrt wird, um die nächste Gruppe
von Ausgangssymbolen zu empfangen, wie dies in 635 und 640 dargestellt
ist.
-
Ein
Flussdiagramm, das den Betrieb des Empfangsorganisators 520 beschreibt,
ist in der Abbildung aus 7 dargestellt,
die sich auf die Abbildungen der 9 bis 12 bezieht.
Wenn eine Gruppe von Ausgangssymbolen mit Werten B(I) = B_I(I),
..., B_G(I)(I) und der Schlüssel
I ankommen, führt
der Empfangsorganisator 520 in Bezug auf die Abbildung
aus 7 die folgenden Operationen aus. Die Gewichtung
W(I) wird aus I und K berechnet (705), und die Liste AL(I)
der Positionen von Zuordnungen wird aus I, W(I) und K berechnet
(710). Die Abbildungen der 11 und 12 zeigen
Einzelheiten einer Berechnung von W(I), und die 9 und 10 zeigen
die Einzelheiten einer Berechnung von AL(I).
-
Wenn
in erneutem Bezug auf 7 für jede Position P der Liste
AL(I) das Eingangssymbol P nicht wiederhergestellt wird, d.h., wenn
REC_IND(P) = „nein" in der ISDS 510 ist,
so wird R zu der Liste RL(P) in ISDS 510 hinzugefügt, wobei
wenn ansonsten das Eingangssymbol P wiederhergestellt wird, d.h.,
wenn REC_IND(P) = „ja" in der ISDS 510 ist,
wo wird W(I) um eins herabgesetzt (720) . Danach wird WEIGHT
(R) auf W(I) in der GOSDS 505 gesetzt (725). Danach
wird WEIGHT(R) mit G(I) verglichen (730). Wenn WEIGHT(R)
höchstens
gleich G(I) ist, dann wird die Gruppe von Ausgangssymbolen zu der
decodierbaren Anordnung addiert, d.h. OUT_ROW(S) wird in DSS 515 auf
R gesetzt, und der Wert von S wird um eins erhöht (735). Schließlich kehrt
der Empfangsorganisator 520 zurück (740).
-
Die
Abbildung aus 8(a), die sich auf die 9 bis 12 bezieht,
zeigt ein Flussdiagramm, das den Betrieb eines Wiederherstellungsprozessors 525 beschreibt.
Im Betrieb prüft
der Wiederherstellungsprozessor 525 zuerst, um festzustellen,
ob die decodierbare Anordnung leer ist, d.h. ob S = 0 ist, und wenn
dies der Fall ist, erfolgt ein sofortiger Rücksprung (805, 810).
Wenn die decodierbare Anordnung nicht leer ist, so wird S um eins
herabgesetzt (815), und die Zeilenzahl R' der Gruppe von Ausgangssymbolen
wird aus DSS 515 geladen (820). Danach wird der
ursprüngliche
Schlüssel
des Ausgangssymbols, KEY(R')
aus der GOSDS 505 in I geladen (835), um die ursprüngliche
Gewichtung W(I) zu berechnen sowie die ursprüngliche Liste der Zuordnungen
AL(I) der Gruppe (840, 845). Wenn alle Eingangssymbole
in AL(I) bereits wiederhergestellt worden sind, d.h. wenn REC_IND(P)
= „ja" für alle P
in AL(I) (847), so unterbricht der Wiederherstellungsprozessor 525 die
Verarbeitung dieses Elements der decodierbaren Anordnung und führt mit
der Verarbeitung des nächsten
fort. Im anderen Fall wird die in der Zeilennummer R' in der GOSDS 505 gespeicherte
Gruppe von Ausgangssymbolen zur Wiederherstellung aller unbekannten
Werte der Eingangssymbole verwendet, die sich in AL(I) in der ISDS 510 befinden.
Dies erfolgt unter Verwendung des Reed-Solomon-Decodierers, um die bis zu G(I) unbekannten
Werte der Eingangssymbole in AL(I) unter Verwendung der Gruppe von
Ausgangssymbolwerten und der bekannten Werte der Eingangssymbole
in AL(I) wiederherzustellen (850). Danach wird für alle Positionen
von P, für
die der Eingangssymbolwert wiederhergestellt wird, REC_VAL(P) auf
den wiederhergestellten Eingangssymbolwert in der ISDS 510 (852)
gesetzt, und REC_IND(P) wird auf „ja" gesetzt, um anzuzeigen, dass der Eingangssymbolwert
in der ISDS 510 wiederhergestellt worden ist (852).
-
Eine
Variation des Verfahrens aus 8(a) ist
in der Abbildung aus 8(b) dargestellt.
Dort kann an Stelle der Ausführung
der Schritte 850, 852, 855 und 860 für jede Gruppe
von Ausgangssymbolen während der
Verarbeitung der Wert von R' in
einem Ausführungsplan
zur späteren
Verarbeitung gespeichert werden, wie dies in den Schritten 851, 853, 856 und 861 aus 8(b) dargestellt ist. In der Abbildung aus 8(c) ist ein Beispiel für eine verzögerte Ausführungsverarbeitung dargestellt,
welches die Schritte 870, 875, 880 und 885 aufweist.
Bei dieser Variation wird das Flussdiagramm aus 6 modifiziert,
indem E in dem Schritt 605 auf null initialisiert wird.
Die verzögerte
Verarbeitung des Ausführungsplans
kann erfolgen, nachdem der Decodierer bestimmt hat, dass die empfangenen
Symbole ausreichen, um die ganze Datei zu decodieren, z.B. in dem
Schritt 640, nachdem bekannt ist, dass alle Eingangssymbole
wiederherstellbar sind. In bestimmten Fällen, im Besonderen wenn die
Eingangssymbole große
sind, kann die Ausführung
des Plans verzögert
werden, dies die Eingangsdatei oder Teile dieser an dem Empfänger benötigt werden.
-
In
jeder Variation, d.h. in 8(a) oder
in 8(b) werden die Gruppen der
Ausgangssymbole, die weiterhin die gerade wiederhergestellten oder
die entsprechend gerade hätten
wiederhergestellt werdenden Eingangssymbole als Zuordnungen so modifiziert,
dass sie reflektieren, dass diese Eingangssymbole wiederhergestellt
worden sind oder entsprechend hätten
wiederhergestellt werden können.
Für jede
Position P eines gerade wiederhergestellten Eingangssymbolwertes
oder eines Eingangssymbolwertes, der gerade hätte wiederhergestellt werden
können,
werden die Zeilennummern dieser Gruppen von Ausgangssymbolen in
der GOSDS 505 in RL(P) gespeichert. Für jede Zeilennummer R" in RL(P) wird WEIGHT(R") um eins herabgesetzt,
um die Wiederherstellung des Eingangssymbols an der Position P als
eine Zuordnung der Gruppe von Ausgangssymbolen in der Zeile R" der GOSDS 505 zu
reflektieren. Wenn diese Modifikation bewirkt, dass die Gruppe der
Ausgangssymbole in der Zeile R" der
GOSDS 505 in der Gewichtung gleich der Gruppengröße wird,
d.h. WEIGHT(R'') = G(KEY(R'')), so wird diese Gruppe von Ausgangssymbolen
zu der decodierbaren Anordnung hinzugefügt, indem OUT_ROW(S) auf R" gesetzt wird, und
indem S um eins erhöht
wird (855 bzw. 856). Schließlich kehrt der zum Speichern
der Zeilennummern der Gruppen von Ausgangssymbolen in der Liste
RL(P) zu dem freien Raum zurück
(860 bzw. 861), und die Verarbeitung fährt mit
dem Schritt 805 fort.
-
Eine Implementierung
der Zuordnungseinrichtung
-
Die
Abbildung einer Gruppe von Ausgangssymbolschlüsseln auf zugeordnete Eingangssymbole
(d.h. die Bestimmung der Gewichtung W(I) und der Liste AL(I) der
Positionen der Zuordnungen für
einen Schlüssel I)
kann eine Vielzahl von Formen annehmen. W(I) sollte als der gleiche
Wert ausgewählt
werden durch den Codierer und den Decodierer für den gleichen Schlüssel I (entsprechend
in dem Sender und in dem Empfänger.
In ähnlicher
Weise sollte AL(I) so ausgewählt
werden, dass sie die gleiche Liste von Positionen sowohl durch den
Codierer und den Decodierer für
den gleichen Schlüssel
I aufweist. Die Zuordnungseinrichtung ist das Objekt, das AL(I)
aus I und für
gewöhnlich
W(I) aus K berechnet oder erzeugt.
-
In
einem Ausführungsbeispiel
werden W(I) und AL(I) so bestimmt, dass sie ein zufälliges bzw.
wahlfreies Verfahren nachahmen. Zur Erfüllung der Anforderung, dass
der Codierer und der Decodierer das gleiche Ergebnis in Bezug auf
den gleichen Schlüssel
erzeugen, kann durch den Codierer und den Decodierer eine Pseudozufallsfolge
erzeugt werden, die mit dem Schlüssel
versehen ist. An Stelle einer Pseudozufallsfolge kann eine echte
Zufallsfolge für
die Erzeugung von W(I) und/oder AL(I) verwendet werden, damit dies
jedoch nützlich
ist, müsste
die für
die Erzeugung von W(I) und AL(I) verwendete Zufallsfolge zu dem
Empfänger übertragen
werden.
-
In
dem Decodierer aus der Abbildung aus 4 erfordert
der Puffer 405 das Speichern der Liste von Positionen von
Zuordnungen jeder Gruppe von Ausgangssymbolen, d.h. das Speichern
in der mit AL(I) bezeichneten Spalte. Der in der Abbildung aus 5 dargestellte
effizientere Decodierer erfordert dieses Speichern nicht, da eine
Liste von Zuordnungen bei Bedarf neu berechnet wird, wie dies zum
Beispiel in den 9 und 10 dargestellt
ist. Es gibt einen Vorteil bezüglich
der neuen Berechnung von Zuordnungslisten in jedem Fall, um Speicherplatz
zu sparen, nur wenn diese Berechnungen bei Bedarf schnell vorgenommen
werden können.
-
In
der Abbildung aus 9 ist ein bevorzugtes Ausführungsbeispiel
der Zuordnungseinrichtung 220 dargestellt, das gemäß dem Ablauf
aus 10 arbeitet. Diese Zuordnungseinrichtung
kann in dem Codierer ebenso wie in dem Decodierer eingesetzt werden.
Obgleich die Speicherkapazität
für AL(I)
bei dem Codierer kein großes
Problem darstellt, da der Codierer normalerweise nicht mehr als
eine AL(I) gleichzeitig speichern muss, sollte der gleiche Ablauf
sowohl an dem Codierer als auch an dem Decodierer eingesetzt werden,
um sicherzustellen, dass die Werte für alle AL(I) an beiden Stellen
gleich sind.
-
Der
Eingang in die Zuordnungseinrichtung 220 ist ein Schlüssel I,
die Anzahl der Eingangssymbole K und eine Gewichtung W(I). Der Ausgang
ist eine Liste AL(I) aller Positionen von W(I) der Zuordnungen der Gruppe
von Ausgangssymbolen mit dem Schlüssel I. Wie dies in der Abbildung
aus 9 dargestellt ist, umfasst die Zuordnungseinrichtung
eine Tabelle ASSOC_RBITS 905 von Zufallsbits und eine Recheneinrichtung ASSOC_CAC 910.
Bevor eine bestimmte AL(I) erzeugt wird, wird die Größe der Eingangsdatei
so angepasst, dass die Anzahl der Eingangssymbole eine Primzahl
darstellt. Wenn die Eingangsdatei somit mit K Eingangssymbolen beginnt,
wird die kleinste Primzahl P, die größer oder gleich K ist, identifiziert.
Wenn P größer ist
als K, werden P – K
leere (z.B. auf Null gesetzt) Eingangssymbole zu der Eingangsdatei
hinzugefügt,
und K wird auf P zurückgesetzt.
Für diese
modifizierte Eingangsdatei werden Listen AL(I) von Positionen von
Zuordnungen gemäß den Abbildungen
der 9 und 10 berechnet.
-
In
dem vorliegenden Ausführungsbeispiel
arbeitet ASSOC_CALC 910 gemäß der nachstehenden Beschreibung
und der Darstellung in dem Flussdiagramm aus 10.
Der erste Schritt ist der Einsatz des Schlüssels I, der Anzahl der Eingangssymbole
K und der Tabelle der Zufallsbits ASSOC_RBITS 905 zum Erzeugen
von zwei ganzzahligen Werten X und Y, welche die Eigenschaft aufweisen,
dass X mindestens Eins ist und höchstens
gleich K – 1,
und wobei Y mindestens gleich Null und höchstens gleich K – 1 ist
(1005). Vorzugsweise sind X und Y unabhängig und einheitlich in ihren
entsprechenden Bereichen verteilt. Als nächstes wird eine Anordnung
V[] mit W(I) Einträgen
zum Speichern von AL(I) initialisiert, wenn deren Elemente berechnet
werden (1010). Da V[] nur eine temporäre Speicherung für eine Liste
ist, würde
sie deutlich weniger Speicher in Anspruch nehmen als die Spalte
AL(I) des Puffers 405 (siehe 4). V[0]
(das ist das erste Element der Liste AL(I)) wird auf Y gesetzt (1015).
Danach wird für
alle Werte von J, die mit 1 beginnen und mit W(I) – 1 enden,
der Wert von V[J] auf (V[J – 1]
+ X)modK gesetzt, wie dies in den Schritten 1020–1050 dargestellt
ist. Da K eine Primzahl ist und W(I) höchstens gleich K ist, sind
alle Werte V[] einzigartig bzw. eindeutig. Wie dies dargestellt
ist, kann es sich bei der „modK" Operation um eine
einfache Vergleichs- und Subtraktionsoperation handeln, d.h. die
Schritte 1035 und 1040. Das Verfahren der Erzeugung
der Liste von Positionen von Zuordnungen einer gegebenen Gruppe
von Ausgangssymbolen ist somit sehr effizient.
-
Ein
Vorteil des vorstehenden Ansatzes zum Berechnen von AL(I) ist es,
dass er ausreichend Vielfalt bezüglich
der Verteilung der Positionen der Zuordnungen erzeugt, um sicherzustellen,
dass der Decodierungsalgorithmus mit hoher Wahrscheinlichkeit mit
minimalem Empfangs-Overhead funktioniert (d.h. die Eingangsdatei
wird wiederhergestellt, nachdem nur etwas mehr als K/b Gruppen von
Ausgangssymbolen empfangen worden sind, in der Annahme, dass die
Eingangssymbole und die Ausgangssymbole die gleiche Länge aufweisen),
wenn eine Kopplung mit einem geeigneten Prozess für die Auswahl
von W(I) gegeben ist.
-
Wenn
AL(I) gemäß der Abbildung
aus 10 berechnet wird, und wenn
die Tabelle der Zufallsbits ASSOC_RBITS 905 zwischen dem
Sender und dem Empfänge
geheim gehalten wird, so kann das Kommunikationssystem 100 als
ein sicheres Kommunikationssystem eingesetzt werden, da ohne, dass
die Sequenz AL(I) bekannt ist, das Decodieren des empfangenen Stroms
schwierig ist, wenn nicht gar unmöglich. Dieses Merkmal würde auch
für ein
Kommunikationssystem gelten, das andere Verfahren der Berechnung
oder der Erzeugung von AL(I) verwendet, sofern das Verfahren des
Berechnens oder des Erzeugens von AL(I) oder vorzugsweise das Seeding,
das in dem Verfahren des Berechnens des Generators AL(I) geheim
gehalten wird.
-
Eine Implementierung
des Gewichtungsselektors
-
Die
Leistungsfähigkeit
und die Effizienz des Codierers/Decodierers sind abhängig von
der Verteilung der Gewichtungen, wobei einige Verteilungen besser
sind als andere. Die funktionalen Aspekte der Gewichtsauswahl werden
nachstehend im Text beschrieben, gefolgt von einer Beschreibung
einiger wichtiger Gewichtungsverteilungen. Das Blockdiagramm aus 11 und das Flussdiagramm aus 12 werden zur Veranschaulichung dieser Konzepte
verwendet.
-
Wie
dies in der Abbildung aus 11 dargestellt
ist, umfasst der Gewichtungsselektor zwei Prozesse WT_INIT 1105 und
WT_CALC 1110 und zwei Tabellen WT_RBITS 1115 und
WT_DISTRIB 1120. Der Prozess WT_INIT 1105 wird
nur einmal aufgerufen, wenn der erste Schlüssel zu der Initialisierungstabelle WT_DISTRIB 1120 geleitet
wird. Das Design bzw. der Aufbau von WT_DISTRIB 1120 ist
ein wichtiger Aspekt des Systems und wird später im Text deutlich näher beschrieben.
Der Prozess WT_CALC 1110 wird bei jedem Aufruf zum Erzeugen
einer Gewichtung W(I) auf der Basis eines Schlüssels I aufgerufen. Wie dies
in dem Flussdiagramm aus 12 dargestellt
ist, verwendet WT_CALC 1110 den Schlüssel und die Zufallsbits, die
in der Tabelle WT_RBITS gespeichert sind, um eine Zufallszahl R
zu erzeugen (1205). Danach wird der Wert von R zum Auswählen einer
Zeilenzahl L in der Tabelle WT_DISTRIB 1120 verwendet.
-
Wie
dies in der Abbildung aus 11 dargestellt
ist, handelt es sich bei den Einträgen in die Spalte RANGE von
WT_DISTRIB 1120 um eine ansteigende Folge positiver ganzer
Zahlen, die mit dem Wert MAX_VAL enden. Die Anordnung der möglichen
Werte von R sind die ganzen Zahlen zwischen Null und MAX_VAL – 1. Eine
wünschenswerte
Eigenschaft ist es, dass R mit gleicher Wahrscheinlichkeit einen
beliebigen Wert in dem Bereich möglicher
Werte aufweist. Der Wert von L wird durch Suchen in der Spalte RANGE bestimmt,
bis ein L gefunden wird, das RANGE(L – 1) ≤ R < RANGE(L) erfüllt (1210). Wenn ein
L gefunden worden ist, wird der Wert von W(I) auf WT(L) gesetzt,
und dabei handelt es sich um die zurückgegebene Gewichtung (1215, 1220).
Zum Beispiel in Bezug auf die 11 und die dort dargestellte beispielhafte
Tabelle gilt, wenn R gleich 38.500 ist, so wird für L 4 gefunden,
und somit wird W(I) auf WT(4) = 8 gesetzt.
-
Andere
Variationen der Implementierung eines Gewichtungsselektors und einer
Zuordnungseinrichtung umfassen das pseudozufällige Erzeugen von I und das
direkte Erzeugen von W(I) und AL(I) aus I. Wie dies deutlich werden
sollte, kann W(I) durch Prüfen
von AL(I) bestimmt werden, da W(I) der Anzahl der Zuordnungen in
AL(I) entspricht. Aus der Beschreibung wird deutlich, dass viele
andere Verfahren der Erzeugung der Werte von W(I) dem gerade vorstehend
beschriebenen System entsprechen, so dass eine Anordnung von W(I)
Werten erzeugt wird, wobei die Verteilung definiert wird durch WT_DISTRIB.
-
Wenn
W(I) gemäß der Abbildung
aus 12 berechnet wird, und wenn
die Tabelle der Zufallsbits WT_RBITS 1115 zwischen dem
Sender und dem Empfänger
geheim gehalten wird, so kann das Kommunikationssystem 100 als
ein sicheres Kommunikationssystem verwendet werden, da ohne, dass
die Folge von W(I) bekannt ist, das Decodieren des empfangenen Stroms
schwierig ist, wenn nicht gar unmöglich. Diese Eigenschaft würde auch
für ein
Kommunikationssystem gelten, das andere Verfahren des Berechnens
oder Erzeugens von W(I) verwendet, sofern das Verfahren zum Berechnen
oder Erzeugen von W(I) oder vorzugsweise das Seeding, das in dem
Verfahren zur Berechnung des Generators W(I) verwendet wird, geheim
gehalten wird.
-
Ein alternativer
Decodierer
-
Bei
Lesen der vorliegenden Offenbarung sollte für den Fachmann auf dem Gebiet
deutlich werden, dass ein Empfänger
effizienter als die vorstehend beschriebenen Implementierungen arbeiten
kann. Zum Beispiel kann der Empfänger
effizienter sein, wenn er Pakete puffert und die Wiederherstellungsregel
nur einsetzt, wenn eine Gruppe von Paketen empfangen worden ist.
Diese Modifikation reduziert die Rechenzeit für folgende, nicht erforderliche
Operationen und reduziert den Overhead durch Kontext-Switching.
Da der Decodierer nicht erwarten kann, die ursprüngliche Datei von K Eingangssymbolen
wiederherzustellen, bevor zumindest K Ausgangssymbole (in der Annahme
der gleichen Größe von Eingangs-
und Ausgangssymbolen) in Paketen ihr Ziel erreichen, kann es vorteilhaft
sein, zu warten, bis mindestens K Ausgangssymbole vor Beginn des
Decodierungsverfahrens ihr Ziel erreichen.
-
Die
Abbildung aus 13 zeigt ein anderes Verfahren
der Decodierung, das die oben ausgeführten Konzepte aufweist, und
das eine Modifikation des Verfahrens darstellt, das von dem Decodierer
aus 6 eingesetzt wird. Der Hauptunterschied zwischen
den beiden Verfahren ist es, dass das Verfahren aus 13 Gruppen von Ausgangssymbolen in Chargen bzw.
Batches oder Stapeln empfängt,
wie dies unter 1315 dargestellt ist. Die Größe des ersten
Stapels wird so festgelegt, dass die Gesamtanzahl von Ausgangssymbolen, die
ihr Ziel erreichen, gleich K + A ist, wobei A einen kleinen Anteil
der Anzahl der Eingangssymbole K darstellt (1310). Nachdem
der erste Stapel von Gruppen von Ausgangssymbolen empfangen worden
ist, werden die Gruppen von Ausgangssymbolen wie vorstehend verarbeitet,
unter Verwendung des Empfangsorganisators 520 (1340),
um Gruppen von Ausgangssymbolen zu verarbeiten, verschachtelt mit
dem Einsatz des Wiederherstellungsprozessors 525 (1350)
zur Verarbeitung der decodierbaren Anordnung und zur Wiederherstellung von
Eingangssymbolen aus Gruppen von Ausgangssymbolen mit reduzierter
Gewichtung, die höchstens
ihrer Gruppengröße entspricht.
Wenn die Wiederherstellung aller K Eingangssymbole nicht unter Verwendung
des ersten Stapels von Gruppen von Ausgangssymbolen erreicht wird,
so werden zusätzliche
Batches von Ausgangssymbolen empfangen, wobei jedes Batch zusätzliche
G Ausgangssymbole aufweist und verarbeitet wird, bis alle Eingangssymbole
wiederhergestellt worden sind.
-
Es
ist vorteilhaft, die erforderliche Speicherkapazität für die Zusatzdatenstrukturen
so weit wie möglich zu
minimieren. Wie dies bereits vorstehend im Text beschrieben worden
ist, ist kein Speichern für
die Zuordnungsliste für
jede Gruppe von Ausgangssymbolen erforderlich, da die Zuordnungseinrichtung 220 eingesetzt werden
kann, um diese Listen bei Bedarf schnell zu berechnen. Ein anderer
Speicherbedarf betrifft für
jedes bislang noch nicht wiederhergestellte Eingangssymbol das Speichern
der Zeilenzahl in der GOSDS 505 der Gruppen von Ausgangssymbolen,
die das Eingangssymbol aus Zuordnung aufweisen, d.h. der Platz für die Listen,
der in der Spalte RL in der Tabelle ISDS 510 aus 5 dargestellt
ist. Wie dies bereits in dem Schritt 855 aus 8 beschrieben worden ist, handelt es sich
bei einem Einsatz dieses Speichers darum, in der Lage zu sein, schnell
zu identifizieren, welche Gruppen von Ausgangssymbolen reduziert
werden können,
wenn ein bestimmtes Eingangssymbol wiederhergestellt werden soll.
Sofern dies nicht effizient erfolgt, ist der für diese Listen erforderliche
Speicher proportional zu der Gesamtanzahl der Zuordnungen aller
Gruppen von Ausgangssymbolen, die zur Wiederherstellung aller Eingangssymbole
verwendet werden.
-
Ein Vorsortierungs-Decodierer
-
Nachstehend
wird in Bezug auf die Abbildungen der 14 und 15 ein
mehr bevorzugtes Ausführungsbeispiel
des Decodierers beschrieben. Die Abbildung aus 14 zeigt die Bestandteile, welche der Decodierer
umfasst, welche der Abbildung aus 5 entsprechen,
mit der Ausnahme einer zusätzlichen
Tabelle WEIGHT SORT 1405 (Gewichtungssortierung) und der
EXECUTION LIST 1420 (Ausführungsliste), die verwendet
wird, um den gemäß der Beschreibung
aus 8(b) gebildeten Ausführungsplan
zu speichern. Die Tabelle WEIGHT SORT wird zum Speichern von Stapeln
von Zeilenzahlen in der GOSDS 505 der Gruppen von Ausgangssymbolen
verwendet, wenn diese sortiert in der Reihenfolge nach zunehmender
Gewichtung empfangen werden. Die Spalte WT_VAL wird zum Speichern
von Gewichtungen verwendet, und die Spalte ROW_LIST wird zum Speichern
von Zeilenzahlen von Gruppen von Ausgangssymbolen in der GOSDS 505 verwendet.
Im Allgemeinen werden die Zeilenzahlen aller Gruppen von Ausgangssymbolen
mit der Gewichtung WT_VAL(L) in ROW_LIST(L) gespeichert. Diese Tabelle
wird dazu eingesetzt, den Stapel von Gruppen von Ausgangssymbolen
in der Reihenfolge der zunehmenden Gewichtung zu speichern, wie
dies in dem Schritt 1520 aus 15 dargestellt
ist. Gruppen von Ausgangssymbolen mit niedriger Gewichtung sind
weniger rechenintensiv beim Einsatz zur Wiederherstellung eines Eingangssymbols,
und es ist wahrscheinlich, wenn Gruppen von Ausgangssymbolen mit
höherer
Gewichtung auftreten, dass die meisten ihrer Zuordnungen bereits
wiederhergestellt worden sind, und somit wird erheblicher Link-Speicherplatz
eingespart (der Decodierer kann den durch die wiederherstellten
Eingangs-Links verwendeten Raum wiederherstellen, und Gruppen von
Ausgangssymbolen, die verarbeitet werden, weisen weniger noch nicht
wiederhergestellte Zuordnungen auf).
-
Die
Verarbeitung von Gruppen von Ausgangssymbolen in Stapeln bzw. Batches
entsprechender Größen zur
Erhöhung
der Gewichtung reduziert die Speicheranforderungen sowie die Verarbeitungsanforderungen.
-
Wie
dies in der Abbildung aus 15 dargestellt
ist, können
etwas mehr als K Ausgangssymbole in Gruppen von Ausgangssymbolen
(bezeichnet durch K + A Ausgangssymbole in der Abbildung) ankommen, bevor
die Verarbeitung beginnt (1515). In diesem Fall wird angenommen,
dass die Größe der Eingangssymbole
und der Ausgangssymbole und K Eingangssymbole in der Eingangsdatei übereinstimmen.
Zu Beginn wartet der Decodierer einfach auf den Empfang der K +
A Ausgangssymbole in Gruppen, da der Decodierer nicht erwarten kann,
in der Lage zu sein, die Eingangsdatei aus weniger als K + A Ausgangssymbolen
wiederherzustellen, und wobei er eine willkürliche Eingangsdatei aus weniger
als K Ausgangssymbolen nicht wiederherstellen kann. In der Praxis
hat sich 5 √K
als guter Wert für
A erwiesen.
-
Die
Zeilenzahlen in der GOSDS 505 der empfangenen Gruppen von
Ausgangssymbolen werden in der Tabelle WEIGHT SORT 1405 aus 4 gespeichert,
um die Gewichtung zu erhöhen,
wie dies in dem Schritt 1515 aus 15 dargestellt
ist. Wenn T die Anzahl der möglichen
Gewichtungen der Gruppe von Ausgangssymbolen entspricht, so weist
die Liste ROW_LIST(L) für
Werte von L zwischen 1 und T alle empfangenen Gruppen von Ausgangssymbolen
mit der Gewichtung WT_VAL(L) auf, wobei 1 = WT_VAL(1) < WT_VAL(2) < WT_VAL(3) < ... < WT_VAL(T) sind,
und wobei WT_VAL(T) die maximale Gewichtung jeder Gruppe von Ausgangssymbolen
ist. Danach entspricht der Rest der Funktionsweise des Decodierers
aus 15 genau dem Decodierer aus 13, mit der Ausnahme, dass Gruppen von Ausgangssymbolen
in der Reihenfolge der zunehmenden Gewichtung verarbeitet werden,
wie dies in dem Schritt 1520 dargestellt ist.
-
Normalerweise
reichen K + A Ausgangssymbole für
die Wiederherstellung aller Eingangssymbole aus. Jedoch nicht ausreichen
können
unter Umständen
für die
Wiederherstellung aller Eingangssymbole einige Anordnungen von Gruppen
von Ausgangssymbolen, die K + A Ausgangssymbole insgesamt aufweisen.
In diesen Fällen
werden Batches von G zusätzlichen
Ausgangssymbolen in Gruppen empfangen und danach verarbeitet, bis
alle Eingangssymbole wiederhergestellt worden sind. Eine gute Einstellung
für G ist √K.
-
Die
Abbildungen der 16 bis 19 zeigen
eine Momentaufnahme einer beispielhaften Ausführung des in Bezug auf die
Abbildung aus 15 beschriebenen Verfahrens
bzw. Ablaufs. In dem vorliegenden Beispiel ist die Gruppengröße für alle Gruppen
gleich zwei, und vier Gruppen von Ausgangssymbolen (16030, 16035, 16040, 16045)
sind mit Zuordnungen (16000, 16005, 16010, 16015, 16020, 16025)
empfangen worden, wie dies durch die Pfeillinien aus 16 dargestellt ist. Gemäß der Abbildung aus 17 werden anfänglich
in der GOSDS 505 empfangen und gespeichert Gruppen von
Ausgangssymbolen mit dem Schlüssel 23 und
Werten (A, D), dem Schlüssel 159 und
Werten (RS_1(A, E, F), RS_2(A, E, F), dem Schlüssel 33 und den Werten
(B, C) und dem Schlüssel 835 und Werten
(RS_1(C, F, G, H), RS_2(C, F, G, H) (die erste und dritte Gruppe
von Ausgangssymbolen weisen eine Gewichtung von zwei auf, und bei
der Wertefunktion handelt es sich um die Identitätsfunktion, wobei die zweite
und die vierte Gruppe entsprechende Gewichtungen von drei bzw. vier
aufweisen, und wobei es sich bei der Wertefunktion um die Reed-Solomon-Wertefunktion handelt). Die
Zeilenzahl in der GOSDS 505 wird in ROW_LIST in der Zeile
gespeichert, welche der Gewichtung des Ausgangssymbols entspricht,
wie dies in der Abbildung aus 18 dargestellt
ist. Die Gruppen von Ausgangssymbolen mit einer Gewichtung von zwei
befinden sich in Zeile 0 und in Zeile 2 der GOSDS 505.
Somit weist ROW_LIST(0), welche Gruppen von Ausgangssymbolen mit
einer Gewichtung WT_VAL(0) = 2 entspricht, die Zeilennummern 0 und
2 auf, wie dies in der Abbildung aus 18 dargestellt
ist. In ähnlicher
Weise gilt WT_VAL(1) = 3 und ROW_LIST(1) weist 1 auf, und WT_VAL(2)
= 4 und ROW_LIST (2) weist 3 auf.
-
An
diesem Punkt des Verfahrens sind die ersten beiden Gruppen von Ausgangssymbolen
in der Reihenfolge der zunehmenden Gewichtung verarbeitet worden,
wobei die dritte Gruppe von Ausgangssymbolen in Zeile 1 der GOSDS 505 durch
den Empfangsorganisator 520 verarbeitet worden ist, und
wobei diese dritte Gruppe von Ausgangssymbolen kurz vor der Verarbeitung
durch den Wiederherstellungsprozessor 525 steht. Die Gruppen
von Ausgangssymbolen in den Zeilen 0 und 2 sind bereits zu dem Plan
hinzugefügt
werden, um letztlich die Eingangssymbole an den entsprechenden Positionen
0, 3, 1 und 2 wiederherzustellen. Die Gruppe von Ausgangssymbolen
in Zeile 3 der GOSDS 505 weist drei Zuordnungen an den
Positionen 5, 6 und 7 auf, die noch nicht wiederhergestellt worden
sind, und somit existieren Links bzw. Verknüpfungen von den Positionen
5, 6 und 7 in der ISDS 510 zurück zu der Zeile 3 in der GOSDS 505.
Die Gruppe von Ausgangssymbolen in Zeile 1 der GOSDS 505 weist
drei Zuordnungen an den Positionen 0, 4 und 5 auf. Die Zuordnung
an den Positionen 0 ist bereits als wiederhergestellt markiert worden,
und somit existiert keine Verknüpfung
zurück
zu Zeile 1 (dies hat bewirkt, dass die Gewichtung dieser Gruppe
von Ausgangssymbolen von 3 auf 2 reduziert worden ist, was die Wiederherstellung
der verbleibenden Eingangssymbolen an den Positionen 4, 5, 6 und
7 auslöst,
sobald der Wiederherstellungsprozessor 525 ausgeführt wird).
Die Zuordnungen an den Positionen 4 und 5 sind noch nicht wiederhergestellt
worden, und somit hat der Empfangsorganisator 520 einen
Link von Position 4 und von Position 5 in der ISDS 510 zu
Zeile 1 in der GOSDS 505 hinzugefügt. Dies alles ist in 17 abgebildet. An diesem Punkt des Verfahrens
befinden sich somit insgesamt nur fünf Links von Eingangssymbolen
zurück
zu Gruppen von Eingangssymbolen im Einsatz, die diese als Zuordnungen
aufweisen. Dies lässt sich
gut mit der geradlinigen Implementierung vergleichen, die einen
Link von jedem Eingangssymbol zu jeder Gruppe von Ausgangssymbolen
aufweist, die diesen als Zuordnung aufweist. In dem vorliegenden
Beispiel gibt es elf derartige mögliche
Links.
-
Im
Allgemeinen werden die Einsparungen des Speicherplatzes für die Links
drastisch reduziert, wenn das in Bezug auf die Abbildungen der 14 und 15 zu
dem Verfahren aus 13 verwendete Verfahren eingesetzt
wird, wobei die räumlichen
Einsparungen zum Beispiel einem Faktor von 10 bis 15 in dem Verknüpfungsraum
entsprechen, wenn die Anzahl der Eingangssymbole gleich 50.000 ist.
Der Grund für
diese Reduzierung ist es, dass Gruppen von Ausgangssymbolen mit
geringerer Gewichtung mit höherer
Wahrscheinlichkeit Eingangssymbole am Anfang des Verfahrens als
am Ende des Verfahrens wiederherstellen, und wobei Gruppen mit höherer Gewichtung
von Ausgangssymbolen deutlich wahrscheinlicher Gruppen von Ausgangssymbolen
am Ende des Ablaufs als zu dessen Beginn wiederherstellen. Somit
ist es sinnvoll, die Gruppen von Ausgangssymbolen in der Reihenfolge
der zunehmenden Gewichtung zu verarbeiten. Ein weiterer Vorteil
des in den Abbildungen der 14 und 15 in
Bezug auf 13 beschriebenen Verfahrens
ist es, dass die Decodierung für
gewöhnlich
zwischen 30% und 40% schneller ist. Grund dafür ist es, dass die Gruppen
von Ausgangssymbolen mit geringerer Gewichtung mit höherer Wahrscheinlichkeit
dafür eingesetzt
werden, Eingangssymbole wiederherzustellen als die Gruppen von Ausgangssymbolen
mit höherer
Gewichtung (da die Gruppen von Ausgangssymbolen mit geringerer Gewichtung
zuerst berücksichtigt
werden), und wobei die Kosten für
die Wiederherstellung eines bestimmten Eingangssymbols direkt von
der Gewichtung der Gruppe von Ausgangssymbolen abhängig sind,
die für
die Wiederherstellung verwendet werden.
-
Die
Abbildung aus 19 zeigt einen vollständigen Ausführungsplan
für dieses
Beispiel, wobei dieser, wenn er ausgeführt wird, alle acht Eingangssymbole
auf der Basis der vier Gruppen von Ausgangssymbolen mit einer Gruppengröße von zwei
wiederherstellt.
-
Auswahl einer
Gewichtungsverteilung
-
Eine
wichtige Optimierung betrifft den Aufbau des Codierungsverfahrens,
so dass eine Eingangsdatei erfolgreich mit so wenigen Gruppen von
Ausgangssymbolen wie möglich
wiederhergestellt werden kann. Diese Optimierung ist hilfreich,
wenn die Übermittlungszeit
und die Bandbreite mit hohen Kosten verbunden sind oder Beschränkungen
aufweisen, oder wenn eine Eingangsdatei schnell decodiert werden
muss, ohne auf zusätzliche
Gruppen von Ausgangssymbolen zu warten. Für gewöhnlich ist die ausreichende
Anzahl von Ausgangssymbolen, die für die Wiederherstellung einer
Eingangsdatei benötigt
werden, etwas größer als
die Anzahl der Eingangssymbole in der ursprünglichen Eingangsdatei (in
der Annahme von Eingangs- und Ausgangssymbolen gleicher Größe). Es
kann gezeigt werden, dass eine willkürliche Eingangsdatei nicht
wiederhergestellt werden kann, wenn weniger Bits empfangen werden
als sich in der Ausgangsdatei befinden. Somit ermöglicht ein
perfektes Codierungsformat die Wiederherstellung einer Eingangsdatei
aus jeder beliebigen Anordnung von Gruppen von Ausgangssymbolen,
welche die gleiche Anzahl von Bits wie die Eingangsdatei codieren,
und wobei es sich um ein Maß der
Codierungseffizienz darum handelt, wie wenige zusätzliche
Bits unter erwarteten Bedingungen benötigt werden.
-
In
dem Decodierer aus 5 wird die maximale Effizienz
erreicht, wenn der Wiederherstellungsprozessor 525 das
letzte unbekannte Eingangssymbol wiederherstellt, nachdem der Decodierer
genau K Ausgangssymbole empfangen hat. Wenn mehr als K Ausgangssymbole
durch den Decodierer bis zu dem Zeitpunkt, wenn alle Eingangssymbole
wiederhergestellt worden sind, empfangen worden sind, so sind Gruppen von
Ausgangssymbolen empfangen worden, die für die Wiederherstellung der
Eingangsdatei nicht benötigt oder
verwendet worden sind. Eine maximale Effizienz ist zwar gut, allerdings
sollte dieses Ziel mit der Gefahr abgewogen werden, dass die DSS 515 leer
sein kann, bevor die Wiederherstellung abgeschlossen ist. Anders ausgedrückt erreicht
bei maximaler Effizienz die Größe der decodierbaren
Anordnung Null, genau wenn die Wiederherstellung endet, wobei die
Codierung/Decodierung jedoch so angeordnet sein sollte, dass nicht
mehr als eine geringe Wahrscheinlichkeit existiert, dass die Größe der decodierbaren
Anordnung Null erreicht, bevor die Wiederherstellung unter Verwendung
von K + A Ausgangssymbolen endet, so dass zusätzliche Anordnungen von G Ausgangssymbolen,
die in Gruppen enthalten sind, nicht erforderlich sind.
-
Dieser
Punkt ist in der Abbildung aus 20 dargestellt.
Diese Abbildung zeigt eine Darstellung der Größe einer decodierbaren Anordnung
im Vergleich zu der wiederhergestellten Anzahl von Eingangssymbolen,
wobei der Decodierer mit K/b Gruppen von Ausgangssymbolen arbeitet,
wobei für
eine ideale Verteilung gemäß der nachstehenden
Beschreibung jede Gruppe eine Größe b aufweist.
In dem vorliegenden Beispiel gilt A = 0, d.h. die Anzahl der in
Gruppen empfangenen Ausgangssymbole zum Decodieren aller K Eingangssymbole
entspricht der kleinsten möglichen
Anzahl (in der Annahme, dass die Eingangssymbole und die Ausgangssymbole
die gleiche Größe aufweisen).
Hiermit wird festgestellt, dass die Darstellung für jede gegebene Funktion
zur Bestimmung von Gewichtungen und Zuordnungen variieren kann,
und wobei sie auch abhängig davon
variieren kann, wenn bestimmten Gruppen von Ausgangssymbolen empfangen
werden. In dieser Darstellung entspricht die erwartete Größe der Größe der decodierbaren
Anordnung zuerst Eins und bleibt während dem Wiederherstellungsvorgang
bei Eins. Bei erwartetem Verhalten existiert somit immer eine Gruppe von
Ausgangssymbolen in der decodierbaren Anordnung, die zur Wiederherstellung
der nächsten
b Eingangssymbole verwendet werden kann. Die Abbildung aus 20 zeigt ferner ein Beispiel des tatsächlichen
Verhaltens der idealen Verteilung. Hiermit wird festgestellt, dass
die decodierbare Anordnung in dieser tatsächlichen Ausführung leer
ist, bevor die Wiederherstellung abgeschlossen ist, d.h. nachdem
nur zwei von 100.000 Eingangssymbolen wiederhergestellt worden sind.
Das tatsächliche
Verhalten der idealen Verteilung ist typisch, d.h. bei der idealen
Verteilung leeren zufällige
Schwankungen nahezu immer die decodierbare Anordnung, bevor alle
Eingangssymbole wiederhergestellt worden sind, und dies ist der
Grund dafür,
dass eine solidere Verteilung benötigt wird, wie dies nachstehend
im Text beschrieben ist.
-
Die
Effizienz wird verbessert durch Beschränkung der Häufigkeit, mit der Gruppen von
Ausgangssymbolen in der decodierbaren Anordnung unbekannte Eingangssymbole
als Zuordnungen aufweist, die deutlich kleiner ist als die Gruppengröße, bei
einem Einsatz zur Wiederherstellung der Werte von Zuordnungen. Erreicht
werden kann dies durch entsprechende Auswahl der Funktion zum Erzeugen
von W(I).
-
Während es
möglich
ist, eine Eingangsdatei mit jedem gewünschten Grad der Sicherheit
vollständig wiederherzustellen,
indem ausreichend Gruppen von Ausgangssymbolen empfangen werden,
wobei jedoch der Aufbau eines Kommunikationssystems mit Gruppenkettenreaktionscodierung
bevorzugt wird, so dass eine hohe Wahrscheinlichkeit für die Wiederherstellung
von K Eingangssymbolen, die eine vollständige Eingangsdatei umfassen,
gegeben ist, mit nur K + A Ausgangssymbolen (in der Annahme der
gleichen Größe für Eingangssymbole
und Ausgangssymbole) für
einen bestimmten geringen Wert von A. Der Mindestwert für A ist Null
und kann in bestimmten Codierungsmethoden erreicht werden, wie etwa
unter Verwendung einer normalen Reed-Solomon-Codierung, wobei jedes
Ausgangssymbol von allen K Eingangssymbolen abhängig ist, wobei dies jedoch
zu langsamen Codierungs- und Decodierungszeiten führt. Durch
Annahme eines bestimmten kleinen Wertes von A, der ungleich Null
ist, kann ein verbessertes Kommunikationssystem erreicht werden.
-
Kleine
Werte von A können
bei der Gruppenkettenreaktionscodierung unter Verwendung der entsprechenden
Verteilungen zur Bestimmung der Gruppengrößen, der Gewichtungsverteilung
für Gruppen
von Ausgangssymbolen, d.h. die Verteilung von W(I) für alle I,
und die Verteilung von Zuordnungen über die Gruppen von Ausgangssymbolen,
d.h. die Elemente von AL(I) über
alle I, erreicht werden. Hiermit wird festgestellt, dass das Decodierungsverfahren
zwar unabhängig
von den Gruppengrößen, der
Gewichtungsverteilung und der Verteilung bezüglich der Auswahl der Zuordnungen
angewendet werden kann, wobei die bevorzugten Ausführungsbeispiele
jedoch Gruppengrößen, Gewichtungsverteilungen
und Verteilungen bezüglich
der Auswahl von Zuordnungen verwenden, die speziell für eine nahezu
optimale Funktionsfähigkeit
ausgewählt
worden sind. Tatsächlich
liefern viele Verteilungen gute Ergebnisse, da kleine Schwankungen
der ausgewählten
Verteilung nur zu kleinen Veränderungen
der Leistungsfähigkeit
führen
können.
-
Die
Vorgehensweise zur Bestimmung der Verteilungen in einem bevorzugten
Ausführungsbeispiel wird
nachstehend beschrieben. In dem vorliegenden Ausführungsbeispiel
entspricht die Gruppengröße aller Gruppen
von Ausgangssymbolen dem gleichen Wert b für eine feste positive ganze
Zahl b. Die tatsächlich
verwendeten Gewichtungsverteilungen basieren auf einer idealen mathematischen
Verteilung. Bei der idealen Verteilung werden die Gewichtungen W(I)
gemäß einer „idealen" Wahrscheinlichkeitsverteilung
ausgewählt. Die
kleinste Gewichtung ist b, und die größte Gewichtung ist K, wobei
K die Anzahl der Eingangssymbole entspricht. Bei der idealen Verteilung
wird eine Gewichtung, die einem Wert von i entspricht, mit der folgenden Wahrscheinlichkeit
p ausgewählt:
für i = b: | p
= b/K; und |
für i = b
+ 1, ..., K: | P
= b/(i(i – 1)). |
-
Nachdem
eine Gewichtung W(I) ausgewählt
worden ist wird eine Liste AL(I) der W(I) zugeordneten Eingangssymbole
unabhängig
und einheitlich wahlfrei (oder bei Bedarf pseudozufällig) ausgewählt, wobei
sichergestellt wird, dass alle ausgewählten Zuordnungen einzigartig
sind. Somit wird die erste Zuordnung zufällig bzw. wahlfrei aus den
K Eingangssymbolen ausgewählt, die
jeweils eine Auswahlwahrscheinlichkeit von 1/K aufweisen. Danach
wird die zweite Zuordnung (bei W > 1)
wahlfrei aus den verbleibenden K – 1 Symbolen ausgewählt. Die
vorstehend dargestellte Gewichtungswahrscheinlichkeitsverteilung
weist die Eigenschaft auf, dass wenn sich das System genau wie erwartet
verhalten hat, genau K/b Gruppen von Ausgangssymbolen ausreichen,
um alle Eingangssymbole zu decodieren und wiederherzustellen. Dieses
erwartete Verhalten für die
ideale Verteilung ist in der Abbildung aus 20 durch
die durchgezogene Linie dargestellt. Aufgrund der zufälligen Beschaffenheit
der Auswahl der Gewichtungen und der Zuordnungen und da eine willkürliche Anordnung
von Gruppen von Ausgangssymbolen in dem Decodierungsprozess eingesetzt
wird, verhält
sich das Verfahren nicht immer auf diese Weise. Ein Beispiel für ein tatsächliches
Verhalten für
die ideale Verteilung ist in der Abbildung aus 20 durch die gestrichelte Linie dargestellt. Somit
muss die ideale Gewichtungsverteilung in der Praxis in gewisser
Weise modifiziert werden.
-
Im
Allgemeinen lassen sich die besten Parameter für eine bestimmte Einstellung
durch Computersimulation feststellen. Eine einfache Variation der
idealen Gewichtungsverteilung ist jedoch auch eine einfache Option.
Bei dieser einfachen Variation wird die ideale Gewichtungsverteilung
geringfügig
dadurch modifiziert, dass die Wahrscheinlichkeit von Gruppen von
Ausgangssymbolen mit der Gewichtung b und von Gruppen von Ausgangssymbolen
mit hoher Gewichtung erhöht
wird, um die Möglichkeit
zu reduzieren, dass sich die decodierbare Anordnung leert, bevor
alle K Eingangssymbole wiederhergestellt worden sind. Die zusätzlichen Gruppen
von Ausgangssymbolen mit der Gewichtung b verringert die Möglichkeit,
dass dem Prozess die Gruppen der Ausgangssymbole mit Gewichtungen
von höchstens
b ausgehen (d.h. die decodierbare Anordnung leeren), bis sich der Wiederherstellungsprozess
nahe dem Ende der Wiederherstellung der Eingangssymbole befindet.
Die zusätzlich
vorgesehenen Gruppen von Ausgangssymbolen mit hoher Gewichtung erhöhen die Wahrscheinlichkeit,
dass nahe dem Ende des Wiederherstellungsverfahrens für jedes
noch nicht wiederhergestellte Eingangssymbol mindestens eine Gruppe
von Ausgangssymbolen existiert, die ein Eingangssymbol als Zuordnung
aufweisen und höchstens
b – 1
andere noch nicht wiederhergestellte Zuordnungen.
-
Im
Besonderen lautet die modifizierte Gewichtungsverteilung wie folgt:
für i = b: | p
= n·b·R1/K; |
für i = b
+ 1, ..., (K/R2 – 1): | p
= n·b/(i(i – 1)(1 – iR2/K));
und |
für i = K/R2,
..., K: | P
= n·HW(i), |
wobei K der Anzahl von Eingangssymbolen entspricht,
wobei R1 und R2 einstellbare Parameter darstellen, und wobei n ein
Normalisierungsfaktor ist, der verwendet wird, so dass die P Werte
in der Summe alle Eins ergeben.
-
Die
Berechnung von HW(i) und Musterwerten für R1 und R2 ist in Anhang A
genau dargestellt. Dort entsprechen die C++ Symbole NStartRippleSize,
nRippleTargetSize und nSymbols entsprechend R1, R2 und K in den
oben genannten Gleichungen.
-
Diese
modifizierte Verteilung ist der idealen mathematischen Gewichtungsverteilung ähnlich,
mit mehr Gruppen von Ausgangssymbolen mit einer Gewichtung b und
mit höherer
Gewichtung sowie entsprechend neu skalierter Verteilung. Wie dies
in der modifizierten Verteilung dargestellt ist, bestimmt R1 den
ersten Anteil der Gruppen von Ausgangssymbolen mit der Gewichtung
b, und wobei das Vielfache der erhöhten Wahrscheinlichkeit für Symbole
mit der Gewichtung b durch R1 bestimmt wird, und wobei R2 die Grenze
bzw. Begrenzung zwischen den „höheren" Gewichtungen und
den „nicht
so hohen" Gewichtungen
bestimmt.
-
Eine
gute Auswahl für
R1 und R2 ist allgemein von K/b abhängig und kann empirisch bestimmt
werden. Zum Beispiel liefern gute Ergebnisse in der Praxis R1 gleich
dem 1,4-fachen der Quadratwurzel von K/b und R2 gleich 2 plus dem
2,1-fachen der vierten Wurzel von K/b. Für K = 4.000 und b = 5 liefern
somit die Einstellungen R1 = 39 und R2 = 13 gute Ergebnisse; wenn
K gleich 64.000 ist und b = 2 ist, liefern R1 = 250 und R2 = 30
gute Ergebnisse. Detailliertere Berechnungen von R1 und R2 sind
in Anhang A dargestellt. Die Abbildung aus 21 zeigt,
dass das erwartete Verhalten dieser Verteilung eine decodierbare
Anordnung mit moderater Größe durch
das ganze Wiederherstellungsverfahren hinterlässt, so dass es bei tatsächlichen
Ausführungen
unwahrscheinlich ist, dass zufällige
bzw. wahlfreie Abweichungen von dem erwarteten Verhalten die decodierbare
Anordnung leeren, bevor alle Eingangssymbole wiederhergestellt worden
sind. Ordnungsgemäße Einstellungen
für die
Gewichtungsverteilung stellen sicher, dass der Empfang einer minimalen
Anzahl von Ausgangssymbolen unter allen Verlustbedingungen die Wiederherstellung
aller Eingangssymbole mit hoher Wahrscheinlichkeit sicherstellt.
-
Die
vorstehend beschriebenen Wiederherstellungsvorgänge entsprechen zwar der Vorgehensweise, die
für Tornado-Codes
eingesetzt wird, allerdings führt
das andere verwendete Verfahren zur Gestaltung des Codes zu außerordentlich
unterschiedlichen Effekten. Wie dies vorstehend im Text beschrieben
worden ist, ist der für
die Gruppenkettenreaktionscodierung erforderliche Speicher im Besonderen
deutlich kleiner als der für Tornado-Codes,
und die Einfachheit der Nutzung von Gruppenkettenreaktionscodes
in verschiedenen Situationen überschreitet
bei weitem die Einfachheit der Nutzung von Tornado-Codes, möglicherweise
zu Lasten eines Teils der Geschwindigkeit. Die mathematischen Einzelheiten,
die den Verfahren zugrunde liegen, sind nachstehend im Text näher beschrieben.
-
Eigenschaften
bestimmter Gruppenkettenreaktionscodes
-
Die
Anzahl der Gruppen von Ausgangssymbolen, die erzeugt und durch den
Kanal gesendet werden, ist bei der Gruppenkettenreaktionscodierung
nicht wie bei anderen Codierungsformaten beschränkt, da Schlüssel keine
Eins-zu-Eins-Entsprechung
zu Eingangssymbolen haben müssen,
und da die Anzahl der unterschiedlichen Werte von I nicht auf einen
bestimmten konstanten Bruchteil der Anzahl von Eingangssymbolen
beschränkt
ist. Somit ist es selbst für
den Fall, dass die decodierbare Anordnung leer wird, bevor die Eingangsdatei
wiederhergestellt ist, wahrscheinlich, dass der Decodierungsvorgang
nicht fehlschlägt,
da der Decodierer so viele zusätzliche
Gruppen von Ausgangssymbolen zusammentragen kann, wie dies erforderlich ist,
um mindestens eine weitere Gruppe von Ausgangssymbolen mit einer
Gewichtung der Gruppengröße zu erhalten.
Wenn diese Gruppe von Ausgangssymbolen mit einer Gewichtung entsprechend
der Gruppengröße empfangen
wird, so belegt sie die decodierbare Anordnung und kann durch den
Kettenreaktionseffekt eine Reduzierung der vorher empfangenen Gruppen
von Ausgangssymbolen bis auf die Gewichtung bewirken, die höchstens
der Gruppengröße entspricht,
so dass sie wiederum zur Wiederherstellung von Eingangssymbolen verwendet
werden kann.
-
In
den meisten vorstehend beschriebenen Beispielen codieren die Eingangs-
und die Gruppen von Ausgangssymbolen die gleiche Anzahl von Bits,
und jede Gruppe von Ausgangssymbolen wird in einem Paket platziert
(ein Paket ist eine Transporteinheit, die entweder vollständig empfangen
wird oder vollständig
verloren geht). In bestimmten Ausführungsbeispielen wird das Kommunikationssystem
so modifiziert, dass jedes Paket mehrere Gruppen von Ausgangssymbolen
aufweist. Die Größe eines
Ausgangssymbolwertes wird danach auf eine Größe festgelegt, die durch die
Größe der Eingangssymbolwerte
bei der anfänglichen
Aufteilung der Datei in Eingangssymbole bestimmt wird, auf der Basis
einer Reihe von Faktoren, einschließlich der (möglicherweise variierenden)
Gruppengröße. Der
Decodierungsvorgang würde
sich im Wesentlichen nicht verändern,
mit der Ausnahme, dass die Gruppen von Ausgangssymbolen in Grüppchen ankommen
würden,
wenn jedes Paket empfangen wird.
-
Die
Einstellung für
die Eingangssymbol- und Ausgangssymbolgrößen wird für gewöhnlich durch die Größe der Datei
und es Kommunikationssystems vorgegeben, über das die Gruppen von Ausgangssymbolen übertragen
werden sollen. Wenn ein Kommunikationssystem zum Beispiel Datenbits
in Pakete einer definierten Größe gruppiert
oder Bits anderweitig gruppiert, so beginnt das Design der Symbolgrößen mit
der Paket- oder Gruppierungsgröße. Danach
würde ein
Entwickler bestimmen, wie viele Gruppen von Ausgangssymbolen in
einem Paket oder einer Gruppe geführt werden, und dies bestimmt
gemeinsam mit der (möglicherweise variierenden)
Gruppengröße die Größe des Ausgangssymbols.
Zur Vereinfachung würde
der Entwickler wahrscheinlich die Eingangssymbolgröße gleich
der Ausgangssymbolgröße setzen,
doch wenn die Eingangsdaten eine unterschiedliche Eingangssymbolgröße praktischer
machen würden,
so kann diese verwendet werden.
-
Ein
weiterer Faktor bei der Bestimmung der Eingangssymbolgröße ist die
Auswahl der Eingangssymbolgröße, so dass
die Anzahl der Eingangssymbole K groß genug ist, um den Empfangs-Overhead
minimal zu halten. Zum Beispiel führt K = 10.000 zu einem durchschnittlichen
Empfangs-Overhead von 5% bis 10% mit moderaten Schwankungen, während K
= 80.000 zu einem durchschnittlichen Empfangs-Overhead von 1% bis 2%
mit sehr geringen Schwankungen führt.
Als ein Beispiel hat der Empfangs-Overhead bei einem Test mit 1.000.000
Versuchen mit K = 80.000 niemals 4% überschritten.
-
Das
vorstehend beschriebene Codierungsverfahren erzeugt einen Strom
von Paketen, die Gruppen von Ausgangssymbolen auf der Basis der
ursprünglichen
Datei aufweisen. Die Gruppen von Ausgangssymbolen weisen eine codierte
Form der Datei auf bzw. kurz ausgedrückt die codierte Datei. Jede
Gruppe von Ausgangssymbolen in dem Strom wird unabhängig von
allen Anderen Gruppen von Ausgangssymbolen erzeugt und es gibt keine
obere oder untere Begrenzung hinsichtlich der Anzahl der Gruppen
von Ausgangssymbolen, die erzeugt werden können. Ein Schlüssel ist
jeder Gruppe von Ausgangssymbolen zugeordnet. Dieser Schlüssel und
ein Teil des Inhalts der Eingangsdatei bestimmen die Werte für die Gruppe
von Ausgangssymbolen. Später
erzeugte Gruppen von Ausgangssymbolen müssen keine konsekutiven Schlüssel aufweisen, und
in bestimmten Anwendungen ist es wünschenswert, die Folge von
Schlüsseln
wahlfrei zu erzeugen oder die Folge pseudozufällig zu erzeugen.
-
Die
Gruppenkettenreaktionscodierung weist die Eigenschaft auf, dass
für den
Fall, dass die ursprüngliche
Datei in K gleich große
Eingangssymbole aufgeteilt werden kann und jeder Ausgangssymbolwert
die gleiche Länge
aufweist wie ein Eingangssymbolwert, so kann die Datei durchschnittlich
aus K + A Ausgangssymbolen wiederhergestellt werden, wobei A im
Vergleich zu K klein ist. Zum Beispiel kann A 500 darstellen, während K
= 20.000 ist. Da die jeweiligen Gruppen von Ausgangssymbolen mit
einer zufälligen
oder pseudozufälligen
Anordnung erzeugt werden, und der Verlust bestimmter Gruppen von
Ausgangssymbolen auf dem Weg als willkürlich angenommen wird, existiert
eine kleine Varianz bezüglich
der tatsächlichen
Anzahl von Gruppen von Ausgangssymbolen, die für die Wiederherstellung der
Eingangsdatei erforderlich sind. In bestimmten Fällen, wenn eine bestimmte Ansammlung
von Paketen, die K + A Symbole aufweisen, nicht ausreichen, um die ganze
Eingangsdatei zu decodieren, so kann die Eingangsdatei weiterhin
wiederhergestellt werden, wenn der Empfänger mehr Pakete von einer
oder mehr Paketquellen sammeln kann.
-
Da
die Anzahl der Gruppen von Ausgangssymbolen nur durch die Auflösung von
I begrenzt ist, sollten deutlich mehr als K + A Gruppen von Ausgangssymbolen
erzeugt werden können.
Wenn zum Beispiel I eine 32-Bit-Zahl darstellt, so können vier
Milliarden unterschiedliche Gruppen von Ausgangssymbolen erzeugt
werden, während
die Datei K = 50.000 Eingangssymbole umfassen kann. In der Praxis
wird nur eine geringe Anzahl der vier Milliarden Gruppen von Ausgangssymbolen
erzeugt und übertragen,
und es ist nahezu sicher, dass eine Eingangsdatei mit einem sehr
geringen Anteil möglicher
Gruppen von Ausgangssymbolen wiederhergestellt werden kann, und
es besteht die ausgezeichnete Wahrscheinlichkeit, dass die Eingangsdatei
mit nur etwas mehr als K Ausgangssymbolen wiederhergestellt werden
kann (in der Annahme, dass die Eingangssymbolgröße der Ausgangssymbolgröße entspricht).
-
Die
durchschnittliche Anzahl der erforderlichen Rechenoperationen zur
Erzeugung jeder Gruppe von Ausgangssymbolen ist proportional zu
log K, und somit ist die Gesamtanzahl der erforderlichen Rechenoperationen
zum Decodieren und Wiederherstellen der Eingangsdatei proportional
zu K log K. Wie dies vorstehend im Text bereits beschrieben worden
ist, existiert ein effizientes Decodierungsverfahren, das nur etwas mehr
Speicher verwendet als der Speicher, der zum Speichern der Eingangsdatei
erforderlich ist (für gewöhnlich etwa
15% mehr). Die vorstehenden Zahlen zeigen signifikante Reduzierungen
der Operationen und des Speichers im Vergleich zu bislang bekannten
Codierungstechniken.
-
Zum
Beispiel handelt es sich bei standardmäßigen Reed-Solomon-Codes um einen Standardcode
für Kommunikationsanwendungen.
In Bezug auf Standard-Reed-Solomon-Codes wird die Eingangsdatei
wie bei der Gruppenkettenreaktionscodierung in K Eingangssymbole
aufgeteilt, wobei die K Eingangssymbole in den Reed-Solomon-Codes
jedoch in N Ausgangssymbole codiert werden, wobei N für gewöhnlich vor
Beginn des Codierungsvorgangs feststeht. Dies steht im Gegensatz
zur vorliegenden Erfindung, welche eine intermediäre Anzahl
von Gruppen von Ausgangssymbolen ermöglicht.
-
Ein
Vorteil einer intermediären
Anzahl von Gruppen von Ausgangssymbolen ist es, dass für den Fall, dass
ein Empfänger
mehr Gruppen von Ausgangssymbolen als erwartet verpasst, entweder
aufgrund eines schlechten Kanals oder da der Empfänger erst
beginnt, nachdem einige Gruppen von Ausgangssymbolen diesen bereits
passiert haben, der Empfänger
einfach etwas länger
zuhören
und mehr Gruppen von Ausgangssymbolen aufnehmen kann. Ein weiterer
Vorteil ist es, dass da der Empfänger
Gruppen von Ausgangssymbolen zusammentragen kann, die von mehreren
Codierern erzeugt werden, jeder Codierer nur einen kleinen Anteil
der Gruppen von Ausgangssymbolen bereitstellen muss, die erforderlich
sind, um die Eingangssymbole zu decodieren, und wobei die Anzahl
der Gruppen von Ausgangssymbolen von einem Codierer davon abhängig sein
kann, wie viele Codierer den Empfänger mit Gruppen von Ausgangssymbolen
versorgen.
-
Standardmäßige Reed-Solomon-Codes
erfordern ferner deutlich mehr Zeit als Kettenreaktionscodes sowohl
in Bezug auf die Codierung als auch auf die Decodierung. Zum Beispiel
ist die Anzahl der erforderlichen Rechenoperationen zum Erzeugen
jedes Ausgangssymbols mittels standardmäßiger Reed-Solomon-Codierung
proportional zu K. Die Anzahl der erforderlichen Rechenoperationen
zum Decodieren von Standard-Reed-Solomon-Codes ist davon abhängig, welche Ausgangssymbole
den Empfänger
erreichen, wobei die Anzahl dieser Operationen allgemein proportional
zu (N – K)·K ist.
In der Praxis sind zulässige
Werte von K und N somit sehr klein und liegen im zweistelligen Bereich
und möglicherweise
bis in den niedrigen dreistelligen Bereich. Zum Beispiel werden überkreuz
ineinander verschachtelte Reed-Solomon-Codes auf Compact Disks (CDs)
und CD-ROMs eingesetzt. Für
CDs verwendet ein Standardcode K = 24 und N = 28, und ein anderer
Standardcode arbeitet mit K = 28 und N = 32. Für CD-ROMs arbeitet ein Standardcode
mit K = 24 und N = 26, während
ein anderer Standardcode K = 43 und N = 45 einsetzt. Standardmäßige Reed-Solomon-Codes,
die für
die Satellitenübertragung
von MPEG-Dateien (MPEG ist ein Dateiformat für Video- und Audio-Streams)
verwendet werden, verwenden K = 188 und N = 204; allgemein erfordern
diese hohen Werte eine spezielle Hardware.
-
Die
Existenz schnellerer Implementierungen von standardmäßigen Reed-Solomon-Codes
ist bekannt, welche eine Codierung in der Zeit cKlogK und eine Decodierung
in der Zeit c'K(logK)2 ermöglichen,
wobei c und c' prohibitiv
große
Konstanten sind, die diese Implementierungen langsamer gestalten
als andere Implementierungen von standardmäßigen Reed-Solomon-Codes für alle Werte
von K, außer
sehr große
Werte, d.h. der Effizienz-Übergangspunkt
liegt für
Werte von K im vierstelligen oder fünfstelligen Bereich. Für Werte
von K unterhalb des Übergangspunktes
sind die anderen Implementierungen von standardmäßigen Reed-Solomon-Codes jedoch
schneller. Obgleich die schnelleren Implementierungen schneller
sind als die anderen Implementierungen auf Werten von K oberhalb
des Übergangspunktes
sind die schnelleren Implementierungen langsamer bei den Werten
von K als die Gruppenkettenreaktionscodes, und zwar im Größenordnungsbereich.
-
Aufgrund
der Geschwindigkeitsbeschränkungen
sind für
standardmäßige Reed-Solomon-Codes
nur kleine Werte von K und N allgemein realisierbar. Folglich erfordert
es deren Einsatz in Verbindung mit großen Dateien, dass die Dateien
in viele Unterdateien aufgeteilt werden, und dass jede Unterdatei
einzeln codiert wird. Die Aufteilung verringert die Effektivität der Codes
zum Schutz vor Paketverlust während
der Übertragung.
-
Ein
Merkmal von standardmäßigen Reed-Solomon-Codes
ist es, dass alle K einzelnen Ausgangssymbole von dem Empfänger zum
Decodieren der Eingangsdatei eingesetzt werden können. Es lässt sich nachweisen, dass mindestens
K Ausgangswerte erforderlich sind, um eine willkürliche Eingangsdatei zu decodieren,
und somit sind standardmäßige Reed-Solomon-Codes
diesbezüglich
optimal, da K auch die maximale Anzahl der Ausgangssymbole ist,
die zum Decodieren der Eingangsdatei erforderlich sind. Im Gegensatz
dazu erfordert die Gruppenkettenreaktionscodierung allgemein K +
A Ausgangssymbole, wobei A im Vergleich zu einem entsprechend ausgewählten K
klein ist oder etwas mehr als K Ausgangssymbole insgesamt. Bei den vorstehend
beschriebenen Netzwerkanwendungen wird dieser Nachteil der möglichen
Notwendigkeit von A zusätzlichen
Symbolen stark überschattet
durch den Geschwindigkeitsvorteil und die Möglichkeit zur nahtlosen Behandlung
größerer Dateien.
-
Variationen
des grundlegenden Kommunikationssystems
-
Vorstehend
wurden Ausführungsbeispiele
von Kommunikationssystemen gemäß der vorliegenden
Erfindung für einen
einzelnen Kanal näher
beschrieben. Die Elemente dieser Ausführungsbeispiele können erweitert
werden, um in vorteilhafter Weise mehr als einen Kanal einzusetzen.
-
Die
Abbildungen der 22 und 23 zeigen
Systeme zwischen zwei Computern, die ein Kommunikationssystem einsetzen,
wie dieses etwa in der Abbildung aus 1 dargestellt
ist. Das erste Beispiel (22)
weist einen Sendercomputer 2200 auf, der eine Eingangsdatei 2210 an
einen Empfängercomputer 2220 über ein
Netzwerk 2230 sendet. Das zweite Beispiel (23) weist einen Sendercomputer 2300 auf,
der eine Eingangsdatei 2310 an Empfängercomputer 2320 (nur
einer dieser Computer ist abgebildet) über einen kabellosen bzw. einen
Funkkanal 2330 überträgt. An Stelle
des Netzwerks 2330 kann jedes andere physische Kommunikationsmedium
wie etwa die Leitungen des Internet verwendet werden. Der kabellose
bzw. Funkkanal 2330 kann einen kabellosen Funkkanal, einen
Pager-Vermittlungsabschnitt,
eine Satellitenstrecke, eine Infrarotstrecke oder dergleichen darstellen.
Die Konfiguration aus der Abbildung aus 23 kann
auch mit verkabelten oder kabellosen Medien verwendet werden, wenn
ein Sender eine Eingangsdatei an mehrere Empfänger sendet, wenn der Empfänger die
Eingangsdatei von einer Mehrzahl von Sendern empfängt, oder
wenn viele Empfänger
die Eingangsdatei von vielen Sendern empfangen.
-
Wie
dies ebenfalls beim Lesen der vorstehenden Beschreibung deutlich
werden sollte, kann das vorstehend beschriebene Gruppenkettenreaktionscodierungsformat
dazu verwendet werden, eine Datei über ein mit Verlust behaftetes Übertragungsmedium
zu senden, wie etwa ein Computernetzwerk, das Internet, ein Mobilfunknetzwerk
oder ein Satellitennetzwerk, und zwar als ein Strom von Paketdaten
mit wünschenswerten
Eigenschaften. Eine derartige wünschenswerte
Eigenschaft ist es, dass wenn ein Decodierungsagent eine beliebige
Anordnung von ausreichend vielen Paketen des Stroms empfängt, so
kann er die ursprüngliche
Datei außerordentlich
schnell wiederherstellen. Die Gruppenkettenreaktionscodierung ist
auch in Situationen nützlich,
in denen viele Agenten involviert sind, wie etwa dann, wenn ein Übertragungsagent
die Datei an mehrere Empfängeragenten
in einer Multicast- oder Rundsendeumgebung sendet.
-
Die
Gruppenkettenreaktionscodierungsmethode ist auch in Situationen
nützlich,
in denen mehrere Sendeagenten die gleiche Datei an mehrere Empfangsagenten
senden. Dies ermöglicht
eine verbesserte Robustheit vor lokalen Ausfällen der Netzwerkinfrastruktur,
und es ermöglicht
es Empfangsagenten, nahtlos vom Empfang von Paketen von einem Sendeagenten
zu einem anderen zu wechseln, und es ermöglicht es Empfangsagenten,
ihren Download zu beschleunigen, indem gleichzeitig von mehr als
einem Sendeagenten empfangen wird.
-
Gemäß einem
Aspekt führt
der vorstehend beschriebene Gruppenkettenreaktionsprozess das digitale Äquivalent
eines holografischen Bilds aus, wobei jeder Teil einer Übertragung
ein Bild der übertragenen
Datei aufweist. Wenn es sich bei der Datei um eine Megabyte-Datei
handelt, kann ein Benutzer einfach einen übertragenen Strom anzapfen,
um willkürliche
Daten im Megabyte-Bereich zu erhalten (plus einen gewissen zusätzlichen
Overhead) und um die ursprüngliche
Megabyte-Datei aus dem Megabyte zu decodieren.
-
Da
die Gruppenkettenreaktionscodierung mit einer willkürlichen
Auswahl von Daten aus dem übertragenen
Strom funktionsfähig
ist, müssen
Downloads nicht geplant werden oder kohärent sein. Zu berücksichtigen
sind die Vorteile von Video-on-Demand in Verbindung mit der Gruppenkettenreaktionscodierung.
Ein bestimmtes Video kann als ein zusammenhängender Strom auf einem bestimmten
Kanal übertragen
bzw. ausgestrahlt werden, ohne Koordination zwischen dem Empfänger und
dem Sender. Der Empfänger
stellt sich einfach auf einen Übertragungskanal
für ein
relevantes Video ein und erfasst ausreichend Daten für die Rekonstruktion
des ursprünglichen
Videos, ohne dass ermittelt werden muss, wann die Übertragung
begonnen hat oder wie Kopien der verloren gegangenen Abschnitte
der Übertragung
erhalten werden können.
-
Diese
Konzepte sind in den Abbildungen der 24 und 25 dargestellt.
Die Abbildung aus 24 veranschaulicht eine Anordnung,
wobei ein Empfänger 2402 Daten
von drei Sendern 2404 empfängt (die einzeln mit „A", „B" und „C" bezeichnet sind),
und zwar über
drei Kanäle 2406.
Diese Anordnung kann dazu verwendet werden, die dem Empfänger zur
Verfügung
stehende Bandbreite zu verdreifachen, oder um Sender zu behandeln,
die nicht ausreichend lang sind, um eine ganze Datei von einem der
Sender zu erhalten. Wie dies angezeigt wird, sendet jeder Sender 2404 einen
Strom von Werten S(I). Jeder Wert S(I) stellt einen Schlüssel und
eine Gruppe von Ausgangssymbolwerten B(I) = B_1(I), ...,B_b(I) dar,
deren Nutzen bereits vorstehend im Text beschrieben worden ist.
Zum Beispiel ist der Wert S(nA + iAn'A) der Schlüssel mit einem Wert von nA + iAn'A, gefolgt
von der Gruppe von Ausgangssymbolen mit Werten B(nA +
iAn'A), wobei nA und
n'A wahlfrei
ausgewählte Zahlen
darstellen, die dem Sender 2404(A) zugeordnet sind, und
wobei iA die Folgenummer eines Pakets darstellt,
das von dem Sender 2404(A) übertragen worden ist. Die Folge
der Schlüssel
von einem Sender unterscheidet sich vorzugsweise von der Folge von
Schlüsseln
von den anderen Sendern, so dass die Sender keine doppelten Werte übertragen.
Dies ist in der Abbildung aus 24 durch
die Tatsache dargestellt, dass die an jedem Sender verwendete Schlüsselfolge
eine Funktion von Informationen ist, die für den Sender speziell sind, wobei
zum Beispiel die Schlüsselfolge
für den
Sender 2404(A) abhängig
ist von nA und n'A.
-
Hiermit
wird festgestellt, dass die Sender 2404 nicht synchronisiert
oder koordiniert werden müssen, so
dass sie keine doppelte Arbeit verrichten. Ohne Koordination ist
es allerdings wahrscheinlich, dass jeder Sender eine Folge von Schlüsseln sendet,
die sich größtenteils
unterscheiden (d.h. nA + iAn'A ≠ nB + iBn'B ≠ nC + iCn'C,
wobei iA, iB, iC die Folgenummer eines Pakets darstellen,
das durch den entsprechenden Satelliten SAT A, SAT B, SAT C übertragen
wird, und wobei nA, n'A, nB, n'B, nC, n'C zufällig ausgewählte Zahlen
darstellen, die entsprechend SAT A, SAT B oder SAT C zugeordnet
sind.
-
Da
zur Wiederherstellung einer Eingangsdatei eine wahlfreie Auswahl
von K/b + A Gruppen von Ausgangssymbolen verwendet werden kann,
unter Umständen
mit wenigen zusätzlichen
G Gruppen von Ausgangssymbolen, sind die nicht koordinierten Übertragungen
additiv und nicht duplikativ.
-
Diese „Informationsadditivität" ist in der Abbildung
aus 25 erneut dargestellt. Dort
werden Kopien einer Eingangsdatei 2502 an eine Mehrzahl
von Sendern 2504 bereitgestellt (zwei dieser Sender sind
in der Abbildung dargestellt). Die Sender 2504 übertragen
unabhängig
Gruppen von Ausgangssymbolen, die aus dem Inhalt der Eingangsdatei 2502 über die
Kanäle 2506 zu
Empfängern 2508 erzeugt
werden. Wenn jeder Sender eine andere Anordnung von Schlüsseln für die Symbolerzeugung
verwendet, so sind die Ströme
wahrscheinlich unabhängig
und additiv (d.h. sie ergänzen
den für
die Wiederherstellung von Eingangssymbolen Informationsvorrat),
und eben nicht duplikativ. Jeder Sender der beiden abgebildeten
Sender muss unter Umständen
nur (K/b + A)/2 Gruppen von Ausgangssymbolen übertragen, bis der Decodierer
des Empfängers
in der Lage ist, die ganze Eingangsdatei wiederherzustellen.
-
Unter
Verwendung von zwei Empfängern
und zwei Sendern kann die Gesamtmenge der von einer Empfängereinheit 2510 empfangenen
Informationen bis zu dem Vierfachen der über einen Kanal 2506 verfügbaren Informationen
entsprechen. Die Informationsmenge kann kleiner sein als das Vierfache
der Informationen auf einem Kanal, wenn zum Beispiel die Sender
die gleichen Daten an beide Empfänger übertragen.
In diesem Fall entsprechen die Informationen an der Empfängereinheit 2510 mindestens
dem Doppelten der Rate, die erreicht werden kann, wenn die ursprüngliche
Datei direkt gesendet wird, im Besonderen dann, wenn Daten in dem
Kanal verloren gehen. Hiermit wird festgestellt, dass selbst wenn
die Sender nur ein Signal übertragen,
die Empfänger
jedoch zu unterschiedlichen Zeiten in Sichtweite sind, so existiert
ein Vorteil hinsichtlich mehr als einem Empfänger, die von jedem Empfänger empfangen.
In der Abbildung aus 25 führt die Empfängereinheit 2510 die
Funktionen aus, die den Funktionen des Empfängers 150, des Decodierers 155,
des Schlüsselregenerators 160 und
des Eingangsdatei-Reassemblers 165 aus 1 ähnlich sind.
-
In
einigen Ausführungsbeispielen
wird die Eingangsdatei 2502 in einer Rechenvorrichtung
mit zwei Codierern codiert, so dass die Rechenvorrichtung eine Ausgabe
für einen
Sender und eine andere Ausgabe für
den anderen Sender bereitstellen kann. Andere Variationen dieser
Beispiele werden beim Lesen der vorliegenden Offenbarung deutlich.
-
Hiermit
wird festgestellt, dass die hierin beschriebenen Codierungsvorrichtungen
und -verfahren auch in anderen Kommunikationssituationen eingesetzt
werden können
und nicht auf Kommunikationsnetzwerke wie das Internet beschränkt sind.
Zum Beispiel verwendet auch die Compact Disk-Technologie Lösch- und Fehlerkorrekturcodes
zur Behandlung des Problems verkratzter Disks und würde von
dem Einsatz der Gruppenkettenreaktionscodes beim Speichern von Informationen
darauf profitieren.
-
Als
weiteres Beispiel können
Satellitensysteme Löschcodes
verwenden, um die Leistungsanforderungen für die Übertragung auszugleichen, wobei
absichtlich mehr Fehler zugelassen werden, indem die Leistung reduziert
wird, und die Gruppenkettenreaktionscodierung wäre auch für diese Anwendung nützlich.
Ferner werden Löschcodes
für die
Entwicklung von RAID-Systemen (Redundant Arrays of Independent Disks)
zu Zwecken der Zuverlässigkeit
der Informationsspeicherung eingesetzt. Die vorliegende Erfindung
kann sich somit auch in anderen als den vorstehend genannten Beispielen
als nützlich
erweisen, in denen Codes dazu eingesetzt werden, die Probleme von
potenziell mit Verlust behafteten oder fehlerhaften Daten zu behandeln.
-
In
einigen bevorzugten Ausführungsbeispielen
werden Befehlssätze
(oder Software) zur Ausführung der
vorstehend beschriebenen Kommunikationsverfahren an zwei oder mehr
Mehrzweck-Rechenvorrichtungen bereitgestellt, die über ein
möglicherweise
mit Verlust behaftetes Kommunikationsmedium kommunizieren. Die Anzahl
der Vorrichtungen kann von einem Sender und einem Empfänger bis
zu jeder beliebigen Anzahl von Vorrichtungen zum Senden und/oder
zum Empfangen reichen. Das die Vorrichtungen verbindende Kommunikationsmedium
kann verkabelt, optisch, kabellos oder dergleichen sein. Die vorstehend
beschriebenen Kommunikationssysteme weisen zahlreiche Anwendungsgebiete
auf, die aus der vorliegenden Beschreibung deutlich werden sollten.
-
Die
vorstehende Beschreibung dient Zwecken der Veranschaulichung und
schränkt
die Erfindung nicht ein. Zahlreiche Abänderungen der Erfindung werden
für den
Fachmann auf dem Gebiet beim Lesen der vorliegenden Offenbarung
deutlich.
-
ANHANG
A – QUELLCODEPROTOKOLL 1.
DFSolitonDistribution.cpp
-
-
-
-
2.
DF SolitonDistribution.h
-
-
-