Code Division Multiple Access (CDMA) ist ein Verfahren, dass mehrere verschiedene Signale auf einem Bitkanal ermöglicht. Dazu werden die einzelnen Signale mit einem jeweils eigenen Spreizcode verrechnet. Angewendet wird dieses Verfahren z.B. im Universal Mobile Telecommunications System (UMTS).
Solche Spreizcodes müssen so aufgebaut sein, dass das jeweils gewünschte Signal problemlos aus dem Signalgemisch herausgefiltert werden kann. Zunächst muss der als binäres Muster dargestellte Spreizcode in ein No-Return-to-Zero-Signal (NRZ-Signal) umgewandelt werden – bei UMTS bedeutet dies, dass das Bit 1 mit dem Symbol -1 und das Bit 0 mit dem Symbol 1 dargestellt wird. Außerdem müssen alle verwendeten Spreizcodes unabhängig voneinander sein, also orthogonal. Diese Eigenschaft kann sehr leicht festgestellt werden, wenn man die Bitmuster der Spreizcodes als Vektoren betrachtet, denn diese sind genau dann orthogonal zueinander, wenn ihr Skalarprodukt 0 ergibt.
Die Orthogonalität ermöglicht nun die gemeinsame Übertragung der Datensignale, die ebenso als NRZ-Signal vorliegen müssen. Überträgt man beispielsweise (Signal 1) * (Code 1) + (Signal 2) * (Code 2), kann der Empfänger das für ihn bestimmte Signal durch Multiplikation mit dem passenden Code dekodieren. Für Signal 1 ergibt sich also: (Signal 1) * (Code 1) * (Code 1) + (Signal 2) * (Code 2) * (Code 1) = (Signal 1) * (Code 1) * (Code 1) + (Signal 2) * 0, d.h. Signal 1 kann eindeutig ermittelt werden.
Beispiel:
Zunächst müssen zwei als NRZ-Signal vorliegende Spreizcodes gefunden werden, die orthogonal sind. Für dieses Beispiel sollen dies folgende Spreizcodes sein:
$Latex \vec c_1 := \begin{pmatrix} 1 \\ -1 \end{pmatrix} \ \ \ \vec c_2 := \begin{pmatrix} 1 \\ 1 \end{pmatrix}$
Die beiden Spreizcodes sind orthogonal:
$Latex {\vec c_1}\cdot{\vec c_2} = \begin{pmatrix} 1 \\ -1 \end{pmatrix} \cdot \begin{pmatrix} 1 \\ 1 \end{pmatrix} = {1}\cdot{1}+{1}\cdot({-1}) = 1+(-1) = 0$
Nun sollen die Daten (0, 1, 0, 1) und (1, 1, 1, 0) übertragen werden. Dazu werden auch diese als NRZ-Signal notiert. In Anlehnung an UMTS gilt in diesem Beispiel: 1 := -1 und 0 := 1.
$Latex \vec d_1 := \begin{pmatrix} 1 \\ -1 \\ 1 \\ -1 \end{pmatrix} \ \ \ \vec d_2 := \begin{pmatrix} -1 \\ -1 \\ -1 \\ 1 \end{pmatrix}$
Nun wird aus Daten und Codes das zu übertragende Signal konstruiert, indem die Komponenten des jeweiligen Datenvektors mit dem entsprechenden Spreizcode multipliziert werden.
$Latex \vec e_1 := \begin{pmatrix} \begin{pmatrix}c_{1 1} \\ c_{1 2}\end{pmatrix} \cdot d_{1 1} \\ \begin{pmatrix}c_{1 1} \\ c_{1 2}\end{pmatrix} \cdot d_{1 2} \\ \begin{pmatrix}c_{1 1} \\ c_{1 2}\end{pmatrix} \cdot d_{1 3} \\ \begin{pmatrix}c_{1 1} \\ c_{1 2}\end{pmatrix} \cdot d_{1 4} \end{pmatrix} = \begin{pmatrix} \begin{pmatrix}1 \\ -1\end{pmatrix} \\ \begin{pmatrix}-1 \\ 1\end{pmatrix} \\ \begin{pmatrix}1 \\ -1\end{pmatrix} \\ \begin{pmatrix}-1 \\ 1\end{pmatrix} \end{pmatrix} \ \ \ \vec e_2 := \begin{pmatrix} \begin{pmatrix}c_{2 1} \\ c_{2 2}\end{pmatrix} \cdot d_{2 1} \\ \begin{pmatrix}c_{2 1} \\ c_{2 2}\end{pmatrix} \cdot d_{2 2} \\ \begin{pmatrix}c_{2 1} \\ c_{2 2}\end{pmatrix} \cdot d_{2 3} \\ \begin{pmatrix}c_{2 1} \\ c_{2 2}\end{pmatrix} \cdot d_{2 4} \end{pmatrix} = \begin{pmatrix} \begin{pmatrix}-1 \\ -1\end{pmatrix} \\ \begin{pmatrix}-1 \\ -1\end{pmatrix} \\ \begin{pmatrix}-1 \\ -1\end{pmatrix} \\ \begin{pmatrix}1 \\ 1\end{pmatrix} \end{pmatrix}$
Da die Übertragung der beiden Signale zeitgleich stattfindet, werden diese addiert:
$Latex \vec s := \begin{pmatrix} 1 \\ -1 \\ -1 \\ 1 \\ 1 \\ -1 \\ -1 \\ 1 \end{pmatrix} + \begin{pmatrix} -1 \\ -1 \\ -1 \\ -1 \\ -1 \\ -1 \\ 1 \\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\ -2 \\ -2 \\ 0 \\ 0 \\ -2 \\ 0 \\ 2 \end{pmatrix}$
Jetzt muss das Signal auf der Gegenseite natürlich entsprechend decodiert werden. Für die Daten des Senders 1 wird dazu Code 1 verwendet.
$Latex \begin{pmatrix} \begin{pmatrix}0 \\ -2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ -1\end{pmatrix} \\ \begin{pmatrix}-2 \\ 0\end{pmatrix} \cdot \begin{pmatrix} 1 \\ -1\end{pmatrix} \\ \begin{pmatrix}0 \\ -2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ -1\end{pmatrix} \\ \begin{pmatrix}0 \\ 2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ -1\end{pmatrix} \end{pmatrix} = \begin{pmatrix} 0 + 2 \\ -2 + 0 \\ 0 + 2 \\ 0 – 2 \end{pmatrix} = \begin{pmatrix} 2 \\ -2 \\ 2 \\ -2\end{pmatrix}$
Nun werden die Werte größer 0 als 0 interpretiert und die Werte kleiner 0 als 1 (entsprechend UMTS).
Daraus ergibt sich: (0, 1, 0, 1).
Analog verfährt man für die Daten des zweiten Senders:
$Latex \begin{pmatrix} \begin{pmatrix}0 \\ -2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ 1\end{pmatrix} \\ \begin{pmatrix}-2 \\ 0\end{pmatrix} \cdot \begin{pmatrix} 1 \\ 1\end{pmatrix} \\ \begin{pmatrix}0 \\ -2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ 1\end{pmatrix} \\ \begin{pmatrix}0 \\ 2\end{pmatrix} \cdot \begin{pmatrix} 1 \\ 1\end{pmatrix} \end{pmatrix} = \begin{pmatrix} 0 – 2 \\ -2 + 0 \\ 0 – 2 \\ 0+2 \end{pmatrix} = \begin{pmatrix} -2 \\ -2 \\ -2 \\ 2\end{pmatrix}$
Also ergibt sich: (1, 1, 1, 0).