DE60029601T2 - Gruppenkettenreaktionskodierer mit variabler anzahl zugeordneter eingabedaten für jeden ausgaben gruppenkode - Google Patents

Gruppenkettenreaktionskodierer mit variabler anzahl zugeordneter eingabedaten für jeden ausgaben gruppenkode Download PDF

Info

Publication number
DE60029601T2
DE60029601T2 DE60029601T DE60029601T DE60029601T2 DE 60029601 T2 DE60029601 T2 DE 60029601T2 DE 60029601 T DE60029601 T DE 60029601T DE 60029601 T DE60029601 T DE 60029601T DE 60029601 T2 DE60029601 T2 DE 60029601T2
Authority
DE
Germany
Prior art keywords
symbols
group
input
output symbols
groups
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60029601T
Other languages
English (en)
Other versions
DE60029601D1 (de
Inventor
G. Michael Berkeley LUBY
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Fountain Inc
Original Assignee
Digital Fountain Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Fountain Inc filed Critical Digital Fountain Inc
Application granted granted Critical
Publication of DE60029601D1 publication Critical patent/DE60029601D1/de
Publication of DE60029601T2 publication Critical patent/DE60029601T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3746Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with iterative decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/47Error detection, forward error correction or error protection, not provided for in groups H03M13/01 - H03M13/37
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0057Block codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1836Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with heterogeneous network architecture

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Error Detection And Correction (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Detection And Correction Of Errors (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Transmission Systems Not Characterized By The Medium Used For Transmission (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Communication Control (AREA)
  • Reduction Or Emphasis Of Bandwidth Of Signals (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Description

  • 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 10201050 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
    Figure 00830001
  • Figure 00840001
  • Figure 00850001
  • Figure 00860001
  • 2. DF SolitonDistribution.h
    Figure 00860002
  • Figure 00870001
  • Figure 00880001
  • Figure 00890001

Claims (35)

  1. 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.
  2. Verfahren nach Anspruch 2, wobei der Schritt a) des Ermittelns des Schlüssels I einen Schritt des Berechnens des Schlüssels I gemäß einer Zufallsfunktion oder einer Pseudozufallsfunktion umfasst.
  3. Verfahren nach Anspruch 1, wobei der Schritt b) des Berechnens einen Schritt des Berechnens von W(I) gemäß einer Zufallsfunktion oder einer Pseudozufallsfunktion von I umfasst.
  4. Verfahren nach Anspruch 1, wobei der Schritt b) des Berechnens einen Schritt des Berechnens von AL(I) gemäß einer Zufallsfunktion oder einer Pseudozufallsfunktion von I umfasst.
  5. Verfahren nach Anspruch 1, wobei der Schritt b) des Berechnens einen Schritt des Berechnens einer Anzahl G(I) von Ausgangssymbolen (B(I)) in der Gruppe umfasst, wobei G(I) eine positive ganze Zahl ist, wobei die genannte Anzahl G(I) gemäß einer Zufallsfunktion oder einer Pseudozufallsfunktion von I berechnet wird.
  6. Verfahren nach Anspruch 1, wobei der Schritt b) des Berechnens die folgenden Schritte umfasst: das Berechnen gemäß einer vorbestimmten Funktion von I und einer Wahrscheinlichkeitsverteilung einer Gewichtung W(I), wobei die Wahrscheinlichkeitsverteilung über mindestens zwei positive ganze Zahlen erfolgt, von denen mindestens eine größer ist als Eins; das Berechnen eines Listeneintrags für die Liste AL(I); und das Wiederholen des Schritts des Berechnens eines Listeneintrags für die Liste AL(I), bis die Listeneinträge W(I) berechnet werden.
  7. Verfahren nach Anspruch 6, wobei der Schritt b) des Berechnens von W(I) einen Schritt des Bestimmens von W(I) umfasst, so dass W eine vorbestimmte Verteilung über das Schlüsselalphabet approximiert.
  8. Verfahren nach Anspruch 7, wobei es sich bei der vorbestimmten Verteilung um eine gleichmäßige Verteilung handelt.
  9. Verfahren nach Anspruch 7, wobei es sich bei der vorbestimmten Verteilung um eine Glockenkurvenverteilung handelt.
  10. Verfahren nach Anspruch 7, wobei die vorbestimmte Verteilung so beschaffen ist, dass W = 1 eine Wahrscheinlichkeit von 1/K aufweist, wobei K der Anzahl der Eingangssymbole (IS) in der Eingangsdatei (101) entspricht, und wobei W = i eine Wahrscheinlichkeit von 1/i (i – 1) für i = 2, ... K aufweist.
  11. Verfahren nach Anspruch 1, wobei die vorbestimmte Funktion der durch AL(I) angezeigten zugeordneten Eingangssymbole gemäß einem Reed-Solomon-Code bestimmt wird.
  12. Verfahren nach Anspruch 1, wobei das Eingangsalphabet und das Ausgangsalphabet das gleiche Alphabet darstellen.
  13. Verfahren nach Anspruch 1, wobei das Eingangsalphabet 2Mi Symbole umfasst, und wobei jedes Eingangssymbol Mi Bits codiert, und wobei das Ausgangsalphabet 2Mo Symbole umfasst, und wobei jede Gruppe von Ausgangssymbolen Mo Bits codiert.
  14. Verfahren nach Anspruch 1, wobei jeder folgende Schlüssel I um Eins größer ist als der vorangehende Schlüssel.
  15. Verfahren nach Anspruch 1, wobei der Schritt des Berechnens von AL(I) die folgenden Schritte umfasst: das Identifizieren der Anzahl K von Eingangssymbolen in der Eingangsdatei (101) zumindest näherungsweise sowie einer Gewichtung W(I); das Bestimmen der kleinsten Primzahl P, die größer oder gleich K ist; zumindest das logische Auffüllen der Eingangsdatei mit P – K-Fülleingangssymbolen, wenn P größer ist als K; das Erzeugen einer ersten ganzen Zahl X, so dass 1 ≤ X < P ist, und einer zweiten ganzen Zahl Y, so dass 0 ≤ Y < P ist; und das Festlegen des J-ten Eintrags in AL(I) auf ((Y + (J – 1)X)modP) für jedes J von 1 bis W(I).
  16. Verfahren nach Anspruch 15, wobei der Schritt des Festlegens des J-ten Eintrags in AL(I) für jedes J die folgenden Schritte umfasst: das Festlegen des ersten Eintrags V[J = 0] in einer Anordnung V bis Y; das Festlegen des J-ten Eintrags V[J] in der Anordnung V bis (V[J – 1] + X)modP) für jedes J von 1 bis W(I) minus Eins; und das Verwenden der Anordnung V als die Liste AL(I).
  17. Verfahren zum Erzeugen einer Mehrzahl von Gruppen (710) von Ausgangssymbolen (OS) gemäß Anspruch 1, wobei das Verfahren ferner das Erzeugen einer Mehrzahl von Schlüsseln (I) für die zu erzeugenden Gruppen von Ausgangssymbolen umfasst, mit einem Schlüssel je Gruppe, und das Ausgeben jeder der erzeugten Gruppen von Ausgangssymbolen als eine Ausgangssequenz, die durch einen Datenlöschkanal übertragen werden soll.
  18. Verfahren nach Anspruch 17, wobei jeder Schlüssel (I) unabhängig von anderen ausgewählten Schlüsseln ausgewählt wird.
  19. Verfahren nach einem der Ansprüche 1 bis 16, wobei das Verfahren ferner die folgenden Schritte umfasst: a) das Anordnen der von einer Quelle (2200) über ein Paketübertragungsmedium (2230) an ein Ziel (2220) zu übertragenden Daten als eine geordnete Gruppe von Eingangssymbolen, die jeweils aus dem genannten Eingangsalphabet ausgewählt werden und eine Position in den Daten aufweisen; b) das Erzeugen einer Mehrzahl der genannten Gruppen (710) von Ausgangssymbolen (OS), wobei jedes Ausgangssymbol gemäß den Schritten a) bis c) eines der Ansprüche 1 bis 16 erzeugt wird; c) das Paketisieren mindestens einer der Gruppen von Ausgangssymbolen mindestens einer Gruppe der Mehrzahl von Gruppen in jedes Paket einer Mehrzahl von Paketen; d) das Übertragen der Mehrzahl von Paketen über das Paketübertragungsmedium; e) das Empfangen mindestens einiger der Mehrzahl von Paketen an dem Ziel; und f) das Decodieren der Daten aus der Mehrzahl der empfangenen Pakete.
  20. Verfahren nach Anspruch 19, wobei der Schritt des Decodierens der Daten die folgenden Schritte umfasst: 1) das Verarbeiten jeder empfangenen Gruppe von Ausgangssymbolen (OS) durch die folgenden Schritte: a) das Bestimmen des Schlüssels (I) für die Gruppe; b) das Bestimmen (705) der Gewichtung W(I) für die Gruppe; und c) das Bestimmen (710) der W(I) zugeordneten Eingangssymbole für die Gruppe; 2) das Bestimmen, ob ausreichende Informationen empfangen worden sind, um ein beliebiges Eingangssymbol zu decodieren; und 3) das Decodieren von Eingangssymbolen, die aus den empfangenen Informationen decodiert werden können.
  21. Verfahren nach Anspruch 20, wobei der Schritt des Bestimmens des Schlüssels (I) einen Schritt des zumindest teilweisen Bestimmens des Schlüssels (I) aus den Daten umfasst, die in Paketen zugeführt werden, welche über das Paketübertragungsmedium (2230) empfangen werden.
  22. Verfahren nach Anspruch 19, wobei der Schritt des Decodierens der Daten den folgenden Schritt umfasst: 1) das Verarbeiten jeder empfangenen Gruppe von Ausgangssymbolen durch die folgenden Schritte: a) das Bestimmen (705) der Gewichtung W(I) für die empfangene Gruppe; b) das Bestimmen (710) der W(I) für die empfangene Gruppe zugeordneten Eingangssymbole; und c) das Speichern der Werte B(I) der Ausgangssymbole der Gruppe in einer Tabelle der Gruppe von Ausgangssymbolen in Verbindung mit der Gewichtung W(I) und den Positionen der W (I) Zuordnungen für die empfangene Gruppe; 2) das Empfangen zusätzlicher Gruppen von Ausgangssymbolen und das Verarbeiten dieser gemäß Schritt 1) und dessen Unterschritten; 3) das Ausführen der folgenden Schritte für jede Gruppe von Ausgangssymbolen G1 mit einer Gewichtung von höchstens einer Gruppengröße und ohne Bezeichnung als verbrauchte Gruppe von Ausgangssymbolen: a) das Berechnen von Eingangssymbolen für Eingangssymbolpositionen, die G1 entsprechen; b) das Identifizieren verbundener Gruppen von Ausgangssymbolen in der Tabelle der Gruppe von Ausgangssymbolen, wobei es sich bei einer verbundenen Gruppe von Ausgangssymbolen um eine Gruppe von Ausgangssymbolen handelt, die eine Funktion mindestens eines Eingangssymbols darstellt, die in dem Schritt 3)a) verarbeitet wird; c) das neue Berechnen der verbundenen Gruppen von Ausgangssymbolen als von den in dem Schritt 3)a) verarbeiteten Eingangssymbolen; d) das Herabsetzen der Gewichtungen der Gruppen von in dem Schritt 3)c) neu berechneten Ausgangssymbolen, so dass diese deren Unabhängigkeit von den in dem Schritt 3)a) verarbeiteten Eingangssymbolen darstellen; e) das Bezeichnen von G1 als ein verbrauchtes Ausgangssymbol; und 4) das Wiederholen der vorstehenden Schritte 1) bis 3), bis die geordnete Gruppe von Eingangssymbolen an dem Ziel wiederhergestellt wird.
  23. Verfahren nach Anspruch 22, wobei der Schritt des Bezeichnens einen Schritt der Zuordnung einer Gewichtung von Null zu dem verbrauchten Ausgangssymbol darstellt.
  24. Verfahren nach Anspruch 22, wobei der Schritt des Bezeichnens einen Schritt des Entfernens der verbrauchten Gruppe von Ausgangssymbolen aus der Tabelle der Gruppe von Ausgangssymbolen umfasst.
  25. Verfahren nach Anspruch 19, wobei es sich bei dem Schritt des Paketisierens um einen Schritt des Paketisierens mindestens einer Gruppe von Ausgangssymbolen (B(I)) aus mindestens einer Gruppe einer Mehrzahl von Gruppen von Ausgangssymbolen in jedes Paket handelt, wobei das Verfahren ferner einen Schritt des Verwendens der Position einer Gruppe von Ausgangssymbolen innerhalb eines Pakets als Teil des Schlüssels für die Gruppe von Ausgangssymbolen umfasst.
  26. Verfahren nach Anspruch 1, wobei der Schritt des Berechnens einen Schritt des Berechnens der Anzahl G(I) von Ausgangssymbolen in der Gruppe umfasst, wobei G(I) eine positive ganze Zahl und die gleiche positive ganze Zahl für alle Werte von I darstellt.
  27. Verfahren nach Anspruch 1, wobei das Verfahren ferner die folgenden Schritte umfasst: das Erzeugen einer Mehrzahl von Gruppen von Ausgangssymbolen (B(I)) durch die Schritte des Ermittelns eines Schlüssels I; das Berechnen einer Liste AL(I), und das Erzeugen eines Ausgangssymbols; und das Übertragen der erzeugten Mehrzahl von Gruppen.
  28. Verfahren nach Anspruch 27, wobei der Schritt des Erzeugens einer Mehrzahl von Gruppen einen Schritt des Erzeugens unabhängiger Mehrzahlen von Gruppen an jeder Quelle einer Mehrzahl von Quellen darstellt, wobei die Mehrzahlen dahingehend unabhängig sind, dass jede Quelle der Mehrzahl von Quellen ihre Listen zugeordneter Eingangssymbole (IS) bestimmt, ohne dass ein Verweis auf Listen erforderlich ist, die durch andere Quellen der Mehrzahl von Quellen erzeugt werden, ohne dass eine unabhängige Quelle vollständig die Informationsausgabe einer anderen unabhängigen Quelle dupliziert.
  29. Verfahren nach Anspruch 27, wobei dieses ferner einen Schritt des Verteilens der Mehrzahl von Gruppen über eine Mehrzahl von Kanälen umfasst, so dass der durch einen Kanal bereitgestellte Informationsinhalt kein vollständiges Duplikat des Informationsinhalts eines anderen Kanals darstellt.
  30. Verfahren nach Anspruch 27, wobei das Verfahren ferner folgendes umfasst: das Bestimmen einer Anzahl G(I) von Ausgangssymbolen (B(I)) in jeder Gruppe von Ausgangssymbolen; und das Berechnen eines Wertes (B(I)) jedes der G(I) Ausgangssymbole in der Gruppe aus einer vorbestimmten Wertefunktion der zugeordneten W(I) Eingangssymbole.
  31. Verfahren nach Anspruch 30, wobei es sich bei dem Schritt des Erzeugens einer Mehrzahl von Gruppen um einen Schritt des Erzeugens unabhängiger Mehrzahl von Gruppen an jeder Quelle einer Mehrzahl von Quellen handelt, wobei die Mehrzahlen dahingehend unabhängig sind, dass jede Quelle der Mehrzahl von Quellen seine Schlüssel auswählt, ohne dass ein Verweis auf durch andere Quellen der Mehrzahl von Quellen erzeugte Schlüssel erforderlich ist, ohne dass eine unabhängige Quelle vollständig die Informationsausgabe einer anderen unabhängigen Quelle dupliziert.
  32. Verfahren nach Anspruch 30, wobei das Verfahren ferner einen Schritt des Verteilens der Mehrzahl von Gruppen über eine Mehrzahl von Kanälen umfasst, so dass der durch einen Kanal bereitgestellte Informationsinhalt kein vollständiges Duplikat des Informationsinhalts eines anderen Kanals darstellt.
  33. Verfahren nach Anspruch 1, wobei das Verfahren ferner die folgenden Schritte umfasst: a. das Anordnen der von einer Quelle über eine Mehrzahl von Kanälen zu übertragenden Daten als eine geordnete Anordnung von Eingangssymbolen (IS); b. das Erzeugen einer Mehrzahl von Gruppen von Ausgangssymbolen (B(I)) für jeden Kanal der Mehrzahl von Kanälen, wobei es sich bei einer Gruppe um ein oder mehrere Ausgangssymbole handelt, wobei jede Gruppe der Mehrzahl von Gruppen durch die Schritte des Ermittelns eines Schlüssels I, des Berechnens einer Liste AL(I) und des Erzeugens eines Ausgangssymbols erzeugt wird; c. das Paketisieren mindestens einer Gruppe der Mehrzahl von Gruppen in jedes Paket einer Mehrzahl von Paketen; und d. das Übertragen de Mehrzahl von Paketen über die Mehrzahl von Kanälen, wobei mindestens zwei Kanäle der Mehrzahl von Kanälen Pakete führen, die Gruppen aufweisen, die mit eindeutigen Werten für den Schlüssel I erzeugt werden.
  34. Verfahren nach Anspruch 33, wobei die Quelle eine einzelne Quelle umfasst, die Werte für den Schlüssel (I) für die einzelne Quelle erzeugt und die resultierenden Gruppen über die Mehrzahl von Kanälen überträgt, so dass die Gruppen, die von beliebigen zwei Kanälen der Mehrzahl von Kanälen empfangen werden, keine vollständigen Duplikate darstellen.
  35. Verfahren nach Anspruch 33, wobei die Werte für den Schlüssel (I) unabhängig für jeden Kanal der Mehrzahl von Kanälen ausgewählt werden, so dass die von beliebigen zwei Kanälen der Mehrzahl von Kanälen empfangenen Gruppen keine vollständigen Duplikate darstellen.
DE60029601T 1999-09-17 2000-09-15 Gruppenkettenreaktionskodierer mit variabler anzahl zugeordneter eingabedaten für jeden ausgaben gruppenkode Expired - Lifetime DE60029601T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US399201 1999-09-17
US09/399,201 US6320520B1 (en) 1998-09-23 1999-09-17 Information additive group code generator and decoder for communications systems
PCT/US2000/025405 WO2001020786A1 (en) 1999-09-17 2000-09-15 Group chain reaction encoder with variable number of associated input data for each output group code

Publications (2)

Publication Number Publication Date
DE60029601D1 DE60029601D1 (de) 2006-09-07
DE60029601T2 true DE60029601T2 (de) 2007-07-19

Family

ID=23578574

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60029601T Expired - Lifetime DE60029601T2 (de) 1999-09-17 2000-09-15 Gruppenkettenreaktionskodierer mit variabler anzahl zugeordneter eingabedaten für jeden ausgaben gruppenkode

Country Status (10)

Country Link
US (1) US6320520B1 (de)
EP (1) EP1214793B9 (de)
JP (1) JP4680359B2 (de)
KR (1) KR20010113762A (de)
AT (1) ATE334507T1 (de)
AU (1) AU781130B2 (de)
CA (1) CA2359534C (de)
DE (1) DE60029601T2 (de)
IL (1) IL144594A (de)
WO (1) WO2001020786A1 (de)

Families Citing this family (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7068729B2 (en) 2001-12-21 2006-06-27 Digital Fountain, Inc. Multi-stage code generator and decoder for communication systems
US6307487B1 (en) * 1998-09-23 2001-10-23 Digital Fountain, Inc. Information additive code generator and decoder for communication systems
US6320520B1 (en) 1998-09-23 2001-11-20 Digital Fountain Information additive group code generator and decoder for communications systems
FR2799592B1 (fr) * 1999-10-12 2003-09-26 Thomson Csf Procede de construction et de codage simple et systematique de codes ldpc
US6826711B2 (en) 2000-02-18 2004-11-30 Avamar Technologies, Inc. System and method for data protection with multidimensional parity
US7194504B2 (en) * 2000-02-18 2007-03-20 Avamar Technologies, Inc. System and method for representing and maintaining redundant data sets utilizing DNA transmission and transcription techniques
US7062648B2 (en) * 2000-02-18 2006-06-13 Avamar Technologies, Inc. System and method for redundant array network storage
US6704730B2 (en) 2000-02-18 2004-03-09 Avamar Technologies, Inc. Hash file system and method for use in a commonality factoring system
US6807649B1 (en) * 2000-05-23 2004-10-19 Hewlett-Packard Development Company, L.P. Encryption keys for multiple drive fault tolerance
US8131867B1 (en) 2000-06-01 2012-03-06 Qualcomm Incorporated Dynamic layer congestion control for multicast transport
US6486803B1 (en) 2000-09-22 2002-11-26 Digital Fountain, Inc. On demand encoding with a window
US6810398B2 (en) * 2000-11-06 2004-10-26 Avamar Technologies, Inc. System and method for unorchestrated determination of data sequences using sticky byte factoring to determine breakpoints in digital sequences
US7072971B2 (en) 2000-11-13 2006-07-04 Digital Foundation, Inc. Scheduling of multiple files for serving on a server
US7240358B2 (en) * 2000-12-08 2007-07-03 Digital Fountain, Inc. Methods and apparatus for scheduling, serving, receiving media-on demand for clients, servers arranged according to constraints on resources
US20020129159A1 (en) 2001-03-09 2002-09-12 Michael Luby Multi-output packet server with independent streams
JP4632574B2 (ja) * 2001-05-25 2011-02-16 株式会社日立製作所 記憶装置およびファイルデータのバックアップ方法およびファイルデータのコピー方法
US20030055915A1 (en) * 2001-09-14 2003-03-20 Ngo Kin Cuc Method and apparatus for transmitting data over a network
US7181668B2 (en) * 2002-03-29 2007-02-20 Lucent Technologies Inc. Method and system of decoding an encoded data block
US6677864B2 (en) * 2002-04-18 2004-01-13 Telefonaktiebolaget L.M. Ericsson Method for multicast over wireless networks
US9240810B2 (en) 2002-06-11 2016-01-19 Digital Fountain, Inc. Systems and processes for decoding chain reaction codes through inactivation
EP2278718B1 (de) 2002-06-11 2013-12-18 Digital Fountain, Inc. Dekodieren von Kettenreaktionscodes durch Inaktivierung
US7363346B2 (en) * 2002-09-07 2008-04-22 Appistry, Inc. Reliably storing information across multiple computers such as in a hive of computers
US7379959B2 (en) 2002-09-07 2008-05-27 Appistry, Inc. Processing information using a hive of computing engines including request handlers and process handlers
EP2355360B1 (de) 2002-10-05 2020-08-05 QUALCOMM Incorporated Systematische kodierung und dekodierung von kettenreaktionskoden
US20040199669A1 (en) * 2003-04-04 2004-10-07 Riggs Nicholas Dale Apparatus and method for efficiently and securely transferring files over a communications network
US6734811B1 (en) * 2003-05-21 2004-05-11 Apple Computer, Inc. Single-ended balance-coded interface with embedded-timing
EP2722995B1 (de) 2003-10-06 2023-04-19 QUALCOMM Incorporated Soft-Dekodierung von Multi-Stage Chain Reaction Kodes
KR101035219B1 (ko) 2003-10-08 2011-05-18 디지털 파운튼, 인크. Fec-기반 신뢰도 제어 프로토콜
CN100555213C (zh) * 2003-10-14 2009-10-28 松下电器产业株式会社 数据转换器
US7458003B2 (en) * 2003-12-01 2008-11-25 Qualcomm Incorporated Low-complexity, capacity-achieving code for communication systems
WO2005112250A2 (en) * 2004-05-07 2005-11-24 Digital Fountain, Inc. File download and streaming system
WO2006020826A2 (en) * 2004-08-11 2006-02-23 Digital Fountain, Inc. Method and apparatus for fast encoding of data symbols according to half-weight codes
US7533324B2 (en) * 2004-09-22 2009-05-12 Kencast, Inc. System, method and apparatus for FEC encoding and decoding
US7502382B1 (en) * 2004-09-30 2009-03-10 Itt Manufacturing Enterprises, Inc. Method and apparatus for multicast packet distribution in a satellite constellation network
US8270901B2 (en) 2004-12-17 2012-09-18 Martin E. Hellman Dropout-resistant media broadcasting system
US7865917B2 (en) * 2004-12-17 2011-01-04 Martin E Hellman Security enhanced tiered subscription broadcast system
US8627354B2 (en) 2004-12-17 2014-01-07 Martin E. Hellman Tiered subscription broadcast system
US7739580B1 (en) 2005-02-17 2010-06-15 Kencast, Inc. System, method and apparatus for reducing blockage losses on information distribution networks
JP4596958B2 (ja) * 2005-04-01 2010-12-15 株式会社エヌ・ティ・ティ・ドコモ 無線通信装置及び無線通信方法
US20060265511A1 (en) * 2005-05-20 2006-11-23 Riggs Nicholas D Apparatus and method for efficiently and securely transferring files over a communications network
US7840178B2 (en) * 2005-07-12 2010-11-23 Martin E. Hellman FM broadcast system competitive with satellite radio
US8223643B1 (en) 2005-09-06 2012-07-17 Kencast, Inc. Method for packet-level FEC encoding a stream of source packets using shifted interleaving
JP4546387B2 (ja) * 2005-11-17 2010-09-15 富士通株式会社 バックアップシステム、方法及びプログラム
US20070165847A1 (en) * 2006-01-18 2007-07-19 Langin-Hooper Jerry J Defined-distribution pseudo-random number generator
JP4718340B2 (ja) * 2006-02-02 2011-07-06 富士通株式会社 ストレージシステム、制御方法及びプログラム
KR101292851B1 (ko) 2006-02-13 2013-08-02 디지털 파운튼, 인크. 가변적 fec 오버헤드 및 보호 구간을 이용하는 스트리밍및 버퍼링
US8065582B2 (en) * 2006-02-13 2011-11-22 Digital Fountain, Inc. FEC streaming with aggregation of concurrent streams for FEC computation
US9270414B2 (en) 2006-02-21 2016-02-23 Digital Fountain, Inc. Multiple-field based code generator and decoder for communications systems
US7979771B2 (en) * 2006-04-04 2011-07-12 Permabit Technology Corporation Erasure coding technique for scalable and fault tolerant storage system
EP3336707A1 (de) 2006-05-05 2018-06-20 Hybir Inc. Gruppenbasiertes komplettes und inkrementales computerdateisicherungssystem, verfahren und gerät
US7971129B2 (en) 2006-05-10 2011-06-28 Digital Fountain, Inc. Code generator and decoder for communications systems operating using hybrid codes to allow for multiple efficient users of the communications systems
US20070276951A1 (en) * 2006-05-25 2007-11-29 Nicholas Dale Riggs Apparatus and method for efficiently and securely transferring files over a communications network
US9386064B2 (en) 2006-06-09 2016-07-05 Qualcomm Incorporated Enhanced block-request streaming using URL templates and construction rules
US9432433B2 (en) 2006-06-09 2016-08-30 Qualcomm Incorporated Enhanced block-request streaming system using signaling or block creation
US9380096B2 (en) 2006-06-09 2016-06-28 Qualcomm Incorporated Enhanced block-request streaming system for handling low-latency streaming
US9209934B2 (en) 2006-06-09 2015-12-08 Qualcomm Incorporated Enhanced block-request streaming using cooperative parallel HTTP and forward error correction
US9419749B2 (en) 2009-08-19 2016-08-16 Qualcomm Incorporated Methods and apparatus employing FEC codes with permanent inactivation of symbols for encoding and decoding processes
US9178535B2 (en) 2006-06-09 2015-11-03 Digital Fountain, Inc. Dynamic stream interleaving and sub-stream based delivery
US7924761B1 (en) 2006-09-28 2011-04-12 Rockwell Collins, Inc. Method and apparatus for multihop network FEC encoding
US8707139B2 (en) 2006-10-18 2014-04-22 Kencast, Inc. Systems, methods, apparatus, and computer program products for providing forward error correction with low latency
KR101373859B1 (ko) * 2007-02-16 2014-03-14 삼성전자주식회사 비동기 전송 모드에서 셀 트래픽 처리 방법 및 장치
US20080205229A1 (en) * 2007-02-26 2008-08-28 Yung-Chih Li Method of identifying optical disc
US7949778B2 (en) * 2007-03-27 2011-05-24 Kencast, Inc. Systems, methods, apparatus and computer program products for providing packet-level FEC with higher throughput using user datagram protocol (UDP)
RU2010114256A (ru) 2007-09-12 2011-10-20 Диджитал Фаунтин, Инк. (Us) Формирование и передача исходной идентификационной информации для обеспечения надежного обмена данными
ES2519766T3 (es) 2007-12-20 2014-11-07 Optis Wireless Technology, Llc Señalización de canal de control usando un campo de señalización común para el formato de trnasporte y la versión de redundancia
US8442070B1 (en) * 2008-02-01 2013-05-14 Hobnob, Inc. Fractional threshold encoding and aggregation
US8418034B2 (en) * 2008-02-08 2013-04-09 Kencast, Inc. Systems, methods, apparatus and computer program products for highly reliable file delivery using compound and braided FEC encoding and decoding
US9100153B2 (en) * 2008-09-25 2015-08-04 The Royal Institution For The Advancement Of Learning/Mcgill University Methods and systems for improving iterative signal processing
US9281847B2 (en) 2009-02-27 2016-03-08 Qualcomm Incorporated Mobile reception of digital video broadcasting—terrestrial services
US9288010B2 (en) 2009-08-19 2016-03-15 Qualcomm Incorporated Universal file delivery methods for providing unequal error protection and bundled file delivery services
US9015564B2 (en) 2009-08-19 2015-04-21 Qualcomm Incorporated Content delivery system with allocation of source data and repair data among HTTP servers
US9917874B2 (en) 2009-09-22 2018-03-13 Qualcomm Incorporated Enhanced block-request streaming using block partitioning or request controls for improved client-side handling
US9136981B2 (en) 2010-03-03 2015-09-15 Qualcomm Incorporated Block aggregation of objects in a communication system
US20110280311A1 (en) 2010-05-13 2011-11-17 Qualcomm Incorporated One-stream coding for asymmetric stereo video
US9485546B2 (en) 2010-06-29 2016-11-01 Qualcomm Incorporated Signaling video samples for trick mode video representations
US8918533B2 (en) 2010-07-13 2014-12-23 Qualcomm Incorporated Video switching for streaming video data
US9185439B2 (en) 2010-07-15 2015-11-10 Qualcomm Incorporated Signaling data for multiplexing video components
US9596447B2 (en) 2010-07-21 2017-03-14 Qualcomm Incorporated Providing frame packing type information for video coding
US9456015B2 (en) 2010-08-10 2016-09-27 Qualcomm Incorporated Representation groups for network streaming of coded multimedia data
US9270299B2 (en) 2011-02-11 2016-02-23 Qualcomm Incorporated Encoding and decoding using elastic codes with flexible source block mapping
US8958375B2 (en) 2011-02-11 2015-02-17 Qualcomm Incorporated Framing for an improved radio link protocol including FEC
US9253233B2 (en) 2011-08-31 2016-02-02 Qualcomm Incorporated Switch signaling methods providing improved switching between representations for adaptive HTTP streaming
US9843844B2 (en) 2011-10-05 2017-12-12 Qualcomm Incorporated Network streaming of media data
KR101591238B1 (ko) 2011-11-01 2016-02-18 퀄컴 인코포레이티드 Http 서버들 사이의 소스 데이터 및 리페어 데이터의 할당에 의한 컨텐츠 전달 시스템
US9294226B2 (en) 2012-03-26 2016-03-22 Qualcomm Incorporated Universal object delivery and template-based file delivery
US9413494B2 (en) 2013-01-17 2016-08-09 Qualcomm Incorporated FEC-based reliable transport control protocols for multipath streaming
US10771191B2 (en) 2018-03-09 2020-09-08 Kencast, Inc. System for highly reliable file delivery of using continuous FEC encoding/decoding
EP4085675A4 (de) * 2019-12-30 2023-08-16 Istanbul Medipol Universitesi Sicheres kommunikationsverfahren

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4365338A (en) * 1980-06-27 1982-12-21 Harris Corporation Technique for high rate digital transmission over a dynamic dispersive channel
JP2576776B2 (ja) 1993-11-10 1997-01-29 日本電気株式会社 パケット伝送方法・パケット伝送装置
US5432787A (en) 1994-03-24 1995-07-11 Loral Aerospace Corporation Packet data transmission system with adaptive data recovery method
US5617541A (en) * 1994-12-21 1997-04-01 International Computer Science Institute System for packetizing data encoded corresponding to priority levels where reconstructed data corresponds to fractionalized priority level and received fractionalized packets
US6079042A (en) 1995-04-27 2000-06-20 The Trustees Of The Stevens Institute Of Technology High integrity transport for time critical multimedia networking applications
US5805825A (en) 1995-07-26 1998-09-08 Intel Corporation Method for semi-reliable, unidirectional broadcast information services
EP0854650A3 (de) 1997-01-17 2001-05-02 NOKIA TECHNOLOGY GmbH Verfahren zur Adressierung eines Dienstes in einem digitalen Videorundfunksystem
US5983383A (en) * 1997-01-17 1999-11-09 Qualcom Incorporated Method and apparatus for transmitting and receiving concatenated code data
US6178536B1 (en) 1997-08-14 2001-01-23 International Business Machines Corporation Coding scheme for file backup and systems based thereon
US6163870A (en) 1997-11-06 2000-12-19 Compaq Computer Corporation Message encoding with irregular graphing
US6195777B1 (en) 1997-11-06 2001-02-27 Compaq Computer Corporation Loss resilient code with double heavy tailed series of redundant layers
US6081909A (en) * 1997-11-06 2000-06-27 Digital Equipment Corporation Irregularly graphed encoding technique
US6073250A (en) * 1997-11-06 2000-06-06 Luby; Michael G. Loss resilient decoding technique
US6081918A (en) 1997-11-06 2000-06-27 Spielman; Daniel A. Loss resilient code with cascading series of redundant layers
US6307487B1 (en) * 1998-09-23 2001-10-23 Digital Fountain, Inc. Information additive code generator and decoder for communication systems
US6320520B1 (en) 1998-09-23 2001-11-20 Digital Fountain Information additive group code generator and decoder for communications systems
JP3451221B2 (ja) * 1999-07-22 2003-09-29 日本無線株式会社 誤り訂正符号化装置、方法及び媒体、並びに誤り訂正符号復号装置、方法及び媒体
US6453440B1 (en) * 1999-08-04 2002-09-17 Sun Microsystems, Inc. System and method for detecting double-bit errors and for correcting errors due to component failures

Also Published As

Publication number Publication date
AU1188401A (en) 2001-04-17
WO2001020786A8 (en) 2001-04-26
US6320520B1 (en) 2001-11-20
WO2001020786A9 (en) 2002-11-21
KR20010113762A (ko) 2001-12-28
JP4680359B2 (ja) 2011-05-11
WO2001020786A1 (en) 2001-03-22
EP1214793A1 (de) 2002-06-19
JP2001189665A (ja) 2001-07-10
EP1214793B9 (de) 2006-10-18
IL144594A (en) 2007-08-19
CA2359534C (en) 2011-04-19
ATE334507T1 (de) 2006-08-15
EP1214793B1 (de) 2006-07-26
DE60029601D1 (de) 2006-09-07
AU781130B2 (en) 2005-05-05
CA2359534A1 (en) 2001-03-22
IL144594A0 (en) 2002-05-23

Similar Documents

Publication Publication Date Title
DE60029601T2 (de) Gruppenkettenreaktionskodierer mit variabler anzahl zugeordneter eingabedaten für jeden ausgaben gruppenkode
Luby LT codes
US6307487B1 (en) Information additive code generator and decoder for communication systems
RU2371863C2 (ru) Механизм ответа при восстановлении данных в режиме &#34;точка-точка&#34; для систем передачи &#34;точка - много точек&#34;
US6996097B1 (en) Receiver-driven layered error correction multicast over heterogeneous packet networks
DE69727325T2 (de) Fehlerdetektion für ARQ Systeme
DE69733346T2 (de) Verfahren und gerät zur datenrückgewinnung in arq-übertragungssystemen
US6532562B1 (en) Receiver-driven layered error correction multicast over heterogeneous packet networks
US6594798B1 (en) Receiver-driven layered error correction multicast over heterogeneous packet networks
CN104067594A (zh) 在http服务器之间分配源数据和修复数据的内容传送系统
EP1771960A1 (de) Codier- und decodierverfahren, sowie codier- und decodiervorrichtungen mit einem zweistufigen fehlerschutzverfahren
WO2005112330A1 (de) Verfahren, sende- sowie empfangseinrichtung zur übertragung von digitalen informationspaketen in einem datennetz
DE102011103631B4 (de) Verfahren zur Übertragung von Daten
DE102022117663B3 (de) Verfahren zur Übertragung einer IBLT-Datenstruktur und Benutzerendgerät
EP1720274B1 (de) Verfahren und Vorrichtung zum Übertragen von Fehlerkorrektursymbolen bei Verwendung eines zweidimensionalen Reed-Solomon-Codes
DE102011103564B3 (de) Verfahren zur Wiederherstellung verlorener und/oder beschädigter Daten
EP1668812A1 (de) Verfahren und vorrichtung zum dekodieren von mittels paketorientierten datenübertragungsnetzen übertragenen kodierten datenpaketen und verfahren und vorrichtung zum kodieren und dekodieren von über paketorientierte datenübertragungsnetze zu übertragende datenpaketen
Lawabni et al. A scalable and reliable hybrid scheme for image multicast applications
Neumann Large Scale Content Delivery applied to Files and Videos

Legal Events

Date Code Title Description
8364 No opposition during term of opposition