Beschreibung
Verfahren und Schaltung zur Adressgenerierung von Pseudo- Zufalls-Interleavern oder -Deinterleavern
Die Erfindung betrifft ein Verfahren und eine Vorrichtung zur Berechnung einer Verschachtelungs- oder Entschachtelungs- Adresse bezüglich einer Symbolfolge auf der Basis einer Ver- schachtelungsvorschrift (Permutation) .
In Kommunikationssystemen, beispielsweise Mobilfunksystemen, wird das zu übertragende Signal einer KanalCodierung und einer Verschachtelung (Interleaving) unterzogen. Beide Maßnahmen verleihen dem zu übertragenden Signal eine gewisse Ro- bustheit. Bei der Kanalcodierung wird durch gezieltes Einbringen von Redundanz in das zu übertragende Signal ein effektiver Fehlerschutz geschaffen. Durch die Verschachtelung wird erreicht, dass durch KanalStörungen bewirkte Gruppenbit- fehler zeitlich verteilte Symbole des ursprünglichen, nicht verschachtelten bzw. des empfangenen entschachtelten Signals betreffen und damit eher tolerierbare Einzelbitfehler darstellen.
Die im Sender erfolgende Verschachtelung der auszusendenden Symbolfolge erfolgt datenblockweise, d.h. die Bits eines jeden Datenblocks werden nach der gleichen Verschachtelungsvor- schrift vom senderseitigen Verschachteler permutiert. Die Rücktransformation, mit der die Bits wieder in ihre ursprüngliche Reihenfolge gebracht werden, erfolgt im Empfänger mit- tels eines Entschachtelers .
Turbo-Codes stellen eine besonders leistungsfähige Klasse von Kanal -Codes dar. Turbo-Codes werden durch zwei systematische parallel verkettete Faltungscodierer erzeugt, die über einen Verschachteler miteinander verbunden sind. Die Verschachtelung ist bei der Turbo-Codierung somit Bestandteil der Code- Erzeugung. Durch den Verschachteler wird eine Codierer-
interne pseudo-zufällige Permutierung der Symbolfolge vorgenommen. Die Decodierung des Turbo-Codes erfolgt auf iterativem Wege im Empfänger. Die dem Turbo-Code zugrunde liegenden beiden Faltungs-Codes werden alternierend decodiert, wobei die beiden hierfür eingesetzten Faltungscodierer über einen Verschachteler miteinander verbunden sind. In jedem Decodier- schritt der Iteration erzeugt der zweite Faltungsdecodierer eine Zuverlässigkeitsinformation in Form eines Stroms verschachtelter Soft-Bit-Werte, die im nächsten Decodierschritt vom ersten Paltungscodierer als zusätzliche Eingangsinformation genutzt wird. Da diese Zuverlässigkeitsinformation als nicht-verschachtelte Symbolfolge vom ersten Faltungsdecodierer benötigt wird, muss sie zuvor von einem Entschachteier entschachtelt werden. Jeder Decodierschritt umfasst somit ei- ne Verschachtelung und eine Entschachtelung einer Symbolfolge.
Die internen Ver- bzw. Entschachteier eines Turbo-Decodierers arbeiten nach einer Pseudo-Zufalls-Verschachtelungs- Vorschrift. Für den UMTS- (Universal Mobile Telecommunications System-) Standard ist diese Vorschrift in 3GPP TS 25.212 V3.11.0 (2002-09) in dem Kapitel 4.2.3.2 angegeben.
Jede Verschachtelung einer Symbolfolge bestehend aus K Symbo- len (K wird als Blocklänge bezeichnet) lässt sich mathematisch als eine Permutation der Folge 0 , 1, 2 , ... , K-l aus ganzen Zahlen angegeben. Die Permutation gibt an, wie die Symbole der Symbolfolge bei der Verschachtelung umzuordnen sind. Der UMTS-Standard weist eine variable Blocklänge 40<K<5114 auf. Damit werden sämtliche im UMTS-Standard möglichen Verschach- telungen durch 5075 Permutationen (unterschiedlicher Länge) bestimmt .
Anstelle einer expliziten Angabe dieser 5075 Permutationen enthält der UMST-Standard eine generische Erzeugungsregel, mit welcher bei Kenntnis der Blocklänge K aus einer nichtverschachtelten Symbolfolge die zugehörige verschachtelte
Symbolfolge zu generieren ist. Diese Erzeugungsregel kann auch als Regel zur Berechnung der die Umsortierung der Symbolfolge definierenden Permutation aufgefasst bzw. verwendet werde .
Bisher wird die Ver- und Entschachtelung im Turbo-Decodierer folgendermaßen durchgeführt: Zunächst wird z.B. mittels eines digitalen Signalprozessors (DSP) aus der im Standard spezifizierten Erzeugungsregel die Permutation für die aktuell ver- wendete Blocklänge K berechnet. Diese Permutation wird in einem Permutationsmuster-Datenspeicher abgelegt, der 5114 Speicherwörter einer Wortbreite von 13 Bit, d.h. eine Größe von etwa 65 kBit, haben muss . Beim Verschachteln des Datenblocks wird für jedes Symbol der nicht-verschachtelten Symbolfolge in dem Permutationsmuster-Datenspeicher nachgeschlagen, wo dieses Symbol in der verschachtelten Symbolfolge zu platzieren ist. Konstruktiv erfolgt dies z.B. in der Weise, dass die Symbole gemäß ihrer zeitlichen Reihenfolge in einen Symbol- Speicher geschrieben und mit den durch die Permutationswerte gegebenen Adressen aus dem Speicher ausgelesen werden. Die
Entschachtelung funktioniert in analoger Weise mittels eines Permutationsmuster-Datenspeichers gleicher Größe, in welchem die inverse Permutation abgelegt ist. Nachteilig an dieser Vorgehensweise ist der hohe Speicherplatzbedarf für den Per- mutationsmuster-Datenspeicher .
Die Tatsache, dass die Verschachtelungsvorschrift in Form einer Permutation-Erzeugungsregel vorliegt, ermöglicht es, für jedes Symbol der nicht-verschachtelten Symbolfolge den zuge- hörigen aktuellen Permutationswert "on-the-fly" zu berechnen.
Dabei erübrigt sich die Vorausberechnung und Abspeicherung der gesamten Permutation in einem Permutationsmuster- Datenspeicher. Wichtig ist in diesem Fall jedoch, dass die Einzelberechnung der Permutationswerte immer ausreichend schnell erfolgt, weil ansonsten nachfolgende Rechenoperationen (im Turbo-Decodierer die Faltungsdecodierung) verzögert werden.
Die im UMTS-Standard definierte Regel zum Verschachteln einer Symbolfolge basiert auf einer Koordinatentransformation in einer Rech eckmatrix. Zunächst wird in Abhängigkeit von der bekannten Blocklänge K die Dimension der Rechteckmatrix definiert. Dann werden die zu verschachtelnden Symbole der Symbolfolge zeilenweise in die Rechteckmatrix eingeschrieben. Freibleibende Matrixelemente werden mit Füllzeichen aufgefüllt ("padding") . Nach dem Auffüllen der Rechteckmatrix wird eine Matrix-Koordinatentransformation vorgenommen, welche eine Interzeilenpermutation und eine Intrazeilenpermutation um- fasst . Durch spaltenweises Auslesen der transformierten Rechteckmatrix wird die verschachtelte, mit Füllzeichen aufgefüllte Symbolfolge erzeugt. Durch Entfernen ("pruning") der Füllzeichen wird aus der verschachtelten Symbolfolge mit
Füllzeichen die verschachtelte Symbolfolge ohne Füllzeichen generiert .
Zur Berechnung der zugehörigen Permutation wird statt der Symbolfolge die Folge 0 , 1, 2 , ... , K-l der Indizes der Symbole betrachtet und in gleicher Weise wie oben beschrieben prozessiert. Das Auffüllen der Rechteckmatrix erfolgt mit ungültigen Indizes K, K+l ,...,Anzahl der Matrixelemente-1. Beim Auslesen der transformierten Rechteckmatrix werden die permu- tierten unzulässigen Indizes erkannt und verworfen.
Hierbei ergibt sich die folgende Schwierigkeit: Bei der "on- the-fly" -Berechnung der Permutationswerte (d.h. der permutierten Indizes) zeigt es sich erst nach der Berechnung eines solchen Wertes, ob es sich bei diesem Wert tatsächlich um einen gültigen Permutationswert (welcher einem Symbol der Symbolfolge zugeordnet ist) oder um einen Nicht-Permutationswert (welcher einem der Füllzeichen zugeordnet ist) handelt: Gültige Permutationswerte sind kleiner als K. Werte, die gleich oder größer als K sind, beziehen sich auf eine mit einem
Füllzeichen aufgefüllte Position der Rechteckmatrix und müssen entfernt werden. Durch die Berechnung eines ungültigen
Wertes (d.h. einer ungültigen Adresse zum Auslesen des Symbols-Speichers) geht jedoch Zeit verloren. Die „on-the-fly" Entschachtelung muss solange angehalten werden, bis wieder ein Permutationswert (gültige Adresse) berechnet wird. Da es möglich ist, dass nacheinander mehrere ungültige Werte berechnet werden, kann es zu längeren Unterbrechungen bei der Berechnung der Permutationswerte kommen. Nachfolgende Berechnungsschritte werden zu nicht vorhersehbaren Zeitpunkten und über eine nicht vorhersehbare Dauer (Latenz) verzögert. Da- durch wird der Datendurchsatz reduziert. Darüber hinaus wird die Steuerbarkeit des Gesamtrechenflusses wesentlich erschwert. Z.B. muss bei einem Turbo-Decodierer der die ent- schachtelte Symbolfolge entgegennehmende Faltungsdecodierer ständig für variierende Zeitdauern angehalten werden.
Der Erfindung liegt die Aufgabe zugrunde, ein Verfahren zur "on-the-fly" -Berechnung von Verschachtelungs- oder Entschach- telungs-Adressen anzugeben, welches einen hohen Datendurchsatz und eine gute Steuerbarkeit von nachfolgenden Berech- nungsabl ufen gestattet. Ferner zielt die Erfindung darauf ab, eine Vorrichtung mit den vorstehend genannten Eigenschaften zur "on-the-fly" -Berechnung von Verschachtelungs- oder Entschachtelungs-Adressen anzugeben.
Die der Erfindung zugrunde liegende Aufgabenstellung wird durch die Merkmale der unabhängigen Patentansprüche gelöst .
Die Erfindung geht von einer Verschachtelungsvorschrift aus, welche anhand einer Rechteckmatrix, einer Schreib-Zuord- nungsvorschrift der Symbole der nicht verschachtelten Symbolfolge zu den Matrixkoordinaten, dem Auffüllen der Rechteckmatrix mit Füllzeichen, einer Matrix-Koordinatentransformation und einer Lese-Zuordnungsvorschrift der transformierten Matrixkoordinaten zu der ver- oder entschachtelten Symbolfolge definiert ist. Nach einem ersten Aspekt der Erfindung werden zur Berechnung einer bestimmten Verschachtelungs- oder Entschachtelungs-Adresse I (k) für die Adressie-
rung eines SymbolSpeichers in Abhängigkeit von einem Zeitschritt k in jedem Zeitschritt k die folgenden Schritte durchgeführt : Es wird ein Koordinatenpaar der Rechteckmatrix in Abhängigkeit von k berechnet . Anschließend wird das be- rechnete Koordinatenpaar zur Berücksichtigung von hinzugefügten Füllzeichen korrigiert. In einem weiteren Schritt wird aus dem korrigierten Koordinatenpaar ein transformiertes Koordinatenpaar durch Ausführung der Matrix-Koordinatentransformation ermittelt. Schließlich wird eine gültige Verschach- telungs- oder Entschachtelungs-Adresse (Permutationswert) aus dem transformierten Koordinatenpaar gemäß der Schreib-Zuord- nungsvorschrift berechnet.
Der der Erfindung zugrundeliegende Gedanke besteht darin, durch eine Korrektur des Koordinatenpaars das Vorhandensein von Füllzeichen bereits im Berechnungsablauf zu berücksichtigen und damit zu erreichen, dass in jedem Zeitschritt k ausschließlich gültige Verschachtelungs- oder Entschachtelungs- Adressen berechnet werden. Mit anderen Worten enthält der Re- chenablauf zur Ermittlung der Adresse I (k) eine interne, analytische „Depruning"-Operation, die dafür sorgt, dass allein gültige Adressen I (k) berechnet werden. Das Auftreten von Lücken in der berechneten Adressenfolge (durch nachträgliches Entfernen von ungültigen Adressen) ist ausgeschlossen. Damit kann eine höhere Datenrate bedient werden und andererseits wird durch die Synchronität der berechneten Adressen I (k) mit der nicht ver- oder entschachtelten Symbolfolge - d.h. dem Zeitschritt k - der Kontrollaufwand für nachfolgende Rechenabläufe wesentlich reduziert.
Bei einer Matrixtransformation, welche eine Matrix-Inter- zeilenpermutation und eine Matrix-Intrazeilenpermutation um- fasst, kennzeichnet sich eine vorteilhafte Durchführung des Korrekturschrittes durch die folgenden Teilschritte: Mehrfa- ches Nachschlagen von ersten Korrekturwerten aus einer Tabelle, welche bezüglich einer bestimmten Zeile der Rechteckmatrix zu jeder Spaltenkoordinate eine Information bezüglich der
Anzahl der Füllzeichen angibt, die in der bestimmten Zeile vom Zeilenanfang bis zur betrachteten Spaltenkoordinate enthalten sind; und Korrigieren der Spaltenkoordinate um den zuletzt nachgeschlagenen ersten Korrekturwert. Ein Vorteil die- ses Verfahrens besteht in der einfachen Berechnung der Tabelle.
Ein ebenfalls vorteilhafte, alternative Verfahrensvariante umfasst die Teilschritte des einmaligen Nachschlagens eines zweiten Korrekturwertes aus einer weiteren Tabelle, welche bezüglich einer bestimmten Zeile der Rechteckmatrix zu jeder Spaltenkoordinate eine Information bezüglich der Anzahl der Füllzeichen angibt, die in der bestimmten Zeile vom Zeilenanfang bis zur betrachteten Spaltenkoordinate und von der be- trachteten Spaltenkoordinate bis zum Zeilenende enthalten sind; und Korrigieren der Spaltenkoordinate um den nachgeschlagenen zweiten Korrekturwert. Der Vorteil dieser Verfahrensvariante besteht darin, dass ein einmaliges Nachschlagen in der weiteren Tabelle zur Ermittlung der benötigten Infor- mation für den Korrekturschritt ausreicht.
Anstelle der Verschachtelungs- oder Entschachtelungs-Adresse I (k) kann zur Adressierung des Symbolspeichers auch die in- verse Verschachtelungs- oder Entschachtelungs-Adresse I_1(k) eingesetzt werden. Nach einem zweiten Aspekt der Erfindung werden zur Berechnung einer bestimmten inversen Verschachtelungs- oder Entschachtelungs-Adresse I"1 (k) für die Adressierung eines SymbolSpeichers in Abhängigkeit von einem Zeitschritt k in jedem Zeitschritt k die folgenden Schritte durchgeführt: Berechnen eines Koordinatenpaares der Rechteckmatrix in Abhängigkeit von k; Ermitteln eines transformierten Koordinatenpaares zu dem Koordinatenpaar durch Ausführung der inversen Matrix-Koordinatentransformation; und Berechnen einer gültigen inversen Verschachtelungs- oder Ent- schachtelungs-Adresse I"1 (k) aus dem transformierten Koordinatenpaar unter Berücksichtigung von Füllzeichen.
Der wesentliche Unterschied zu dem zuvor beschriebenen Verfahren besteht darin, dass in diesem Fall zunächst der Koordinaten-Transformationsschritt und dann der Schritt zur Berücksichtigung der Füllzeichen durchgeführt wird.
Bei einer Matrixtransformation, die eine Matrix-Interzeilen- permutation und eine Matrix-Intrazeilenpermutation umfasst, kennzeichnet sich eine vorteilhafte Durchführung des Korrekturschrittes zur Berücksichtigung der Füllzeichen durch die Vornahme der folgenden Teilschritte: Einmaliges Nachschlagen von dritten Korrekturwerten aus einer noch weiteren Tabelle, welche bezüglich einer bestimmten Zeile der Rechteckmatrix zu jeder Spaltenkoordinate eine Information bezüglich der Anzahl der Füllzeichen angibt, die in der bestimmten Zeile vom Zei- lenanfang bis zur Spaltenkoordinate vor der betrachteten
Spaltenkoordinate enthalten sind. Bei dieser Ausführungsvari- ante entfällt somit ein mehrfaches Nachschlagen von Korrekturwerten in der noch weiteren Tabelle (welche im Wesentlichen mit der Tabelle gemäß dem ersten Aspekt der Erfindung vergleichbar ist) .
Bei der erfindungsgemäßen Vorrichtung handelt es sich bei den Datenspeichern zum Speichern der Tabellen vorzugsweise um Single-Port-Datenspeicher. Gegenüber der Verwendung von Dual- Port-Datenspeicher weist diese Lösung Vorteile bei der Portierung der Algorithmen auf verschiedene Technologien auf.
Weitere vorteilhafte Ausgestaltungen der Erfindung sind in den Unteransprüchen angegeben.
Nachfolgend wird die Erfindung anhand von Ausführungsbeispielen unter Bezugnahme auf die Zeichnung erläutert; in dieser zeigt :
Fig. 1 eine Prinzipdarstellung eines Verschachtelers;
Fig. 2 eine erste Architektur eines Verschachtelers;
Fig. 3 eine zweite Architektur eines Verschachtelers;
Fig. 4 eine Prinzipdarstellung eines Entschachtelers;
Fig. 5 eine erste Architektur eines Entschachtelers;
Fig. 6 eine zweite Architektur eines Entschachtelers;
Fig. 7 ein Blockschaltbild eines bekannten Turbo-Codierers zur Erzeugung eines Turbo-Codes;
Fig. 8 ein Blockschaltbild eines bekannten Turbo-Decodierers zur Decodierung eines Turbo-codierten Datenstroms;
Fig. 9 eine Rechteckmatrix, die transformierte Rechteckmatrix und das Verschachtelungs-Permutationsmuster I für das Beispiel R=5, C=10, K=43 ;
Fig. 10 eine transformierte Rechteckmatrix mit zwei vollständig mit Füllzeichen belegten Zeilen;
Fig. 11 die Tabellen prucol und pruleftcol sowie die dazugehörige transformierte Rechteckmatrix mit R=5, C=20;
Fig. 12 eine erläuternde Darstellung des Korrekturalgorithmus nach dem ersten Ausführungsbeispiel der Erfindung;
Fig. 13 eine Darstellung des Algorithmus sowie einer Schal - tung zum Berechnen der Adressen I (k) nach dem ersten
Ausführungsbeispiel der Erfindung;
Fig. 14 die Tabellen prucol und prutotcol sowie die dazugehörige transformierte Rechteckmatrix mit R=5, C=20;
Fig. 15 eine Darstellung des Korrekturalgorithmus sowie einer Schaltung zum Berechnen von korrigierten Matrixkoor-
dinaten nach dem zweiten Ausführungsbeispiel der Erfindung;
Fig. 16 die transformierte Rechteckmatrix und das inverse Verschachtelungs-Permutationsmuster I"1 für das Beispiel R=5, C=10, K=43; und
Fig. 17 eine Darstellung des Algorithmus sowie einer Schaltung zum Berechnen der inversen Adressen I"1 (k) nach dem dritten Ausführungsbeispiel der Erfindung.
1. Verschachteler und Entschachteier
Die Fig. 1 verdeutlicht das generelle Prinzip einer Ver- schachtelung. Ein Verschachteler (Interleaver) IL nimmt eine nicht-verschachtelte Symbolfolge
... , x
κ-ι} entgegen, sortiert die einzelnen Symbole j
., i=0 , 1 , ... , K-l, um und gibt eine verschachtelte Symbolfolge yi ι Y2 , ■ ■ ■ , Yκ-ι} aus. K bezeichnet die der Verschachtelung zugrunde liegende Länge der Symbolfolge, d.h. die Blocklänge. Da die Verschachtelung blockweise erfolgt, wird der Verschachteler IL auch als Blockverschachteler bezeichnet. Fig. 1 zeigt ein Beispiel für K = 8. Es wird deutlich, dass das Verschachteln ein Umsortieren der Symbole der Eingangs- Symbolfolge X in ihrer zeitlichen Aufeinanderfolge ist. Die Vorschrift, gemäß welcher die Umsortierung vorgenommen wird, lässt sich direkt an der verschachtelten Symbolfolge Y ablesen.
Diese Vorschrift lässt sich auf zwei verschiedene Weisen interpretieren, nämlich durch eine Funktion I (i) oder durch die inverse Funktion I_1(i) .
i) der i-te Wert yi der verschachtelten Ausgangs-Symbolfolge wurde von der Position I(i) der ursprünglichen, nicht verschachtelten Eingangs-Symbolfolge bezogen. D.h. Yi ~ xI(i) •
ii) der i-te Wert Xi der ursprünglichen, nicht verschachtelten Eingangs-Symbolfolge wird auf die Position
I-1(i) der verschachtelten Ausgangs-Symbolfolge abgebil- det . D . h . l(i) = x.± .
Im folgenden wird die Sequenz 1= (I (0) , I (1) , ... , I (K-l) ) aus Indizes als Verschachtelungs-Permutationsmuster und die Sequenz T~1= (I-1 (0) , I"1 (1) , ... , I"1 (K-l) ) aus Indizes als inverses Verschachtelungs-Permutationsmuster bezeichnet.
Fig. 2 zeigt ein erstes Implementierungsbeispiel des Verschachtelers IL aus Fig. 1 nach dem Stand der Technik. Der Verschachteler IL umfasst einen Symbolspeieher RAM, einen Zwei-Wege-Multiplexer MUX und einen Adressgenerator AG, welcher das Verschachtelungs-Permutationsmuster I (i) generiert.
Der Verschachteler IL weist einen ersten Eingang 1 auf, an welchem ein Schreib-/Lesesignal rw anliegt. Ein zweiter Ein- gang 2 nimmt ein Adresssignal i entgegen, das dem Zeitschrittindex i der Eingangs-Symbolfolge X entspricht und z.B. durch einen Zähler erzeugt werden kann. An einem dritten Eingang 3 liegt die Eingangs-Symbolfolge X an.
Das Schreib-/Lesesignal rw wird der Schreib-Lese-Umschaltung R/W des Symbolspeichers RAM und ferner dem Steuereingang des Multiplexers MUX zugeführt. Es kann die Werte rw=0 (Schreiben) und rw=l (Lesen) annehmen. Das Adresssignal i liegt an dem Eingang des Adressgenerators AG sowie an dem dem Wert rw=0 zugeordneten Eingang des Multiplexers MUX an. Das Ausgangssignal des Adressgenerators AG ist dem anderen Eingang (rw =l) des Multiplexers MUX zugeführt. Der Ausgang des Multiplexers MUX ist mit einem Adresseingang A des Symbol- Speichers RAM verbunden.
Der Symbolspeieher RAM weist ferner einen Schreib-Daten- eingang WD und einen Lese-Datenausgang RD auf. Dem Schreib-
Dateneingang WD ist die über den Eingang 3 erhaltene Symbol- folge X zugeführt, der Schreib-Datenausgang RD gibt über einen Ausgang 4 des Verschachtelers IL die verschachtelte Symbolfolge Y aus.
Im unteren Teil der Fig. 2 ist die Arbeitsweise des Verschachtelers IL veranschaulicht:
In einem ersten Schritt wird die Symbolfolge X der Länge K in den SymbolSpeicher RAM geschrieben (rw=0; i=0, 1, 2... , K-l) . Die am Adresseingang A anliegende Schreibadressierung entspricht direkt dem Eingangs- Zeitschrittindex i.
In einem zweiten Schritt werden Symbole aus dem Symbolspeicher RAM ausgelesen (rw=l, i=0 , 1 , 2 , ... , K-l) , wobei zur Adressierung des Symbolspeichers RAM die Funktion I (i) eingesetzt wird. I(i) zeigt auf diejenige Adresse des Symbolspeichers RAM, von wo ein Symbol genommen und zum Ausgangs-Zeit- Schrittindex i ausgegeben werden soll.
Die in Fig. 2 erläuterte Adressierung mit I (i) orientiert sich an dem Zeitschrittindex i der nicht verschachtelten Symbolfolge X und betrifft den Lesevorgang. Eine alternative Ar- chitektur eines Verschachtelers IL' ist in Fig. 3 dargestellt. Diese Architektur unterscheidet sich dadurch von der in Fig. 2 dargestellten Anordnung, dass ein Adressgenerator AG', der die inverse Funktion I"1(i) ausführt, mit dem dem Wert rw=0 zugeordneten Eingang des Multiplexers MUX verbun- den ist. In diesem Fall orientiert sich die Adressierung an dem Zeitschrittindex i der verschachtelten Symbolfolge Y. Dies bewirkt, dass die Adressgenerierung vom Adressgenerator AG' beim Schreibvorgang (rw=0) und nicht beim Lesevorgang rw=l (wie bei dem Verschachteler IL der Fig. 2) durchgeführt wird.
Mit wr-addr werden in den Fig. 2 und 3 die Schreibadressen und mit rd-addr die Leseadressen für die Speicheradressierung bezeichnet. Für die in Fig. 2 dargestellte Architektur gilt wr-addr=i (Schreibvorgang) und rd-addr=I (i) (Lesevorgang). Für die in Fig. 3 dargestellte Architektur gilt wr-addr=I-:L (i) (Schreibvorgang) und rd-addr=i (Lesevorgang).
In Bezug auf das logische Eingangs-/Ausgangsverhalten sind die beiden Verschachteler IL und IL ' identisch.
Fig. 4 zeigt das Prinzip eines Entschachtelers DIL (Deinter- leaver) . Der Entschachteier DIL nimmt eingangseitig die verschachtelte Symbolfolge Y entgegen und gibt ausgangsseitig die ursprüngliche, entschachtelte Symbolfolge X aus. Mit an- deren Worten macht der Entschachteier DIL die vom Verschachteler IL, IL' vorgenommene Umsortierung des Datenstroms wieder rückgängig .
Da das Entschachteln der inverse Vorgang des Verschachtelns ist, kann der Entschachteier DIL (siehe Fig. 5) basierend auf der in Fig. 2 dargestellten Architektur des Verschachtelers IL aufgebaut werden. Der einzige Unterschied besteht darin, dass beim Lesen der Symbole die inverse Adressenfunktion I_1(i) statt I(i) ausgeführt werden muss. Analog hierzu ist der in Fig. 6 dargestellte Entschachteier DIL' basierend auf der in Fig. 3 dargestellten Architektur des Verschachtelers IL ' gebildet. Beim Schreiben der Symbole kommt hier anstelle der Funktion I-1(i) die Funktion I (i) zur Anwendung. Die Ent- schachteler DIL und DIL1 sind zwar nicht funktionstechnisch aber hinsichtlich ihrem logischen Eingangs-/Ausgangsverhalten äquivalent .
Die vorstehenden Ausführungen machen klar,
- dass das Verschachtelungs-Permutationsmuster I oder das in- verse Verschachtelungs-Permutationsmuster I"1 in einem Ent- schachteler/Verschachteler als Folge von Lese- oder
Schreibadressen für den Symbolspeieher eingesetzt werden, und - dass nur eines dieser beiden Verschachtelungs-Permuta- tionsmuster I oder I"1 berechnet werden muss, um sowohl einen Verschachteler als auch einen Entschachteier betreiben zu können. D.h., die Verschachtelung und die Entschachtelung einer Symbolfolge kann mit nur einem einzigen Adress- generator AG oder alternativ AG' bewerkstelligt werden.
Turbo-Codierer und Turbo-Decodierer
Anhand Fig. 7 wird beispielhaft der bekannte Aufbau eines Turbo-Codierers TCOD erläutert. Turbo-Codierer mit anderem Aufbau sind ebenfalls möglich und von der Erfindung umfasst .
Der hier dargestellte Turbo-Codierer TCOD weist einen Turbo- Verschachteler T_IL, zwei identische, rekursive, systematische Faltungscodierer RSC1 und RSC2 , zwei optionale Punktie- rer PKTl und PKT2 und einen Multiplexer MUXC auf. Das Eingabesignal ist eine zu codierende Bitsequenz U, bei der es sich beispielsweise um ein quellencodiertes Sprach- oder Videosignal handeln kann.
Der Turbo-Codierer TCOD erzeugt ein digitales Ausgabesignal
D, das durch Multiplexen des Eingabesignals U (sogenanntes systematisches Signal), eines von RSC1 codierten und ggf. von PKTl punktierten Signals Cl und eines von T__IL verschachtelten, von RSC2 codierten und ggf. von PKT2 punktierten Signals C2 erzeugt wird.
Der Turbo-Verschachteler T_IL kann gemäß den in den Fig. 2 und 3 dargestellten Verschachtelern realisiert sein.
Das fehlerschutzcodierte Datensignal D wird dann in geeigneter Weise auf einen Träger moduliert und über einen Übertragungskanal übertragen.
Die Decodierung eines Turbo-codierten Empfangssignals in einem Empfänger wird nachfolgend beispielhaft unter Bezugnahme auf den in Fig. 8 gezeigten, bekannten Turbo-Decodierer TDEC erläutert. Variationen dieses Aufbaus sind möglich und ebenfalls von der Erfindung umfasst .
Der Turbo-Decodierer TDEC umfaßt einen ersten und einen zweiten Demultiplexer DMUX1 und DMUX2 , einen ersten und zweiten Faltungsdecodierer DECl und DEC2 , einen Turbo-Verschachteler IL1, einen ersten und einen zweiten Turbo-Entschachteler DIL1 und DIL2 sowie eine Entscheidungslogik (Schwellenwertentscheider) TL.
Von einem Demodulator (nicht dargestellt) des Empfängers wird eine Symbolfolge D bereitgestellt, die die im Empfänger erzeugte Rekonstruktion der codierten Symbolfolge D ist. Zumeist besteht die Symbolfolge D aus Soft-Bit-Werten, welche zu jedem Bit der codierten Symbolfolge D eine Wahrscheinlich- keit für das Vorliegen einer 0 oder einer 1 dieses im Empfänger unbekannten Bits angeben.
Die bekannte Funktionsweise des in Fig. 8 gezeigten Turbo- Decodierers TDEC wird im folgenden kurz erläutert .
Der erste Demultiplexer DMUX1 spaltet die demodulierte Symbolfolge D in die demodulierte systematische Symbolfolge U (rekonstruierte Version des Eingabesignals U) und ein demoduliertes Redundanzsignal C auf. Letzteres wird von dem zwei- ten Demultiplexer DMUX2 in Abhängigkeit von der im Turbo- Codierer TCOD verwendeten Multiplexier- und PunktierungeVorschrift in die beiden entzerrten Redundanz-Teilsignale Cl und C2 (das sind die rekonstruierten Versionen der Redundanz-Teilsignale Cl und C2) aufgespalten.
Die beiden Faltungsdecodierer DECl und DEC2 können z.B. MAP- Symbolschätzer sein. Der erste Faltungsdecodierer DECl be-
rechnet ausgehend von den Datensignalen Ü und Cl und einem Rückkoppelsignal Z (sogenannte extrinsische Information) erste logarithmische Zuverlässigkeitsdaten Λl in Form von LLRs (Log-Likelihood Ratios) .
Die ersten Zuverlässigkeitsdaten Λl , die auch die systematischen Symbole der Symbolfolge Ü enthalten, werden von dem Turbo-Verschachteler IL1 verschachtelt und die verschachtelten Zuverlässigkeitsdaten Λli werden dem zweiten Faltungsde- codierer DEC2 zugeführt. Die Arbeitsweisen der Turbo-Verschachteler T_IL und IL1 sind identisch (jedoch verschachtelt T_IL einen Bitstrom und IL1 üblicherweise einen Symbolstrom mit Wortbreiten größer 1) . Der zweite Faltungsdecodierer DEC2 berechnet aus den verschachtelten Zuverlässigkeitsdaten Λli und aus den rekonstruierten Redundanz-Teilsignaldaten C2 ein verschachteltes Rückkoppelsignal Zj und verschachtelte zweite logarithmische Zuverlässigkeitsdaten Λ2l7 ebenfalls in Form von LLRs .
Das verschachtelte Rückkoppelsignal Z wird von dem ersten
Turbo-Entschachteler DIL1 entschachtelt und ergibt das Rückkoppelsignal Z.
Die dargestellte Rekursionsschleife wird mehrmals durchlau- fen. Jedem Durchlauf liegen die demodulierten Symbole desselben Datenblocks zugrunde. Pro Durchlauf werden zwei Decodier- schritte (in DECl und DEC2) durchgeführt. Die beim letzten Durchlauf erhaltenen verschachtelten zweiten Zuverlässigkeitsdaten Λ2ι werden von dem zweiten Entschachteier DIL2 entschachtelt und als entschachtelte Zuverlässigkeitsdaten
Λ2 der Entscheidungslogik TL zugeführt. Diese bestimmt daraufhin ein binäres Datensignal E (U) , welches eine Sequenz von Schätzwerten für die Bits des Eingabesignals U ist .
Nach der Turbo-Decodierung eines Datenblocks und Ausgabe der entsprechenden Sequenz von Schätzwerten E (U) wird der nächste Datenblock Turbo-decodiert .
Wie an dem beispielhaft in Fig. 8 dargestellten Turbo-Decodierer TDEC ersichtlich, umfasst eine Turbo-Decodierung bei jedem Schleifendurchlauf eine Turbo-Verschachtelungsprozedur (IL1) und eine Turbo-Entschachtelungsprozedur (DIL1) . Es werden hierfür die in den Fig. 2, 3 bzw. 5, 6 dargestellten Verschachteler oder Entschachtier eingesetzt.
3. Algorithmus eines Pseudo-Zufalls-Verschachtelers und Er- zeugungsregel für ein Pseudo-Zufalls-Verschachtelungs- Permutationsmuster
Das einer Pseudo-Zufalls-Verschachtelung zugrundeliegende Prinzip ist folgendes: - die nicht verschachtelte Symbolfolge wird nach einer ersten bestimmten ZuOrdnungsvorschrift (z.B. Zeile für Zeile) in eine Rechteckmatrix geschrieben; gebenenfalls frei bleibende Positionen in der Rechteckmatrix werden mit Füll- zeichen aufgefüllt; - die Rechteckmatrix wird einer Koordinatentransformation (Interzeilenpermutation; Intrazeilenpermutation) unterzogen; - die transformierte Rechteckmatrix wird nach einer zweiten bestimmten ZuOrdnungsvorschrift (z.B. Spalte für Spalte) ausgelesen; Füllzeichen werden dabei verworfen.
Die Erfindung wird im folgenden anhand der im UMTS-Standard angegebenen Vorgaben für das Turbo-Verschachteln erläutert. Diese werden nun näher betrachtet.
Es werden die nachstehenden Definitionen verwendet :
K Anzahl der Bits eines Blocks
R Anzahl der Zeilen der Rechteckmatrix C Anzahl der Spalten der Rechteckmatrix p Primzahl v Primitive Wurzel, die der Primzahl p zugeordnet ist
s Basissequenz s= (s (0) , s (1) , ... , s (p-2) ) für die Intrazei- lenpermutation q Sequenz ~q= (q(0) ,q(l) ,... ,q(R-l) ) der minimalen Primzahlen T Interzeilen-Permutationsmuster T=(T(0) ,T(1) , ... ,T(R-1)) Wi IntraZeilen-Permutationsmuster
Wi=(Wι(0) ,Wi(l) , ... ,Wi(C-l) ) der i-ten Zeile I Verschachtelungs-Permutationsmuster I=(I(0) ,1(1) , ...,I(K-1))
I
"1 inverses Verschachtelungs-Permutationsmuster
i,j,k Indizes von Sequenzen
3.1 Schritt 1: Definition der Rechteckmatrix (UMTS-Standard)
3.1.1 Definition der Anzahl R der Zeilen der Rechteckmatrix: R=5, falls 40<K<159 R=10, falls 160<K<200 oder falls 481<K<530
R=20, sonst [0.1]
Die Zeilen werden von oben nach unten beginnend mit 0 und endend mit R-l durchgezählt.
3.1.2 Definition der Anzahl C der Spalten der Rechteckmatrix: (i) Bestimme die Primzahl p: für 481<K<530: p=53 und C=p sonst : Suche die minimalen Primzahl p aus Tabelle 1, so dass K≤Rx(p-t-l)
(ii) Bestimme die Anzahl der Spalten C:
C=p-1 falls K≤Rx(p-l)
C=p falls Rx(p-l) <K≤Rxp
C=p+1 falls Rxp<K [0.2]
Die Spalten der Rechteckmatrix werden von links nach rechts beginnend mit 0 und endend mit C-1 durchgezählt. Die maximale Spaltenanzahl beträgt Cmax=256.
3.2 Schritt 2: Einlesen der nicht verschachtelten Symbolfolge in die Rechteckmatrix und Auffüllen der Matrix mit Füll- zeichen:
Die nicht verschachtelte Symbolfolge x0, xl7 3, ... , xκ_x wird
Zeile für Zeile in die RxC Rechteckmatrix geschrieben. Das erste Symbol ist x0 und wird in die 0-te Spalte der 0-ten Zeile geschrieben. Falls RxC>K, werden Füllzeichen in der Weise hinzugefügt, dass Xk=0 oder 1 für k=K, K+l , ... , RxC-1.
3.3 Schritt 3: Definition der Koordinatentransformation in der Rechteckmatrix und Durchführung der Koordinatentransfor- mation:
Die Schritte 3.3.1 bis 3.3.3 sind Vorbereitungsschritte, die Koordinatentransformation wird in den Schritten 3.3.4 (Inter-
zeilenpermutation) und 3.3.5 (Intrazeilenpermutation) durchgeführt .
3.3.1 Wähle die rechts neben der Primzahl p angegebene primi- tive Wurzel v aus der Tabelle 1 aus . Primitive Wurzeln v weisen die Eigenschaft vp=l mod p auf, wobei v1 mod p≠l für alle ganzen Zahlen 0<i<p gilt.
3.3.2 Bestimme die erste Primzahl der Sequenz q= (q (0) , q(l) , ... , q (R-l) ) zu
und bestimme die Primzahlen qi derart, dass sie "letzte" Primzahlen sind, d.h. dass ggT (q (i) ,p-l) =1, q(i)>6, und q(i)>q(i-l) für jedes i=l, 2 , ... , R-l . Mit ggT ( , ) ist der größte gemeinsame Teiler bezeichnet .
3.3.3 Konstruiere die Basissequenz s= (s (0) , s (1) , ... , s (p-2) ) für die Intrazeilenper- mutationen gemäß der folgenden Rekursion: s(0)=l, s(j) = (vxs(j-l) ) mod p, j =1, 2 , ... , (p-2) [0.3]
3.3.4 Führe die Interzeilenpermutation der Rechteckmatrix basierend auf dem Interzeilen-Permutationsmuster T=(T(0) ,T(1) , ... ,T(R-1) ) durch, wobei T(i) die ur- sprüngliche Zeilenposition der i-ten permutierten Zeile ist. Als Interzeilen-Permutationsmustern T ist dasjenige von vier in Tabelle 2 definierten Mustern heranzuziehen, welches in Abhängigkeit von der Blockgröße K ausgewählt wird.
Tabelle 2
3.3.5 Führe die Intrazeilenpermutation an der i-ten
(i=0, 1, ... ,R-1) interzeilen-permutierten Zeile basierend auf dem Intrazeilen-Permutationsmuster i=(Wi(0) ,Wi(l) , ... ,Wi(C-l) ) in folgender Weise durch: Falls (C=p) , dann wi(j) = S((Ö x )) mod(p - l))), j=0, 1, ... , (p-2) , und Wi(p-1)=0, [0.4]
Falls (C=p-1) , dann
W±(j) = s(((j x q(i)) mod(p - l))) -1 , j =0 , 1 , , (p-2)
[0.5]
Falls (C=p+1) , dann
Wiö) = s(((i x q(i)) mod(p - !))) ' j=0,l, . , (p-2) , und
Wi(p-1)=0, Wi(p)=p, [0.6] ferner: falls (K=(RxC) ) , dann W0(0)=p, W0(p)=l [0.7]
wobei Wi(j) die ursprüngliche Spaltenposition des j-ten permutierten Bits der i-ten permutierten Zeile ist.
3.4 Schritt 4: Ausgabe der verschachtelten Symbolfolge und Entfernen der Füllzeichen
Nach Durchführung der Intrazeilen- und Interzeilenpermutatio- nen werden die Symbole aus der transformierten Rechteckmatrix Spalte für Spalte ausgelesen. Es wird mit dem Symbol in der Zeile 0 der Spalte 0 begonnen und mit dem Symbol in der Zeile R-l der Spalte C-1 aufgehört. Die Ausgabe-Symbolfolge wird durch Entfernen der Füllzeichen, welche der nicht verschachtelten Symbolfolge vor den Intrazeilen- und Interzeilenpermu- tationen hinzugefügt wurden, beschnitten. Diese sind in der Ausgabe-Symbolfolge „verstreut" angeordnet, d.h. sie müssen zunächst identifiziert werden. Nach dem Entfernen der Füll- zeichen liegt die verschachtelte Symbolfolge vor.
Das Verschachtelungs-Permutationsmuster
1= (I (0) , I (1) , ... , I (K-l) ) kann wie bereits erläutert dadurch erzeugt werden, dass anstelle der Symbole die Indizes der Symbole verschachtelt werden, d.h. dass die ganzen Zahlen k=0 , 1, 2 , ... , K-l in die Rechteckmatrix eingelesen werden, sofern K<RxC die Rechteckmatrix mit weiteren (ungültigen) Indizes K, K+l, ... ,RxC-l aufgefüllt wird, die Rechteckmatrix transformiert wird, die Indizes ausgelesen werden und die ungültigen Indizes (Test: Index>K-l?) entfernt werden.
Die obigen Ausführungen machen klar, dass I eine Folge von umgeordneten Zeitschrittindizees ist. Gemäß den Erläuterungen zu den Fig. 1 bis 6 kann man I auch als eine Folge von Adressen auffassen, nämlich den Adressen für den Zugriff auf den Symbolspeicher, in welchem die zu verschachtelnden (oder zu entschachtelnden) Symbole gespeichert sind.
Im Folgenden wird aus Gründern der besseren Lesbarkeit die
Notation geändert: Indizes der nicht verschachtelten Symbolfolge X und der verschachtelten Symbolfolge Y werden in Klam- mern gesetzt, d.h.
X: x0,xx, ... ,xκ_ι = x=(x(0) ,x(l) , ...,x(K-l)
Y: yo,yι, • ■ . ,yκ-ι = y=(y(o) ,y(D , ...,y(κ-ι)
Beispiel 1: UMTS-Verschachtelung für K=43 : Verschachtelungs- Permutationsmuster I
Die UMTS-Verschachtelung wird anhand eines Beispiels für K=43 erläutert. Gemäß den oben beschriebenen Schritten ergeben sich die folgenden Parameter:
R=5, p=ll, v=2, C=10, q=(l,7,ll,13,17) , T= (4 , 3 , 2 , 1 , 0) , s= (1 , 2 , 4 , 8 , 5 , 10 , 9 , 7 , 3 , 6)
Wie bereits erwähnt, ergibt sich das Verschachtelungs- Permutationsmuster 1= (I (0) ,1 (1) , ... , I (K-l) ) , indem zunächst die ganzen Zahlen 0,1,..., 42 Zeile für Zeile in die RxC Rechteckmatrix beginnend in der obersten Zeile eingefügt werden und Füllzeichen d („dummy Symbols") am Ende des Füllprozesses in die Matrix eingefügt werden. Dies ist im linken Teil der Fig. 9 dargestellt. Nach der Durchführung der Inter- und Intrazeilenpermutationen ergibt sich die im rechten Teil der Fig. 9 gezeigte Matrix identischer Dimension. Das in Fig. 9 angegebene Verschachtelungs-Permutationsmuster I ergibt sich dann durch spaltenweises Auslesen der Matrix beginnend mit der linken Spalte. Dabei müssen die zuvor eingefügten Füllzeichen d aus dem ausgelesenen Verschachtelungsmuster wieder entfernt werden.
4. Implementierung des Turbo-Verschachtelers/-Entschachtelers
Das Speichern des in der vorstehend beschriebenen Weise erzeugten Verschachtelungs-Permutationsmusters würde einen Speicherbereich von 5114 Datenwörtern der Breite von 13 Bit, d.h. eine Speichergröße von etwa 65 kBit erfordern. Der in den Fig. 2, 3, 5 bzw. 6 dargestellte Adressgenerator AG, AG1 würde in diesem Fall den Speicher zum Speichern des Ver- schachtelungs-Permutationsmusters enthalten. Dies ist aufgrund des hohen Speicherplatzbedarfs eine ungünstige Lösung.
Eine alternative Möglichkeit besteht darin, den k-ten Index (Adresse) I (k) des Verschachtelungs-Permutationsmusters immer genau dann zu berechnen, wenn er von der nachfolgenden Ein- heit während des Decodierprozesses (bzw. Codierprozesses) benötigt wird.
Für den Fall, dass die Rechteckmatrix keine Füllzeichen enthält - dieser Fall liegt für K=RxC vor - ist diese „on-the- fly" Berechnung der Adresse I (k) sehr einfach. Sie folgt direkt aus der Schreib-ZuOrdnungsvorschrift , der Matrix-Trans- formationsvorschrift und der Lese-Zuordnungsvorschrift .
Zunächst werden die Spaltenkoordinate c und die Zeilenkoordi- nate r der Rechteckmatrix berechnet :
c=k div R l [0.8] r=k mod R [0.9]
Die Adresse I (k) ergibt sich nach
I(k) =T(r) xC+Wr(c) . [0.10]
Dabei beinhaltet Wr(c) die Intrazeilenpermutation der r-ten permutierten Zeile auf der Basis von s und q(r) .
Sofern die Rechteckmatrix Füllzeichen enthält, gestaltet sich die Berechnung der Adresse I (k) schwieriger.
Eine Möglichkeit zur Identifizierung von Adressen von Füllzeichen aus dem gemäß Gleichung [0.10] berechneten Verschach- telungs-Permutationsmuster besteht wie bereits erwähnt darin, die Bedingung I (k) <K zu testen. Falls diese Bedingung erfüllt ist, ist die berechnete Adresse eine gültige Adresse und das zugehörige Symbol kann aus der bzw. in die entsprechende Position im Symbolspeicher RAM des Verschachte- lers/Entschachtelers gelesen bzw. geschrieben werden. Falls
die Bedingung nicht erfüllt ist, entspricht die berechnete Adresse einer ungültigen (mit einem Füllzeichen aufgefüllten) Position, so dass kein Schreib- oder Lesezugriff ausgeführt werden kann. Die ungültige Adresse muss verworfen werden und es wird für den nächsten Zeitschritt k+1 die Adress-
Berechnung I (k+1) gemäß der Gleichung [0.10] und der obige Bedingungstest vorgenommen.
Durch das Verwerfen von ungültigen Adressen entstehen Lücken in dem Adress-Berechnungsfluss . Dadurch geht die Synchronitat von Zeitschritten k und berechneten (gültigen) Adressen I (k) verloren. Bei einer Lücke kann ein entSchachteltes Symbol erst mit einer Zeitverzögerung bereitgestellt werden. Dies schafft Probleme bei der Weiterverarbeitung der entSchachtel - ten Symbole und soll durch die Erfindung vermieden werden.
Fig. 10 zeigt für R=20, C=15 die transformierte Rechteckmatrix. Die oberste Zeile r=0 und die Zeile r=9 sind ausschließlich mit Füllzeichen belegt. Die Zeile r=13 ist teilweise mit Füllzeichen belegt. Im UMTS-Standard können maximal zwei vollständig mit Füllzeichen belegte Zeilen auftreten.
Die vollständig mit Füllzeichen belegten Zeilen werden durch eine Umnummerierung der Zeilenkoordinate r in r1 berücksich- tigt: Die Zeilenkoordinate r1 nummeriert lediglich die nicht vollständig mit Füllzeichen belegten Zeilen durch.
Zur Berücksichtigung der teilweise mit Füllzeichen belegten Zeile r=13 wird eine erste Tabelle prucol der Länge C defi- niert. Die erste Tabelle prucol enthält Information bezüglich der Position der Füllzeichen in der teilweise mit Füllzeichen belegten Zeile. Die erste Tabelle pru- col= (prucol (0) ,... , prucol (C-1) ) ist durch die folgende Gleichung definiert :
f 1 falls ein Füllzeichen bei der
Spaltenkoordinate c auftritt prucol (c) [0.11]
0 sonst
Ferner wird eine zweite Tabelle pruleftcol der Länge C definiert, deren c-ter Eintrag die Gesamtanzahl von Füllzeichen angibt, die links von der Position c (einschließlich der Position c) angeordnet sind:
pruleftcol= (pruleftcol (0) , ... , pruleftcol (C-1) ) mit o c prulef tcol (c ) = ^ prucol(i) [ 0 . 12 ] i=o
Fig. 11 zeigt für C=20, R=5 die Einträge der ersten Tabelle prucol und der zweiten Tabelle pruleftcol, sowie im unteren Teil der Fig. 11 die zugehörige transformierte Rechteckmat- rix.
Zunächst wird der (einfachere) Fall betrachtet, dass die teilweise mit Füllzeichen belegte Zeile die oberste Zeile der transformierten Rechteckmatrix ist. Nachdem zu dem Zeit- schritt k eine Anfangs-Spaltenkoordinate c
x=k div R gemäß Gleichung [0.8] berechnet ist, wird in der zweiten Tabelle pruleftcol die Anzahl der Füllzeichen nachgeschlagen, die in den Spalten links von der Anfangs-Spaltenkoordinate Ci einschließlich der Spalte Ci übersprungen wurden. Es ergibt sich x
x=pruleftcol (ci) . Die Anzahl x
x kann größer als die Zeilenanzahl sein, so dass es erforderlich wird, die Anzahl der Spalten div R zu berechnen, die zu der Anfangs-Spaltenkoordinate Ci hinzuzufügen sind. Ein nochmaliges Nachschlagen in der zweiten Tabelle pruleftcol bei der Position
er- gibt die Gesamtanzahl von Füllzeichen x
2=pruleftcol (c
2) vom Zeilenanfang bis einschließlich zu der Spaltenkoordinate c
2. Falls Δ
2=x
2 div R>Δτ_, muss anhand der zweiten Tabelle pruleftcol nochmals überprüft werden, ob "neue" Füllzeichen beim Er-
höhen des Spaltenkoordinatenwertes c
3=Cι+Δ
2 aufgetreten sind. Dieser Prozess wird solange fortgeführt, bis Δ
n=Δ
n_ι festgestellt wird. Das Nachschlagen der End-Spaltenkoordinate c
n entspricht dann der Gesamtanzahl von Füllzeichen, die bezüg- lieh der Anfangs-Spaltenkoordinate c
x in der "Vergangenheit" und in der "Zukunft" zu berücksichtigen sind. Fig. 12 veranschaulicht anhand eines Beispiels R=3 und Xι=17 die oben beschriebenen Zugriffe auf die zweite Tabelle pruleftcol. Der Wert x entspricht der Gesamtanzahl der Füllzeichen, die be- züglich der Start-Spaltenkoordinate c
x zu berücksichtigen sind.
Nach der Ermittlung von x=xn ergibt eine abschließende Divi- sion-Modulo-Operation bezüglich R den durch die Füllzeichen hervorgerufenen Spalten- und Zeilen-Offset . Zuletzt kann noch ein Nachschlagen in der ersten Tabelle prucol erforderlich sein, nämlich sofern die Summe der Zeilenkoordinate r=k mod R (siehe Gleichung [0.9]) und des Zeilen-Offsets x mod R größer als R ist.
Für den UMTS-Standard 3GPP 25.212 lässt sich zeigen, dass niemals mehr als 3 Zugriffe auf die zweite Tabelle pruleftcol erforderlich sind. Für andere Verschachtelungs-Erzeugungsregeln, welche eine Inter- und Intrazeilenpermutation benut- zen, ist ebenfalls eine endliche Anzahl von Zugriffen ausreichend. Aufgrund dieser Konvergenz kann das beschriebene Verfahren auch für andere Pseudo-Zufalls-Verschachtelungs-Erzeu- gungsregeln eingesetzt werden.
Bis jetzt wurde angenommen, dass keine vollständig mit Füllzeichen belegten Zeilen existieren. Wie bereits erwähnt, ist dies nicht immer der Fall . Der oben beschriebene Algorithmus zum Entfernen von Füllzeichen kann jedoch in einfacher Weise an den Fall einer Rechteckmatrix, die vollständig mit Füll- zeichen belegte Zeilen aufweist, angepasst werden. Zu diesem Zweck werden die folgenden, aus Fig. 10 ersichtlichen Variablen definiert :
- prutotrow, (0<prutotrow<2) : Gesamtanzahl der vollständig mit Füllzeichen belegten Zeilen.
- Rpar, (0<Rpar<19) : Zeilenkoordinate der teilweise mit Füllzeichen gefüllten Zeile nach der Interzeilenpermutation.
- Rpar1, (O≤Rpar '<19) : Zeilenkoordinate der zweiten (d.h. der nicht oben liegenden) vollständig mit Füllzeichen beleg- ten Zeile nach der Interzeilenpermutation.
- R' =R-prutotrow, (0<R'<19): Anzahl der Zeilen, die nicht vollständig mit Füllzeichen belegt sind.
Es wird darauf hingewiesen, dass prutotrow=R- [K/C] nur für R=20 ungleich 0 ist. Gemäß Fig. 10 ist für R=5 wie auch für R=10 die teilweise mit Füllzeichen belegte Zeile immer die oberste Zeile.
Ferner ist der Fig. 10 zu entnehmen, dass
Rpar=T_1 (R-l-prutotrow) gilt, d.h. Rpar entspricht der Position der ganzen Zahl R-l-prutotrow in der Sequenz T.
Des weiteren ist aus Fig. 10 ersichtlich, dass Rpar' die Zei- lenkoordinate ist, auf welche die 18-te ursprüngliche Zeile abgebildet wird. Der Parameter Rpar' wird nur benötigt, wenn prutotrow=2 ist. Es gilt Rpar ' =T~1 (R-prutotrow) . D.h., Rpar' entspricht der Position der Zahl R-prutotrow=20-2=18 in der Sequenz T. Somit gilt Rpar '=9.
Für die Bestimmung der Anfangs-Spalten- und Zeilenkoordinaten nach den Gleichungen [0.8] und [0.9] wie auch für die Prozedur zum Entfernen der Füllzeichen werden die vollständig mit Füllzeichen belegten Zeilen ignoriert, d.h. die Divisions- und Modulo-Operationen werden hinsichtlich R' und nicht hinsichtlich R durchgeführt (in Fig. 10 gilt R'=18 und R=20) .
Die auf diese Weise erhaltenen Zeilenkoordinaten beziehen sich somit auf die r ' -Achse .
4.1 Erstes Ausführungsbeispiel : Adresserzeugung von I (k)
Im Folgenden wird ein erstes Ausführungsbeispiel des Gesamtalgorithmus für die Bestimmung der k-ten Adresse I (k) des Verschachtelungs-Permutationsmusters I erläutert. Zu diesem Zweck werden die beiden folgenden Funktionen definiert, die die im Schritt 3.3.5 des UMTS-Standards definierten Ausnahmen bei der Durchführung der Intrazeilenpermutation beinhalten:
R C, r = 0 ≠ R x C or r ≠ 0) ) K = R C, r= 0
[0.13]
finit(c,p,C) = [0.14]
Die Funktion finit ( ) ist ein Spezialfall der Funktion f0ol ( ), da sie allein die Spalten-Ausnahmebestimmungen für die teilweise mit Füllzeichen belegten Zeilen betrifft. Im Unterschied zur Funktion fcoι ( ), die während der eigentlichen Adress-Berechnung verwendet wird, wird die Funktion finit ( ) lediglich in der Initialisierungsphase für die Berechnung der ersten und zweiten Tabellen prucol und pruleftcol benötigt.
4.1.1 Algorithmus zur Bestimmung der Tabellen prucol und pruleftcol
Vor der Berechnung der Tabellen prucol und pruleftcol muss die Basissequenz s für die Intrazeilenpermutation bekannt sein. Ferner müssen die Werte K, C, Rpar, R' , p und die Sequenz q vorliegen.
Die ersten und zweiten Tabellen prucol und pruleftcol können nach dem folgenden Algorithmus berechnet werden.
base = (R< -1) * C j = sum = 0 while (j < C) { c = s [ (j*q [Rpar] ) mod (p-1) ]
C = finit(c,p,C)
if (base + c ' < K) t = 0 eise t = 1 sum = sum + t prucol [j] = t pruleftcol [j ] = sum
j = j + 1
}
Da die maximale Anzahl von Spalten Cmax = 256 ist, werden ma- ximal 256 Systemzyklen für die Berechnung der beiden Tabellen benötigt. Weitere 256 Systemzyklen werden für die Bestimmung der Basissequenz s gemäß Gleichung [0.3] benötigt.
4.1.2 Algorithmus zur Bestimmung der Adresse I (k)
Bei gegebenem Index (Zeitschritt) k wird die Adresse I (k) des Verschachtelungs-Permutationsmusters nach dem folgenden Algorithmus berechnet :
Rpar_ = Rpar - prutotrow
Rpar'_ = Rpar' - prutotrow cl = k div R' /* ignore totally pruned rows */ rl = k mod R' /* ignore totally pruned rows */
hl = cl + (pruleftcol [cl] div R') h2 = cl + (pruleftcol [hl] div R')
x = pruelftcol [h2]
c2 = x div R' r2 = x mod R' r3 = rl + r2
/* the following part corresponds to eq. [0.15] for input c = c3, r = r3 */ if ( r3 >= R1) { c4 = c3 + 1 r4 = r3 - R' if ( r4 >= Rpar_ ) r4 = r4 + prucol [c3]
} else{ if ( Rpar_ > 0 ) and ( r3 <= Rpar_) ) r4 = r3 - prucol [c3]
} } /* now go back to original numbering of rows */
/* the following part corresponds to eq. [0.16] for input r = r4*/ if ( prutotrow = 2 ) { if ( r4 <= Rpar'_ ) r5 = r4 + 1 eise r5 = r4 + 2
} eise r5 = r4 + prutotrow
/* inter-, intra-row permutations and column exception hand- ling */
r6 = T[r5] c5 = s[(c4*q[r5]) mod (p-1) ] c6 = fcoι(c5,r5,p,K,R,C)
/* matrix translation */
kout = r6*C + c6 /* I (k) = kout */
Der Algorithmus (Bezugszeichen AI) ist in der Fig. 13 veranschaulicht. Der Algorithmus AI besteht in der Berechnung der Adresse I (k) aus k. Wie bereits erläutert und im oberen Teil der Fig. 13 veranschaulicht, erfolgt dies durch eine Ermitt-
lung eines Koordinatenpaares (cl,rl) für die Rechteckmatrix, einer Korrektur des Koordinatenpaares durch einen Korrekturalgorithmus Kl (Depruning) , welcher ein korrigiertes Koordinatenpaar (c4,r5) liefert, der Transformation Tl dieses korrigierten Koordinatenpaares (c4,r5) in ein transformiertes Koordinatenpaar (c6,r6) und der Berechnung der Adresse I (k) aus dem transformierten Koordinatenpaar (c6,r6) . In Fig. 13 ist mit div die Quotientenbildung, mit mod die Modulo- Operation, mit AD eine Addition und mit M eine Multiplikation bezeichnet .
Der Algorithmus Kl für die Berechnung des korrigierten Koordinatenpaares (c4,r5) umfasst einen Sub-Korrekturalgorithmus Kl_l („Depruning (1) ") , welcher aus der Anfangs-Spalten- koordinate cl den Wert x ermittelt, und den restlichen Korrekturalgorithmus, welcher bereits vorstehend beschrieben wurde. Zur besseren Lesbarkeit sind in Fig. 13 die folgenden 2-wertigen Funktionen eingeführt:
( c + 1, r + R' ) if r > R' , r < Rpar_+ R1
( c + 1, r - R' + prucoKc + 1 ) ) if r > R1 , r > Rpar_+ R1 foc (c,r,R' ,Rpar_ ( c + 1, r - prucoKc ) ) if r < R1 , Rpar_ > 0, r < Rpar_
( c, r ) eise
[ 0 . 15 ]
r + 1 if prutotrow = 2, r < Rpar'_ frow (r , prutotrow, Rpar ' _) r + 2 if prutotrow = 2, r > Rpar'_ [0.16] r + prutotrow eise
Die Funktion foc ( ) übernimmt die Aufgabe einer Überlaufsteuerung, sofern der Wert nach der zweiten Modulo-Operation grö- ßer als R' wird, und korrigiert das Koordinatenpaar (c3,r3), sofern die teilweise mit Füllzeichen belegte Zeile nicht die oberste Zeile ist.
Die Funktion frow ( ) nummeriert die Zeilenkoordinaten um, sofern Zeilen vorhanden sind, die vollständig mit Füllzeichen belegt sind.
Ein gewisser Nachteil des erläuterten Algorithmus AI besteht in dem Sub-Korrekturalgorithmus Kl_l, und zwar deshalb, weil dieser einen mehrfachen (bei UMTS: 3 -fachen) Speicherzugriff zu einem Datenspeicher, der die zweite Tabelle pruleftcol enthält, umf sst. Sofern die Adresse I (k) innerhalb eines Systemzyklus berechnet werden soll, müssen 3 Datenspeicher vorgesehen sein, welche jeweils die zweite Tabelle pruleftcol enthalten. In der dritten Darstellung von oben in Fig. 13 sind die (maximal) drei möglichen Speicherzugriffe auf den die zweite Tabelle pruleftcol speichernden Datenspeicher dargestellt .
In der untersten Darstellung in Fig. 13 ist der bereits erläuterte Algorithmus Tl für die Matrix-Transformation veran- schaulicht.
Das im folgenden beschriebene zweite Ausführungsbeispiel vermeidet den oben angegebenen Nachteil des Sub-Korrekturalgorithmus Kl_l .
4.2 Zweites Ausführungsbeispiel: Adresserzeugung von I (k)
Das mehrfache Nachschlagen eines Tabelleneintrags in der zweiten Tabelle pruleftcol beruht darauf, dass die Anzahl der
Füllzeichen den Wert R' übertreffen kann, da in diesem Fall die Anzahl der Füllzeichen ermittelt werden muss, die bei der dann erforderlichen Erhöhung der Spaltenkoordinate entfernt werden müssen. Um dieses mehrfache Nachschlagen in der zwei-
ten Tabelle pruleftcol zu vermeiden, liegt dem zweiten Ausführungsbeispiel die Idee zugrunde, in einer dritten Tabelle
prutotcol = (prutotcol (0) , ... ,prutotcol (C-1) )
so viel Information zur Verfügung zu stellen, dass ein einziges Nachschlagen in dieser Tabelle ausreichend ist. Hierfür muss der c-te Eintrag prutotcol (c) sowohl eine Information über die Anzahl der Füllzeichen-Belegungen in der "Vergan- genheit" als auch in der "Zukunft" in Bezug auf die Spaltenkoordinate c umfassen.
4.2.1 Algorithmus zur Bestimmung der ersten Tabelle prucol und der dritten Tabelle prutotcol
Bei dem zweiten Ausführungsbeispiel wird die erste Tabelle prucol und die dritte Tabelle prutotcol nach dem folgenden
Algorithmus berechnet. Wiederum muss die Basissequenz s für die Intrazeilenpermutation bekannt sein und die Werte K, C, Rpar, R', p sowie die Sequenz q müssen vorliegen.
base = (R' -1) * C i = j = sum = acc = 0
while (j < C) { c = s [ (j*q[Rpar] ) mod (p-1) ] c ' = finit (c,p, c)
if ( base + c' < K) t = 0 eise t = 1
prucol [j ] = t
sum = sum + t acc = acc + t
if ( acc >= R1 ) acc = 0 eise { prutotcol [i] = sum
i = i + 1 } j = j + 1
}
Immer wenn die Variable sum durch R' teilbar wäre, wird die nachfolgende Spaltenkoordinate abgewartet, bevor die Wertezuweisung für die Variable prutotcol erfolgt. Die Fig. 14 zeigt im oberen Teil für R=5, C=20 die Einträge der ersten Tabelle prucol und der dritten Tabelle prutotcol. Im unteren Teil der Fig. 14 ist die zugehörige transformierte Rechteckmatrix dargestellt, welche in der obersten Zeile eine teilweise mit Füllzeichen aufgefüllte Zeile aufweist.
4.2.2 Algorithmus zur Bestimmung der Adresse I (k)
Der Algorithmus für die Berechnung der Adresse I (k) bezüglich des zweiten Ausführungsbeispiels unterscheidet sich von dem zum ersten Ausführungsbeispiel in 4.1.2 angegebenen Algorithmus zur Berechnung der Adresse I (k) lediglich dadurch, dass in dem in 4.1.2 angegebenen Algorithmus der zwischen den gestrichelten Linien stehende Teil durch den folgenden Algorithmusteil ersetzt wird:
x = prutotcol [cl] c2 = x div R' r2 = x mod R ' c3 = cl + c2 r3 = rl + r2
Fig. 15 veranschaulicht den Korrekturalgorithmus Kl' gemäß dem zweiten Ausführungsbeispiel . Der einzige Unterschied zum Korrekturalgorithmus Kl gemäß dem ersten Ausführungsbeispiel besteht darin, dass der Sub-Korrekturalgorithmus Kl_l durch den Sub-Korrekturalgorithmus Kl_2 ersetzt ist. Der Sub-
Korrekturalgorithmus Kl_2 wird durch ein einmaliges Nachschlagen in der dritten Tabelle prutotcol realisiert. Da ein einmaliges Nachschlagen in dieser Tabelle ausreichend ist, reicht ein einziger Datenspeicher für die dritte Tabelle pru- totcol aus, um zu gewährleisten, dass die Berechnung der Adresse I (k) innerhalb eines Systemzyklus abgeschlossen ist.
Für beide Ausführungsbeispiele gilt, dass die erste und zweite Tabelle (erstes Ausführungsbeispiel) bzw. die erste und dritte Tabelle (zweites Ausführungsbeispiel) in der Initialisierungsphase berechnet werden können. Für die Berechnung der aktuellen Adresse I (k) muss somit lediglich in den im voraus berechneten Tabellen nachgeschlagen werden.
Im Folgenden wir die Umsetzung der Algorithmen nach dem ersten und dem zweiten Ausführungsbeispiel in eine Schaltung in beispielhafter Weise erläutert:
Die Schaltung umfasst einen DSP sowie ein mit dem DSP in Ver- bindung stehendes Hardware-Modul . Das Hardware-Modul ist im vorliegenden Beispiel durch eine Turbo-Decoder-Hardware einschließlich der Verschachteler/Entschachteler realisiert. Nach dem Erhalt einer Angabe über die Blocklänge K werden die Vorbereitungsschritte 3.1.1 und 3.1.2 (Bestimmen von R und C der Rechteckmatrix) sowie 3.3.1 und 3.3.2 (Bestimmen von v und q) in Firmware, d.h. mittels des DSP, durchgeführt. Dabei werden die folgenden Parameter berechnet und der Turbo- Decoder-Hardware zur Verfügung gestellt:
- RowSelect (2 Bit) : Zeiger auf eines der 4 möglichen Inter- zeilen-Permutationsmuster nach Tabelle 2
- Primzahl p (9 Bit)
- Primitive Wurzel v (5 Bit)
- Anzahl der Spalten C (9 Bit) - Primzahl -Sequenz q= (q(0) , ... , q (R-l) ) (20*7 Bit)
- Anzahl der vollständig mit Füllzeichen versehenen Zeilen prutotrow (2 Bit)
Zu diesem Zweck muss der Inhalt der Tabelle 1 in einem für den DSP verfügbaren Speicher abgelegt sein.
Der Inhalt der Interzeilen-Permutationsmuster T in Tabelle 2 ist in einem internen Festwertspeicher ROM des Turbo-Deco- dierers gespeichert (255 Bit) . Das benötigte Interzeilen- Permutationsmuster sowie die Anzahl der Zeilen R (5 Bit) ergibt sich aus dem vom DSP übermittelten Wert RowSelect . Der Wert RowSelect bestimmt ebenfalls eindeutig die Werte Rpar (4 Bit) und Rpar' (4 Bit) .
Die Basissequenz s (256*8 Bit = 2 kBit) sowie die Tabellen prucol (256*1 Bit) und prutotcol (256*8 Bit = 2 kBit) werden in internen Datenspeichern RAM der Turbo-Decodierer-Hardware gespeichert und können durch die Hardware bestimmt werden.
Es wird darauf hingewiesen, dass sämtliche vorstehend angesprochenen Schritte Initialisierungsschritte sind, d.h. nur bei einer Änderung der Blocklänge K durchgeführt werden müssen. Innerhalb eines TTI (Transmit Time Intervall) ist die Blocklänge K konstant. Da ein TTI eine Vielzahl von Datenblöcken umfasst, ist die Neuberechnungsrate für die oben genannten Größen kleiner als die Datenblockrate .
Die Berechnung der aktuellen Adresse I (k) für einen Index (Zeitschritt) k innerhalb eines Verschachteluns-/Entschachte- lungsprozesses wird in dem Hardware-Modul durchgeführt. Die Figuren 13 und 15 können diesbezüglich unmittelbar als Schaltbilddarstellungen des Adressgenerators AG, wie er in der Fig. 2 für den Verschachteler IL und in der Fig. 6 für den Entschachteier DIL' gezeigt ist, interpretiert werden. Wie bereits erwähnt, sind zwei Divisions-/Modulo-Operationen bezüglich R' auszuführen. Wichtig ist, das stets nur ein Zugriff zu den dargestellten Speichern (hierfür müssen beim ersten Ausgführungsbeispiel 3 DRAMs für die zweite Tabelle pruleftcol implementiert werden) erforderlich ist. Dies er-
möglicht es, die Adresserzeugung (Berechnung von I (k) ) innerhalb eines Systemzyklus durchzuführen und dabei ausschließlich Single-Port-Datenspeicher RAM für die genannten Tabellen zu verwenden .
Der Vorteil der beschriebenen Algorithmen bzw. der beschriebenen Schaltungen besteht darin, dass ausschließlich gültige Adressen I (k) (eine pro Zeitschritt k) berechnet werden, die keinen Füllzeichen entsprechen. Die Berechnung der Adressen I (k) erfolgt ohne zeitliche Lücken, d.h. "nahtlos" („seamless") .
Letzteres hat zur Folge, dass die dem Verschachteler IL bzw. dem Entschachteier DIL' nachgeordnete Hardware des Turbo- Decodierers (oder auch des Turbo-Codierers) niemals aufgrund des Ver- oder Entschachtelungsprozesses unterbrochen bzw. angehalten werden muss. Dies bewirkt, dass die Geschwindigkeit der Turbo-Decodierung (Turbo-Codierung) allein durch die Hardware-Resourcen gegeben wird, die für den aktuellen Deco- dierprozess (Codierprozess) aufgebracht werden. Darüber hinaus ist der Aufwand für die Steuerung des Turbo-Decodierer- betriebs (Turbo-Codierer-Betriebs) bei einer nahtlosen Adresserzeugung signifikant geringer als bei einer lückenden Adresserzeugung .
Da die Initialisierung der ersten, zweiten und dritten Tabellen für die Turbo-Ver- oder -Entschachteier T_IL, IL1, DIL1, DIL2 (konstruktiv: IL, DIL' ) parallel zu der ersten Turbo- Decodieroperation durchgeführt werden kann, verursacht das erfindungsgemäße Verfahren im Vergleich zu einer Implementierung ohne Nachschlagetabellen (bei der die Bedingung I (k) <k überprüft werden muss) keine Latenz .
4.3 Drittes Ausführungsbeispiel: Erzeugung der inversen Adressen I"1(k)
Wie anhand der Figuren 1 bis 6 verdeutlicht, müssen für die Verschachtelung und die Entschachtelung einer Symbolfolge lediglich entweder die Adressen I (k) oder die Adressen I"1(k) berechnet werden. Mit den beiden vorstehend beschriebenen Al- gorithmen zur Berechnung der Adressen I (k) ist also sowohl das Problem der lückenfreien Adress-Berechnung für die Verschachtelung als auch das Problem der lückenfreien Adress- Berechnung für die Entschachtelung gelöst. Im Folgenden wird ein Algorithmus zur lückenfreien Berechnung der inversen Ad- ressen I_1(k) beschrieben. Wie anhand der Fig. 3 und 5 erläutert, können mit den inversen Adressen I"1 (k) gleichfalls sowohl ein Verschachteler (IL') als auch ein Entschachteier (DIL) betrieben werden.
Beispiel 2 : UMTS-Verschachtelung für K=43 : inverses Verschachtelungs-Permutationsmuster I"1
Fig. 16 betrifft das in Fig. 9 erläuterte Beispiel 1 (R=5, C=10, K=43) und zeigt die transformierte Rechteckmatrix sowie das inverse Entschachtelungs-Permutationsmuster I"1=(I"1(0) , I-1(l) , ... ,I-1(K-1) ) . Der k-te Eintrag der Sequenz I-1 ist die Adresse (Index) der verschachtelten Symbolfolge, auf welche das k-te nicht verschachtelte Symbol abgebildet wird. Beispielsweise wird das 0-te Symbol der nicht verschachtelten Symbolfolge auf die Position 4 in der verschachtelten Symbolfolge abgebildet. Deshalb gilt I"1(0)=4.
Allgemein gelten die Identitäten:
I_1(I(k))=k und I (I-1 (k) ) =k,
wobei k=0, 1, ... , K-l.
Anhand des in Fig. 16 gezeigten Beispiels wird die Adresserzeugung erläutert. Ausgehend von einem Zeitschritt k wird zunächst das Spalten- und Zeilenkoordinatenpaar des Zeit-
Schritts k in der nicht verschachtelten Rechteckmatrix berechnet. Dann wird die Matrixttransformation vorgenommen, d.h. die Zeilenkoordinate nach der Interzeilenpermutation und die Spaltenkoordinate nach der Intrazeilenpermutation be- stimmt. I"1 (k) ergibt sich dann durch Zählen (in der Leserichtung, siehe Fig. 9) der Anzahl von Symbolen (wobei Füll- symbole nicht mitgezählt werden) zwischen der gerade berechneten Position und dem ersten Symbol in der Rechteckmatrix. Für eine Rechteckmatrix ohne Füllzeichen ergibt sich die ein- fache Gleichung:
I
"1 (k) x R + T-
χ(r) , [0.18]
wobei
r=k mod C [0.19] c=k div C [0.20]
Dabei entspricht 1 (c) dem inversen des Intrazeilen- Permutationsmusters der i-ten permutierten Zeile (siehe Schritt 3.3.5 der UMTS-Spezifiation).
Im Gegensatz zur Situation bei der Berechnung von I (k) verursacht das Vorhandensein von Füllzeichen bei der Berechnung von I"1(k) keine Schwierigkeiten. Die in Gleichung [0.11] definierte erste Tabelle prucol sowie die nachfolgend definierte vierte Tabelle
prulefcol= (prulefcol (0) , ... ,prulefcol (C-1) )
C-1 prulef col (c) = prucol(i) [0 . 21]
1 = 0
reichen für die Korrektur der Matrix-Koordinaten zur Berücksichtigung der Füllzeichen d aus. Die vierte Tabelle prulef- col ist nahezu identisch mit der zweiten Tabelle pruleftcol und unterscheidet sich von dieser lediglich dadurch, dass der
c-te Eintrag der vierten Tabelle die Gesamtanzahl der Füllzeichen vom Zeilenanfang bis zu der Position c ausschließlich der Position c angibt.
Bei der Berechnung der inversen Adresse I"1(k) tritt das beim ersten Ausführungsbeispiel beschriebene "Konvergenzproblem" nicht auf, d.h. in der vierten Tabelle prulefcol muss stets nur ein einziges Mal zur Berechnung einer inversen Adresse nachgeschlagen werden. Die Schwierigkeit bei der Berechnung der inversen Adresse I"1(k) besteht in der Intrazeilenpermutation, deren Invertierung nicht ohne weiteres ersichtlich ist .
4.3.1 Invertierung des Intrazeilen-Permutationsmusters
Mit zι(j) wird die Funktion bezeichnet, die das "grundlegende" Intrazeilen-Permutationsmuster auf die i-te verschachtelte Zeile ausübt. Der Begriff "grundlegend" bezeichnet das Intrazeilen-Permutationsmuster ohne die Spalten-Ausnahmehandhabung, d.h.
Zi(j)=s(yq{i, (j) ) [0.22]
wobei die Funktion yq(i> (j ) durch
Yq(i) (j) = (jxq(i)) mod (p-1) [0.23]
definiert ist.
Das Inverse von zι(j) lässt sich folgendermaßen ausdrücken
ZI
1«) = yji)(s
_1(j)) [0-24]
wobei s
_1(j) bzw.
die invertierten Größen von s(j) bzw.
Yq(i)(j) bezeichnen. Gesucht ist die Größe
. Unter der
Annahme, dass yä( )(j) in der Form
Yφ.)G )=(jxa) mod (p-1) [0.25]
geschrieben werden kann, wobei a eine ganze Zahl ist, muss mit Gleichung [0.17] die folgende Beziehung gelten:
yä(i)(yÜ ) ) = j x q(i) x mod (p - 1) = j für alle j=0, 1, ... ,p-2
[0.26]
a muss somit das multiplikative Inverse von q(i) mod (p-1) sein. Somit ist die ganze Zahl a gesucht, die die Beziehung axq (i) =q (i) xa=l mod (p-1) erfüllt.
Eine Lösung dieses Problems ergibt sich aus dem Eulerschen Theorem. Dieses besagt, dass die Gleichung
xΦ(m)=l mod m [0.27]
für beliebige ganze Zahlen x und m gilt, wobei Φ die Euler- sche Φ-Funktion ist:
wobei
m = TT P1 d e PrimzahlZerlegung von m ist. Unter Anwendung des Eulerschen Theorems ergibt sich
a=q"1(i) = (q(i))Φ(p-1)-1 mod (p-1) . [0.29]
In der Tabelle 3 sind die Primzahlen p und die zugehörigen Exponenten e=Φ(p-l)-l aufgelistet.
Tabelle 3
Beispiel 3 : Berechnung des multiplikativen Inversen a
Es soll das multiplikative Inverse a=q_1 der Primzahl q=61 mod (83-1) berechnet werden. Gemäß der Tabelle 3 muss a=6139 mod 82 berechnet werden.
Zunächst werden nacheinander die Potenzen berechnet
b0 = 611 mod 82 = 61 bi = 612 mod 82 = (b0xb0) mod 82 = 31 b2 = 614 mod 82 = (bixbi) mod 82 = 59 b3 = 618 mod 82 = (b2xb2) mod 82 = 37 b4 = 611S mod 82 = (b3xb3) mod 82 = 57 b5 = 6132 mod 82 = (b4xb4) mod 82 = 51
Anschließend werden die folgenden Rechenschritte ausgeführt,
al = (boxbi) mod 82 =5 a2 = (axxb2) mod 82 = 49 a5 = (a2xb5) mod 82 = 39,
die diejenigen Partialprodukte bi kombinieren, deren zugehörige Koeffizienten di in der binären Zerlegung des Exponenten e=39, d.h.
5 3 9 = ^ di x 2i = l x 2° + l x 21 -l- l 22 + l x 25 , i=0
auftritt. Das gewünschte Ergebnis lautet a=a5=39. (Die Identität von e=39 und a=a5=39 ist zufällig.)
Ein Einsetzen der Gleichungen [0.25] und [0.29] in Gleichung [0.24] liefert das Inverse des grundlegenden Intrazeilen- Permutationsmusters .
z^ö ) - ( s_1(j ) x q_1( i ) ) mod ( p - 1) [0.30]
Für die Invertierung der Intrazeilenpermutationen müssen also die Inversen s_1(j) der Basissequenz s(j) berechnet und gespeichert werden. Da s(j) gemäß Gleichung [0.3] eine Abbil- düng von {θ,l,...,p-2} nach {l,2,...,p-l} ist, ist s_1(j) eine Abbildung von {l,2, ... ,p-l} nach {θ,l,...,p-2}. Folglich werden die Werte s_1(j) in einer mit si bezeichneten fünften Tabelle si= (si (0) , ... , si (p-2) ) gespeichert, wobei darauf hingewiesen wird, dass der j -te Eintrag si(j) der Wert s"1(j+l) ist.
Darüber hinaus muss in einer sechsten Tabelle qi der Länge R die Sequenz qi= (qi (0) , ... , qi (R-l) ) , deren j-ter Eintrag qi(j) das multiplikative Inverse q"1 (j ) von q(j) mod (p-1) gemäß der Gleichung [0.29] ist, gespeichert werden.
Beispiel 4 :
Zurückkommend auf das Beispiel 3 ergeben sich gemäß der obi- gen Diskussion für den betrachteten Verschachte-
ler/Entschachteler (K=43, R=5, C=10, p=ll) die folgenden Größen.
T"1 = (4,3,2,1,0) qi = (1,3,1,7,3) und si = (0,1,8,2,4,9,7,3,6,5) .
Nachfolgend wird die Beschreibung des kompletten Algorithmus für die Berechnung der inversen Adressen I"1 (k) angegeben.
4.3.2 Berechnung der inversen Adresse I"1(k)
Zur besseren Lesbarkeit des Algorithmus werden die folgenden Funktionen eingeführt, die die Handhabung der in Schritt
3.3.5 angegebenen Ausnahmebedingungen bei der Intrazeilenpermutation erleichtern:
gcoι(b,c,r,p,K,R,C)
p-1 if c = 0, C> ( p - 1 ) p if C = p + 1, ( ( c = p, r ≠ 0 ) or < (c = p, r = 0, K ≠ R x C ) or c = 1, r = 0, K = R x C ) )
0 if C = p + 1, c = p, K = R C, r = 0 b eise
[0.31]
p - 1 if c = 0, C > ( p - 1) ginit(b,c,p,C) = p if c = p, C = ( p + 1) [0.32] b eise
Die Funktion ginit ( ) ist ein Spezialfall der Funktion gcoι ( ) , indem sie lediglich die Spalten-Ausnahmebedingung der teilweise mit Füllzeichen aufgefüllten Zeile betrifft. Während 9coi ( ) bei der Berechnung der aktuellen Adressen verwendet
wird, wird ginit ( ) lediglich in der Initialisierungsphase für die Berechnung der ersten Tabelle prucol und der vierten Tabelle prulefcol benötigt.
Nachfolgend wird der Algorithmus zur Berechnung der ersten Tabelle prucol, der vierten Tabelle prulefcol und der fünften Tabelle si angegeben.
4.3.2.1 Algorithmus zur Bestimmung der ersten Tabellen prucol, der vierten Tabelle prulefcol und der fünften Tabelle si
Prinzipiell kann für die Bestimmung der Tabellen prucol und prulefcol nahezu derselbe Algorithmus wie beim ersten Ausfüh- rungsbeispiel (siehe 4.1.1) verwendet werden, wobei eine geringfügige Änderung aufgrund des Unterschieds zwischen den Definitionen der Ausdrücke pruleftcol (c) und prulefcol (c) vorgenommen werden muss. Dies würde es jedoch erforderlich machen, zusätzlich zu der Tabelle si die Sequenz s zu berech- nen und zu speichern. Um die Speicherung der Sequenz s zu vermeiden, wird vorgeschlagen, zunächst die Tabelle si durch Berechnung und unverzügliche Invertierung von s (j ) zu berechnen, danach die erste Tabelle prucol mit der Hilfe der fünften Tabelle si zu berechnen, und schließlich die vierte Ta- belle prulefcol allein auf der Basis der ersten Tabelle prucol zu berechnen. Bei dieser Vorgehensweise wird kein zusätzlicher Speicherplatz im Vergleich zu der Berechnung der direkten Adresse I (k) benötigt. Ein geringfügiger Nachteil besteht allerdings darin, dass die Tabellen prucol und prulef- col nicht gleichzeitig erzeugt werden können.
Die Tabellen können mit dem folgenden Algorithmus berechnet werden, wobei die Werte der Variablen K, C, Rpar, R' , p, v sowie auch die Werte der Sequenz qi vorliegen müssen.
/**** determining si *****/
ss = 1 si[0] = 0 j = 1 while (j < p-1) { ss = (v*ss) mod p si [ss-1] = j j = j + 1
} /**** determining prucol ****/ base = (R'-l) * C j = 0 while ( base + j < K) { /* non-pruned Symbols */
/* next two lines account for the fact that */ /* s"1[j] is stored at position j-1 of si [] . */ /* Because of the -1 in eq. [0.5] no such */ /* compensation is required for C=p-1 */
if ( (C > p-1) and (j > 0) ) h = j-1
eise h = j
b = (si [j] *qi [Rpar] ) mod (p-1) b' = ginit (b, j ,p,C)
prucol [b ' ] = 0 j = j + } while (base + j < C) { /* pruned Symbols */
/* next two lines account for the fact that */
/* s_1[j] is stored at position j-1 of si [] . */
/* Because of the -1 in eq. [0.5] no such */ /* compensation is required for C=p-1 */
if ( (C > p-1) and (j > 0) ) h = j - 1 eise h = j
b = (si [j] *qi [Rpar] ) mod (p-1) b' = ginit (b, j ,p,C)
prucol [b ' ] = 1 j = j + 1
/**** determining prulefcol ****/
sum = prucol [0] prulefcol [0] = 0 j = 1 while (j < C) {
prulefcol [j] = sum sum = sum + prucol [j ] j = j + 1 } Da die maximale Spaltenanzahl Craax=256 ist, können die Tabellen jeweils in maximal 256 Systemzyklen berechnet werden. Infolgedessen beträgt die maximale Latenz in der Initialisierungsphase 3*256 Systemzyklen, d.h. die maximale Latenz in der Initialisierungsphase für die Berechnung der inversen Ad- ressen I"1 (k) ist um 256 Systemzyklen länger als die maximale Latenz für die Berechnung der direkten Adressen I (k) in der Initialisierungsphase. Dabei wird vorausgesetzt, dass die Werte für qi (genauso wie die Werte für q bei der Berechnung von I (k) ) in Firmware, d.h. von dem DSP, berechnet werden.
4.3.2.2 Algorithmus zur Bestimmung der inversen Adressen I-1(k)
Zu einem bestimmten Index (Zeitschritt) k wird die Adresse I"1(k) nach dem folgenden Algorithmus berechnet.
rl = k div C cl = k mod C r3 = T_1[rl]
/* next two lines account for the fact that */ /* s-1[j] is stored at position j-1 of si [] . */ /* Because of the -1 in eq. [0.5] no such */
/* compensation is required for C = p-1 */
if ( (C > p-1) and (cl > 0) ) h = cl - 1 eise h = cl
c2 = (si [h] *qi [r3] mod (p-1)
/* the following part corresponds to eq. [0.31] for input b=c2, c=cl */ c3 = gcoι (c2 , cl, r3 , p, K, R, C) /* column exception handling */
/* depruning and address generation */ kl = c3*R' + r3 - prulefcol [c3]
/* final depruning and address generation */
/* the following part corresponds to eq. [0.33] for */ /* input r=r3, k'=kl, c=c3 */
if (r3 > Rpar) k2 = kl - ( prutotrow + prucol [c3] ) eise { if (r3 > Rpar') k2 = kl - prutotrow eise if (prutotrow = 2) k2 = kl - 1 eise k2 = kl - prutotrow }
kout = k2 /* I_1(k) = kout */
Der Algorithmus ist in Fig. 17 veranschaulicht, wobei zur besseren Lesbarkeit die Funktion
grow (r, k ' , prucol (c) , prutotrow, Rpar, Rpar ' )
k'-prutotrow - prucol(c) if r > Rpar k'-l if r < Rpar' , r < Rpar, prutotrow = 2 k'-prutotrow eise
verwendet wird. Die Funktion grow ( ) korrigiert den Index k' in Abhängigkeit von der Zeilenkoordinate r und den Positionen der vollständig aus Füllzeichen bestehenden Zeilen. Ein Füllzeichen in der teilweise mit Füllzeichen gefüllten Zeile wird
ebenfalls berücksichtigt, sofern eine solche Zeile vorhanden ist .
Das Bezugszeichen A2 kennzeichnet den Gesamtalgorithmus. Die vorstehend beschriebene Transformation der Rechteckmatrix wird mittels des Transformationsalgorithmus T2 bewerkstelligt.
Die Hardware-Implementierung des Matrix-Transformationsalgo- rithmus T2 lässt sich direkt aus der Darstellung des Algorithmus T2 ablesen: Sie umfasst einen Datenspeicher zur Speicherung der Werte t-1(i), einen Datenspeicher zur Speicherung der Werte si(j) und einen Datenspeicher zur Speicherung der Werte qi(j) . Ferner umfasst die Schaltung eine Modulo-Stufe mod, einen Multiplexer MUX, welcher von einem Vergleicher
COMP angesteuert wird, einen Addierer AD, einen Multiplizierer M und eine Stufe zur Ausführung der Funktion gcoχ ( ) . Die Korrektur der mittels des Algorithmus T2 erhaltenen transformierten Matrixkoordinaten (r3,c3) sowie gleichzeitig die Er- zeugung der Adresse I_1(k) wird durch den in Fig. 17 veranschaulichten Korrektur- und Adresserzeugungs-Algorithmus K2 vorgenommen. Er umfasst, wie bereits erläutert, das einmalige Nachschlagen der Tabellenwerte prulefcol (i) und prucol (i) in den entsprechenden Tabellen. Seine Hardware-Implementierung lässt sich ebenfalls direkt der Fig. 17 entnehmen. Sie umfasst zwei Datenspeicher zur Speicherung der ersten Tabelle prucol und der vierten Tabelle prulefcol, sowie einen Multiplizierer M, einen Addierer AD, einen Subtrahierer SUB und eine Stufe zur Ausführung der Funktion grow ( ) •
Im folgenden wird die Umsetzung des Algorithmus A2 nach dem dritten Ausführungsbeispiel in eine Schaltung in beispielhafter Weise erläutert.
Genauso wie bei der Berechnung der direkten Adresse I (k) ist vorgesehen, die Vorbereitungsschritte 3.1.1 und 3.1.2 (Bestimmen von R und C der Rechteckmatrix) sowie 3.3.1 und 3.3.2 (Bestimmen von v und q) in Firmware, d.h. mittels des DSP, durchzuführen. Dabei werden die folgenden Parameter berechnet und der Turbo-Decoder-Hardware zur Verfügung gestellt:
- RowSelect (2 Bit) Zeiger auf eines der 4 möglichen Inter- zeilen-Permutationsmuster nach Tabelle 2
- Primzahl p (9 Bit)
- Primitive Wurzel v (5 Bit)
- Anzahl der Spalten C (9 Bit)
- Liste der multiplikativen Inversen qi= (qi (0) , ... , qi (R-l) ) (20*7 Bit)
- Anzahl prutotrow (2 Bit) der vollständig mit Füllzeichen gefüllten Zeilen
Zu diesem Zweck müssen sowohl der Inhalt der Tabelle 1 als auch die Exponenten aus der Tabelle 3 (52* (9+5+7) Bit = 1092 Bit) in einem für den DSP verfügbaren Speicher abgelegt sein.
Es ist vorgesehen, die inversen Interzeilen-Permutationsmuster T"1 in einem Turbo-Decoder-internen Festwertspeicher ROM (255 Bit) zu speichern. Wie bereits erläutert, können sowohl das entsprechende Muster T"1 sowie auch die Anzahl der Zeilen R (5 Bit) in Abhängigkeit von dem Wert von RowSelect bezogen werden. Darüber hinaus bestimmt der Wert RowSelect auch eindeutig die Werte der Variablen Rpar (4 Bit) und Rpar' (4 Bit) .
Die in der Initialisierungsphase berechneten Tabellen si (256*8 Bit = 2 kBit) , prucol (256*1 Bit) und prulefcol (256*8 Bit = 2 kBit) werden in den Turbo-Decoder-internen flüchtigen
Datenspeichern RAM gespeichert und durch die Hardware berechnet .
Die Berechnung der aktuellen inversen Adresse I-1(k) bezüg- lieh eines gegebenen Index (Zeitschritt) k erfolgt in der Hardware. Wie aus der Fig. 17 erkennbar, ist lediglich eine Divisions-/Modulo-Operation in Bezug auf die Spaltenanzahl C erforderlich (im Gegensatz zu den zwei Divisions-/Modulo- Operationen bezüglich R' für das erste und zweite Ausfüh- rungsbeispiel zur Berechnung von I (k) ) . Entscheidend ist auch hier, dass lediglich ein einziger Zugriff auf jede der Tabellen pro Berechnung einer Adresse I"1 (k) erforderlich ist, was es ermöglicht, die Berechnung in einem Systemzyklus abzuschließen und ausschließlich Single-Port-RAMs als flüchtige Datenspeicher zu verwenden. Letzteres verbessert die Kompatibilität und Portabilität des Algorithmus.
Der Rechenaufwand zur Bestimmung der Werte der Sequenz qi lässt sich einfach anhand des Beispiels 3 abschätzen. Da der größte in der Tabelle 3 auftretende Exponent den Wert 127 hat, müssen für jede Primzahl q(i) sechs Partialprodukte bi= (q (i) ) 2l mod p-1 für i=l,2,...,6 berechnet werden. Anschließend müssen sieben Produkte für die Kombination der Partialprodukte bi berechnet werden. Insgesamt müssen somit (6+7)*6=78 Multiplikationen (der Wortbreite 16 Bit) und Modulo-Operationen ausgeführt werden.
Die Berechnung der inversen Adressen I-1(k) ist ebenfalls lückenfrei, d.h. jede berechnete Adresse ist eine gültige Ad- resse für ein Symbol, das kein Füllzeichen ist. Die inversen Intrazeilenpermutationen werden sehr effizient durchgeführt, indem lediglich eine einzige ganze Zahl für jede Zeile (die multiplikativen Inversen qi) vorausberechnet wird. Dies vermeidet die Vorausberechnung und Speicherung der gesamten in- versen Intrazeilen-Permutationsmuster T"1 für jede Zeile,
die bei einer weniger geschickten Implementierung erforderlich wäre.
Gemeinsam ist sämtlichen Ausführungsbeispielen, dass sich durch die Erzielung einer nahtlosen Adressgenerierung kein
Zeitverlust bei der Anbindung an den nachfolgenden Decodierer ergibt .
5. Verallgemeinerungen der Ausführungsbeispiele für Nicht- UMTS Standards
Die beschriebenen Ausführungsbeispiele lassen sich in für den Fachmann leicht erkennbarer Weise an andere Erzeugungsregeln anpassen:
- Ist anstelle der Definition in Schritt 3.1.1 eine freie (d.h. von dem Parameter K unabhängige) Wahl der Zeilenanzahl R möglich, so kann die Matrixgröße RxC sehr viel größer als K werden. Es können dann mehr als zwei vollständig mit Füllzei- chen belegte Zeilen auftreten - im Extremfall bis zu R-l solcher Zeilen.
Anstatt einer einzigen Variablen Rpar' , die bisher den Zeilenindex der letzten vollständig mit Füllzeichen belegten Zeile beschreibt, werden mehrere Rpar' -Variablen eingeführt. Die entsprechende Stelle „/* the following part corresponds to eq. [0.16] for input r = r4 */" bis „/* inter- , intra-row permutations and column exception handling */" im Algorithmus 4.1.2 (erstes und zweites Ausführungsbeispiel) und die ent- sprechende Stelle hinter „/* input r=r3 , k'=kl, c=c3 */" im
Algorithmus 4.3.2.2 (drittes Ausführungsbeispiel) müssen entsprechend abgeändert werden. Eine andere Möglichkeit besteht darin, ähnlich wie bei der Verwendung der Tabelle pruleftcol mit einer verallgemeinerten Tabelle (z.B. upperrow genannt) zu arbeiten, die an ihrer r-ten Position die Anzahl von voll-
ständig mit Füllzeichen belegten Zeilen angibt, die von der verwürfelten Zeile r aus gesehen über dieser Zeile r liegen. Mit dieser Information lässt sich das Zurückgehen auf die ursprüngliche Nummerierung der Zeilenindizes effizienter und übersichtlicher formulieren.
- Ist anstelle der Definition in Schritt 3.3.2 eine freie Wahl der Basissequenz s möglich (d.h. s bildet z.B. nicht wie in Schritt 3.2.2 eine durch ein primitives Element erzeugte zyklische Gruppe) , so ändert sich in den betrachteten Algorithmen lediglich der Initialisierungsschritt, der nun die „neue" Konstruktion der Permutation s (Basissequenz) implementiert .
- Ist anstelle der Definition in Schritt 3.3.4 eine beliebige Interzeilenpermutation T vorgesehen, kann der Fall auftreten, dass für R=5 und R=10 die partiell mit Füllzeichen gefüllten Zeilen nach der Interzeilenpermutation nicht ganz oben in der transformierten Matrix zu liegen kommen. Dieser Fall kann durch eine einfache Maßnahme, nämliche die Änderung der if- Bedingung in den Algorithmen 4.1.2 (erstes und zweites Ausführungsbeispiel) und 4.3.2.2 (drittes Ausführungsbeispiel) an den Stellen von „/* the following part corresponds to eq. [0.16] for input r = r4 */" bis „/* inter- , intra-row permu- tations and column exception handling */" bzw. nach „/* input r=r3 , k'=kl, c=c3 */" berücksichtigt werden. Alternativ bietet sich auch hier wieder die Möglichkeit der Verwendung einer weiteren Tabelle upperrow mit den oben genannten Eigenschaften an.
- Ist anstelle der in der Definition in Schritt 3.3.5 angegebenen Intrazeilenpermutation eine andere Intrazeilenpermutation vorgesehen, welche z.B. nicht gemäß der Gleichung wiÖ) = S((Ö x q(i)) od(p - l))) lautet (Beispiel: Vf±(j) = s(qi(j)) ,
wobei q.j_(j) zur indirekten Adressierung der Basispermutation s eine beliebige, möglicherweise nicht- zyklische Permutation beschreibt, die auf andere Weise als durch (j x q(i)) mod(p - l) erzeugt wird) oder sogar auch nicht von Primzahlen q(i) ge- steuert sein muss, so ändert sich der Matrix-Transformationsteil der Algorithmen zu den beiden ersten Ausführungs- beispielen dergestalt, dass anstelle der Multiplikation von q[r5] mit c4 und anschließender mod (p-1) Operation die allgemeinere Konstruktionsvorschrift steht. Im Extremfall (ohne eine Intrazeilenpermutation) wäre das ein einfaches, durch die Koordinaten c4 und r5 parametrisiertes Tabellen- Nachschlagen .
Für die Berechnung der inversen Adressen I"1 (k) gemäß dem dritten Ausführungsbeispiel (siehe den unter Punkt 4.3.2.1 angegebenen Algorithmus) kann die Vorausberechnung der multiplikativen Inversen mit Hilfe der Eulerschen Φ-Funktion entfallen, da diese nur bei einer Vorschrift gemäß (j x q(i)) mod(p - l) anwendbar ist. Im Falle der allgemeineren Vorschrift Wj_(j) = s(q^(j)) ändert sich Fig. 17 dergestalt, dass anstelle der mod(p-l) Multiplikation von qi (j ) mit si(j) zuerst qi(j)"1 berechnet wird (z.B. durch Nachschlagen in einer Tabelle) und das Ergebnis anschließend an den Eingang von si(j) gelegt wird, vergleiche Gleichung [0.24] .