PatentDe  


Dokumentenidentifikation DE60032895T2 25.10.2007
EP-Veröffentlichungsnummer 0001186107
Titel TURBOCODETERMINIERUNG
Anmelder Lucent Technologies Inc., Murray Hill, N.J., US
Erfinder WEI, Lee-Fang, Lincroft, NJ 07738, US
Vertreter derzeit kein Vertreter bestellt
DE-Aktenzeichen 60032895
Vertragsstaaten DE, FR, GB
Sprache des Dokument EN
EP-Anmeldetag 24.05.2000
EP-Aktenzeichen 009377623
WO-Anmeldetag 24.05.2000
PCT-Aktenzeichen PCT/US00/14392
WO-Veröffentlichungsnummer 2000074249
WO-Veröffentlichungsdatum 07.12.2000
EP-Offenlegungsdatum 13.03.2002
EP date of grant 10.01.2007
Veröffentlichungstag im Patentblatt 25.10.2007
IPC-Hauptklasse H03M 13/29(2006.01)A, F, I, 20051017, B, H, EP
IPC-Nebenklasse H03M 13/25(2006.01)A, L, I, 20051017, B, H, EP   H03M 13/27(2006.01)A, L, I, 20051017, B, H, EP   

Beschreibung[de]
Allgemeiner Stand der Technik

Die vorliegende Erfindung betrifft die digitale Datenübertragung, und insbesondere Fehler korrigierende Codes.

Stetige Fortschritte in Vorwärts-Fehlerkorrektur-Codes, wie z.B. Faltungscodes und Gittercodes, haben es den Konstrukteuren von Modems, drahtlosen Kommunikationssystemen und anderen digitalen Kommunikationssystemen ermöglicht, bei einer bestimmten Fehlerhäufigkeitsleistung erhöhte Bitraten zu erzielen. Unter den verschiedenen Innovationen, die im Laufe der Jahre eingeführt wurden, befinden sich so genannte Turbocodes. Im Herzen des Turbocodekonzepts liegt die Codierung von Eingangsdaten unter Benutzung von mehr als einem Code, derart kombiniert mit einem Verschachtler, dass unter Benutzung einer entsprechenden Anzahl von so genannten weichen Eingangs-/weichen Ausgangsdecodierern, die iterativ arbeiten, eine verbesserte Leistung erzielt werden kann (im Vergleich zu einer einfachen Codierung).

Eine frühe Beschreibung von Turbocodes erscheint in C. Berrou et al., „Near Shannon limit error-correcting coding and decoding: Turbo codes", Proc. 1993 Int. Conf. Communication (Genf, Schweiz, Mai 1993), Seiten 1064 bis 1070. Berrou et al. offenbaren einen so genannten parallel verketteten Turbocode. Die Eingangsdaten werden einem ersten Faltungscodierer zugeführt, und eine verschachtelte Version der Eingangsdaten wird einem zweiten Faltungscodierer zugeführt. Die Ausgangsbits der zwei Codierer werden dann zur Übertragung Signalpunkten einer zweidimensionalen (2D) 4-PSK-Signalisierungskonstellation zugeordnet. Einige der redundanten Bits, die von den Codierern erzeugt werden, können vor dem Zuordnungsschritt einer so genannten Punktierung unterzogen werden, um die Bandbreiteneffizienz zu verbessern (gemessen in Bits pro 2D-Signalpunkt).

Bei einer relativ hohen Fehlerhäufigkeit stellt ein parallel verketteter Turbocode einen ausgezeichneten Codierungsgewinn bereit, und reduziert so in vorteilhafter Weise den Pegel des empfangenen Signal-Rauschverhältnisses, der erforderlich ist, um einen gewünschten Umfang an Fehlerhäufigkeitsleistung zu erreichen. Nachteilhafterweise erfordert das Erreichen dieses ausgezeichneten Codierungsgewinns jedoch einen extrem langen Verschachtler. Dies bringt eine signifikante Verzögerung von Ende zu Ende, oder Latenz, ein, die bei vielen Anwendungen unerwünscht ist. Außerdem weist ein parallel verketteter Turbocode ein so genanntes Phänomen der unteren Fehlerschranke auf, wobei die Verbesserung des Codierungsgewinns bei niedrigerer Fehlerhäufigkeit weit weniger dramatisch ist, und tatsächlich mit derjenigen vergleichbar ist, die unter Benutzung einer üblicheren Codierung und Decodierung erreicht wird, oder dieser sogar unterlegen ist.

Auch sind im Stand der Technik so genannte seriell verkettete Turbocodes bekannt, wie z.B. von S. Benedetto et al, „Serial concatenation of interleaved codes: Performance analysis, design, and iterative decoding", IEEE Trans. Inform. Theory, Band 44, Seiten 909 bis 926, Mai 1998, offenbart. Hier werden die Eingangsdaten zunächst einem ersten Faltungscodierer zugeführt, und die Ausgangsbits des ersten Codierers werden nach der Verschachtelung als Eingangsbits für einen zweiten Faltungscodierer benutzt. Die Ausgangsbits des zweiten Codierers werden dann zum Übertragen den Signalpunkten einer 2D-4-PSK-Signalisierungskonstellation zugeordnet. Das oben erwähnte Phänomen der unteren Fehlerschranke ist bei seriell verketteten Turbocodes weniger ausgeprägt als bei parallel verketteten Turbocodes, wodurch ein höherer Codierungsgewinn bei niedrigerer Fehlerhäufigkeit bereitgestellt wird. Allerdings erzeugen diese seriell verketteten Turbocodes mehr redundante Bits als im parallelen Fall, weshalb sie weniger bandbreiteneffizient sind. Außerdem benötigen sie ebenfalls einen langen Verschachtler.

Weder die parallel verketteten noch die seriell verketteten Turbocodes, die in den oben erörterten Referenzen des Stands der Technik beschrieben sind, sind bandbreiteneffizient; jeder von ihnen weist eine Bandbreiteneffizienz von weniger als zwei Bits pro 2D-Signalpunkt auf. Parallel verkettete Turbocodes mit einer größeren Bandbreiteneffizienz sind allerdings bekannt. Siehe beispielsweise S. Benedetto et al, „Bandwidth efficient parallel concatenated coding schemes", Electron. Lett., Band 31, Seiten 2067 bis 2069, 1995, und P. Robertson et al., „Coded modulation scheme employing turbo codes", Electron. Lett., Band 31, Seiten 1546 bis 1547, 1995. Die in diesen Referenzen offenbarten Anordnungen erzielen einen hohen Codierungsgewinn bei einer hohen Fehlerhäufigkeit, wobei sie eine verbesserte Bandbreiteneffizienz von vollen 2 Bits pro 2D-Signalpunkt erzielen, indem Rate-2/3-Gittercodes benutzt werden, die gemeinsam mit einer 2D-8-PSK-Signalisierungskonstellation ausgelegt sind, anstelle der Faltungscodes mit einer 2D-4-PSK-Konstellation, die in der Berrou-Anordnung benutzt werden. Allerdings weisen diese zuletzt erwähnten Codes immer noch das oben erwähnte Phänomen der unteren Fehlerschranke sowie hohe Verzögerungen auf.

Der Stand der Technik lehrt auch, dass ein anderes Verfahren zum Erzielen einer erhöhten Bandbreiteneffizienz unter Erzielung der Vorteile des Turbocode-Ansatzes darin besteht, eine so genannte Mehrstufencodierung zu verwenden, wobei der Code, der auf wenigstens einer der Stufen benutzt wird, ein parallel verketteter Turbocode der Art ist, die von Berrou offenbart wurde. (Wie allgemein bekannt, ist ein Mehrstufencode ein Code, bei dem die Ausgangsbits unterschiedlicher Codes benutzt werden, um zunehmend feinere Untermengen, und schließlich einen einzelnen Signalpunkt der Signalkonstellation auszuwählen.) Ein solcher Code ist in U. Wachsmann et al, „Power and bandwidth efficient digital communication using turbo codes in multilevel codes", Euro. Trans. Telecommun., Band 6, Seiten 557 bis 567, Sep. 1995, offenbart. Allerdings gibt es kein Anzeichen dafür, dass die Fehlerschranken- und Verzögerungscharakteristika eines solchen Mehrstufencodes besser wären als die des parallel verketteten Turbocodes, der in einer nicht mehrstufigen Codierungsanordnung benutzt wird – sie könnten sich sogar als schlechter erweisen.

US-Patentanmeldung Nr. 09/451070, eingereicht am 30. November 1999, namens Serial-Concatenated Turbo Codes, betrifft seriell verkettete Turbocodes, die dort als Turbocodes definiert werden, bei denen wenigstens einige der Ausgangsbits, einschließlich wenigstens eines redundanten Bits, die von einem ersten äußeren Codierer bereitgestellt werden, nach der Verschachtelung von einem zweiten inneren Codierer weiter verarbeitet werden. Solche Turbocodes können jede gewünschte Dimensionalität N ≥ 1 aufweisen, was bedeutet, dass die zu übertragenden Daten durch ein N-faches, oder N-dimensionales, Symbol dargestellt werden, dessen N Koordinaten durch die Ausgangsbits der Codierer unabhängig ausgewählt werden. Wenn N beispielsweise eine gerade Ganzzahl ist, kann ein N-dimensionales Symbol während eines N-dimensionalen „Symbolintervalls" in praktischer Weise als eine Kombination von N/2 2D-Signalpunkten übertragen werden, wobei jede so genannte Signalraumkoordinate des 2D-Signalpunkts während eines 2D-„Signalisierungsintervalls" durch die Amplitude einer In-Phasen- oder Quadraturphasenkomponente eines modulierten Trägersignals dargestellt wird. Auf diese Weise besteht das genannte Symbolintervall aus N/2 Signalisierungsintervallen. Für den Code, bei dem N = 2, sind das Symbolintervall und das Signalisierungsintervall gleich.

Insbesondere bei Turbocodes, welche die Grundgedanken der Erfindung von US-Patentanmeldung Nr. 09/451070 verkörpern, wird a) der Zustand von jedem der Codierer innerer und äußerer Codierer nur einmal pro Symbolintervall vorgerückt, und werden b) alle Datenbits, und wenigstens ein redundantes Bit, das von einem oder beiden Codierern für dieses Symbolintervall erzeugt wird, gemeinsam während eines einzigen Symbolintervalls übertragen, und sind c) der innere und äußere Codierer Gittercodierer. Dieser Ansatz stellt vorteilhafterweise Turbocodes mit einer niedrigeren Verzögerung bereit als Anordnungen des Stands der Technik, und bietet außerdem eine vorteilhafte Kombination aus Fehlerhäufigkeitsleistung, Bandbreiteneffizienz und Decodiererkomplexität, die von Anordnungen des Stands der Technik nicht erzielt wird, wobei eine weniger ausgeprägte (oder vielleicht keine) untere Fehlerschranke vorliegt. Der innere und der äußere Code können jede gewünschte Dimensionalität aufweisen.

Anordnungen, welche die Grundgedanken der Erfindung von US-Patentanmeldung Nr. 09/451070 verkörpern, benutzen eine Signalkonstellation ausreichender Größe (d.h. Anzahl von Symbolen in der Konstellation), um die Übertragung der Datenbits und redundanten Bits innerhalb des genannten einzigen Symbolintervalls zu ermöglichen. Außerdem werden in bevorzugten Ausführungsformen der Turbocode, die Konstellation und die Zuordnung zwischen den zu übertragenden Bits und den Konstellationssymbolen unter gegenseitiger Berücksichtigung ausgewählt, derart, dass die Codekomplexität und die Verschachtelungsverzögerung, die zum Erzielen eines bestimmten Umfangs an Fehlerhäufigkeitsleistung nötig sind, geringer sind, als sie es wären, wenn der Turbocode, die Konstellation und die Zuordnung nicht unter gegenseitiger Berücksichtigung ausgewählt würden. Im Stand der Technik wird dies als „gemeinsame Auslegung" (joint design) bezeichnet, wie im Folgenden formaler definiert werden soll.

Aus verschiedenen Gründen kann es bei bestimmten Anwendungen wünschenswert sein, den Turbocode periodisch zu terminieren. Das bedeutet, dass, nachdem dem Turbocodierer über eine Anzahl von Symbolintervallen zufällige Eingangsdaten zugeführt wurden, daraufhin dem Turbocodierer andere Daten als die zufälligen Eingangsbits über eine ausreichend Anzahl von Symbolintervallen zugeführt werden, um jeden Codierer in einen bekannten Zustand zu bringen. Sodann werden dem Turbocodierer wieder zufällige Datenbits zugeführt, und anschließend wird der Code wieder terminiert, usw. Das Terminieren eines Turbocodes ist wünschenswert, da der Decodierer – dem explizit bekannt ist, wie der Code in dem Sender terminiert wird – weniger komplex sein kann (gemessen in Verarbeitungszeit und/oder Speicheranforderungen) als anderenfalls. Außerdem ist das Terminieren eines Turbocodes (sowie üblicherer Faltungs- und Gittercodes) beispielsweise in Umgebungen der Paketübertragung vorteilhaft, und zwar aus Gründen, die beispielsweise in meiner US-Patentanmeldung Seriennummer 09/247704, eingereicht am 9. Feb. 1999, erörtert werden. Die Terminierung von Codes kann auch in so genannten kontinuierlichen Übertragungsumgebungen vorteilhaft sein, z.B. in Sprachbandmodem-Anwendungen, um die Auswirkungen der Fehlerfortpflanzung einzuschränken.

Andere Veröffentlichungen des Stands der Technik, die bandbreiteneffiziente seriell verkettete Codierungsschemata offenbaren, sind (i) ein Artikel von T. Wadayama et al, namens „Matched Design Method for Concatenated Trellis-Coded Modulation", veröffentlicht in IEICE Trans. Fundamentals, Band E79-A, Nr. 11, Seiten 1911 bis 1917 (1996); (ii) ein Artikel von C. Brutel et al., namens „Serial Concatenation of Interleaved Convolutional Codes and M-ary Continuous Phase Modulation", veröffentlicht in Ann. Telecommun., Band 54, Nr. 3-4, Seiten 235 bis 242 (1999); und (iii) ein Artikel von S. Benedetto et al, namens „Serial Concatenated Trellis Coded Modulation with Iterative Decoding: Design and Performance", veröffentlicht in Proc. IEEE Glob. Telecommun. Mini-Conference, 3. November 1997, Seiten 38 bis 43.

Kurzdarstellung der Erfindung

Die Probleme des Stands der Technik werden durch verschiedene Ausführungsformen der Erfindung angesprochen, z.B. wie in Anspruch 1 aufgeführt.

Ich habe entdeckt, dass der Turbocode insgesamt terminiert werden kann, indem der äußere und innere Code unabhängig in separaten Symbolintervallen terminiert werden. Die Codes werden terminiert, indem für eine Anzahl von Symbolintervallen vorbestimmte Eingangsbits bereitgestellt werden, um die Codierer in einen bekannten Zustand zu bringen.

Ich habe außerdem erkannt, dass es dem äußeren Codierer für die Symbolintervalle, für die der innere Code terminiert wird, nicht erlaubt werden sollte, Ausgangsbits zu erzeugen, die wiederum eine weitere Codierung durch den inneren Codierer erforderlich machen würden. Der Grund dafür ist, dass der innere Code unter Benutzung vorbestimmter Eingangsbits terminiert wird, und der innere Codierer auf diese Weise nicht verfügbar ist, um Ausgangsbits von dem äußeren Codierer für das/die Symbolintervall(e) zu codieren, für das/die er terminiert ist. Gemäß einer Ausführungsform der Erfindung codiert der äußere Codierer also keine Eingangsbits, und geht deshalb auch während des Symbolintervalls/der Symbolintervalle, für das/die der innere Codierer terminiert ist, in einen anderen Zustand über. Außerdem muss der innere Codierer das/die Symbolintervall(e) verfügbar sein, für das/die der äußere Codierer terminiert ist, um die Ausgangsbits zu codieren, die von dem äußeren Codierer erzeugt werden. Wenn dies nicht der Fall wäre, würden die Bits, die von dem äußeren Codierer während seines Terminierungssymbolintervalls/seiner Terminierungssymbolintervalle erzeugt werden, niemals übertragen, obwohl der Decodierer diese Bits für einen fehlerfreien Betrieb benötigt. Also darf der innere Code während des Symbolintervalls/der Symbolintervalle nicht terminiert sein, für die der äußere Code terminiert ist. Auf diese Weise kann, wie oben erwähnt, der Turbocode insgesamt terminiert werden, indem der äußere und der innere Code unabhängig in separaten Symbolintervallen terminiert werden.

Bei zunehmendem Verständnis der Erfindung wird man verstehen, dass die Terminierung des inneren Codes nicht mit der Anforderung in Konflikt geraten darf, dass der innere Codierer auch wenigstens Abschnitte aller Ausgangsbitgruppen codieren muss, die von dem äußeren Codierer erzeugt werden. Also muss der innere Codierer sowohl 1) alle Ausgangsbitgruppen, die von dem äußeren Codierer erzeugt werden, und 2) die vorbestimmten Bitgruppen codieren, die dazu führen, dass der innere Codierer in einen bekannten Zustand gebracht wird. Auf diese Weise codiert gemäß einer Ausführungsform der Erfindung der äußere Redundanzcodierer einen Strom von Eingangsbits, um eine erste Folge von M Ausgangsbitgruppen zu erzeugen, und ein zweiter innerer Redundanzcodierer weist als Eingang eine zweite Folge von N Bitgruppen auf, wobei die N Bitgruppen die M Ausgangsbitgruppen enthalten. Der innere Code wird terminiert, und der innere Codierer wird in einen bekannten Zustand gebracht, indem X vorbestimmte Bitgruppen als Teil der N Bitgruppen mit einbezogen werden, wobei M = (N – X). Auf diese Weise kann der innere Redundanzcodierer in einen bekannten Zustand gebracht werden, indem die vorbestimmten Bitgruppen verarbeitet werden, während alle M Gruppen verarbeitet wurden, die von dem äußeren Redundanzcodierer ausgegeben wurden. In einer Ausführungsform wird die erste Folge von M Bitgruppen derart verschachtelt, dass die Bitgruppen in der zweiten Folge von N Bitgruppen sich in einer anderen Reihenfolge befinden. Das heißt, eine i-te Gruppe in der ersten Folge ist in der zweiten Folge eine j-te Gruppe, wobei für wenigstens ein Wertepaar (i, j) i ≠ j. Außerdem kann auch der äußere Redundanzcodierer in einen bekannten Zustand gebracht werden, indem vorbestimmte Bitgruppen als Eingang an den äußeren Redundanzcodierer bereitgestellt werden.

Ich habe auch erkannt, dass die Gesamtleistung des Turbocodes dadurch negativ beeinflusst werden kann, dass die Eingangsbits für den inneren Codierer während der Terminierungssymbolintervalle des inneren Codes nicht dem Ausgang des äußeren Codierers entnommen werden. Diese Situation kann gemäß einer Ausführungsform der Erfindung abgemildert werden, indem während der Terminierungssymbolintervalle eine kleinere Symbolkonstellation mit einer größeren Minimaldistanz zwischen den Symbolen benutzt wird.

Gemäß einer weiteren Ausführungsform der Erfindung sind die vorbestimmten Bitgruppen, die benutzt werden, um die Codes zu terminieren, eine Funktion von Bits, die zuvor in den Codierern gespeichert wurden. Wenn die Codierer endliche Zustandsautomaten sind, sind diese zuvor gespeicherten Bits Funktionen des Zustands des Codierers.

Kurze Beschreibung der Figuren

1 ist ein Sender mit einer ersten Ausführungsform eines Turbocodierers, der geeignet ist zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung;

2 bis 4 sind veranschaulichende Ausführungsformen innerer und äußerer Codierer, die in dem Turbocodierer aus 1 benutzt werden können;

5 zeigt den Betrieb des Verschachtlers des Turbocodierers aus 1;

6 bis 9 sind verschiedene Signalkonstellationen, die von dem Turbocodierer aus 1 benutzt werden können;

10 ist ein Empfänger mit einem veranschaulichenden Turbocodierer zum Decodieren des turbocodierten Signals;

11 bis 13 sind Figuren, welche die Erläuterung des Betriebs des Turbocodierers unterstützen;

14 ist ein Sender mit einer weiteren Ausführungsform eines Turbocodierers, der geeignet ist zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung;

15 und 16 sind veranschaulichende Ausführungsformen eines inneren und äußeren Codierers die in dem Turbocodierer aus 14 benutzt werden können;

17 und 18 zeigen den Betrieb von Bitwandlern, die veranschaulichend in dem Turbocodierer aus 14 benutzt werden;

19 bis 22 sind verschiedene Signalkonstellationen, die von dem Turbocodierer aus 14 benutzt werden können;

23 zeigt den Betrieb von einem der Bitwandler, die in dem Turbocodierer aus 14 benutzt werden können, wenn die benutzte Konstellation die aus 22 ist;

24 ist ein Sender mit einer weiteren Ausführungsform eines Turbocodierers, der geeignet ist zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung;

25 und 26 sind veranschaulichende Ausführungsformen eines inneren und äußeren Codierers, die in dem Turbocodierer aus 24 benutzt werden können;

27 ist ein Sender mit einer weiteren Ausführungsform eines Turbocodierers, der geeignet ist zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung;

28 zeigt den Betrieb des Bitwandlers, der veranschaulichend in dem Turbocodierer aus 27 benutzt wird;

29 ist eine Konstellation, die von dem Turbocodierer aus 27 benutzt werden kann;

30 zeigt den Betrieb des Bitwandlers, der veranschaulichend in dem Turbocodierer aus 27 benutzt wird, wenn die benutzte Konstellation die aus 22 ist; und

31 ist ein Sender mit einer weiteren Ausführungsform eines Turbocodierers, der geeignet ist zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung.

Detaillierte Beschreibung Überblick über Turbocodierer

1 ist ein Blockdiagramm eines Senders, der einen seriell verketteten Turbocodierer aufweist, der geeignet ist zur Benutzung gemäß den Grundgedanken der Erfindung. Eine Folge von Datenbits an Leitung 101 wird einem üblichen Verwürfler 103 zugeführt, der die Daten zufällig anordnet, und dann einem Seriell-Parallel-Wandler 105, der für jedes einer Folge von Symbolintervallen mit einer Dauer von T Sekunden ein Datenwort bereitstellt, das aus einer Anzahl von Datenbits an seinen Ausgangsleitungen 1041, 1042 und 1043 besteht, die hier kollektiv als Ausgangsleitungen 104 bezeichnet werden. In bestimmten Ausführungsformen des Senders aus 1 werden an Leitung 1041 zwei Datenbits, an Leitung 1042 ein Bit, und an Leitung 1043 m Bits bereitgestellt. In einer zuerst zu beschreibenden Ausführungsform wird allerdings angenommen, dass nur die Bits an den Leitungen 1041, Bits X3, X2, vorhanden sind. So wird für den Anfangsteil der folgenden Erörterung angenommen, dass an den Leitungen 1042 und 1043 keine anderen Datenbits vorliegen, und dass natürlich keine der Verarbeitungen, die von den in 1 gezeigten Schaltungen durchgeführt wird, solche anderen Bits betrifft.

Die Bits X3, X2 werden auf einen äußeren Gittercodierer 106 angewandt, bei dem es sich um einen Rate-2/3-Codierer mit M1 Zuständen handelt. Codierer 106 ist ein so genannter systematischer Codierer, derart, dass er die Eingangsbits X3, X2 als zwei seiner drei Ausgangsbits bereitstellt. Das dritte Ausgangsbit des Codierers ist ein redundantes Bit X1. Veranschaulichende Ausführungsformen für den äußeren Codierer 106 sind in 2 und 3 gezeigt. Der Codierer aus 2 ist ein 8-Zustandscode, indem er drei Verzögerungselemente aufweist, deren Inhalt zu einem beliebigen Zeitpunkt eine von (23 =) 8 Bitkombinationen sein kann. Die Verzögerung jedes Verzögerungselements ist gleich dem Symbolintervall, und die Werte, die in den Verzögerungselementen gespeichert sind, und also der Codiererzustand, ändern sich deshalb einmal pro Symbolintervall, entsprechend dem Eintreffen einer neuen Menge von Eingangsbits X3, X2. Der Codierer aus 3 weist vier Verzögerungselemente auf, und ist also ein (24 =) 16-Zustandscodierer.

Die Bits X3, X2, X1 werden dem Symbolverschachtler 108 zugeführt. Die Anwesenheit von Symbolverschachtler 108 stellt sicher, dass Fehlerbursts, die an einem intermediären Punkt in dem Decodierungsprozess am Empfänger (unten beschrieben) auftreten können, randomisiert werden, bevor sie weiter verarbeitet werden, wodurch die Leistung des Decodierungsprozesses insgesamt verbessert wird. Es ist gegenwärtig ausreichend, festzustellen, dass zu einem späteren Zeitpunkt die drei Bits X3, X2, X1 gemeinsam an Ausgangsleitungen 109 des Verschachtlers bereitgestellt werden. Insbesondere werden die Bits X2, X1 an Leitung 1091 der Leitungen 109 bereitgestellt, und Bit X3 wird an Leitung 1092 der Leitungen 109 bereitgestellt. Die Bits X2, X1 werden einem inneren Gittercodierer 110 zugeführt, der ein Rate-2/3-Codierer mit M2 Zuständen ist. Codierer 110 ist ebenfalls ein systematischer Codierer, weshalb er die Eingangsbits X2, X1 als zwei seiner drei Ausgangsbits bereitstellt. Das dritte Ausgangsbit von Codierer 110 ist ein redundantes Bit X0. Eine veranschaulichende Ausführungsform für den inneren Codierer 110 ist in 4 gezeigt. Der innere Codierer aus 4 ist ein 8-Zustandscodierer, der zur Veranschaulichung identisch ist mit dem Codierer aus 2.

Die vier Bits X3, X2, X1, X0 werden dem Symbolkonstellationszuordner 112 zugeführt. Die Symbolkonstellation ist hier eine 2D-Konstellation. Es stellt sich als praktisch dar, an diesem Punkt eine Änderung der Bezeichnungen vorzunehmen, indem die Bits, die dem Symbolkonstellationszuordner zugeführt werden, mit Y anstelle von X bezeichnet werden. So werden die Bits X3, X2, X1, X0 in der Figur in Bits Y3, Y2, Y1, Y0 umbenannt, wobei es sich trotzdem um dieselben Bits handelt.

Eine Signalkonstellation ausreichender Größe (d.h. Anzahl von Symbolen in der Konstellation) wird benutzt, um die Übertragung der Datenbits und der redundanten Bits innerhalb eines einzigen Symbolintervalls zu ermöglichen. In diesem Beispiel werden die Werte der vier Bits Y3, Y2, Y1, Y0 von dem Konstellationszuordner 112 benutzt, um eine von (24 =) 16 Untermengen einer Signalkonstellation mit 16 Symbolen auszuwählen, wobei jede Untermenge ein einzelnes Symbol aufweist. (In einer unten beschriebenen Ausführungsform weist jede Untermenge mehr als ein Symbol auf, und andere Bits werden benutzt, um ein bestimmtes Symbol aus der identifizierten Untermenge auszuwählen.) Die Konstellation kann beispielsweise die QAM-Konstellation aus 6 sein, oder die PSK-Konstellation mit konstanter Amplitude aus 7. In diesen Figuren wird eine veranschaulichende Zuordnung von Bitwerten zu Symbolen gezeigt. So wird beispielsweise in 6, wenn das Bitmuster Y3 Y2 Y1 Y0 die Werte 1101 aufweist, das Muster dem Symbol in der unteren rechten Ecke der Konstellation zugeordnet.

Die Zuordnung erfüllt das Kriterium, dass der Wert von wenigstens einer Koordinate des Symbols eine Funktion von mehr als einem der Turbocode-Ausgangsbits ist. Mit anderen Worten, die Werte der Symbolkoordinaten werden in gegenseitiger Abhängigkeit durch die Turbocodierer-Ausgangsbits bestimmt. In diesem spezifischen Beispiel weist jedes Symbol nur zwei Koordinaten auf, da der Turbocode ein 2D-Turbocode ist. Der Turbocode weist vier Ausgangsbits auf, weshalb der Wert von wenigstens einer Koordinate notwendigerweise eine Funktion von mehr als einem Turbocode-Ausgangsbit ist. (Tatsächlich erfüllen in diesem Beispiel beide Koordinaten dieses Kriterium.) Eine Folge der genannten Tatsache, dass die Werte der Symbolkoordinaten in gegenseitiger Abhängigkeit durch die Turbocodierer-Ausgangsbits bestimmt werden, ist, dass die minimale Euklidische Untermengendistanz zwischen den zwei Untermengen, die von jeweils zwei verschiedenen Turbocode-Ausgangsbitmustern identifiziert werden, keine Funktion der Hamming-Distanz zwischen diesen zwei Bitmustern ist. Es kann ebenfalls leicht gezeigt werden, dass die vorhergehende Erörterung auf jeden anderen hier offenbarten Turbocode zutrifft. (In dieser Beschreibung werden die Begriff „Minimaldistanz" und „minimale Euklidische Distanz" in austauschbarer Weise benutzt.)

Das Symbol, das an dem Ausgang des Symbolkonstellationszuordners 112 zu einem jeweiligen Zeitpunkt bereitgestellt wird, wird als Symbol P bezeichnet. Symbol P wird einer üblichen Ausgangsschaltung 114 zugeführt, die ein Signal erzeugt, das für die Weiterleitung an einen Übertragungskanal geeignet ist. Schaltung 114 kann so beispielsweise ein Impulsformungsfilter und einen Modulator aufweisen. Wenn der Kanal durch Abschwächung oder andere unregelmäßige Rauschphänomenen charakterisiert ist, kann die Schaltung 114 auch einen Verschachtler bekannten Typs aufweisen, der dazu ausgelegt ist, die Auswirkungen solcher Phänomene abzumildern. (Ein solcher Verschachtler ist nicht mit dem Symbolverschachtler 108 zu verwechseln.)

Kombiniert bilden der äußere Codierer 106, der Symbolverschachtler 108 und der innere Codierer 110 einen Turbocodierer. Der Turbocodierer ist genauer ausgedrückt ein seriell verketteter Turbocodierer, womit hier gemeint ist, dass wenigstens einige der Ausgangsbits, einschließlich des wenigstens einen redundanten Bits, die von dem äußeren Codierer bereitgestellt werden, von dem inneren Codierer weiterverarbeitet werden. In diesem Beispiel werden insbesondere das Datenbit X2 und das redundante Bit X1 an dem Ausgang des äußeren Codierers 106 nach dem Verschachteln dem inneren Codierer 110 zugeführt.

Genauer ausgedrückt wird a) der Zustand des inneren sowie des äußeren Codierers nur einmal pro Symbolintervall vorgerückt, wie zuvor erwähnt, und werden b) alle Datenbits, und wenigstens ein redundantes Bit, die von den Codierern für dieses Symbolintervall erzeugt werden, dann gemeinsam während eines einzigen Symbolintervalls übertragen. In der gerade erörterten Ausführungsform werden dann, wie soeben beschrieben, alle Datenbits (nämlich Bits X3, X2) und, in diesem Fall, alle redundanten Bits, die von beiden Codierern für ein jeweiliges Symbolintervall erzeugt werden (Bits X1, X0), benutzt, um ein Symbol zur Übertragung auszuwählen, und werden so in der Tat zusammen übertragen. Dieser Ansatz bietet eine Reihe von Vorteilen, die an einem geeigneteren Zeitpunkt weiter unten erläutert werden sollen.

Turbocodierer-Verschachtler

5 ist eine Konzeptansicht einer veranschaulichenden Ausführungsform für den Symbolverschachtler 108, der benutzbar ist, wenn der äußere und der innere Codierer der Codierer aus 2 bzw. 4 ist. Insbesondere wird der Verschachtler 106 als ein Symbolverschachtler bezeichnet, indem die Bits X3, X2, X1 als eine untrennbare Gruppe behandelt werden, und (zusammen mit Bit X0) durch ein bestimmtes Konstellationssymbol dargestellt werden. Eine Folge von 196 solchen Gruppen bildet einen so genannten Verschachtelungsframe. Die Eingangsbitgruppen sind von 0 bis 195 nummeriert. Der Verschachtler kann konzepthaft als eine Speichermatrix mit J Zeilen und K Spalten betrachtet werden. Zur Veranschaulichung J = 14 und K = 14. (Obwohl in diesem Beispiel J = K, ist dies nicht unbedingt immer der Fall.) Indem die Bitgruppen von dem äußeren Codierer 106 erzeugt und dem Symbolverschachtler 108 zugeführt werden, werden sie in der in 5 gezeigten Weise in die Matrix eingefügt. Das heißt, Gruppe 0 wird an der Zeile-Spaltenposition 0-0, eingefügt, Gruppe 1 an 0-2 usw. Nachdem alle 196 Bitgruppen gespeichert wurden, werden sie aus dem Verschachtler Spalte für Spalte abgelesen. So ist die Ausgangsreihenfolge der Bitgruppe 0, 28, 56, ... 182, 7, 35, ... 167, 195. Bestimmte Elemente der Matrix sind in 5 eingekreist, um die Erläuterung der Terminierung des Turbocodes zu unterstützen, wie unten beschrieben.

Die Bitgruppen werden gemäß einem Muster in jede Zeile eingefügt, wobei vor allem aufeinander folgende Eingangsbitgruppen durch K1 Spalten separiert sind. Zur Veranschaulichung K1 = 2. So werden beispielsweise Bitgruppen 0 und 1 in die Spalten 0 und 2 eingefügt. Außerdem werden die Bitgruppen in jede Spalte gemäß einem Muster eingefügt, wobei vor allem aufeinander folgende, zusammenhängende K Eingangsbitgruppen entweder durch J1 oder (J1 – 1) Zeilen separiert sind. Beispielsweise werden die ersten K Bitgruppen 0 bis 13 in Reihe 0 eingefügt, während die zweiten K Bitgruppen 14 bis 27 in Zeile 7 eingefügt werden (eine Separation von J1 = 7). Dann wird die dritte Zusammenstellung von K Bitgruppen 28 bis 41 in Reihe 1 eingefügt (Separation von (J1 – 1) = 6), während die vierte Zusammenstellung von K Bitgruppen 42 bis 55 in Zeile 8 eingefügt wird (Separation von (J1 = 7), usw. Der Gesamteffekt ist der, dass alle jeweils aufeinander folgenden zwei Bitgruppen am Eingang des Verschachtlers am Ausgang des Verschachtlers von wenigstes K1 × J Bitgruppen separiert sind, und dass alle jeweils aufeinander folgenden zwei Bitgruppen an dem Ausgang des Verschachtlers durch wenigstens (J/J1 × K) Bitgruppen m Eingang des Verschachtlers separiert sind. Obwohl eine übliche Verschachtelung Spalte für Spalte/Reihe für Reihe (bei der J1 = K1 = 1 wäre) zusammen mit den vorliegenden Turbocodes benutzt werden kann, wird ein Verschachtler wie der in 5 gezeigte bevorzugt, da bei einer jeweiligen Verschachtlergröße von J × K Bitgruppen die Separation zwischen aufeinander folgenden Bitgruppen an dem Eingang oder dem Ausgang des Verschachtlers größer ist als für den Fall, dass der Verschachtler aus 5 benutzt wird. Dies versieht den Turbocode mit einer besseren Leistung für ein jeweiliges J und K, oder erlaubt es dem Turbocode, für dieselbe Leistung ein kleineres J und K zu benutzen, und so eine kürzere Verschachtelungsverzögerung aufzuweisen.

Im Allgemeinen sollten die für J und K benutzten Werte ausgewählt werden, um die Verschachtelung an die Turbocodierung selbst anzupassen. Genauer ausgedrückt, sollte J als eine Funktion der so genannten Decodierungstiefe des inneren Codes ausgewählt werden, und K sollte als eine Funktion der Decodierungstiefe des äußeren Codes ausgewählt werden. Vorteilhafte Werte für J und K für verschiedene hier beschriebene Ausführungsformen sind in Tabelle I gezeigt. Jede dieser Ausführungsformen kann vorteilhafterweise J1 = J/2 und K1 = 2 aufweisen, aber andere Werte für J1 und K1 können eine sogar noch bessere Leistung bereitstellen, wie experimentell bestimmbar ist.

Tabelle I

Wenn die Werte von J und K gerade Ganzzahlen sind, kann die Arbeit des Symbolverschachtlers formal wie folgt beschrieben werden:

Der Symbolverschachtler liest einen Block von J·K Bitgruppen, ordnet sie in einer J×K-Matrix an (nicht auf einer Zeile-für-Zeile-Basis, wie unten beschrieben), und liest sie dann Spalte für Spalte aus, wobei die obere Bitgruppe in der linken Spalte zuerst ausgelesen wird. Jede Bitgruppe weist hier alle codierten und uncodierten Bits auf, die in einem Symbolintervall enthalten sind.

Genauer ausgedrückt, sollen die Parameter J und K des Verschachtlers ganzzahlige Vielfache von J1 bzw. K1 sein. Die Folgenummer i, i = 0, 1, ..., oder J·K – 1 jeder Bitgruppe an dem Eingang des Verschachtlers sei ausgedrückt als i = a1·(J·K/J1) + a2·K + a3·(K/K1) + a4, wobei die Koeffizienten {aq} nicht negative Ganzzahlen sind, und derart sind, dass Z1 &Dgr;a2·K + a3·(K/K1) + a4 der Rest ist, wenn i durch J·K/J1 geteilt wird, Z2 &Dgr;a3·(K/K1) + a4 der Rest ist, wenn Z1 durch K geteilt wird, und a4 der Rest ist, wenn Z2 durch K/K1 geteilt wird; oder äquivalent derart, dass a1 < J1, a2 < J/J1, a3 < K1, und a4 < K/K1. Die i-te Eingangsbitgruppe wird dann als die j-te Ausgangsbitgruppe ausgelesen, mit j = a4·(J·K1) + a3·J + a2·J1 + a1.

Höherstufige Bits

Wie oben angemerkt, wird eine Signalkonstellation ausreichender Größe benutzt, um die Übertragung der Datenbits und redundanten Bits innerhalb eines einzigen Symbolintervalls zu ermöglichen. Tatsächlich können weitere Bits zusätzlich zu denjenigen, die von dem Turbocodierer verarbeitet werden, während des Symbolintervalls übertragen werden, indem eine in geeigneter Weise größere Symbolkonstellation benutzt wird. Insbesondere ist der Fall zu betrachten, wenn, anders als bisher angenommen, der Seriell-Parallel-Wandler 105 an den Leitungen 1042 und 1043 Datenbits bereitstellt – insbesondere ein einzelnes Datenbit (in diesem Beispiel) an Leitung 1042, und m Datenbits an Leitung 1043. Diese werden hier als die „höherstufigen Bits" bezeichnet.

Genauer ausgedrückt, wird Bit X4 an Leitung 1042 einem SPC-(Single Parity Check – einfache Paritätsprüfung)-Codierer 107 mit Parametern (J·K, J·K – 1, 2) zugeführt, was bedeutet, dass der Code eine Codewortlänge von J·K Bits aufweist; dass die ersten J·K – 1 dieser Bits Eingangsbits sind, und das letzte Bit ein redundantes Paritätsprüfungsbit ist; und dass die Hamming-Distanz des Codes 2 ist. J und K sind die zuvor erwähnten Verschachtlerparameter J und K. Für jeden Verschachtelungsframe von J·K (= 196, in diesem Beispiel) Symbolintervallen stellt der Seriell-Parallel-Wandler 105 ein Datenbit X4 für jedes der ersten ((J·K) – 1)(= 195) Symbolintervalle bereit, aber nicht für das letzte 196ste Symbolintervall. Der SPC-Codierer 107 leitet jedes Bit X4 direkt an seine Ausgangsleitung 1022. Während des 196sten Symbolintervalls stellt er an Leitung 1022 ein Paritätsprüfungsbit bereit, dessen Wert auf den ((J·K) – 1) Datenbits basiert. Die Kombination von Codierer 107 mit dem Turbocodierer bildet einen so genannten mehrstufigen Code. Genauer ausgedrückt, erlaubt es die Benutzung des Codierers 107 dem System, gemäß den Grundgedanken, die in meinem US-Patent 5,258,987, erteilt am 2. November 1993, erläutert sind, den Codierungsgewinn voll auszunutzen, der von dem Turbocode bereitgestellt wird. Der Ausgang des Codierers 107 an Leitung 1022 wird aus praktischen Gründen auch als „X4" gekennzeichnet, doch anhand der vorhergehenden Diskussion wird man verstehen, dass eins von jeweils J·K dieser Bits nicht Bit X4 von Leitung 1042 ist, sondern das Paritätsprüfungsbit ist, das in Codierer 107 erzeugt wurde.

Bit X4 an Leitung 1022 wird zusammen mit den m Bits X5, X6, ... an den Leitungen 1043 dem Symbolverschachtler 108 zugeführt, zusammen mit den Bits X3, X2, X1 an Leitung 1021, wie zuvor beschrieben. Zur Veranschaulichung werden alle diese Bits – und nicht nur die Bits X3, X2, X1, wie oben angenommen – in dem Verschachtler als eine untrennbare Gruppe behandelt. Verschachtlerausgangsbit X4 an Leitung 1093, und Bits X5, X6, ... an den Leitungen 1094 werden in der Figur als Bits Y4, Y5, Y6 ... umbenannt, und werden zusammen mit den Bits Y3, Y2, Y1, Y0 dem Konstellationszuordner 112 zugeführt, wie oben beschrieben.

In 8 und 9 sind Symbolkonstellationen und Zuordnungen für zwei Fälle gezeigt. 8 ist eine (26 =) 64-Symbol-Konstellation, wobei die 6 Bits, die von jedem Symbol dargestellt werden, die Bits Y5, Y4, Y3, Y2, Y1, Y0 sind. Das heißt, dies ist ein Fall, in dem m = 1. 9 ist eine 256-Symbol-Konstellation, die benutzt werden kann, wenn m = 3. In 9 wird aus Gründen der einfachen Darstellung nur die Zuordnung der Bits Y4, Y3, Y2, Y1, Y0 gezeigt. Das heißt, jedes 5-Bit-Muster Y4Y3Y2Y1Y0 ist acht unterschiedlichen Symbolen in der Konstellation zugeordnet. Ebenfalls aus Gründen der einfachen Darstellung ist das Dezimaläquivalent des Binärbits anstelle des Binärbitmusters selbst gezeigt. Die Auswahl eines jeweiligen der acht Symbole, die jedem Dezimaläquivalent eines 5-Bitmuster zugeordnet sind, wird von den Werten der m (= 3) Bits Y7, Y6, Y5 an Leitung 1094 bestimmt. Wie also beispielhaft in 9 gezeigt, identifiziert das Bitmuster Y7Y6Y5Y4Y3Y2Y1Y0 = 11010101 eins von acht Symbolen, das in der Figur mit „21" markiert ist (Binär 10101 = Dezimal 21), und das Bitmuster 11110101 identifiziert ein anderes dieser acht Symbole. Die nicht rechteckige Form der Konstellation aus 9 reduziert das PAP-(Peak-to-average power)-Verhältnis des übertragenen Signals beispielsweise im Vergleich zu einer rechteckigen 16×16-Konstellation. Außerdem stellt sie eine geringe Menge eines so genannten Formungsgewinns bereit.

Basierend auf den vorangehenden Ausführungen, und unter sorgfältiger Berücksichtigung von beispielsweise 9 wird man verstehen, dass die Bits Y3, Y2, Y1, Y0, d.h. die Turbocodierer-Ausgangsbits, eine von 16 Untermengen der Gesamtkonstellation identifizieren – wobei jede Untermenge sechzehn Symbole aufweist – und dass die Bits Y7, Y6, Y5, Y4 ein bestimmtes Symbol aus der identifizierten Untermenge auswählen. Die Einteilung der Gesamtkonstellation in die 16 Untermengen erfolgt derart, dass die Minimaldistanz zwischen den Symbolen jeder Untermenge (die so genannte Untermengenminimaldistanz) maximiert wird. Wenn der Codierer 107 nicht vorhanden wäre, könnte die Zuordnung zwischen den Bits Y7, Y6, Y5, Y4 und den Symbolen jeder Untermenge zufällig sein. Um jedoch den Vorteil der Anwesenheit des Codierers 107 für den gesamten Code zu realisieren, darf die Zuordnung nicht zufällig sein. Stattdessen sollte Bit Y4 benutzt werden, um eine verfeinerte Untermenge von acht Symbolen der Untermenge zu identifizieren, die durch die Turbocode-Ausgangsbits Y3, Y2, Y1, Y0 identifiziert wird. Die Einteilung jeder Untermenge mit 16 Symbolen sollte derart erfolgen, dass innerhalb der Untermenge die Minimaldistanz jeder verfeinerten Untermenge mit acht Symbolen (identifiziert durch eine bestimmte Dezimalzahl, wie zuvor beschrieben) maximiert wird. Eine zufällige Zuordnung kann dann benutzt werden, um die Bits Y7, Y6, Y5 zu benutzen, um eins der acht Symbole der identifizierten verfeinerten Untermenge auszuwählen.

Turbodecodierer

10 ist ein Blockdiagramm eines Empfängers, der einen Turbodecodierer zum Decodieren der Symbole aufweist, die von dem Sender aus 1 sowie von anderen hier offenbarten Sendern übertragen werden. Die Gesamtarchitektur des Decodierers ähnelt derjenigen von im Stand der Technik bekannten Decodierern. Siehe beispielsweise Hagenauer et al., „Iterative decoding of binary block and convolutional codes", IEEE Trans. Inform. Theory, Band 42, Seiten 429 bis 445, 1996. Zunächst soll ein Überblick über die Operation des Turbodecodierers präsentiert werden, gefolgt von einer genaueren Beschreibung desselben.

Im Herzen des Decodierers befinden sich zwei bidirektionale Viterbi-Decodierer – ein innerer Decodierer 206 und ein äußerer Decodierer 214. Jeder bidirektionale Decodierer ist, gemäß der nachfolgenden Erörterung, eine Abwandlung desjenigen, der in A. Viterbi, „An intuitive justification and a simplified implementation of the MAP decoder for convolutional codes", IEEE J. Select. Areas Commun., Band 16, Seiten 260 bis 264, Feb. 1998, gezeigt ist. Für jedes der JK empfangenen kanalgestörten Symbole P~ eines jeweiligen Verschachtelungsframes berechnet Block 201 einen rohen Verzweigungsmesswert für die Untermenge von Symbolen der Konstellation, die durch jedes Bitmuster X3X2X1X0 identifiziert wird. In der ersten Iteration des Decodierungsprozesses (die iterative Natur der Decodierung soll an späterer Stelle beschrieben werden) berechnet Block 204 dann für jedes empfangene Symbol P~ einen verbesserten Verzweigungsmesswert für die Untermenge von Symbolen der Konstellation, die durch jedes Bitmuster X2X1X0 identifiziert wird, ahne eine Eingabe von dem Verschachtler 217. Beide Frames mit rohen und verbesserten Verzweigungsmesswerten werden dann dem Decodierer 206 zugeführt. Der Decodierer 206 erzeugt daraufhin für jedes empfangene Symbol P~ acht so genannte weiche Entscheidungen – eine für jedes mögliche Bitmuster X3X2X1. Jede weiche Entscheidung für ein Muster ist eine Einschätzung eines Parameters in Bezug auf die Wahrscheinlichkeit, dass das Bitmuster das tatsächlich übertragene war. Der Frame weicher Entscheidungen wird durch einen Entschachtler 210 entschachtelt, der die inverse Operation zu Symbolverschachtler 108 im Sender ausführt, arbeitet aber, anstatt an Gruppen von Bits zu arbeiten, an Gruppen, die jeweils aus 8 weichen Entscheidungen bestehen, wobei jede Entscheidung einem bestimmten Bitmuster zugeordnet ist, wobei diese 8 weichen Entscheidungen zum Zweck der Entschachtelung als eine unteilbare Einheit betrachtet werden. Der entschachtelte Frame weicher Entscheidungen wird dann dem äußeren Decodierer 214 zugeführt, der wiederum für jedes empfangene Symbol P~ seine eigenen acht weichen Entscheidungen für jedes der Bitmuster X3X2X1 erzeugt. Jede weiche Entscheidung, die von Decodierer 214 erzeugt wurde, ist seine eigene Einschätzung des genannten Parameters.

Der Prozess wiederholt sich dann. Insbesondere die weichen Entscheidungen, die von Decodierer 206 erzeugt werden, werden von dem Verschachtler 217 erneut verschachtelt, der die inverse Funktion des Entschachtlers 210 ausführt. Der Frame von erneut verschachtelten weichen Entscheidungen wird dann mit dem Frame von rohen Verzweigungsmesswerten kombiniert, der an Block 201 erzeugt wurde, um an Block 204 einen Frame verbesserter Verzweigungsmesswerte zu erzeugen. Diese werden dann von Decodierer 206 benutzt, um einen anderen Frame mit weichen Entscheidungen zu erzeugen, der diejenigen verbessert, die von Decodierer 206 in der vorhergehenden Iteration erzeugt wurden.

Der Prozess schreitet auf diese Weise für eine Anzahl von Iterationen fort. Für eine Weile werden die weichen Entscheidungen immer weiter verbessert, aber der Grad an Verbesserung, der bei jeder Iteration bereitgestellt wird, wird schließlich sehr klein. Deshalb kann eine von zwei Strategien eingesetzt werden. Eine besteht darin, den Prozess zu überwachen, und den Decodierungsprozess zu terminieren, sobald der Punkt abnehmender Ergebnisse erreicht wurde. Ein anderer Ansatz ist es, einfach eine vorbestimmte Anzahl von Iterationen zu benutzen, z.B. 4.

Die Erzeugung abschließender harter Entscheidungen zu den Werten der Bits X3, X2, X1, X0 in der letzten Iteration des Decodierungsprozesses wird veranschaulichend erreicht, indem der Frame entschachtelter weicher Entscheidungen für die Bitmuster X3X2X1, die von dem Entschachtler 210 ausgegeben wurden, zusammen mit einer vorläufigen harten Entscheidung X0^ zu dem redundanten Bit X0, das für jedes Bitmuster X3X2X1 wie unten beschrieben erzeugt wurde, einem üblichen unidirektionalen äußeren Viterbi-Decodierer 222 zugeführt wird. (Anstelle des Viterbi-Decodierers 222 kann Decodierer 214 benutzt werden. In diesem Fall können abschließende harte Entscheidungen erzeugt werden, indem der Eingang und Ausgang des äußeren bidirektionalen Viterbi-Decodierers 214 für jedes Bitmuster X3X2X1 addiert wird. Das Bitmuster, das dem Minimum der resultierenden Summen entspricht, kann zusammen mit seiner zugeordneten harten Entscheidung X0^ als die abschließenden harten Entscheidungen zu den Bits X3, X2, X1, X0 benutzt werden.) Bei Anwendungen, die keine Mehrstufencodierung benutzen, d.h. bei denen X3 und X2 die einzigen Datenbits sind, ist es ausreichend, wenn der Decodierer 222 einfach harte Entscheidungen zu diesen zwei Bits ausgibt. Wenn jedoch eine Mehrstufencodierung benutzt wird, gibt der Viterbi-Decodierer 222 seine harten Entscheidungen zu X3, X2, X1, X0 an den Decodierer 224 der zweiten Stufe aus. Der Decodierer 224 ist zur Veranschaulichung ein Zweizustands-Viterbi-Decodierer üblicher Auslegung zum Decodieren eines einfachen Paritätsprüfungscodes. Die so an den Decodierer der zweiten Stufe 224 bereitgestellten Bits identifizieren die Konstellationsuntermenge, zu der das übertragene Symbol gehört. Basierend auf der Kenntnis der Konstellationsuntermenge kann Decodierer 224 daraufhin nach dem Entschachteen durch Entschachtler 223 an dem empfangenen Symbol P~ arbeiten, um das jeweils übertragene Symbol der identifizierten Untermenge zu identifizieren, und auf diese Weise harte Entscheidungen zu dem Wert von Bit X4 sowie den m uncodierten Bits, falls vorhanden, bereitzustellen.

Der soeben beschriebene iterative Frame-für-Frame-Prozess ist schematisch in 11 gezeigt. Genauer ausgedrückt, werden in der ersten Iteration die empfangenen Symbole P~ eines jeweiligen Verschachtelungsframes Block 201 zugeführt, wo die rohen Verzweigungsmesswerte berechnet werden. Letztere werden Block 204 zugeführt, wo die verbesserten Verzweigungsmesswerte berechnet werden. Sowohl die neuen als auch die verbesserten Verzweigungsmesswerte werden dann Decodierer 206 zugeführt, der den ersten Frame weicher Entscheidungen erzeugt, die dann weiter an Entschachtler 210 und Decodierer 214 und Verschachtler 217 geleitet werden, um die zweite Iteration zu beginnen. An diesem Punkt wird der Frame weicher Entscheidungen von Verschachtler 217 an Block 204 mit den ursprünglichen rohen Verzweigungsmesswerten von Block 201 kombiniert, um verbesserte Verzweigungsmesswerte bereitzustellen, die Decodierer 206, Entschachtler 210 usw. zugeführt werden, bis während der abschließenden vierten Iteration der Frame weicher Entscheidungen, die von Entschachtler 210 ausgegeben werden, dem üblichen Viterbi-Decodierer 222 zugeführt wird, der die abschließenden Entscheidungen erzeugt.

Wir wollen nun die Funktionen jedes einzelnen in 10 gezeigten Blocks genauer beschreiben.

Wie in der Figur gezeigt, berechnet Block 201 für jedes empfangene kanalgestörte Symbol P~ den zuvor genannten „rohen" Verzweigungsmesswert für jede der 16 Konstellationsuntermengen, die den 16 Werten des Bitmusters X3X2X1X0 zugeordnet sind. Dies ist einfach die quadratische Euklidische Distanz zwischen dem empfangenen Symbol und dem nächsten Symbol in dieser Untermenge. Die resultierenden rohen Verzweigungsmesswerte werden sowohl dem Block 204 als auch dem inneren Decodierer 206 zugeführt.

Für jedes Symbol erzeugt Block 204 einen verbesserten Verzweigungsmesswert für jede Untermenge, die den 8 Bitmustern X2X1X0 zugeordnet ist. Er tut dies, indem er zuerst jedem rohen Verzweigungsmesswert, der jedem Bitmuster X3X2X1X0 zugeordnet ist, die entsprechende weiche Entscheidung für das Bitmuster X3X2X1 hinzuaddiert, die von dem äußeren Decodierer 214 gebildet wurde und von dem Verschachtler 217 dem Block 204 zugeführt wurde. Sechzehn interne verbesserte Verzweigungsmesswerte werden so gebildet. Diese werden auf 8 verbesserte Verzweigungmesswerte reduziert, einen für jedes Bitmuster X2X1X0, indem der kleinere der zwei internen verbesserten Verzweigungsmesswerte für das Vierbit-Bitmuster 0X2X1X0 und das Vierbit-Bitmuster 1X2X1X0 zurückbehalten wird, und die übrigen verworfen werden. Die acht verbesserten Verzweigungsmesswerte werden dem Decoder 206 zugeführt.

Die Decodierer 206 und 214 arbeiten in einer im Allgemeinen ähnlichen Weise. Allerdings ist die Operation des Decodierers 206 etwas stärker involviert. Um die Erläuterung dafür zu unterstützen, soll zunächst die Operation des Decodierers 214 beschrieben werden.

Die weichen Entscheidungen für die Bitmuster X3X2X1 von dem inneren Decodierer werden von Decodierer 214 als Verzweigungsmesswerte benutzt. Der Decodierer 214 benutzt diese Verzweigungsmesswerte in einer weise, die dem allgemeinen Ansatz folgt, der aus dem Stand der Technik bekannt ist, wobei die Pfadmesswertberechnung sowohl in Vorwärts- als auch in Rückwärtsrichtung erfolgt, wie symbolisch in 12 dargestellt. In der Vorwärtsrichtung geht die Decodierung von einem bekannten Anfangszustand aus, entsprechend der Operation des üblichen Viterbi-Decodierers. So berechnet und sichert der Decodierer für jedes n-te Symbolintervall eines Verschachtlerframes eine Menge von acht „Vorwärts"-Pfadmesswerten {FPMi (n+1), i = 0, 1, ..., 7} einen für jeden Codiererzustand des 8-Zustandscodes aus 2, indem die Pfadmesswerte und Verzweigungsmesswerte auf jeder Decodierungsstufe veranschaulichend in der üblichen Weise verarbeitet werden. (Im Gegensatz zur üblichen Viterbi-Decodierung können die Pfadmesswerte jeder Decodierungsstufe im Speicher behalten werden. Das trägt dazu bei, die Bearbeitungszeit während der unten beschriebenen Erzeugung der weichen Entscheidungen zu minimieren.) 12 zeigt die acht Vorwärtspfadmesswerte, die dem n-ten Symbolintervall des Verschachtelungsframes zugeordnet sind. In der Rückwärtsrichtung ist der Prozess der gleiche, mit dem Unterschied, dass die Decodierung von einem bekannten Endzustand ausgeht, was zu einer Menge von acht „Rückwärts"-Pfadmesswerten führt {BPMi (n), i = 0, 1, ... 7}. (In dieser Ausführungsform ist der Endzustand bekannt, da der Turbocode „terminiert" ist, wie unten beschrieben.) 12 zeigt die acht Rückwärtspfadmesswerte, die dem n-ten Symbolintervall zugeordnet sind. Um diese Erörterung zu vereinfachen, wird angenommen, dass alle Rückwärtspfadmesswerte bei ihrer Erzeugung ebenfalls im Speicher gesichert werden.

Die weichen Entscheidungen für das n-te Symbolintervall werden berechnet, indem die Vorwärtspfadmesswerte FPMi (n) und die Rückwärtspfadmesswerte BPMi (n+1) berechnet werden. Jede der vier Gitterverzweigungen, die aus einem Zustand des Gitters hervorgehen, ist einer bestimmten Untermenge zugeordnet, die durch ein bestimmtes Bitmuster X3X2X1 identifiziert ist. Das Dezimaläquivalent der vier Bitmuster ist in der mit „Untermenge X3X2X1" markierten Spalte gezeigt. So sind die vier Gitterverzweigungen, die aus dem Zustand 0 hervorgehen, den Bitmustern zugeordnet, deren Dezimaläquivalente 0, 2, 4, 6, usw. sind; die vier Gitterverzweigungen, die aus Zustand 1 hervorgehen, sind den Bitmustern zugeordnet, deren Dezimaläquivalente 1, 3, 5, 7, usw. sind. Gleichzeitig liegen für jede Untermenge, die von einem bestimmten Bitmuster X3X2X1 identifiziert wird, vier Gitterverzweigungen vor, die einen „aktuellen" Codiererzustand mit einem „nächsten" Codiererzustand verbinden. Die vier Verzweigungen für Untermenge 0, d.h. die Untermenge, die dem Bitmuster 000 zugeordnet ist, sind diejenigen, welche die Paarungen aktueller Zustand/nächster Zustand 0-0, 2-1, 4-2 und 6-3 verbinden. Die Vorwärts- und Rückwärtspfadmesswerte, die jeder Verzweigung zugeordnet sind, werden separat addiert, und ergeben vier Summen. Die weiche Entscheidung für jedes jeweilige Bitmuster wird dann als eine Funktion dieser vier Summen berechnet. Zur Veranschaulichung besteht diese Funktion einfach daraus, das Minimum der vier Summen als die weiche Entscheidung zu wählen. Eigentlich ist es nicht nötig, alle Rückwärtspfadmesswerte zu sichern. Der Grund dafür ist, dass die Rückwärtspfadmesswerte erzeugt werden können, nachdem alle Vorwärtspfadmesswerte erzeugt und gesichert wurden. Jede Menge von Rückwärtspfadmesswerten wird benutzt, um weiche Entscheidungen zu bilden, sobald diese Menge von Rückwärtspfadmesswerten erzeugt wurde, und wird dann nicht länger benötigt.

Die Decodierung, die von dem inneren Decodierer 206 ausgeführt wird, ist komplexer. Der Grund dafür ist, dass der Decodierer 214 einerseits von dem Decodierer 206 weiche Entscheidungen zu dem Bitmuster X3X2X1 benötigt, während andererseits Bit X3 nicht von dem inneren Codierer verarbeitet wird, und Decodierer 206 deshalb über keine Grundlage verfügt, auf der eine Information bereitgestellt werden kann, die Bit X3 berücksichtigt, wenn sein Decodierungsalgorithmus der gleiche sein soll wie der von Decodierer 214 ausgeführte.

Die Verarbeitung des inneren Decodierers 206 ist ähnlich wie die Verarbeitung, die von dem Decodierer 214 im ersten Fall ausgeführt wird. Allerdings beinhaltet diese Verarbeitung einen weiteren Aspekt, der es ihr ermöglicht, das bereitzustellen, was der äußere Decodierer 214 benötigt – weiche Entscheidungen unter Berücksichtigung von Bit X3, und insbesondere weiche Entscheidungen zu dem Bitmuster X3X2X1.

Genauer ausgedrückt, benutzt der innere Decodierer 206 veranschaulichend für den 8-Zustandscode aus 4 als Verzweigungsmesswerte zunächst die verbesserten Verzweigungsmesswerte für Bit X2X1X0, die von Block 204 erzeugt werden, wie zuvor beschrieben, um Vorwärts- und Rückwärtspfadmesswerte in derselben Weise zu erzeugen, wie es im äußeren Decodierer 214 geschehen ist. (Es ist zu beachten, dass, wenn der innere und der äußere Code nicht gleich sind, ein unterschiedliches Gitter von dem inneren und äußeren Decodierer zum Erzeugen der Pfadmesswerte erzeugt wird, wobei jedoch der Rechenansatz ansonsten derselbe ist.) Und auch wie bei Decodierer 214 werden anschließend weiche Entscheidungen zu den Bitmustern X2X1X0 getroffen. Im Fall von Decodierer 214 bilden solche weichen Entscheidungen den Decodiererausgang. Hier allerdings, wie soeben angemerkt, sind weiche Entscheidungen zu X2X1X0 nicht das, was der Decodierer 214 braucht. Deshalb können die weichen Entscheidungen, die in Decodierer 206 erzeugt werden, nicht als Ausgang dieses Decodierers benutzt werden. Stattdessen ist eine weitere Verarbeitung erforderlich, um es dem Decodierer 206 zu ermöglichen, weiche Entscheidungen zu X3X2X1 bereitzustellen.

Zu diesem Zweck erzeugt Decodierer 206 als nächstes eine interne weiche Entscheidung für das Bitmuster X3X2X1X0, indem der rohe Verzweigungsmesswert für das Muster zu der weichen Entscheidung für das soeben berechnete Bitmuster X2X1X0 hinzuaddiert wird. Es liegen zwei solche internen weichen Entscheidungen vor, die dem Bitmuster X3X2X1 zugeordnet sind – nämlich die internen weichen Entscheidungen für die zwei Bitmuster X3X2X1X0, wobei X3X2X1 einen bestimmten Wert aufweist, aber X0 entweder 0 oder 1 ist. Die kleinere der zwei internen weichen Entscheidungen wird dann als die weiche Entscheidung für das Bitmuster X3X2X1 benutzt. Außerdem wird der bestimmte Wert von X0, welcher der kleineren internen weichen Entscheidung zugeordnet ist, als die zuvor erwähnte vorläufige harte Entscheidung X0^ für das entsprechende Bitmuster X3X2X1 benutzt.

Der Grund dafür, dass dieser Ansatz funktioniert, lässt sich unter Berücksichtigung von 13 nachvollziehen.

Diese Figur zeigt das Gitter, das von dem inneren Codierer benutzt wird, wobei jedoch jede Verzweigung durch zwei so genannte parallele Verzweigungen ersetzt ist. Die zwei Verzweigungen für das Paar aktueller Zustand/nächster Zustand 0-0 beispielsweise sind verfeinerten Untermengen zugeordnet, die durch die Bitmuster X3X2X1X0 = 0 und 8 identifiziert sind. In diesem „erweiterten" Gitterdiagramm liegen vier Verzweigungen vor, die jedem Bitmuster X3X2X1X0 zugeordnet sind. Die beste interne weiche Entscheidung wird einer dieser vier Entscheidungen zugeordnet. Genauer ausgedrückt, ist diese beste interne weiche Entscheidung diejenige, die in dem Pfad enthalten ist, der den kleinsten Gesamtpfadmesswert aufweist, und tatsächlich identifiziert die soeben beschriebene Berechnung diesen besten Pfad. Es ist zu beachten, dass das erweiterte Gitterdiagramm nur benutzt wird, um die weichen Entscheidungen zu berechnen. Zum Berechnen der Vorwärts- und Rückwärtspfadmesswerte sollte das ursprüngliche, nicht erweiterte Gitterdiagramm benutzt werden.

Anstatt einfach die kleinste der Vorwärts- und Rückwärtspfad-Messwertsummmen in beiden Decodierern zu betrachten, kann ein weiter ausgefeilter (wenngleich komplexerer) Ansatz benutzt werden, der wenigstens für Kanäle mit additivem weißem Gaußschen Rauschen eine bessere Leistung bereitstellt. Dieser Ansatz besteht darin, die weichen Entscheidungen gemäß der folgenden Berechnung für den äußeren Decodierer zu erzeugen,

Weiche Entscheidung für den äußeren Decodierer für das Bitmuster

wobei die Summierung für alle i und j derart ausgeführt wird, dass die Untermenge X3X2X1 dem Übergang von dem aktuellen Zustand i in den nächsten Zustand j zugeordnet ist.

Die weichen Entscheidungen des inneren Decodierers werden gemäß der folgenden Formel berechnet:

wobei die Summierung für alle i und j durchgeführt wird, derart, dass die Untermenge X2X1X0 dem Übergang von dem aktuellen Zustand i in den nächsten Zustand j zugeordnet ist.
wobei RMBX3X2X1X0 der rohe Verzweigungsmesswert für die Untermenge X3X2X1X0 ist.

Weiche Entscheidung des inneren Decodierers für das Bitmuster

wobei in diesem Fall die genannten vorläufigen harten Entscheidungen für X0^ gemäß der folgenden Berechnung erzeugt würden:

Harte Entscheidung X0^ des inneren Decodierers für das Bitmuster

Die obige Erörterung erfolgt grundsätzlich basierend auf der Annahme, dass der innere und der äußere Gittercode beide 8-Zustand-Codes sind. Allerdings ermöglicht eine unkomplizierte Erweiterung der oben für 8-Zustand-Codes beschriebenen Verarbeitung die Anpassung an Codes mit einer unterschiedlichen Anzahl von Zuständen.

Die obige Erörterung erfolgt außerdem grundsätzlich unter der Annahme, dass der innere und der äußere Gittercode beide Rate-2/3-Codes sind. Codes mit einer anderen Rate können jedoch in unkomplizierter Weise ermöglicht werden. Beispielsweise arbeitet im Fall eines Rate-3/4-Codes das Element 201 aufgrund von Untermengen, die den verschiedenen Bitmustern X4X3X2X1X0 zugeordnet sind, und nicht X3X2X1X0; das Element 204 arbeitet aufgrund von Untermengen, die den verschiedenen Bitmustern X3X2X1X0 zugeordnet sind, und nicht X2X1X0; und weiche Entscheidungen von dem inneren und äußeren bidirektionalen Viterbi-Decodierer 206 und 214 erfolgen für Bitmuster X4X3X2X1 anstelle von X3X2X1. Ebenso gibt der Decodierer 222 abschließende harte Entscheidungen zu Bits X4, X3, X2 anstelle von X3, X2 aus, und gibt an den Decodierer 224 der zweiten Stufe abschließende harte Entscheidungen zu Bits X4, X3, X2, X1, X0 anstelle von X3, X2, X1, X0 aus. Die oben angeführten Ausdrücke zum Berechnen der weichen Entscheidungen würden analog die Berücksichtigung von Bit X4 beinhalten. Außerdem würden im Fall eines Rate-4/5-Codes die verschiedenen Elemente des Decodierers, sowie die Ausdrücke zum Berechnen der weichen Entscheidungen analog auch Bit X5 berücksichtigen.

Andere Turbocodes

Nun sollen andere Turbocodes beschrieben werden, die zur Benutzung gemäß den Grundgedanken der vorliegenden Erfindung geeignet sind. Um die Bezugnahme auf verschiedene Turbocodes zu erleichtern, ist es praktisch, eine „Rate" für den Turbocode festzulegen, im Gegensatz zu der Rate der ihn ausmachenden inneren und äußeren Codes. Insbesondere kann die Rate eines Turbocodes als k/(k + r) definiert werden, wobei k die Anzahl von Datenbits ist, die dem äußeren Code für jedes Symbolintervall zugeführt werden, und r die Gesamtzahl der redundanten Bits ist, die sowohl von dem inneren als auch äußeren Code in jedem Symbolintervall erzeugt werden. Der Turbocode aus 1 ist demnach ein Rate-2/4-Turbocode.

14 insbesondere zeigt einen Sender, der eine Architektur aufweist, die im Allgemeinen derjenigen aus 1 ähnelt. Dieser Sender verwendet einen vierdimensionalen (4D) seriell verketteten Rate-3/5-Turbocode. Der Code ist hier ein vierdimensionaler Code, da jedes Symbol P aus zwei 2D-Signalpunkten besteht, deren Werte in Reaktion auf einen einzelnen Zustandübergang des Turbocodes bestimmt werden – das heißt, die Zustände des inneren und äußeren Codes rücken nur einmal für jedes 4D-Symbolintervall vor. Wie also in 14 gezeigt, besteht jedes 4D-Symbol P aus zwei 2D-Signalpunkten Q und Q'.

Als Codierereingang werden dann an Leitung 304 (6 + 2m) Bits von einem Seriell-Parallel-Wandler (nicht dargestellt) für jedes 4D-Symbolintervall bereitgestellt. Drei dieser Bits werden dem äußeren – ZustandRate-3/4-Gittercodierer mit M1 Zuständen 306 zugeführt, und zwei dieser Bits werden dem zweifachen Paritätsprüfungscodierer 307 zugeführt. Letzterer weist eigentlich zwei einfache Paritätsprüfungscodierer 3071 und 3072 auf, von denen jeder jeweils eins der Eingangsbits X5 und X6 erhält. Die Codierer 3071 und 3072 sind zur Veranschaulichung identisch mit dem zuvor beschriebenen Codierer 107. Die verbleibenden (1 + 2m) Bits X7, X8 ... sind uncodiert. Der äußere Codierer 306 ist zur Veranschaulichung der 16-Zustand-Codierer aus 15. Die resultierenden (7 + 2m) Bits werden dem Symbolverschachtler 308 zugeführt, der im Allgemeinen dem Symbolverschachtler 108 ähnelt, und als solcher die (7 + 2m) Bits zu Zwecken der Verschachtelung als eine untrennbare Einheit behandelt. Für jede Gruppe von (7 + 2m) Bits, die von dem Verschachtler 308 ausgegeben werden, werden die drei Bits X3, X2, X1 dem inneren Rate-3/4-Gittercodierer mit M2 Zuständen 310 zugeführt. Der innere Codierer 310 ist zur Veranschaulichung der 16-Zustand-Codierer aus 16. Die Bits X3, X2, X1, X0 zusammen mit den Bits X4, X5 usw., die von dem Verschachtler 308 bereitgestellt werden, werden durch den 4D-Konstellationszuordner 311 in die vierdimensionalen Symbole zugeordnet. Diese Zuordnung kann z.B. direkt unter Benutzung einer einzelnen Suchtabelle erfolgen. Die Implementierungskomplexität wird jedoch wesentlich reduziert, wenn diese Bits benutzt werden, um die zwei konstituierenden zweidimensionalen Signalpunkte jedes vierdimensionalen Symbols zu identifizieren. Zu diesem Zweck enthält der 4D-Konstellationszuordner 311 einen 6×6-Bitwandler 316, der die Bits X0 bis X5 empfängt, und einen 2×2-Bitwandler 318, der die Bits X6 und X7 empfängt. Jedes 4D-Symbolintervall besteht aus zwei 2D-Signalisierungsintervallen. Für das erste (zweite) 2D-Signalisierungsintervall erzeugt der Wandler 316 Bits Y2Y1Y0 (Y2'Y1'Y0') gemäß der in 17 gezeigten Umwandlungstabelle, während der Wandler 318 Bit Y3 (Y3') gemäß der in 18 gezeigten Umwandlungstabelle erzeugt. Die Hälfte der verbleibenden 2m uncodierten Bits X8, X9 usw. wird umbenannt in Y4, Y5 usw., und die andere Hälfte in Y4', Y5' usw. Die Bits Y3, Y2, Y1, Y0, zusammen mit den Bits Y4, Y5, werden von einem 2D-Konstellationszuordner 312 benutzt, um den ersten zweidimensionalen Signalpunkt Q auszugeben, und die Bits Y3'Y2'Y1'Y0', zusammen mit den Bits Y4', Y5' usw., werden von dem Konstellationszuordner 312 benutzt, um den zweiten zweidimensionalen Signalpunkt Q' auszugeben. Es sind verschiedene Zuordnungen der Konstellationszuordner-Eingangsbits zu den 2D-Signalpunkten möglich, je nach dem, wie viele Datenbits tatsächlich zu übertragen sind. Wenn beispielsweise vier Datenbits X2 bis X5 an Leitung 304 vorliegen (d.h. der Codierer 307 nur Codierer 3071 enthält), dann werden dem Konstellationszuordner 312 3 Bits pro 2D-Signalisierungsintervall präsentiert, d.h. Y2Y1Y0 für das erste 2D-Signalisierungsintervall jedes 4D-Symbolintervalls, und Y2'Y1'Y0' für das zweite. Eine veranschaulichende Zuordnung dieser drei Bits zu einem bestimmten 2D-Signalpunkt einer (23 = 8)-Punktkonstellation ist in 19 gezeigt. Wenn an Leitung 304 acht Datenbits vorliegen, erfordert dies eine 32-Punkt-Signalkonstellation, und die Zuordnung in eine 32-Punkt-QAM kann geschehen, wie in 20 gezeigt. Wenn 12 Datenbits an Leitung 304 vorliegen, erfordert dies eine 128-Punkt-Signalkonstellation, und die Zuordnung kann in die in 21 gezeigte 128-Punkt-QAM-Konstellation erfolgen. Konstellationen mit konstanter Amplitude, z.B. PSK-Konstellationen, können in einigen Fällen anstelle von QAM-Konstellationen benutzt werden. Beispielsweise kann die 8-Punkt-PSK-Konstellation aus 22 anstelle der in 19 gezeigten 8-Punkt-QAM-Konstellation benutzt werden, wobei in diesem Fall der Bitwandler 316 anstelle der in 17 gezeigten gemäß der in 23 gezeigten Tabelle arbeitet.

Ein Sender, der einen anderen 4D-Code benutzt, aber einen Rate-4/6-Turbocode, ist in 24 gezeigt. Speziell werden an Leitung 404 (6 + 2m) Bits von einem Seriell-Parallel-Wandler (nicht dargestellt) für jedes 4D-Symbolintervall bereitgestellt. vier Bits X5, X4, X3, X2 werden dem äußeren Rate-4/5-Gittercodierer mit M1 Zuständen 406 zugeführt, und zwei Bits X7, X6 werden dem einfachen Paritätsprüfungscodierer 407 zugeführt. Letzterer weist Parameter (2·J·K, 2·J·K – 1, 2) auf. Das heißt, der von Codierer 407 implementierte Code weist eine Codewortlänge von 2·J·K Bits auf, von denen die ersten 2·J·K – 1 Bits Eingangsbits sind, und das letzte Bit ein redundantes Paritätsprüfungsbit ist, und wobei seine Hamming-Distsanz 2 ist. Die verbleibenden 2m Bits sind uncodiert. Der äußere Codierer 306 ist zur Veranschaulichung der 32-Zustand-Codierer aus 25. Die resultierenden (7 + 2m) Bits werden dem Symbolverschachtler 408 zugeführt, der ebenfalls im Allgemeinen ähnlich dem Symbolverschachtler 108 ist. Für jede Gruppe von (7 + 2m) Bits, die von dem Verschachtler 408 ausgegeben wird, werden vier Bits einem inneren Rate-4/5-Gittercodierer mit M2 Zuständen 410 zugeführt, wie dargestellt. Der innere Codierer 410 ist zur Veranschaulichung der 32-Zustand-Codierer aus 26. Ähnlich wie bei der Darstellung in 14 weist der 4D-Konstellationszuordner 411 einen Bitwandler 416 auf, der zur Veranschaulichung identisch mit dem zuvor beschriebenen Bitwandler 316 ist, und weist außerdem einen 2D-Konstellationszuordner 412 auf. Die zwei Bits X6 und X7 an dem Ausgang des Verschachtlers 408 werden umbenannt in Y3 und Y3', während die verbleibenden 2m uncodierten Bits X8, X9 usw. in Y4, Y4', Y5, Y5' usw. umbenannt werden. Die in 19 bis 22 zusammen mit 14 gezeigten Konstellationen und Zuordnungen können hier ebenfalls benutzt werden, abhängig von der gewünschten Anzahl von Datenbits, die für jedes 4D-Symbolintervall zu übertragen sind.

Ein Sender, der einen weiteren 4D-Code benutzt, aber einen Rate-2/4-Turbocode, ist in 27 gezeigt. Der innere und der äußere Gittercode des Turbocodes sind zur Veranschaulichung dieselben, wie sie in der zweidimensionalen Anordnung aus 1 benutzt werden. Es handelt sich um einen dreistufigen Code, wobei zwei Bits X5, X4 einem erweiterten Einzelfehlerkorrektur-(Single Error Correcting)-Codierer 550 zugeführt werden, und zwei Bits X6 und X7 einem einfachen Paritätsprüfungscodierer 545 zugeführt werden. Der Codierer 550 insbesondere weist Parameter (2·J·K, 2·J·K – R, 4) auf. Genauer ausgedrückt, weist er eine Codewortlänge von 2·J·K Bits auf, von denen die ersten 2·J·K – R Bits Eingabedatenbits sind, und die letzten R Bits redundante Bits sind, und seine Hamming-Distanz ist 4. Die Zahl R der redundanten Bits wird als die kleinste Ganzzahl ausgewählt, derart dass 2·J·K ≤ 2R–1. Der Codierer 545 ist zur Veranschaulichung identisch mit dem zuvor beschriebenen Codierer 407.

Die Bits X3, X2, X1, X0 werden einem 4×4-Bitwandler 517 in dem 4D-Konstellationszuordner 511 zugeführt, der auch einen 2D-Konstellationszuordner 512 aufweist. Der Bitwandler 517 arbeitet auf der Basis der in 28 gezeigten Tabelle. Wenn Leitung 504 nur die zwei Eingangsbits X3, X2 für jedes 4D-Symbolintervall bereitstellt, würde eine 16-Symbol-4D-Konstellation benutzt, die eine Verkettung von zwei 4-Punkt-Signalkonstellationen aufweist, wie die in 29 gezeigte Konstellation. Obwohl es in einem solchen Fall zutrifft, dass 4 Bits 4 Koordinaten eines 4D-Symbols zugeordnet werden, trifft es nicht zu, dass jedes Bit den Wert einer jeweils anderen Koordinate des Symbols bestimmt. Stattdessen gilt auch hier das Zuordnungskriterium, das oben im Zusammenhang mit 6 angeführt wurde. Nämlich dass wenigstens ein Koordinatenwert eine Funktion von mehr als einem Turbocodierer-Ausgangsbit ist, oder, anders ausgedrückt, dass die Werte der Symbolkoordinaten durch die Turbocodierer-Ausgangsbits in gegenseitiger Abhängigkeit voneinander bestimmt werden. Wenn mehr als zwei Datenbits zu übertragen sind – wie z.B. 4, 8 oder 12 Datenbits, können wieder die Konstellationen und Zuordnungen benutzt werden, wie in 19 bis 22 gezeigt. Insbesondere wenn die 8-PSK-Konstellation aus 22 benutzt wird, würde der 4×4-Bitwandler 517 basierend auf der in 30 gezeigten Tabelle arbeiten.

Ein Sender, der denselben Turbocode wie in 27 benutzt, ist in 31 gezeigt. Der Sender verwendet einen einfachen höherstufigen Codierer, der zur Veranschaulichung identisch mit Codierer 545 ist. Ein 4D-Konstellationszuordner 612 weist einen 4×4-Bitwandler 617 und einen 2D-Konstellationszuordner 612auf. Der Wandler 617 arbeitet zur Veranschaulichung auf Basis der in 30 gezeigten Tabelle, und die Konstellation ist zur Veranschaulichung die 16-Punkt-PSK-Konstellation aus 7.

Die in 10 gezeigte Decodiererarchitektur wurde oben im Zusammenhang mit der Rate-2/4-Turbocodierungsanordnung aus 1 erörtert. Allerdings kann dieselbe Grundarchitektur für den Rate-3/5- und 4/6-Turbocode benutzt werden. In einem solchen Fall muss jedoch der Decodierer der zweiten Stufe 224 ein Decodierer sein, der für die Codes der zweiten Stufe geeignet ist, die in diesen Ausführungsformen benutzt werden – beispielsweise würde ein Viterbi-Decodierer mit vier Zuständen benutzt, um den doppelten Paritätsprüfungscode zu decodieren, der als der Code der zweiten Stufe von 14 benutzt wird, und ein Viterbi-Decodierer mit 2R Zuständen würde benutzt, um den erweiterten einfachen Fehlerkorrekturcode zu decodieren, der als der Code der zweiten Stufe von 27 benutzt wird. Wenn ein dreistufiger Code benutzt wird, wie z.B. in der Ausführungsform aus 27, muss außerdem die Gesamtstruktur des Decodierers einen Decodierer aufweisen, der für den Code der dritten Stufe geeignet ist. Im Fall von 27 würde also ein Viterbi-Decodierer mit zwei Zuständen (nicht dargestellt) in dem Decodierer aus 10 enthalten sein. Insbesondere würden dann abschließende harte Entscheidungen zu den Werten der Bits X5 und X4, die von dem Decodierer der zweiten Stufe 224 erzeugt werden, als abschließende Decodiererausgänge benutzt. Gleichzeitig würden die abschließenden harten Entscheidungen zu den Bits X5, X4, X3, X2, X1 und X0 dem Decodierer der dritten Stufe zusammen mit dem Ausgang von Entschachtler 223 zugeführt, um es dem Decodierer der dritten Stufe so zu erlauben, abschließende harte Entscheidungen zu allen verbleibenden codierten und uncodierten Bits zu erzeugen.

Vergleich der verschiedenen Codes

Bei der Bestimmung, welche der oben beschriebenen oder sonstigen Turbocodierungsanordnungen in einer jeweiligen Anwendung benutzt werden könnte, müssen verschiedene Überlegungen berücksichtigt werden. Beispielsweise erfordert die zweidimensionale Ausführungsform aus 1 eine Konstellation, die doppelt so groß ist, wie es für die anderen, vierdimensionalen Ausführungsformen erforderlich ist. Die Leistung bestimmter Komponenten in dem Empfänger, z.B. Trägerrückgewinnung, kann unter bestimmten Umständen im ersten Fall schlechter sein als im letzten, z.B. bei einem zeitlich schnell variierenden Kanal. Die Ausführungsformen aus 1, 14 und 27 bieten alle annähernd denselben Umfang an Fehlerhäufigkeitsleistung – wenigstens für Kanäle mit additivem weißem Gaußschen Rauschen (AWGN) – eine vergleichbare Implementierungskomplexität, und eine vergleichbare Verschachtlerlänge, und also eine vergleichbare Latenz, d.h. Gesamtverzögerung bei der Übertragung der Daten, wobei die Ausführungsform aus 1 das Potential aufweist, die geringste Latenz von allen bereitzustellen. Vorteilhafterweise ist die Implementierungskomplexität der Ausführungsform aus 14 relativ unabhängig von der Verschachtelungslänge, während die Implementierungskomplexität der Ausführungsform aus 27 sich in etwa verdoppelt, wenn die Verschachtelungslänge über 256 zweidimensionale Signalpunkte hinausgeht. Unter schlechten Kanalbedingungen ist die Fehlerhäufigkeitsleistung besser, wenn die Konstellationsgröße geringer ist. In dieser Hinsicht ist es ein Vorteil der Ausführungsform von 14, dass sie mit einer 4-Signalpunktkonstellation benutzbar ist, während dies beispielsweise für. die Ausführungsform aus 27 nicht möglich ist. Die beste Fehlerhäufigkeitsleistung aller hier offenbarten Ausführungsformen wird durch die Ausführungsform aus 24 geboten. Allerdings weist diese Ausführungsform die höchste Implementierungskomplexität und Latenz aller Ausführungsformen auf.

Die Ausführungsformen aus 1, 14, 24 und 27 können alle beispielsweise mit QAM-Konstellationen verschiedener unterschiedlicher Größen, sowie mit beispielsweise Konstellationen mit konstanter Amplitude, z.B. PSK-Konstellationen, für eine Bandbreiteneffizienz von bis zu 2 Bit pro Signalpunkt benutzt werden. Allerdings sollte bei Anwendungen, bei denen die Benutzung einer Konstellationen mit konstanter Amplitude bevorzugt wird (z.B. bei bestimmten drahtlosen Übertragungsanwendungen) und gleichzeitig eine Bandbreiteneffizienz von über 2 Bit pro Signalpunkt gewünscht wird, die Ausführungsform aus 31 in Betracht gezogen werden, da sie eine bessere Leistung, eine geringere Implementierungskomplexität und kürzere Verschachtelungslängen bietet als die anderen Ausführungsformen.

Turbocode-Terminierung

Wie oben beschrieben, kann es in bestimmten Ausführungsformen wünschenswert sein, den Turbocode periodisch zu terminieren. Das heißt, nachdem dem Turbocodierer für eine Anzahl von Symbolintervallen zufällige Eingangsdaten zugeführt wurden, werden daraufhin dem Turbocodierer über eine ausreichende Anzahl von Symbolintervallen andere Daten als die zufälligen Eingangsbits zugeführt, um jeden der Codierer in einen bekannten Zustand zu bringen.

Eine Reihe von Überlegungen ist bei der Auslegung der Schritte zu berücksichtigen, die zum Terminieren des Turbocodes auszuführen sind. Tatsächlich sind es diese Überlegungen, die zu den Details des Terminierungsprozesses geführt haben, der in der vorliegenden veranschaulichenden Ausführungsform benutzt wird. Die Art und Weise, wie die Terminierung durchgeführt wird, soll zuerst erläutert werden, gefolgt von der Erörterung der Überlegungen, die dahin geführt haben.

Es wird erneut auf 5 Bezug genommen. Man wird sich erinnern, dass die in den Matrixelementen aus 5 gezeigten Zahlen 0, 1, 2 ... 195 die 0-te, 1-ste, 2-te usw. Gruppe von Ausgangsbits des Codierers 106 in jedem Verschachtelungsframe darstellen, der 196 solche Bitgruppen aufweist. Insbesondere sind dann die letzten drei Bitgruppen, die von dem äußeren Codierer 106 erzeugt werden, diejenigen mit den Folgenummern „193", „194" und „195". Da die Bitgruppen auf spaltenweise von links nach rechts aus dem Verschachtler ausgelesen werden, sind die letzten zwei Bitgruppen, die von dem Verschachtler ausgegeben werden und dem inneren Codierer 110 zugeführt werden, diejenigen mit den Folgenummern „167" und „195". Die vier Folgenummern „167", „193", „194" und „195" sind in der Figur eingekreist, um den Leser bei der Verfolgung der nachfolgenden Erörterung zu unterstützen.

Wird angenommen, dass die Codierer 106 und 110 als die in 2 bzw. 4 gezeigten 8-Zustand-Codierer implementiert sind, erfordert jeder von ihnen zur Terminierung zwei Symbolintervalle. Insbesondere wird der innere Code terminiert, indem intern gespeicherte Bits W1, W2 jeweils anstelle der Datenbits X2 bzw. X1 als die Codierereingangsbits während der letzten zwei Symbolintervalle „167" und „195" des Codierers 110 benutzt werden. Dies bringt den Codierer 110 am Ende von Symbolintervall „195" in Zustand „0" (d.h. alle drei internen gespeicherten Bits sind „0"). Wie in 2 und 4 zu sehen, stellen W1, W2 und W3 die drei Bits dar, die in den Verzögerungselementen des Codierers gespeichert sind. Zu jedem jeweiligen Zeitpunkt stellen diese drei Bits W1, W2, W3 den Zustand des Codierers dar.

Der äußere Code wird nicht während seiner letzten zwei Symbolintervalle terminiert, sondern während seiner zweit- und drittletzten Symbolintervalle „193" und „194". Insbesondere ist während Symbolintervall „193" eins der Eingangsbits von Codierer 106 das Datenbit X3, während das intern gespeicherte Bit W2 anstelle von Datenbit X2 benutzt wird. Dann werden während Symbolintervall „194" die Datenbits X3, X2 jeweils durch die intern gespeicherten Bits W1 bzw. W2 ersetzt, wie es bei Codierer 110 der Fall war. Dies bring den Codierer 106 am Ende von Symbolintervall „194" in Zustand „0" (d.h. alle drei internen gespeicherten Bits sind „0").

Als ein weiterer Aspekt des Terminierungsprozesses arbeitet der äußere Codierer 106 während der Symbolintervalle „167" und „195" nicht. Das heißt, während dieser Intervalle werden keine Eingangsbits in den Codierer 106 aufgenommen, und der Zustand des äußeren Codierers 106 wird nicht verändert. (Höherstufige Eingangsbits X4, X5, ... können während dieser Intervalle in gewohnter Weise aufgenommen und verarbeitet werden.)

Unter weiterer Überlegung zu der Terminierung des Turbocodes ist zu beobachten, dass die Tatsache, dass für die Symbolintervalle „167" und „195" keine Werte für die bits X2, X1 erzeugt werden, gegenüber dem inneren Codierer 110 folgenlos ist, da, wie oben erwähnt, der Codierer 110 während dieser Intervalle eine Eingabe von seinen eigenen internen Bits erhält. Allerdings benötigt der Konstellationszuordner 112 während dieser Intervalle immer noch einen Wert für Bit Y3. Normalerweise ist Bit Y3 gleich wie Bit X3, und dies könnte während dieser Symbolintervalle tatsächlich der Fall sein. Allerdings wird der Wert von Bit X3 während dieser Intervalle nicht von dem äußeren Code geschützt, da der äußere Code dann nicht arbeitet. Die Leistung des Turbocodes insgesamt könnte dann hiervon stark negativ beeinflusst werden. Ein anderer Ansatz wäre der, ein „Pseudo"-Bit mit bekanntem Wert zu senden, so dass dieses Bit niemals codiert werden muss. Allerdings werden in die bevorzugten Ausführungsformen die Werte der Bits X2, X1, X0 aufwärts verschoben, um jeweils während der Symbolintervalle „167" und „195" zu Bits X3, X2, X1 zu werden, bevor diese Bits dem Konstellationszuordner zugeführt werden.

Im Folgenden sollen die Überlegungen erörtert werden, die zu dem oben beschriebenen Terminierungsprozess geführt haben.

Zunächst mag man meinen, dass der äußere Code während seiner letzten zwei Symbolintervalle „194" und „195" hätte terminiert werden sollen, um die Menge an Daten zu maximieren, die während eines Verschachtelungsframe übertragen werden können. Wenn jedoch während Symbolintervall „195" Bits von dem Codierer 106 erzeugt würden, würden diese Bits niemals übertragen, da sie, wie oben deutlich gemacht wurde, von dem inneren Codierer 110 als Teil seines eigenen Terminierungsprozesses ignoriert würden. Durch Benutzen der Symbolintervalle „193" und „194", um den äußeren Code zu terminieren, und diesen während Symbolintervall „195" nicht arbeiten zu lassen, wird dieses Problem wie oben angegeben vermieden. Dass der äußere Codierer 106 auch während des Symbolintervalls „167" nicht arbeitet, geht außerdem darauf zurück, dass der innere Codierer 110 auch während des Symbolintervalls „167" die Ausgangsbits des äußeren Codierers ignoriert. Dieses Beispiel veranschaulicht einen allgemeinen Auslegungsansatz, wobei der Zustand des äußeren Codes während solchen Symbolintervallen, in denen der innere Code terminiert ist, nicht geändert wird.

Eine andere Überlegung ergibt sich aus der Tatsache, dass die Eingangsbits für den inneren Code während der Terminierungssymbolintervalle „167" und „195" des inneren Codes nicht dem Ausgang des äußeren Codes entnommen werden. Dies kann die Gesamtleistung des Codes negativ beeinflussen. Vorteilhafterweise kann diese Situation abgemildert werden, indem während der Terminierungssymbolintervalle eine kleinere Symbolkonstellation mit einer größeren Minimaldistanz zwischen den Symbolen benutzt wird. Tatsächlich werden Fachleute unter Berücksichtigung von 6 bis 9 verstehen, dass dies das praktische Ergebnis des oben beschriebenen Ansatzes der Aufwärtsverschiebung der Werte der Bits X2, X1, X0 ist, die jeweils zu Bits X3, X2, X1 werden, während X0 auf einen festen Wert gesetzt wird, da dies zu einer Verbesserung der so genannten Verzweigungsmesswerte führt, die in dem Decodierer erzeugt werden, die den Symbolen zugeordnet sind, die während dieser Intervalle erzeugt werden. (Eine solche kleinere Konstellation kann bestimmte Symbole der Konstellation aufweisen, die für die anderen Symbolintervalle benutzt werden, doch muss dies nicht so sein.) Andere Wege, einen Schutz vor einer verschlechterten Codeleistung während der Terminierungssymbolintervalle bereitzustellen, beinhalten das Auslegen des inneren Codes derart, dass a) kein Fehlervorgang vollständig innerhalb der Terminierungssymbolintervalle stattfindet, und b) die Untermengendistanz zwischen den Untermengen, die dem Gitter in dem abschließenden Terminierungssymbolintervall zugeordnet werden, so groß wie möglich ausgelegt wird. Tatsächlich erfüllen die inneren Codes, die in den vorliegenden veranschaulichenden Ausführungsformen benutzt werden, diese Kriterien.

Während die vorangegangene Beschreibung der Terminierung von Turbocodes die Anwesenheit eines Verschachtlers annimmt, ist die Terminierung gemäß der Erfindung nicht von einem Verschachtler abhängig. Unabhängig von einem Verschachtler dargestellt, erfordert die Terminierung von seriell verketteten Turbocodes gemäß einem Aspekt der Erfindung, dass der innere Code dadurch terminiert wird, dass er in einen bekannten Zustand gebracht wird, wobei alle Ausgangsbitgruppen von dem äußeren Redundanzcodierer verarbeitet worden sind. Wenn also beispielsweise der äußere Codierer derart arbeitet, dass er M Gruppen von Ausgangsbits erzeugt, muss der innere Codierer wenigstens einen Abschnitt aller solcher M Gruppen codieren. Außerdem muss der innere Codierer, um den inneren Code zu terminieren, auch weitere X Gruppen vorbestimmter Eingangsbits codieren, um den inneren Codierer zu terminieren, indem er in einen bekannten Zustand gebracht wird. So muss der innere Codierer N Gruppen von Eingangsbits verarbeiten, wobei M = (N – X). Da es außerdem auch wünschenswert ist, den äußeren Codierer zu terminieren, werden wenigstens einige der M Gruppen von Ausgangsbits, die von dem äußeren Codierer erzeugt werden, als ein Ergebnis dessen erzeugt, dass der äußere Codierer mit vorbestimmten Bitgruppen versehen wird, derart, dass der äußere Codierer terminiert werden kann, indem er in einen bekannten Zustand gebracht wird. Wenn ein Verschachtler zwischen dem innere und äußeren Codierer vorhanden ist, codiert der äußere Codierer die M Gruppen von Ausgangsbits für einen Verschachtelungsframe, und die M Gruppe weisen eine erste Folge auf. Der innere Codierer empfängt N Gruppen von Eingangsbit für einen Verschachtelungsframe, wobei die N Gruppen eine zweite Folge aufweisen. Der Verschachtler verschachtelt die Bitgruppen derart, dass eine i-te Gruppe in der ersten Abfolge eine j-te Gruppe in der zweiten Folge ist, wobei i ≠ j für wenigstens ein Wertepaar (i, j).

Anders ausgedrückt, geschieht die Terminierung des Turbocodes gemäß der Erfindung wie folgt. Es wurde bereits gezeigt, dass der innere Code terminiert werden kann, indem wenigstens ein vorbestimmtes Bit als Eingang für den inneren Codierer für ein oder mehrere bestimmte Symbolintervalle ersetzt werden kann. Für diese bestimmten Symbolintervalle darf der äußere Codierer keine Ausgangsbits erzeugen, da der innere Codierer nicht für die Verarbeitung dieser Ausgangsbits zur Verfügung steht, da er das wenigstens eine vorbestimmte Bit verarbeitet. So wird gemäß einer Ausführungsform die Operation des äußeren Codierers für diese bestimmten Symbolintervalle unterdrückt, um die Erzeugung von Ausgangsbits zu verhindern.

Der Prozess des Terminieren eines Rate-2/4-Turbocodes mit einem inneren und einem äußeren Rate-2/3-Gittercode, wie hier in einigen veranschaulichenden Ausführungen, kann in formalen Begriffen wie folgt beschrieben werden:

Die Folgenummern der J·K Symbolintervalle eines Verschachtelungsframes seien sowohl an der Eingangs- als auch der Ausgangsseite des Symbolverschachtlers als 0,1, ..., und J·K – 1 ausgedrückt.

Um die Terminierung des inneren Codes zu erleichtern, arbeitet der äußere Codierer nur in J·K – 2 Symbolintervallen. Es arbeitet nicht in dem J·K – 1-(J·K/J1)ten (oder J·K – 1-Kten wenn J1 = 1) und dem letzten J·K – 1-ten Symbolintervall auf der Eingangsseite des Verschachtlers.

Die Terminierung des äußeren Codes erfolgt ansonsten in der gewohnten Weise. Für den 8-Zustand-Code wird das Eingangsbit X2 an W2 des Codierer-Zustandsautomaten in dem J·K – 3ten Symbolintervall auf der Eingangsseite des Verschachtlers gesetzt; und die Eingangsbits X3 und X2 werden jeweils im J·K – 2ten Symbolintervall an W1 bzw. W2 gesetzt. Für den 16-Zustand-Code werden die Eingangsbits X3 und X2 jeweils sowohl im J·K – 3ten und J·K – 2ten Symbolintervall an W2⊕W3 bzw. W1⊕W2⊕W3 gesetzt, wobei ⊕ die exklusive ODER-Operation an den Bits ist.

Der innere Code arbeitet dagegen in allen J·K Symbolintervallen. Seine Terminierung geschieht in den letzten zwei Symbolintervallen auf der Ausgangsseite des Verschachtlers, die den zwei Symbolintervallen an der Eingangsseite des Verschachtlers entsprechen, wenn der äußere Code nicht arbeitet.

Je nach dem inneren Code kann seine Terminierung nicht in gewohnter Weise geschehen. Für den 8-Zustand-Code werden beispielsweise die Eingangsbits X2 und X1 sowohl im J·K – 2ten als auch im J·K – 1ten Symbolintervall jeweils an W1 bzw. W2 des Codiererzustandsautomats gesetzt (während gewohnterweise das Eingangsbit X2 in dem J·K – 2ten Symbolintervall ein Datenbit ist).

Außerdem kann der Prozess der Terminierung von Rate-3/5- und -4/6-Turbocodes mit jeweils einem inneren Rate-2/3- bzw. einem äußeren Rate-4/5-Gittercode wie in anderen Ausführungsformen in formalen Begriffen wie folgt beschrieben werden:

Die Terminierung des äußeren Codes geschieht in der gewohnten Weise. Für den 16-Zustand-Rate-3/4-Code wird das Eingangsbit X2 im J·K – 3ten Symbolintervall auf der Eingangsseite des Verschachtlers an W3 des Codiererzustandsautomaten gesetzt; und die Eingangsbits X4, X3 und X2 werden jeweils im J·K – 2ten Symbolintervall an W2, W1 bzw. W3 gesetzt. Für den 32-Zustand-Rate-4/5-Code wird das Eingangsbit X2 im J·K – 3ten Symbolintervall an W4 gesetzt; und die Eingangsbits X5, X4, X3 und X2 werden im J·K – 2ten Symbolintervall jeweils an W2, W1, W3 bzw. W4 gesetzt.

Dagegen geschieht die Terminierung sowohl des inneren 16-Zustand-Rate-3/4- als auch des 32-Zustand-Rate-4/5-Codes nicht in gewohnter Weise. Für den Rate-3/4-Code werden die Eingangsbits X3, X2 und X1 jeweils sowohl im J·K – 2ten als auch J·K – 1ten Symbolintervall an W1, W2 bzw. W3 des Codiererzustandsautomaten gesetzt, und für den Rate-4/5-Code werden die Eingangsbits X4, X3, X2 und X1 sowohl im J·K – 2ten als auch J·K – 1ten Symbolintervall jeweils an W1, W2, W3 bzw. W4 gesetzt.

Ähnlich wie bei dem inneren Rate-2/3-Code werden die Werte der Ausgangsbits X3, X2, X1, X0 des inneren Rate-3/4-Codes nach oben verschoben, um jeweils zu Bits X4, X3, X2, X1 zu werden, wobei X0 in den letzten zwei Terminierungssymbolintervallen auf einen vorbestimmten, keine Information tragenden Wert eingestellt ist, bevor diese Bits dem Konstellationszuordner zugeführt werden. Ebenso werden die Werte der Ausgangsbits X4, X3, X2, X1, X0 des inneren Rate-4/5-Codes nach oben verschoben, um jeweils zu Bits X5, X4, X3, X2, X1 zu werden, wobei X0 in den letzten zwei Terminierungssymbolintervallen auf einen vorbestimmten, keine Information tragenden Wert eingestellt ist.

Turbocode-Auslegung

Um zu einem Verständnis dessen beizutragen, wie vorteilhafte Turbocodes ausgelegt werden können, sollen im Folgenden die Überlegungen erörtert werden, die in die Auslegung der verschiedenen hier offenbarten Turbocodes eingegangen sind. Insbesondere ist zunächst die Auslegung eines mehrstufigen Codes unter Benutzung eines seriell verketteten 2D-Turbocodes der ersten Stufe mit einer Bandbreiteneffizienz von 4 Bits pro 2D-Signalpunkt zu berücksichtigen (dies ist die Ausführungsform aus 1, mit m = 1).

Zunächst soll überlegt werden, wie der Turbocode der ersten Stufe auszulegen ist.

Schritt 1: Bestimmen der Konstellationsgröße

Da der innere und der äußere Code des Turbocodes jeweils ein redundantes Bit erzeugen, wird eine Signalkonstellation mit 64 Symbolen benötigt, was in 8 gezeigt ist.

Schritt 2: Bestimmen, wie fein die Konstellation für den Code unterteilt sein soll, und wie viele Bits in (den äußeren Code des) Turbocodes eingegeben werden.

Damit der Turbocode einen Codierungsgewinn von wenigstens 6 dB erzielen kann, sollte die Konstellation in 16 „Turbocode"-Untermengen unterteilt werden, wobei die Minimaldistanz in den Untermengen maximiert wird. In 8 ist jede solche Untermenge durch ein Bitmuster von Y3Y2Y1Y0 identifiziert. Die Anzahl von Untermengen bestimmt dann, wie viele Bits in (den äußeren Code von dem) Turbocode eingegeben werden. In diesem Fall ist die Anzahl der Eingangsbits zwei, was durch Subtrahieren der zwei redundanten Bits von den vier Bits ermittelt wird, die benötigt werden, um eine „Turbocode"-Untermenge zu identifizieren.

Schritt 3: Auslegen des inneren Codes

  • (a) Auswählen der Rate.

    Der innere Code kann in diesem Fall drei mögliche unterschiedliche Raten aufweisen: 1/2, 2/3 und x. Wir haben uns entschieden, in 1 Rate-2/3 zu benutzen, da dies die beste Kombination von Leistung, Komplexität und Verschachtelungslänge bietet.
  • (b) Auswählen der Anzahl von Zuständen.

    Für Rate-2/3 kann der innere Code die Anzahl von Zuständen auf 4, 8, 16 usw. setzen. Wir haben uns entschieden, in 1 8 Zustände zu wählen, da dies die beste Kombination von Leistung, Komplexität und Verschachtelungslänge bietet.
  • (c) Sobald die Rate und die Anzahl der Zustände für den inneren Code ausgewählt wurden, ist die übrige Auslegung des inneren Codes die gleiche wie bei einem einstufigen Gittercode. Insbesondere wird der innere Code ausgelegt, indem die gesamte 64-Symbol-Konstellation in nur acht Untermengen „innerer Code" unterteilt wird, wobei die Minimaldistanz in den Untermengen maximiert wird. Jede solche Untermenge ist in 8 durch ein Bitmuster Y2Y1Y0 identifiziert. Diese Untermengen werden den Zustandsübergängen des inneren Codes derart zugewiesen, dass die Minimaldistanz zwischen gültigen Abfolgen von Untermengen des inneren Codes maximiert wird. Um dieses Ziel zu erreichen, sollte die Untermengenminimaldistanz zwischen den Untermengen, die den Zustandsübergängen zugewiesen sind, die aus einem jeweiligen aktuellen Zustand hervorgehen, oder in einen jeweiligen nächsten Zustand des inneren Codes übergehen, maximiert werden. Es ist zu beachten, dass die Auslegung des inneren Codes eine Beschränkung in Bezug darauf mit sich bringt, wie die Bitmuster von Y2Y1Y0 den acht „Innerer Code"-Untermengen der 64-Symbol-Konstellation zugewiesen werden sollten. Insbesondere soll die 64-Symbol-Konstellation in zwei 32-Symbol-Unterkonstellationen unterteilt werden, wobei ihre Minimaldistanz innerhalb der Unterkonstellation maximiert wird. Jede Unterkonstellation ist in 8 durch einen Bitwert von Y0 identifiziert, und es kann gezeigt werden, dass sie vier „Innerer Code"-Untermengen der 69-Symbol-Konstellation aufweist. Die vier Bitmuster 000, 010, 100, 110 von Y2Y1Y0 sollten dann den vier Untermengen einer Unterkonstellation zugewiesen werden, und die vier übrigen Bitmuster 001, 011, 101, 111 von Y2Y1Y0 sollten den vier Untermengen der andere Unterkonstellation zugewiesen werden. Allerdings sind hinsichtlich des inneren Codes die Zuweisungen der ersten vier Bitmuster 000, 010, 100, 110 zu den Untermengen abhängig von den Zuweisungen der übrigen vier Bitmuster 001, 011, 101, 111.

Schritt 4: Auslegen des äußeren Codes

  • (a) Auswählen der Rate

    Der äußere Code kann in diesem Fall nur Rate-2/3 aufweisen.
  • (b) Auswählen der Anzahl von Zuständen

    Für Rate-2/3 kann der äußere Code die Anzahl von Zuständen auf 4, 8, 16 usw. setzen. Wie haben uns in 1 dazu entschieden, 8 oder 16 Zustände zu benutzen, da sie die besten Kombinationen von Leistung, Komplexität und Verschachtelungslänge bieten.
  • (c) Sobald die Rate und die Anzahl von Zuständen für den äußeren Code ausgewählt wurden, ist die übrige Auslegung des äußeren Codes wie folgt. Eine Auslegung erfolgt so, als ob der innere Code nicht vorhanden wäre, das heißt, als ob das redundante Bit Y0, das von dem inneren Code erzeugt wird, einen festen wert von 0 oder 1 aufwiese. In diesem Fall weist die Konstellation nur 32 Symbole auf, und ist eine der zwei 32-Symbol-Unterkonstellationen, die durch einen Bitwert von Y0 in 8 identifiziert werden, wie in Schritt 3 erwähnt. Für jede Unterkonstellation kann gezeigt werden, dass sie acht „Turbocode"-Untermengen aufweist, wobei jede Untermenge durch ein Bitmuster von Y3Y2Y1 identifiziert wird, zusammen mit dem Wert von Y0 für die Unterkonstellation aus 8, wie in Schritt 2 erwähnt. Diese Untermengen werden den Zustandsübergängen der äußeren Codes derart zugewiesen, dass die Minimaldistanz zwischen gültigen Abfolgen von Untermengen des äußeren Codes für jede Unterkonstellation maximiert wird. Um dieses Ziel für jede Unterkonstellation zu erreichen, sollte die Untermengenminimaldistanz zwischen den Untermengen, die den Zustandsübergängen zugewiesen sind, die aus einem jeweiligen aktuellen Zustand hervorgehen oder in einen jeweiligen nächsten Zustand des äußeren Codes übergehen, maximiert werden. Es ist zu beachten, dass, wie bei einem einstufigen Gittercode, die Auslegung des äußeren Codes einige Beschränkungen dessen mit sich bringt, wie die Bitmuster Y3Y2Y1 den acht „Turbocode"-Untermengen jeder 32-Symbol-Unterkonstellation zuzuweisen sind. Allerdings sind die Zuweisungen der Bitmuster von Y3Y2Y1 zu den acht „Turbocode"-Untermengen einer Unterkonstellation immer noch unabhängig von den Zuweisungen der Bitmuster von Y3Y2Y1 zu den acht „Turbocode"-Untermengen der anderen Unterkonstellation.

Schritt 5: Auslegung des Konstellationszuordners

Der äußere Code von Schritt 4 wird in Abwesenheit des inneren Codes ausgelegt. In Anwesenheit des inneren Codes jedoch kann jede „Turbocode"-Untermenge, die von dem äußeren Code für eine Unterkonstellation identifiziert wird, als eine unterschiedliche „Turbocode"-Untermenge für die andere Unterkonstellation übertragen werden. In diesem Fall würden die zwei „Turbocode"-Untermengen für Y3Y2Y1 dasselbe Bitmuster aufweisen, aber verschiedene Bitwerte für Y0. Um den Codierungsgewinn des äußeren Codes in Anwesenheit des inneren Codes zu bewahren, erfolgen die Zuweisungen der Bitmuster von Y3Y2Y1Y0 zu den 16 „Turbocode"-Untermengen derart, dass die Untermengenminimaldistanz für jedes Paar von „Turbocode"-Untermengen mit demselben Bitmuster für Y3Y2Y1 und unterschiedlichen Bitwerten für Y0 minimiert wird. In 8 ist die Untermengenminimaldistanz für jedes solche Paar aus „Turbocode"-Untermengen gleich der Minimaldistanz (zwischen zwei beliebigen Symbolen) der 64-Symbolkonstellation, und wird so in der Tat minimiert.

Es ist zu beachten, dass in diesem letzten Schritt der Auslegung des Turbocodes die Zuweisungen der Bitmuster Y3Y2Y1 zu den acht „Turbocode"-Untermengen einer Unterkonstellation nicht länger von den Zuweisungen der Bitmuster von Y3Y2Y1 zu den acht „Turbocode"-Untermengen der anderen Unterkonstellation unabhängig sind.

Um zusammenzufassen, haben wir bei der Auslegung des Turbocodes der ersten Stufe Folgendes benutzt: (a) eine spezifische Regel, um die Ausgangsbits des inneren Codes verschiedenen Untermengen der Gesamtkonstellation zuzuordnen; (b) eine andere spezifische Regel, um die Ausgangsbits des äußeren Codes den verschiedenen Untermengen jeder Unterkonstellation zuzuordnen, die von dem redundanten Bit des inneren Codes identifiziert wird; und (c) eine weitere spezifische Regel, um gemeinsam die Ausgangsbits des äußeren Codes und das redundante Bit des inneren Codes verschiedenen Untermengen der Gesamtkonstellation zuzuordnen. Die Auslegung des inneren Codes, des äußeren Codes und des Konstellationszuordners geschieht so in gemeinsamer Weise, insbesondere angesichts von Regel (c). Im allgemeinen Sinn wurde eine so genannte „gemeinsame Auslegung" wenigstens minimal erzielt, wenn die Distanz zwischen gültigen Symbolenfolgen größer ist als das Produkt der minimalen verallgemeinerten Hamming-Distanz mal der Minimaldistanz der Konstellation (d.h. der Minimaldistanz zwischen Symbolen der Konstellation). Die verallgemeinerte Hamming-Distanz zwischen zwei beliebigen Folgen ist die Anzahl von Positionen, an denen zwei Symbolfolgen verschieden sind. In einem Code mit nicht gemeinsamer Auslegung kann die erwähnte Euklidische Distanz die gleiche sein wie das erwähnte Produkt.

Als nächstes soll überlegt werden, wie der Code der zweiten Stufe des mehrstufigen Codes auszulegen ist. Es stellt sich heraus, dass die Leistung des oben beschriebenen Turbocodes von seiner Minimaldistanz innerhalb der Untermengen dominiert wird, d.h. der Minimaldistanz zwischen den Symbolen jeder „Turbocode"-Untermenge. Um diese Leistung weiter zu verbessern, besteht ein einfaches und gut bekanntes Verfahren darin, einen simplen einfachen Paritätsprüfungs-(SPC)-Code der zweiten Stufe zu benutzen, wie in 1 gezeigt. Der Code ist basierend auf einer weiteren Unterteilung jeder „Turbocode"-Untermenge in zwei „Code der zweiten Stufe"-Untermengen, wobei die Minimaldistanz innerhalb der Untermengen maximiert wird. In 8 ist jede solche „Code der zweiten Stufe"-Untermenge durch einen Bitwert für Y4 identifiziert, zusammen mit dem Bitmuster von Y3Y2Y1Y0 für die entsprechende „Turbocode"-Untermenge.

Dieselbe Verfahrensweise, die zum Auslegen des mehrstufigen Codes aus 1 benutzt wurde, kann auch benutzt werden, um den mehrstufigen Codes aus 14 auszulegen. Die Charakteristika des mehrstufigen Codes aus 14 stellen sich wie folgt dar:

  • 1) Die Konstellation ist 4D.
  • 2) Damit der Turbocode der ersten Stufe eine Codierungsgewinn von wenigstens 6 dB erzielt, ist die 4D-Konstellation in 32 „Turbocode"-4D-Untermengen unterteilt, wobei die Minimaldistanz innerhalb der Untermengen maximiert ist. Jede solche 4D-Untermenge ist durch ein Bitmuster von X4X3X2X1X0 aus 17 identifiziert. Die Anzahl von Bits, die in den (äußeren Code von dem) Turbocode in jedem 4D-Symbol eingegeben werden, ist 3.
  • 3) Der innere Code ist Rate-3/4 mit 16 Zuständen, da dies die beste Kombination von Leistung, Komplexität und Verschachtelungsverzögerung bietet. Der innere Code ist durch Unterteilen der gesamten 4D-Konstellation in nur 16 „Innerer Code"-4D-Untermengen ausgelegt, wobei die Minimaldistanz innerhalb der Untermengen maximiert ist. Jede solche 4D-Untermenge ist durch ein Bitmuster von X4X3X2X1X0 aus 17 identifiziert. Diese 4D-Untermengen sind den Zustandsübergängen des inneren Codes derart zugewiesen, dass die Minimaldistanz zwischen gültigen Abfolgen von Untermengen des inneren Codes maximiert ist. Um dieses Ziel zu erreichen, sollte die Untermengenminimaldistanz zwischen den Untermengen, die den Zustandsübergängen zugewiesen sind, die aus einem jeweiligen aktuellen Zustand hervorgehen, oder in einen jeweiligen nächsten Zustand übergehen, maximiert sein.
  • 4) Der äußere Code ist ebenfalls Rate-3/4 mit 16 Zuständen, da dies die beste Kombination von Leistung, Komplexität und Verschachtelungsverzögerung bietet. Der äußere Code ist ausgelegt, als ob der innere Code nicht vorhanden wäre, das heißt, als ob das redundante Bit X0, das von dem inneren Code erzeugt wird, einen festen Wert von 0 oder 1 aufwiese. In diesem Fall ist die 4D-Konstellation eine von den beiden 4D-Unterkonstellationen, die in 17 durch einen Bitwert von X0 identifiziert wird. Jede 4D-Unterkonstellation weist 16 „Turbocode"-4D-Untermengen auf. Diese 4D-Untermengen sind den Zustandsübergängen des äußeren Codes derart zugewiesen, dass die Minimaldistanz zwischen gültigen Folgen von Untergruppen des äußeren Codes für jede Unterkonstellation maximiert ist. Um dieses Ziel zu erreichen, sollte die Untermengenminimaldistanz zwischen den Untermengen, die den Zustandsübergängen zugewiesen sind, die aus einem jeweiligen aktuellen Zustand hervorgehen, oder in einen jeweiligen nächsten Zustand übergehen, maximiert sein.
  • 5) Um den Codierungsgewinn des äußeren Codes in Anwesenheit des inneren Codes zu bewahren, geschehen die Zuweisungen der Bitmuster von X4X3X2X1X0 zu den 32 „Turbocode"-4D-Untermengen derart, dass die Untermengenminimaldistanz für jedes Paar von „Turbocode"-4D-Untermengen mit demselben Bitmuster für X4X3X2X1 und unterschiedlichen Bitwerten für X0 maximiert ist.
  • 6)
  • 7) Die Leistung des Turbocodes ist durch die Minimaldistanz innerhalb der „Turbocode"-4D-Untermenge dominiert. Um diese Leistung weiter zu verbessern, wird ein simpler doppelter Paritätsprüfungs-(DPC)-Code der zweiten Stufe benutzt. Der Code der zweiten Stufe ist basierend auf einer weiteren Unterteilung jeder „Turbocode"-4D-Untermenge in vier „Code der zweiten Stufe"-4D-Untermengen ausgelegt, wobei die Minimaldistanz innerhalb der Untermengen maximiert ist. Jede solche „Code der zweiten Stufe"-4D-Untermengen ist durch einen Bitwert für X5 und ein Bitmuster X4X3X2X1X0 für die entsprechende „Turbocode"-4D-Untermenge in 17, zusammen mit einem Bitwert für X6, in 18 identifiziert.

Anders als der Turbocode aus 1 weist der Turbocode aus 14 ein weiteres wichtiges Charakteristikum auf. Der innere und auch der äußere Code des Turbocodes aus 14 sind für sich selbst ein „schlechter" Gittercode. Mit „schlecht" meinen wir, dass, wenn der innere und der äußere Code nicht miteinander verkettet sind, der innere und äußere Code eine Komplexität benötigen, die wesentlich höher ist, als erforderlich wäre, um ihre Leistung zu erzielen. Die Leistung des inneren und äußeren 4D-Rate-3/4-Codes mit 16 Zuständen aus 14 ist, allein benutzt, etwa dieselbe wie die eines 4D-Rate-2/3-Gittercodes mit 8 oder 16 Zuständen. Allerdings ist die Komplexität des 4D-Rate-3/4-Codes mit 16 Zuständen etwa viermal oder zweimal so hoch wie die des 4D-Rate-2/3-Codes mit 8 oder 16 Zuständen.

Was ungewöhnlich bei dem „schlechten" 4D-Rate-3/4-Code mit 16 Zuständen ist, ist, dass er eine Minimaldistanz innerhalb der Untermengen aufweist, die wesentlich größer ist als die des guten 4D-Rate-2/3-Codes mit 8 oder 16 Zuständen. Obwohl diese größere Minimaldistanz innerhalb der Untermengen dem 4D-Rate-3/4-Code mit 16 Zuständen nicht hilft, die Leistung des 4D-Rate-2/3-Codes mit 8 oder 16 Zuständen zu übertreffen, wenn er allein benutzt wird, hilft sie, wenn der Code in einer verketteten Weise benutzt wird, und ein Turbocode gebildet wird. Wäre der 4D-Rate-2/3-Codes mit 8 oder 16 Zuständen benutzt worden, um den Turbocode zu bilden, würde die Leistung des Turbocodes ebenfalls von seiner Minimaldistanz innerhalb der Untermengen dominiert, was einen Codierungsgewinn von nur 3 dB bereitstellen würde! Das Benutzen eines leistungsfähigeren Turbocodes als Code der ersten Stufe eines mehrstufigen Codes kann dazu beitragen, die höherstufigen Codes stark zu vereinfachen, und die Leistung des mehrstufigen Codes insgesamt zu verbessern, wie weiter unten erläutert werden soll.

Der mehrstufige Code aus 24 ist in einer Weise ausgelegt, die nahezu identisch mit der aus 14 ist, mit dem Unterschied, dass der Turbocode der ersten Stufe aus 24 basierend auf einer feineren Unterteilung der 4D-Konstellation in 64 „Turbocode"-4D-Untermengen ausgelegt ist. Jede solche 4D-Untermenge ist in 17 durch ein Bitmuster X5X4X3X2X1X0 identifiziert. Die Benutzung einer solchen feineren Unterteilung verbessert die Leistung des Turbocodes der ersten Stufe und seines zugehörigen mehrstufigen Codes.

Genau wie der Turbocode aus 14 sind der innere und der äußere Code des Turbocodes aus 24 für sich allein ein „schlechter" Gittercode. Tatsächlich sind der innere und äußere 4D-Rate-4/5-Code mit 32 Zuständen aus 24 sogar schlechter als der 4D-Rate-3/4-Code mit 16 Zuständen aus 14, wenn der Code allein benutzt wird. Ebenfalls wie bei dem Turbocode aus 14 ergibt sich eine bessere Leistung, wenn diese „schlechten" Gittercodes verkettet werden, und so einen Turbocode bilden. Was ungewöhnlich in Bezug auf den „schlechten" 4D-Rate-4/5-Code mit 32 Zuständen ist, ist wiederum seine relativ große Minimaldistanz innerhalb der Untermengen, die von einem Turbocode benötigt wird, um eine ausgezeichnete Leistung bereitzustellen.

In der Ausführungsform aus 27 ist der 4D-Rate-2/4-Turbocode der ersten Stufe unter Benutzung derselben Vorgehensweise ausgelegt, wie sie in den früheren Ausführungsformen benutzt wurde. Allerdings wird eine andere Philosophie benutzt, um den entsprechenden mehrstufigen Code zu konstruieren. In den früheren Ausführungsformen ist der Turbocode der ersten Stufe allein für sich sehr leistungsstark, und benötigt nur einen simplen Code der zweiten Stufe als Unterstützung. In der vorliegenden Ausführungsform ist der Turbocode der ersten Stufe nicht leistungsstark genug, und benötigt eine große Unterstützung durch die höherstufigen Codes, um seine Leistung zu verstärken.

Insbesondere ist der Turbocode aus 27 basierend auf einer Unterteilung der 4D-Konstellation in nur 16 „Turbocode"-4D-Untermengen konstruiert. Jede solche Untermenge ist durch ein Bitmuster von X3X2X1X0 aus 28 identifiziert. Auf diese Weise kann der Turbocode nur einen Codierungsgewinn von 3 dB bieten. Wenn wir jedoch nicht die Fehlervorgänge zählen, die innerhalb der korrekt decodierten Abfolge von „Turbocode"-Untermengen auftreten, kann gezeigt werden, dass der Codierungsgewinn des Turbocodes 6 dB übersteigt.

Um die Fehlervorgänge innerhalb der korrekt decodierten Abfolge von „Turbocode"-Untermengen weiter zu korrigieren, wird, wie in 27 gezeigt, ein relativ leistungsstarker und komplexer erweiterter einfacher Fehlerkorrektur-(ESEC)-Code der zweiten Stufe benutzt, gefolgt von einem simplen SPC-Code der dritten Stufe. Zusammen erzielen die drei Codes einen Codierungsgewinn von wenigstens 6 dB.

In der Erörterung der Codeauslegung haben wir bislang implizit angenommen, dass die 2D-Konstellation entweder eine Vielzahl von Amplituden aufweist, oder ein 4-PSK mit konstanter Amplitude ist. Die Ausführungsform aus 1 bleibt unverändert, wenn die 2D-Konstellation ein 16-PSK mit konstanter Amplitude ist. Die Ausführungsformen aus 14, 24 und 27 werden leicht verändert, wenn die konstituierende 2D-Konstellation der 4D-Konstellation ein 8-PSK mit konstanter Amplitude ist. Diese Änderung wird von den unterschiedlichen Distanzeigenschaften des 8-PSK verursacht und betrifft nur die Konstellationszuordnungstabellen aus 17 und 28. Stattdessen sollten die Zuordnungstabelle aus 23 und 30 benutzt werden. Es ist jedoch zu beachten, dass alles Übrige unverändert bleibt, einschließlich der Verfahrensweise, die zum Auslegen der Turbocodes benutzt wird.

Wenn die konstituierende 2D-Konstellation der 4D-Konstellation anstelle einer 16-QAM mit einer Vielzahl von Amplituden ein 16-PSK mit konstanter Amplitude ist, kann ein simplerer mehrstufiger Code konstruiert werden, wie in der Ausführungsform aus 31 gezeigt. Diese Vereinfachung wird wiederum von den unterschiedlichen Distanzeigenschaften des 16-PSK hervorgerufen. Insbesondere ist in 31 der 4D-Rate-2/4-Turbocode der ersten Stufe basierend auf einer Unterteilung der 4D-Konstellation in 16 „Turbocode"-4D-Untermengen ausgelegt, unter Benutzung derselben Verfahrensweise, wie vorher für die anderen Ausführungsformen beschrieben. Jede solche 4D-Untermenge wird durch ein Bitmuster von X3X2X1X0 in 30 identifiziert. Anders als der 4D-Rate-2/4-Turbocode aus 27 ist der Turbocode hier jedoch leistungsstark genug, und benötigt nur einen simplen SPC-Code der zweiten Stufe als Unterstützung.

Andere Variationen

Die vorangehenden Ausführungen veranschaulichen lediglich die Grundgedanken der Erfindung, und es sind viele Variationen möglich. Es folgt eine Reihe von Beispielen hierfür:

Obwohl der innere und der äußere Codierer in bevorzugten Ausführungsformen Gittercodierer sind, kann die Benutzung anderer Typen von Redundanzcodierern möglich sein. Obwohl viele Typen von Codes durch ein Gitter darstellbar sind, und so in gewissem Sinne als Gittercodes bezeichnet werden können, bezeichnet der Begriff Gittercode, wie hier benutzt, einen Code, der ein endlicher Zustandsautomat ist. Für jedes einer Mehrheit von Symbolintervallen kann der Code durch die Beziehungen zwischen dem aktuellen Zustand, dem nächsten Zustand, den aktuellen Eingangsbits, den aktuellen Ausgangsbits, und den Koordinaten des Symbols der Konstellation definiert sein, die von den aktuellen Ausgangsbits zu identifizieren sind. Diese Beziehungen weisen folgende Charakteristika auf: (a) die Anzahl von aktuellen Ausgangsbits ist größer als die der aktuellen Eingangsbits; (b) die aktuellen Ausgangsbits sind Funktionen von einigen der aktuellen und vorhergehenden Eingangsbits, aber keine Funktionen von zukünftigen Bits; und (c) die Koordinaten des Symbols werden durch die aktuellen Ausgangsbits in gemeinsamer Weise identifiziert, das heißt, wenigstens eine Koordinate des Symbols ist eine Funktion von wenigstens zwei aktuellen Ausgangsbits.

Eine adäquate Leistung kann in bestimmten Anwendungen erzielt werden, wenn keins der höherstufigen Bits – das heißt, keins der Bits, die nicht dem äußeren Gittercodierer zugeführt werden – codiert ist. In einem solchen Fall würden die höherstufigen Bits direkt benutzt, um ein Symbol aus der Untermenge auszuwählen, die durch die Turbocodierer-Ausgangsbits identifiziert wird.

Der Parameter m, der beispielsweise die Anzahl uncodierter Bits an Leitung 1046 aus 1 und an entsprechenden Leitungen in anderen Figuren darstellt, kann einen Teilwert annehmen, der beispielsweise unter Benutzung des Verfahrens angepasst werden kann, das in meinem US-Patent Nr. 4,941,154, erteilt am 10. Juli 1990, beschrieben ist.

So genannte Formungsverfahren, die dem Stand der Technik bekannt sind, können benutzt werden, um durch die Benutzung einer erweiterten Signalkonstellation in Verbindung mit einer Zuordnung, die Signalpunkte mit niedrigerer Energie bevorzugt, einen „Formungs"-Gewinn zu erzielen.

Es ist nicht nötig, dass die nicht turbocodierten Bits zusammen mit den turbocodierten Bits verschachtelt werden. Stattdessen können die nicht turbocodierten Bits bei Bedarf an dem Verschachtler vorbeigeführt werden, ohne die Leistung dadurch negativ zu beeinflussen.

Obwohl jeder der hier offenbarten Turbocodes die Verkettung von zwei Codierern aufweist, kann eine noch bessere Leistung durch eine Verkettung von drei oder mehr Codierern erzielt werden, die mit in geeigneter Weise ausgelegten Verschachtlern kombiniert sind.

In allen der hier explizit gezeigten Ausführungsformen läuft die Verarbeitung von der äußeren Codierung über die Verschachtelung hin zu der inneren Codierung und schließlich zur Zuordnung ab. Es kann jedoch möglich sein, dass der Ablauf eine andere Reihenfolge aufweist, wobei trotzdem ein äquivalentes Ergebnis auf Basis von Eingangsbits zu ausgewähltem Symbol erzielt wird. Der Standard, der als V.34 bekannt ist, enthält beispielsweise eine so genannte Vorcodierung, und ermöglicht einen Verarbeitungsablauf, bei dem die Codierung – in diesem Fall eine übliche Gittercodierung – ausgeführt wird, nachdem eine Zuordnung durchgeführt wurde, und es kann möglich sein, einen Verarbeitungsablauf mit diesem allgemeinen Leitgedanken auch in Verbindung mit den hier beschriebenen Turbocodes zu benutzen. Die Verarbeitung in einer solchen Anordnung kann beispielsweise in der folgenden Reihenfolge ablaufen: äußere Codierung, Verschachtelung, Vorcodierung/Zuordnung, und innere Codierung.

Im Gegensatz zu den hier offenbarten Ausführungsformen ist es möglich, dass der innere Codierer alle Ausgangsbits des äußeren Codierers als Eingang aufweist. So ist es beispielsweise möglich, dass der innere Codierer 110 ein Rate-3/4-Codierer ist, der als Eingang nicht nur Bits X2, X1 aufweist, sondern auch Bit X3. Ein Rate-3/4-Code ist allerdings wesentlich komplexer als ein Rate-2/3-Code, und die Menge an zusätzlichem Codierungsgewinn, die von dem Turbocode insgesamt erzielt wird, indem hier ein Rate-3/4-Code benutzt wird, ist wahrscheinlich sehr gering oder nicht vorhanden. Außerdem kann es tatsächlich zu einem Verlust an Codierungsgewinn kommen, es sei denn, es würde ein längerer Verschachtler in Verbindung mit einem solchen Code von erhöhter Komplexität benutzt. Nachteiligerweise erhöht zudem die Benutzung eines längeren Verschachtlers die Latenz.

Die Parameter M1 und M2 – die Anzahl von Zuständen des äußeren und inneren Codierers – können jeder Wert sein, der sich in einer jeweiligen Umgebung als vorteilhaft erweist. Es scheint jedoch so, dass, wenn eine zusätzliche Komplexität durch Erhöhen der Anzahl der Zustände in dem einen oder anderen Codierer tolerierbar ist, die Leistungsverbesserung, die sich aus der erhöhten Komplexität ergibt, größer ist, wenn M1 erhöht wird und nicht M2.

Es können andere Verschachtler und Gittercodierer als die hier beschriebenen benutzt werden.

In jeder der hier offenbarten Ausführungsformen weisen der innere und der äußere Codierer dieselbe Rate auf, d.h. beide sind Rate-2/3 oder Rate-3/4 oder Rate-4/5. Allerdings können der innere und der äußere Codierer Raten aufweisen, die sich voneinander unterscheiden, und die sich auch von den drei Raten unterscheiden, die in den offenbarten Ausführungsformen offenbart sind.

Obwohl alle hier offenbarten Gittercodes systematische Codes sind (d.h. alle Eingangsbits erscheinen als Ausgangsbits, zusammen mit wenigstens einem redundanten Bit, das eine Funktion verschiedener aktueller und Codezustandsvariablen ist), ist es möglich, dass sie unsystematisch sind, obwohl die Benutzung eines unsystematischen Codes als inneren Codes die Gesamtleistung des Turbocodes stark negativ zu beeinflussen scheint.

Es kann wünschenswert sein, wenn wenigstens einige Bits an den Leitungen 104, 304 usw. von einem Reed-Solomon- oder einem anderen Code verarbeitet werden, um diese Bits vor Auswirkungen von Impulsrauschen oder anderen Beeinträchtigungen zu schützen. Es kann in der Tat ein anderer Code anstelle der Paritätsprüfungs- oder Fehlerkorrekturcodes benutzt werden, die in verschiedenen offenbarten Ausführungsformen mit mehrstufigen Codes als die höherstufigen Codes gezeigt wurden.

In den veranschaulichenden Ausführungsformen weisen beide Codierer dieselbe Dimensionalität auf. Das heißt, jeder erzeugt ein redundantes Bit (d.h. vollzieht einen Zustandsübergang) für jedes Symbolintervall. Es kann allerdings möglich sein, lohnende Codes auszulegen, bei denen dies nicht der Fall ist – beispielsweise kann der äußere Code ein vierdimensionaler Code sein, was bedeutet, dass er ein redundantes Bit für jedes vierdimensionale Symbol erzeugt, während der innere Code ein zweidimensionaler Code ist, was bedeutet, dass er ein redundantes Bit für jedes der zwei konstituierenden zweidimensionalen Signalintervalle des vierdimensionalen Symbolintervalls erzeugt.

Bei Bedarf können die Datensymbole, die von dem Konstellationszuordner erzeugt werden, vor der Impulsformung und Modulation weiter verarbeitet werden. Eine solche Verarbeitung kann beispielsweise eine Tomlinson-Vorcodierung sein, wie in meinem US-Patent Nr. 5,195,107, erteilt am 3. März 1993, offenbart.

Es ist möglich, dass mehr als ein Ausgangsbit des äußeren Codierers nicht weiter von dem inneren Code codiert wird, obwohl in allen hier explizit gezeigten Ausführungsformen nur ein Ausgangsbit des äußeren Codierers (z.B. Bit X3 in 1) nicht weiter von dem inneren Code codiert wird.

Es kann sich als wünschenswert erweisen, einen Turbocode einer so genannten „Punktierung" zu unterziehen, was bedeutet, dass nicht alle Codiererausgangsbits immer übertragen werden. Dieser Ansatz würde die Benutzung einer kleineren Signalisierungskonstellation während der punktierten Signalisierungsintervalle erlauben, was vom Standpunkt der Taktrückgewinnung und/oder der Trägerphasenrückgewinnung vorteilhaft sein kann. Alternativ kann eine Konstellation derselben Größe benutzt werden, was bei Bedarf die Übertragung einer Art von Hilfsinformation erlaubt.

Fachleute werden verstehen, dass die hier gezeigten Blockdiagramme Konzeptansichten veranschaulichender Schaltungen darstellen, welche die Grundgedanken der Erfindung verkörpern. Die Funktionen der verschiedenen in den Figuren gezeigten Elemente würden in bevorzugten Ausführungsformen von einem oder mehreren programmierten Prozessoren, digitalen Signalverarbeitungs-(DSP)-Chips oder Ähnlichem implementiert werden, anstelle von einzelnen Hardwareelementen.

Obwohl die hier offenbarten Codierungsschemata entweder zwei- oder vierdimensional sind, kann die Erfindung mit Konstellationen jeder gewünschten Dimensionalität benutzt werden, darunter eindimensionalen Konstellationen, sowie Konstellationen mit einer höheren Dimensionalität als vier bei Konstellationen, deren Anzahl von Dimensionen eine ungerade Zahl ist.


Anspruch[de]
Verfahren zum Terminieren eines Gittercodierers in einer Anordnung zum Erzeugen von Datensymbolen für jeweilige Symbolintervalle, wobei die Anordnung einen ersten Gittercodierer (106), der betreibbar ist zum Codieren von Eingangsbits (X3, X2), die einem bestimmten der Symbolintervalle zugeordnet sind, um eine erweiterte Gruppe von ersten Gittercodierer-Ausgangsbits (X3, X2, X1) zu erzeugen, die dem bestimmten Symbolintervall zugeordnet sind, und einen zweiten Gittercodierer (110), der betreibbar ist zum Codieren einer vorbestimmten Anzahl der ersten Gittercodierer-Ausgangsbits (X2, X1), um eine erweiterte Gruppe zweiter Gittercodierer-Ausgangsbits (X2, X1, X0) zu erzeugen, die dem bestimmten Symbolintervall zugeordnet sind, und einen Zuordner (112) aufweist, der dazu angepasst ist, ein bestimmtes Datensymbol aus einer Signalkonstellation für das bestimmte Symbolintervall als eine Funktion wenigstens der erweiterten Gruppe zweiter Gittercodierer-Ausgangsbits auszuwählen, wobei das Verfahren gekennzeichnet ist durch:

Ersetzen von wenigstens einem vorbestimmten Bit als Eingang des zweiten Gittercodierers für wenigstens ein Symbolintervall; und

Nichterzeugen wenigstens eines ersten Gittercodierer-Ausgangsbits, das dem wenigstens einen Symbolintervall zugeordnet ist.
Verfahren nach Anspruch 1, wobei der Schritt des Nichterzeugens folgenden Schritt aufweist:

Unterdrücken der Operation des ersten Gittercodierers für das wenigstens eine Symbolintervall.
Verfahren nach Anspruch 1, das außerdem folgenden Schritt aufweist:

Ersetzen von wenigstens einem vorbestimmten Bit als Eingang des ersten Gittercodierers für wenigstens ein Symbolintervall.
Verfahren nach Anspruch 3, wobei das wenigstens eine vorbestimmte Bit, das als Eingang des ersten Gittercodierers ersetzt wurde, eine Funktion von wenigstens einem Bit ist, das zuvor in dem ersten Gittercodierer gespeichert wurde. Verfahren nach Anspruch 4, wobei der erste Gittercodierer ein erster endlicher Automat ist, und wobei das wenigstens eine vorbestimmte Bit, das als Eingang des ersten Gittercodierers ersetzt wurde, eine Funktion des Zustands des ersten Gittercodierers ist. Verfahren nach Anspruch 1, wobei:

der erste Gittercodierer ein erster endlicher Automat ist, der dazu angepasst ist, einen ersten Gittercode zu benutzen, um die erweiterte Gruppe von ersten Gittercodierer-Ausgangsbits zu erzeugen;

der zweite Gittercodierer ein zweiter endlicher Automat ist, der dazu angepasst ist, einen zweiten Gittercode zu benutzen, um die erweiterte Gruppe von zweiten Gittercodierer-Ausgangsbits zu erzeugen; und

das Verfahren folgende Schritte aufweist:

Terminieren des zweiten Gittercodes für das wenigstens eine Symbolintervall; und

Nichtändern des Zustands des ersten Gittercodierers für das wenigstens eine Symbolintervall, für das der zweite Gittercode terminiert wird.
Verfahren nach Anspruch 6, wobei der Schritt des Terminierens folgenden Schritt aufweist:

Bereitstellen wenigstens eines vorbestimmten Bits als Eingang für den zweiten Gittercodierer.
Verfahren nach Anspruch 6, das außerdem folgenden Schritt aufweist:

Terminieren des ersten Gittercodes für wenigstens ein Symbolintervall, das nicht das wenigstens eine Symbolintervall ist, für das der zweite Gittercode terminiert wird.
Verfahren nach Anspruch 8, wobei der Schritt des Terminierens des ersten Gittercodes folgenden Schritt aufweist:

Bereitstellen wenigstens eines vorbestimmten Bits als Eingang für den ersten Gittercodierer.
Verfahren nach Anspruch 1, das außerdem die folgenden Schritte aufweist, die von dem Zuordner ausgeführt werden:

Auswählen eines Datensymbols aus einer ersten Signalkonstellation für das wenigstens eine Symbolintervall, für das wenigstens ein vorbestimmtes Bit als Eingang des zweiten Gittercodierers ersetzt wird; und

Auswählen eines Datensymbols aus einer zweiten Signalkonstellation für Symbolintervalle, die nicht das wenigstens eine Symbolintervall sind, für das wenigstens ein vorbestimmtes Bit als Eingang des zweiten Gittercodierers ersetzt wird.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com