ZHAW, NTM2, Rumc, 11.5-1 11. Informationstheorie 11.5. Kanalkodierung: Faltungscodes Inhaltsverzeichnis 1. EINLEITUNG ..................................................................................................................... 1 2. ENCODER ........................................................................................................................ 2 3. VITERBI-DEKODER.......................................................................................................... 6 Literatur [1] J.G. Proakis, M. Salehi, „Grundlagen der Kommunikationstechnik“, Pearson, 2004. [2] Lin S. und Costello D., „Error Control Coding“, Pearson, 2004. [3] Hufschmid M., „Information und Kommunikation, Grundlagen und Verfahren der Informationsübertragung“, Teubner, 2006. 1. Einleitung Die Faltungscodes unterscheiden sich von den Blockcodes hauptsächlich darin, dass der Encoder Gedächtnis aufweist. In den meisten modernen Nachrichtensystemen werden heute primär Faltungscodes für die FEC (forward error correction) eingesetzt. Mit dem Viterbi-Dekoder steht ein optimaler, relativ einfach zu implementierender Dekoder zur Verfügung, mit dem auch soft-decision decoding realisierbar ist. Faltungscodes weisen vergleichbare oder sogar höhere Performance auf als äquivalente Block-Codes. ZHAW, NTM2, Rumc, 11.5-2 2. Encoder Ein (N,K,m)-Faltungsencoder mit Gedächtnis m kann als Schieberegisterschaltung mit K Eingängen und N Ausgängen realisiert werden. Die N Ausgangsbits hängen von den K Eingangsbits sowie den m∙K vergangenen Eingangsbits ab. Typischerweise sind N und K kleine, ganze Zahlen. Das Verhältnis von Informationsbitrate am Encoder-Eingang zur Codebitrate am EncoderAusgang wird als Code-Rate R=K/N bezeichnet. Je höher die Code-Rate R ist, desto grösser ist die übertragene Informationsmenge pro Zeiteinheit, wenn die Übertragungsrate auf dem Kanal fix ist. Beispiel In Abbildung 1 ist ein (N=2,K=1,m=2)-Faltungsencoder bzw. ein Faltungsencoder mit Rate R=1/2 und Gedächtnis m=2 dargestellt. x[2n] ... u[n] ... TBit u[n-1] TBit u[n-2] ... x[2n] x[2n+1] ... x[2n+1] Encoder Abbildung 1: Faltungsencoder mit Rate R=1/2 und Gedächtnis m=2. Der Encoder besteht aus K=1 Schieberegister mit m=2 Verzögerungselementen und generiert für jedes Informationsbit u[n] zwei Codebits x[2n] und x[2n+1], welche nacheinander auf den Ausgang gelangen. Die beiden Codebits x[2n] und x[2n+1] sind vom Informationsbit u[n], aber auch von den beiden vorhergehenden m∙K=2 Informationsbits u[n-1] und u[n-2] abhängig, d.h: x[2n] = u[n] + u[n-1] + u[n-2] und x[2n+1] = u[n] + u[n-2], wobei „+“ hier die Modulo-2-Addition bzw. EXOR bezeichnet. Die Ausgangsfolgen x[2n] und x[2n+1] entstehen eigentlich durch diskrete Faltung der Eingangsfolge u[n] mit den Encoder-Impulsantworten bzw. den „Schieberegister-Generatoren“ [1 1 1] und [1 0 1], was den Namen „Faltungsencoder“ erklärt. Vergewissern Sie sich, dass die Informationsbitfolge u[n] = [1 0 1 1 0 0 ...], n ≥ 0, in die Codebitfolge x[n] = [11 10 00 01 01 11 ...], n ≥ 0, encodiert wird, falls die Anfangsbits Null waren, d.h. u[-2] = u[-1] = 0. Der Faltungsencoder ist eine „finite state machine“. Das Input/Output-Verhalten kann mit einem Zustandsdiagramm beschrieben werden, in dem die mK im Encoder gespeicherten Bits die Zustände darstellen. Jeder Zustandsübergang ist dann durch die K Inputbits, die den Übergang hervorrufen, und durch die resultierenden N Codebits spezifiziert. ZHAW, NTM2, Rumc, 11.5-3 Beispiel In Abbildung 2 ist das Zustandsdiagramm für den in Abbildung 1 dargestellten Faltungsencoder mit Rate R=1/2 und Gedächtnis m=2 dargestellt. 1 / 10 11 1 / 01 0 / 01 0 / 10 01 10 1 / 00 1 / 11 u[n] / x[2n] x[2n+1] 0 / 11 00 u[n-1] u[n-2] 0 / 00 Abbildung 2: Zustandsdiagramm für den Faltungsencoder in Abbildung 1. Wenn sich der Encoder im Nullzustand [u[n-1] u[n-2]]=[0 0] befindet und das Inputbit u[n] = 1 ist, werden die beiden Codebits [x[2n] x[2n+1]] = [1 1] generiert und der Encoder wechselt in den Zustand [u[n] u[n-1]] = [1 0]. Es ist nun viel leichter als im Beispiel oben, die Codebitfolge x[n] = [11 10 00 01 01 11 ...] für die Informationsbitfolge u[n] = [1 0 1 1 0 0 ...] zu bestimmen. In der Praxis bevorzugt man zur Beschreibung eines Faltungscodes aber meistens das Trellisdiagramm, mit dem die Zustandsübergänge in Abhängigkeit von der Zeit dargestellt werden können. Im Trellisdiagramm werden vertikal alle 2mK Zustände und horizontal die Zeit aufgetragen. Die erlaubten Zustandsübergänge werden mit Pfeilen markiert und zusätzlich mit den K Informationsbits, die sie hervorrufen, sowie den resultierenden N Codebits beschriftet. Beispiel In Abbildung 3 ist das Trellisdiagramm für den in Abbildung 1 dargestellten Faltungsencoder mit Rate R=1/2 und Gedächtnis m=2 dargestellt. Es wird angenommen, dass der Encoder am Anfang im Nullzustand ist und nach der Encodierung von 3 Informationsbits mit 2 sogenannten Tails-Bits (Nullen) in den Nullzustand zurückgesetzt wird. In der Praxis werden natürlich sehr viel mehr Informationsbits als in diesem kleinen Beispiel encodiert, bevor der Encoder allenfalls wieder in den Nullzustand zurückgesetzt wird. In Abbildung 3 ist ersichtlich, dass der Encoder bei der Encodierung der Informationsbitfolge u[n] = [1 1 1 (0 0)] nacheinander die Zustände [00] -> [10] -> [11] usw. durchläuft und dabei die Codebitfolge x[n] = [11 01 10 01 11] generiert. ZHAW, NTM2, Rumc, 11.5-4 10 11 01 01 Zustand u[n-1] u[n-2] 10 u[n]=1 01 10 11 01 10 10 10 10 00 u[n]=0 01 11 11 00 11 00 00 01 01 11 11 11 00 00 00 00 00 00 00 00 Zeit Tb 0 u x 1 11 2Tb 1 01 3Tb 1 10 4Tb 0 01 5Tb 0 11 tail bits Abbildung 3: Zustandsdiagramm für den Faltungsencoder in Abbildung 1. Die Pfade im Trellisdiagramm entsprechen den Codewörtern des Faltungscodes. Die Codewörter unterscheiden sich, weil nicht alle, sondern nur bestimmte Zustandsübergänge erlaubt sind. Für die Fehlerkorrekturfähigkeit eines Faltungscodes spielt die minimale Hammingdistanz zwischen den Codewörtern eine wichtige Rolle. Zudem ist es wichtig, dass möglichst wenige Codewörter die minimale Hammingdistanz untereinander aufweisen. Die Faltungscodes sind lineare Codes. Deshalb müssen für die Bestimmung der minimalen Hamming-Distanz nicht alle Paare von verschiedenen Codewörtern, sondern nur die NichtNull-Codewörter mit dem Nullcodewort x[n] = [00 ... 00] verglichen werden. Gesucht sind also die Pfade mit dem kleinsten Hamming-Gewicht unter allen Pfaden, die einmal vom Nullpfad weggehen und wieder mit dem Nullpfad verschmelzen. Oder mit anderen Worten: Gesucht sind die Umwege zum Nullpfad mit der kleinsten Anzahl „1“. Die minimale Hamming-Distanz wird bei den Faltungscodes als freie Distanz dfree (engl. free distance) bezeichnet. Beispiel Die freie Distanz im Trellisdiagramm in Abbildung 3 beträgt dfree = 5 und wird auf dem kürzesten Umweg angenommen. Die Codewörter mit der kleinsten Hammingdistanz zum Nullcodewort x=[00 00 00 00 00] lauten: x=[11 10 11 00 00], [00 11 10 11 00] und [00 00 11 10 11]. In Tabelle 1 und Tabelle 2 sind für die Coderaten R=1/2 und R=1/3 und die Gedächtniswerte m=2,...,8 je die Faltungscodes mit der optimalen, d.h. grössten freien Distanz dfree aufgeführt. Sie werden Optimum Free Distance bzw. OFD-Codes genannt. Die Schieberegisterabgriffe im Encoder bzw. die sogenannten Generatoren sind in „oktaler“ Form angegeben. An Hand des in Abbildung 4 dargestellten Enocders sollte die Generator-Schreibweise klar werden. ZHAW, NTM2, Rumc, 11.5-5 m 2 3 4 5 6 7 8 Generatoren 5, 7 15, 17 23, 35 53, 75 133, 171 247, 371 561, 753 dfree 5 6 7 8 10 10 12 Tabelle 1: OFD-Faltungscodes mit Rate R=1/2. m 2 3 4 5 6 7 8 Generatoren 5, 7, 7 13, 15, 17 25, 33, 37 47, 53, 75 133, 145, 175 225, 331, 367 557, 663, 711 dfree 8 10 12 13 15 16 18 Tabelle 2: OFD-Faltungscodes mit Rate R=1/3. Generator 1: 15 oktal bzw. [1 1 0 1] x[n] u[n] Generator 2: 17 oktal bzw. [1 1 1 1] Abbildung 4: OFD-Faltungscode mit Rate R=1/2 und m=3. ZHAW, NTM2, Rumc, 11.5-6 3. Viterbi-Dekoder Im Jahre 1967 entwickelte A.J. Viterbi einen Dekodieralgorithmus für Faltungscodes, der heute meistens als Viterbi-Dekoder bezeichnet wird. Betrachten wir zuerst die in Abbildung 5 dargestellte Übertragungsstrecke mit FaltungsEncoder und Viterbi-Dekoder. Die Informationsbitfolge u[n] wird in die Codebitfolge x[n] codiert, einem Träger aufmoduliert, über einen gedächtnislosen Kanal übertragen, empfangen und demoduliert. Die Übertragungsstrecke vom Modulatoreingang bis zum Demodulatorausgang kann als binärsymmetrischer Kanal (BSC) aufgefasst werden. Das Rauschen auf dem Kanal bzw. am Empfängereingang verursacht Übertragungsfehler, die mit der Wahrscheinlichkeit є auftreten. u[n] FaltungsEncoder y[n] x[n] Kanal Mod. / Tx 1 Rx/Demod. 1-ε ε x[n] ViterbiDecoder udec[n] 1 y[n] ε 0 1-ε 0 Abbildung 5: Übertragungsstrecke mit Faltungsencoder, BSC und Viterbi-Dekoder. Der Viterbi-Dekoder ist in dem Sinne optimal, dass er zur empfangenen Bitfolge y[n] die am wahrscheinlichsten gesendete Codebitfolge xdec[n] findet1 und, durch Umkehrung der Encodierung, die zugehörige Informationsbitfolge udec[n] bestimmt. Im Viterbi-Algorithmus wird jedem Codewort x[n] im Trellis ein Kosten- bzw. Metrikwert M zugeordnet, der die Abweichung des Codeworts x[n] vom Empfangswort y[n] misst. Der Viterbi-Dekoder liest dann das zum Empfangswort y[n] ähnlichste Codewort xdec[n] aus.2 Die Gesamtmetrik eines Codeworts wird im Codetrellis bestimmt. Sie setzt sich additiv aus den zugehörigen Zweigmetrikwerten zusammen. Die Teilsummen werden den Trelliszuständen zugeordnet, siehe Abbildung 6. Der Metrikwert Mk[n] des Zustands k zum Zeitpunkt n entspricht der Summe des Metrikwerts Mi[n-1] des Zustands i zum Zeitpunkt n-1 plus der zugehörigen Zweigmetrik mik[n-1], d.h. Mk[n] = Mi[n-1] + mik[n-1] . 1 (1) Dies gilt unter der Voraussetzung, dass alle Codeworte x[n] gleich häufig gesendet werden, bzw. dass die Infobits u[n] statistisch unabhängig sind und Nullen und Einer gleich häufig sind. Das ist nach der Quellenkomprimierung normalerweise auch fast der Fall. 2 Der Viterbi-Dekoder ist ein sogenannter Maximum-Likelihood-Dekoder. ZHAW, NTM2, Rumc, 11.5-7 Mk[n] mik[n-1] Mi[n-1] mjk[n-1] Mj[n-1] Abbildung 6: Die Viterbi-Metrik setzt sich additiv aus den Zweigmetriken zusammen. Beim Übergang vom Zustand i zum Zustand k wird das N-Bit Zweigcodewort xik generiert. Der Empfänger hat aber statt xik das N-Bit-Wort y[n-1] empfangen. Als Kostenfunktion bzw. Zweigmetrik wird nun die Hamming-Distanz zwischen xik und y[n-1] gewählt, d.h. mik[n-1] = dH(xik,y[n-1]) . (2) In Abbildung 6 ist ersichtlich, dass zwei (oder mehr) Codewörter bzw. Trellispfade zum Zeitpunkt n den Zustand k durchlaufen. Das Teilcodewort, das zum Zeitpunkt n-1 den Zustand i durchlaufen hat, weist die Teilsumme Mi[n-1] + mik[n-1] auf. Das Teilcodewort, das zum Zeitpunkt n-1 den Zustand j durchlaufen hat, weist die Teilsumme Mj[n-1] + mjk[n-1] auf. Der Dekoder kann nun bereits einen Vorentscheid fällen und das Teilcodewort mit den kleinsten Teilkosten Mk[n] = mini ( Mi[n-1] + dH(xik,y[n-1]) ) (3) auslesen und so den Gewinnerpfad (engl. survivor) bestimmen. Die in (3) beschriebene Operation wird manchmal auch als add-compare-select (ACS-) Operation bezeichnet. Das am wahrscheinlichsten gesendete Codewort xdec erhält man, wenn man im Trellis vom Ende her den Gewinnerpfaden entlang rückwärts zum Anfang geht und die entsprechenden Codebits xdec[n] bzw. Informationsbits udec[n] abliest. Beispiel In Abbildung 7 ist der Viterbi-Dekoder zum Faltungscode in Abbildung 1 bzw. 3 darge-stellt, wenn das binäre Wort y empfangen worden ist. Der Anfangszustand hat den Metrikwert M=0. Der Zustand [00] zum Zeitpunkt n=1 hat den Metrikwert M = 0+2 = 2, a) weil der vorhergehende Metrikwert 0 war und b) weil beim zugehörigen Zustandsübergang das Zweigcodewort x00 = [00] generiert wird, tatsächlich aber die beiden Bits y[1] = [11] empfangen worden sind, die Hamming-Distanz in (3) also 2 beträgt. ZHAW, NTM2, Rumc, 11.5-8 survivor M=1 11 10 M=1 11 01 01 M=0 10 01 10 M=2 01 M=2 10 10 10 10 M=1 00 01 11 M=2 M=0 00 00 00 01 11 11 11 M=1 M=2 01 11 11 freie Wahl M=4 00 00 M=3 M=2 00 00 00 00 M=1 00 y 11 11 10 01 11 udec 1 1 1 0 0 00 n 0 1 2 3 4 5 Abbildung 7: Viterbi-Dekoder zum Faltungsencoder in Abbildung 1 bzw. 3, wenn der binäre Vektor y empfangen worden ist. Der Zustand [10] zum Zeitpunkt n=1 hat den Metrikwert M = 0+0 = 0, weil der vorhergehende Metrikwert Null war und weil die Hammingdistanz zwischen dem Zweigcodewort x01 = [11] und den tatsächlich empfangenen Bits y[1]= [11] Null ist. Zum Zeitpunkt n=3 müssen zum ersten Mal survivors bestimmt werden, weil die entsprechenden Zustände zwei einlaufende Pfade aufweisen. Zum Zeitpunkt n=4 erhält man beim Zustand [00] für die beiden einlaufenden Pfade den gleichen Metrikwert M = 3. In diesem Fall sind beide Teilpfade gleich wahrscheinlich gesendet worden und es spielt keine Rolle, welcher Pfad als survivor bezeichnet wird. Das am wahrscheinlichsten gesendete Codewort lautet xdec = [11 01 10 01 11]. Der Dekoder gibt deshalb die dekodierten Bits udec = [1 1 1 0 0] aus. Das Empfangswort y und das dekodierte Codewort xdec weisen die Hammingdistanz dH(xdec,y)= 1 auf. Theoretisch kann der Viterbi-Dekoder die dekodierten Informationsbits udec erst ausgeben, nachdem er alle Bits von y empfangen hat. Das kann zu einem merklichen Decoding-Delay führen. Man kann aber zeigen, dass die Performance praktisch nicht verkleinert wird, wenn der Decoding-Delay auf nur 5∙(m+1) Informationsbits beschränkt wird. Der Aufwand des Viterbi-Dekoders, d.h. die Anzahl ACS-Operationen pro dekodiertem Bit, ist proportional zur Anzahl Encoderzustände. Der Aufwand des Viterbi-Dekoders steigt deshalb exponentiell mit dem Gedächtnis m des Faltungsencoders. In der Praxis werden typischerweise Faltungscodes mit Gedächtnis m = 2...8 eingesetzt. ZHAW, NTM2, Rumc, 11.5-9 Jetzt kehren wir zur Übertragungsstrecke in Abbildung 5 zurück. Im Demodulator wird hart entschieden, ob eine Eins oder eine Null gesendet worden ist, und diese Entscheidung wird als Input für den Dekoder verwendet. Das ist offensichtlich suboptimal! Wenn der Demodulator nämlich einen Wert von 0.5 empfängt, präsentiert er dem Dekoder mit einer Wahrscheinlichkeit von 50% den falschen Wert (eine Eins oder eine Null), statt ihm mitzuteilen, dass die Wahrscheinlichkeiten gleich hoch sind, dass eine Eins oder eine Null gesendet worden ist. Beispiel Stellen Sie sich vor, Sie müssten entscheiden, ob am nächsten Tag eine Freiluftveranstaltung durchgeführt wird oder nicht. Sie verlassen sich u.a. auf die Wetterprognose. Leider wird Regen gemeldet, obwohl die Meteorologen nur zu 51% „sicher“ sind. Wäre es Ihnen in diesem Fall nicht lieber gewesen, wenn statt der harten Prognose „morgen regnet es“ die weichere Prognose „morgen regnet es zu 51%“ gemeldet worden wäre? Bei der Entscheidung bzw. der Quantisierung am Demodulatorausgang geht also Information verloren. Es wäre deshalb besser, wenn der Demodulator dem Dekoder reellwertigen Demodulationswerte oder zumindest weichere Entscheidungen weitergeben würde wie z.B. die folgenden vier Entscheidungen: „es war ganz bestimmt eine 1“, „es könnte eine 1 gewesen sein“, „es könnte eine 0 gewesen sein“, „es war ganz bestimmt eine 0“. Den letzten Fall nennt man soft-decision decoding, weil der Dekoder vom Demodulator softdecisions statt hard-decisions erhält. In der Übertragungsstrecke kann dann die Strecke vom Modulatoreingang bis zum Demodulatorausgang als AWGN-Kanal aufgefasst werden, siehe Abbildung 8. u[n] FaltungsEncoder y[n] x[n] Kanal Mod. / Tx Rx/Demod. ViterbiDecoder udec[n] AWGN z[n] 0 -> 1 1 -> -1 x[n] y[n] W >1 Bit Quantisierung soft-decisions Abbildung 8: Übertragungsstrecke mit Encoder, AWGN-Kanal und Viterbi-Dekoder. Man kann zeigen, dass man mit soft-decision-decoding zusätzlich eine 2 dB bessere (BERversus-SNR-) Performance erhält im Vergleich zu hard-decision-decoding, und zwar dann schon, wenn der Demodulatorausgang nur auf W = 3 oder 4 Bit quantisiert wird, statt auf W=1 Bit wie bei hard-decision decoding. Der Viterbi-Dekoder kann einfach für soft-decision decoding erweitert werden, indem die folgende Korrelationsmetrik maximiert wird Mk[n] = maxi ( Mi[n-1] + xik∙y[n-1]T ) . (4) Wie bereits erwähnt, sucht der Viterbi-Dekoder das zum Empfangswort y ähnlichste Codewort xdec. ZHAW, NTM2, Rumc, 11.5-10 Beispiel In Abbildung 9 ist der Viterbi-Dekoder zum Faltungscode in Abbildung 1 bzw. 3 dargestellt, wenn der reellwertige Vektor y empfangen worden ist. M=7 M=4.5 -11 11 11 1-1 1-1 1-1 M=2.5 1-1 M=0.5 M=-2.6 10 10 10 -11 -11 -11 11 M=0.5 01 -1-1 -1-1 M=0 00 y -1-1 M=-2.5 11 00 -1.10 -1.40 udec 1 11 -1-1 M=-2.4 00 M=9.25 M=2 01 01 -1-1 -1-1 M=1.75 M=0.5 11 00 11 00 M=11.10 11 1.05 -0.95 -1.25 1.25 1.25 -1.00 -0.90 -0.95 1 1 0 0 00 n 0 1 2 3 4 5 Abbildung 9: Viterbi-Dekoder zum Faltungsencoder in Abbildung 1 bzw. 3, wenn der reellwertige Vektor y empfangen worden ist. Der Anfangszustand hat den Metrikwert M=0. Der Zustand [00] zum Zeitpunkt n=1 hat den Metrikwert M = 0 + 1∙(-1.1) + 1∙(-1.4) = -2.5, weil a) der vorhergehende Metrikwert 0 war und weil b) beim zugehörigen Zustandsübergang das Zweigcodewort x00 = [11] generiert wird, tatsächlich aber die beiden Werte y[1] = [-1.1 -1.4] empfangen worden sind (zwei ganz sichere -1), und die Korrelation bzw. das Skalarprodukt x00·yT[1] = -2.5 ergibt. Bei der Bestimmung der Survivor zum Zeitpunkt n=3 überleben nur die Pfade mit der grössten Metrik bzw. der grössten Ähnlichkeit mit dem Teil-Empfangsvektor. Alle anderen Schritte sind vollständig analog zum Beispiel zur Abbildung 7. In Abbildung 10 ist die BER-versus-SNR-Performance einer BPSK-Datenübertragung über einen AWGN-Kanal dargestellt, einmal uncodiert und einmal mit Rate R=1/2, m=2 OFD Faltungscodierung mit soft-decision Viterbi-Decoding. Für Bitfehlerraten BER < 10-5 resultiert ein Codierungsgewinn G ≈ 4 dB gegenüber dem uncodierten Fall! Das ist beachtlich, wenn man bedenkt, dass der verwendete Faltungscode nur 4 Zustände aufweist. ZHAW, NTM2, Rumc, 11.5-11 uncodiert R=1/2, m=2 Faltungscode (soft-decision decoding) G Abbildung 10: Beispiel eines Codierungsgewinn G durch Faltungscodierung. Das Signal-zu-Rausch-Verhältnis in Abbildung 10 muss übrigens in Eb/N0 gemessen werden, um die beiden Systeme mit unterschiedlicher Rate fair zu vergleichen. Eb bezeichnet die Energie pro Informationsbit und N0 die Rauschleistungsdichte (z.B. -174 dBm pro Hz auf einem AWGN-Kanal). Die Energie pro Codebit beträgt im Beispiel in Abbildung 10 nur R·Eb = Eb/2, weil ein Codebit nur R=1/2 mal so lange dauert wie ein Informationsbit. Ein einzelnes Codebit ist deshalb viel fehlerbehafteter als ein einzelnes Informationsbit. Durch die (grossen) Hamming-Distanzen unter den zugelassen Codebitfolgen resultiert am Ende aber doch noch ein Codierungsgewinn. Mit Faltungscodes mit 64 Zuständen und mehr kann typischerweise ein Codierungsgewinn von G= 6-7 dB auf einem AWGN-Kanal und mit soft-decision Viterbi-decoding realisiert werden!