CDMA steht für Code Division Multiple Access und ist ein Multiplexverfahren, bei dem die Teilnehmer auf der Leistungsachse aufgeteilt werden. Das "W" steht dabei für "Wideband", da UMTS (5MHz) im Gegensatz zum amerikanischen CDMA-2000 (1,25MHz/Träger) Netz breitere Frequenzbänder für die Übertragung verwendet. Ein Multiplexverfahren hat bekanntlich die Aufgabe über ein einheitliches Übertragungsmedium (z.B: Kupferkabel, Glasfaserkabel, Luft als Funkkanal, ....) mehrere Übertragungskanäle anzubieten, die mehreren Signalen zugewiesen werden können. So ist fast jedem das Frequenzmultiplexverfahren bekannt, da es bei jeder Fernseh- oder Radioübertragung verwendet wird. Beim Radio wird jedes Programmsignal auf einem eigenen "Frequenzträger" übertragen. So wird z.B: der Sender Ö3 auf einem Frequenzband (ca. 200kHz breit) mit der Mittenfrequenz von 99,9 MHz übertragen, während Radio Energy auf der Mittenfrequenz von 104,2 MHz übertragen wird. Beide Sender werden gleichzeitig über das gleiche Übertragungsmedium, nämlich die Luft, übertragen und trotzdem kann der Empfänger die beiden unterschiedlichen Signale wieder voneinander trennen, sodass sich jeder Teilnehmer sein Wahlsignal aussuchen kann. In diesem Fall von Frequenzmultiplex teilen sich die unterschiedlichen Signale also die Frequenzachse auf.
Bei CDMA wird die Leistungsachse für die unterschiedlichen Signale aufgeteilt. Jede Funkzelle hat eine bestimmte Leistungsreserve (typisch 50W), die unter allen Mobilteilnehmern der Zelle aufgeteilt werden muss. Es stellt sich nur die Frage, wie kann man die multiplexten Signale wieder voneinander trennen?
Um die Signale beim Empfänger wieder voneinander trennen zu können, muss jedem Teilnehmer ein binäres Codemuster zugewiesen werden, mit dessen Hilfe das Nutzsignal teilnehmerspezifisch kodiert werden kann. Das kann man sich wie in einem Kaffeehaus im Ausland vorstellen, in dem sich drei Urlaubergruppen mit unterschiedlicher Sprache aufhalten, zB: Deutsch, Englisch und Französisch. Jede Sprache stellt einen eigenen Code dar. Wenn man zB: deutsch und englisch, aber nicht französisch sprechen kann, so kann man im Kaffeehaus den Gesprächen derjenigen Gruppe zuhören, deren Code man "versteht" und "im Kopf einschaltet". Konzentriert man sich auf die deutsche Sprache, so kann man mühelos der deutschen Gruppe folgen, legt man den englischen Code ein, so kann man die Engländer verstehen, wird aber nichts mehr von dem Deutschen Gespräch mehr mitbekommen. Von der französischen Gruppe bekommt man gar nichts mit, da man diesen Code nicht einmal besitzt. Problematisch kann die Situation nur werden, falls eine Gruppe, beispielsweise die französische, sehr laut wird und die anderen Gruppen übertönt. In diesem Fall werde ich weder von der deutschen noch von der englischen Gruppe mehr etwas mitbekommen. Man sieht also, dass bei Codemultiplexsystemen die Leistungsregulierung der diversen Signale sehr wichtig ist, damit die Signale sich nicht gegenseitig "überschreien".
Die bereits oben angesprochenen Codes bestehen bei CDMA natürlich aus einem binären Muster, wobei darauf geachtet werden muss, dass diese Muster-Codes voneinander "unabhängig" sind, damit sich die kodierten Signale nicht gegenseitig beeinflussen können. Der Mathematiker sagt dazu: "Die Codes müssen zueinander orthogonal sein!" Dazu werden die Bitmuster zuerst in ein NRZ-Signal (No Return to Zero) umgewandelt, was soviel heißt wie, dass alle "0" in "-1" umgewandelt werden. (Hinweis: Bei UMTS wird das Bit 1 dem Symbol -1 und das Bit 0 dem Symbol +1 bei der NRZ-Kodierung zugeordnet! Hier wird nur der Einfachheit (einfacherer Denkvorgang) halber umgekehrt vorgegangen, wobei die Funktionalität davon nicht beeinträchtigt wird!)
Anschließend wird die Sequenz um 90 Grad gedreht, wodurch sie die mathematische Form eines Vektors erhält. Daher spricht man auch von orthogonalen Vektoren und meint damit orthogonale Bitmuster.

Der Vektor hat eine tolle Eigenschaft, man kann ganz einfach feststellen, ob zwei Vektoren zueinander orthogonal sind - also für die Kodierung verwendet werden dürfen. Zwei Vektoren sind genau dann orthogonal zueinander, wenn ihr skalares Produkt (zeilenweise multiplizieren / addieren) genau NULL ergibt.
Zur Erinnerung des skalaren Produkts zweier Vektoren:

Ein Beispiel für zwei gültige Codes: Code-A=[1,0,0,1] und Code-B=[0,1,0,1]

Das skalare Produkt:

Was hier ebenso auffällt ist, dass der Code aus 4 Bits besteht - man spricht von einer Codelänge von 4. Die Codes können aber auch aus mehreren Bits bestehen, wie wir noch sehen werden - bei UMTS bis zu 512 Bits. Das skalare Produkt ergibt also exakt Null und man weiß damit, dass diese zwei Codes, nämlich [1,0,0,1] und[0,1,0,1], vergeben werden dürfen, da sie sich nicht gegenseitig beeinflussen.
Dieser Nullwert ist das entscheidende Kriterium von orthogonalen Codemultiplexverfahren, da der Empfänger dadurch die Möglichkeit, unerwünschte Signale, auszufiltern, da diese vom Sender mit orthogonalen Codes kodiert wurden. Folgende Grafik zeigt dieses Prinzip ganz deutlich:
Der Sender kodiert orthogonal mit C1 bzw C2 und überträgt das Summensignal: S1.C1+S2.C2:

Der Empfänger dekodiert mit C1 und C2 das Summensignal S1.C1+S2.C2 wieder in Einzelsignale S1 und S2, da die Multiplikation von orthogonalen Codes, also hier C1.C2, ja 0 ergeben muss:
Jetzt bleibt noch die Frage offen, wie wird das Teilnehmersignal mit diesen "Codebits" kodiert?
Bei der Abbildung unten sind 3 Signale aufgetragen, oben das Teilnehmersignal, in der Mitte das Codesignal und unten das bereits kodierte Signal. In unserem Beispiel hat der Teilnehmer einen Code der Länge 4 mit dem Muster [1,0,0,1] bzw. [1,-1,1,-1] bei NRZ-Umwandlung zugewiesen bekommen. Die "Länge 4" hat in der Abbildung unten die Konsequenz, dass jedes Nutzbit (oberste Reihe) in 4 gleiche Zeitintervalle unterteilt werden muss. Für jede Bitlänge wird also der vierstellige Code darunter angeschrieben. Man sagt auch, der Code besteht aus 4 Chips, um zwischen den Bits des Nutzsignals unterscheiden zu können.
Die Kodierung kann man jetzt aus zweierlei Betrachtungsweisen durchführen:
Bei der Dekodierung vom grünen CDMA-Signal kann man jetzt umgekehrt vorgehen, indem man Chip-weise das kodierte Signal (grün) mit dem mittleren Signal (blau) multipliziert. Dadurch bekommt man wieder für jedes Chip das oberste Signal (rot) zurück.
Ein weiterer Aspekt, der bei dieser CDMA-Kodierung auffällt ist, dass für jeweils 1 Bit (rotes Nutzsignal) durch 4 Chips (blaues Codesignal) ersetzt wird und zwar in invertierter Form für das Bit 0 und in nichtinvertierter Form für das Bit 1. Daraus lässt sich klar erkennen, dass die Datenrate um den Wert ansteigt aus wie vielen Chips der Code besteht. In unserem Beispiel wird also jedes Bit durch 4 Chips ersetzt und die Datenrate steigt dadurch um den Wert 4 an! Da die Datenrate um den Wert 4 gestiegen ist, steigt natürlich auch der Bandbreitenbedarf im Frequenzspektrum um den Faktor 4, um dieses Datensignal korrekt übertragen zu können. Diesen Aspekt bezeichnet man als Bandspreizung!
Bei UMTS liegt allgemein eine Frequenzbandbreite von 5MHz zur Verfügung was einer kodierten Datenrate von 3,84Mchip/s entspricht (Megachip pro Sekunde). Der Begriff "Megachip pro Sekunde" macht dabei darauf aufmerksam, dass es sich um eine kodierte Datenrate handelt, die entsprechend der Codelänge durch den CDMA-Code größer geworden ist und damit auch mehr Bandbreitenbedarf hat als das ursprüngliche und unkodierte Nutzsignal.
Die Codelänge ist auch für einen anderen Effekt der CDMA-Technik verantwortlich - nämlich für den Prozessgewinn. Bei der Dekodierung wird nämlich nicht wie oben beschrieben Chip für Chip vorgegangen, sondern immer über die Chiplänge, was in unserem Beispiel bedeutet, dass man über 4 Chips dekodiert. Dabei kommt wieder das mathematische Modell der Vektorrechnung zur Hilfe. Man führt nämlich die Dekodierung mit Hilfe des Skalarprodukts durch. In unserem Beispiel werden also jeweils die ersten 4 Chips des unteren Signals (grün) sowie die ersten 4 Chips des mittleren Signals (blau) zu jeweils einem Vektor umgewandelt:

Bei dieser skalaren Operation dürfen nur zwei diskrete Werte auftreten, nämlich -4 und +4. Das Ergebnis "-4" bedeutet, dass es sich um das Nutzsignal-Bit "0" handelt, "+4" bedeutet Bit "1". Hätte der verwendete Code die Länge von 128 bei der Kodierung gehabt, dürften nur die zwei Werte "-128" und "+128" als Ergebnis der skalaren Dekodierung auftreten. In diesem Fall wäre der Prozessgewinn auch 128 gewesen!
Daraus ergibt sich die wichtige Konsequenz:
|
"Je länger der Code ist, desto größer ist die Bandspreizung und der Prozessgewinn!" |
Der Prozessgewinn hat in einem CDMA-System eine besondere Bedeutung. Man muss nämlich Nutzsignale, die einen größeren Spreizfaktor (SF) verwenden und somit auch eine geringere Datenrate haben, mit weniger Leistung über die Antenne übertragen als Signale mit hoher Datenrate. Grund dafür ist, dass Signale mit größerem Spreizfaktor auch einen größeren Prozessgewinn haben, da durch die Dekodierung das Signal "mathematisch" durch den Spreizfaktor "verstärkt" wird. So hat das ursprüngliche Nutzsignale die diskreten Werte "-1" und "+1". Bei Verwendung des Spreizfaktors 4 hat das dekodierte Signal bereits die "verstärkten" Werte "-4" bzw. "+4", bei einem Spreizfaktor 128 wären die dekodierten Werte bereits bei "-128" oder "+128".
Wie weiß man aber, welchen Spreizfaktor man verwenden muss bzw. aus wie vielen Chips das Codebitmuster bestehen muss? Dazu kann man sich strikt an folgende Faustformel halten:
|
Downlink |
Nutzsignalrate * Spreizfaktor = 7,68Mchip/s |
|
Uplink |
Nutzsignalrate * Spreizfaktor = 3,84Mchip/s |
Der Unterschied zwischen Uplink und Downlink ergibt sich durch die verschiedene Signalaufbereitung für beide Übertragungsrichtungen. Im Downlink wird das Übertragungssignal auf die 2 Kanäle (real (cos) und imaginär (sin)), die durch die 4PSK-Modulation entstehen, aufgeteilt, sodass sich z.B. ein 30kbit/s Datenstrom auf 2 mal 15kbit/s Datenströme aufteilt. Man kann jetzt, verglichen mit 30kbit/s, für 15kbit/s einen doppelt so langen Code verwenden kann --> Im Downlink wird für die gleiche Datenrate ein doppelt so großer Spreizfaktor verwendet als im Uplink! Die Tabelle 2 unten zeigt für den UTRA-FDD-Betrieb, welche kanalkodierte Datenraten für einen Funkkanal im Up- und Downlink verwendet werden können. Im UTRA-TDD-Betrieb werden nur die Spreizfaktoren 1, 2, 4, 8 und 16 verwendet.
| Datenrate - kanalkodiert | Uplink | Downlink |
| 15kbit/s | 256 | 512 |
| 30kbit/s | 128 | 256 |
| 60kbit/s | 64 | 128 |
| 120kbit/s | 32 | 64 |
| 240kbit/s | 16 | 32 |
| 480kbit/s | 8 | 16 |
| 960kbit/s | 4 | 8 |
| 1920kbit/s | - nicht verfügbar - | 4 |
Dabei ist zu berücksichtigen, dass das Nutzsignal bereits kanalkodiert ist. Bei der Kanalkodierung werden Zusatzinformationen für die Fehlerbehebung dem Teilnehmersignal zugesetzt, damit der Funkempfänger die Fehler korrigieren kann, die bei einer Funkübertragung im allgemeinen immer auftreten. Der Funkkanal ist ein sehr schlechtes und fehlerbehaftetes Übertragungsmedium! Erst durch Kanalkodierung werden Daten sicher übertragen.
|
Nettorate
|
Nutzsignalrate | Spreizfaktor | Übertragungsrate |
| Sprache 12,2kbit/s |
30kbit/s
|
128
|
3,84Mchip/s
|
| Daten 64kbit/s |
240kbit/s
|
16
|
3,84Mchip/s
|
| Daten 128kbit/s |
480kbit/s
|
8
|
3,84Mchip/s
|
| Daten 144kbit/s |
480kbit/s
|
8
|
3,84Mchip/s
|
| Daten 384kbit/s |
960kbit/s
|
4
|
3,84Mchip/s
|
Mit Hilfe der Faustformel kann man also sofort auf den richtigen Spreizfaktor bei gegebener Nutzsignalrate ermitteln. Da wie bereits erwähnt der Prozessgewinn linear mit dem Spreizfaktor steigt, benötigen "langsamere" Signale weniger Sendeleistung als "schnellere" Signale, da sie einen höheren Spreizfaktor benötigen , um die UMTS-Chiprate von 3,84Mchip/s im Uplink (im Downlink sind es durch Parallelisierung des Datenstroms 7,68Mchip/s) zu erreichen, als die "schnelleren" Signale. Und ein höherer Spreizfaktor bedeutet aber gleichzeitig auch einen größeren Prozessgewinn - also Signalanhub - nach der Dekodierung vom CDMA-Signal zum Nutzsignal.
Das erlaubt dem Netzbetreiber zum Beispiel, dass ein weit entfernter Mobilteilnehmer, dessen Handy die Verluste durch seine große Entfernung nicht mehr durch einen Leistungsanhub kompensieren kann und dadurch eine große Signalfehlerrate mit sich bringt, bei UMTS die Möglichkeit hat die Kommunikation trotzdem zu Verbessern indem er seine Datenrate reduziert. Denn bei reduzierter Datenrate muss ein größerer Spreizfaktor verwendet werden, der zugleich auch einen größeren Prozessgewinn bedingt. Das was die Sendeelektronik durch Anhebung der Sendeleistung nicht mehr zuwege gebracht hat, kann bei CDMA-Systemen durch Reduktion der Datenrate erreicht werden, da der Empfänger durch den höheren Spreizfaktor eine zusätzliche Signalanhebung erfährt. Wurde z.B. vor der Datenreduktion der Spreizfaktor 64 verwendet und danach durch die Datenreduktion auf den Spreizfaktor 128 umgestellt, so hat sich der Signalpegel im Decoder des Empfängers um den Wert 2 vergrößert. Durch diesen Signalanhub sinkt auch wieder die Fehlerrate. Dies ist ein dynamischer Prozess, um eine Kommunikation störsicher zu machen, der bei GSM nicht durchführbar ist.
Woher aber bekommt man nun den richtigen und vor allem orthogonalen Code? Muss man diesen immer durch umständliches Experimentieren eruieren? Nein! UMTS verwendet eine Codeklasse, die sich aus einem Codebaum ableiten lässt. Um diesen Codebaum zu generieren, betrachtet man jeweils einen Codepunkt (siehe Abbildung unten). Jeder Codepunkt spaltet sich nach rechts auf zwei weitere Codepunkte auf. Wenn der linke Codepunkt dabei ein beliebiges Bitmuster "X" hat, so bekommt man die rechten Bitmuster folgendermaßen: Oben und Unten schreibt man das gleiche Bitmuster "X" an, oben wiederholt man das gleiche Bitmuster (also "X,X"), unten wiederholt man ebenso das Bitmuster aber mit umgekehrten Vorzeichen (also "X,-X").
Der Codebaum startet dabei immer mit dem Wert "1" am links äußersten Punkt. Die Codes werden von links nach rechts in verschiedenen Ebenen angeschrieben: C1, C2, C4, C8, ..., C512. Für den FDD-Modus von UMTS (Frequency Division Duplex) werden die Spreizfaktoren 4 bis 512 verwendet (im Uplink nur von 4 bis 256). Die erste Indexzahl gibt die Codelänge und damit auch den Spreizfaktor bzw. den Prozessgewinn an, die zweite Indexzahl wird immer von oben nach unten durchgezählt.

Wie kann man nun bei einem bereits vergebenen Code festgestellt werden, welcher Code orthogonal ist und noch vergeben werden darf? In der Abbildung unten wurde der Code C(4,2) bereits vergeben. Alle Codes, die sich von diesem Code nach rechts ableiten lassen (in der blauen Masche), scheiden aus - also C(8,3), C(8,4), C(16,5), C(16,6), C(16,7), C(16,8), usw. Auch alle Codes die sich auf dem Weg (blau eingezeichnet) nach links zur Wurzel (Code C(1,1)) liegen scheiden aus - also C(2,1) und C(1,1).

Übringens können jederzeit auch Codes unterschiedlicher Länge vergeben werden. Nehmen wir als Beispiel die zwei Codes C4,4 und C8,3, um zu überprüfen, ob diese zwei Codes orthogonal sind, was sie laut dem Codebaum sein sollten, oder nicht.
|
|
--> |
|
= | 1-1+1-1 = 0 | |
|
|
= | 1-1+1-1 = 0 |
Den längeren Code muss man entsprechend dem kürzeren Code, hier von 8 auf 2 mal 4, zerlegen und zwei skalare Produkte berechnen. Kommt bei beiden Berechnungen Null heraus, so weiß man, dass die beiden Codes orthogonal zueinander sind.
Wichtige Schlussfolgerung aus dem bereits Kennengelernten ist, dass bei WCDMA und damit auch bei UMTS die Datenrate sich schnell ändern lässt, indem dem Teilnehmer ein neuer Code zugewiesen wird. Wird einem Teilnehmer, der einen Spreizfaktor 4 verwendet ein neuer Code mit Spreizfaktor 32 zugewiesen, so sinkt entsprechend der oben aufgestellten Formel seine Datenrate um den Faktor 8 (32:4=8). Bei UMTS lässt sich die Datenrate alle 10ms auf einen neuen Wert anpassen, wodurch die Datenrate sich sehr dynamisch an die momentane Netzkapazität bzw. -erfordernisse anpassen lässt.
Der orthogonale Channelizationcode, der oben beschrieben wurde, hat einen entscheidenden Nachteil - er versagt nämlich komplett, wenn die kodierten Signale zueinander nicht synchron sind. Deswegen wird zusätzlich noch eine weitere Codeklasse verwendet, nämlich der Scramblingcode. Nähers dazu siehe die Seite: >Scramblingcode<.