什么是碼分多址
碼分多址:CDMA允許多個用戶同時、在同一頻率上傳輸數據。它通過給每個用戶分配唯一的、相互正交的二進制序列來實現區分。用戶的數據比特被這個碼片序列擴展成一個高速率的信號,然后在接收端通過相同的碼片序列進行相關運算來回復原數據
關鍵概念
- 比特:用戶要發送的原始數據(0/1)
- 碼片:組成碼片序列的單個二進制元素(通常+1和-1表示)
- 碼片序列:分配給用戶的唯一二進制序列。它的長度(碼片速率)遠高于原始數據比特的速率(比特速率)。碼片速率/比特速率=擴頻因子碼片速率/比特速率=擴頻因子碼片速率/比特速率=擴頻因子
- 正交性:兩個碼片序列A和B正交,當且僅當它們的歸一化內積為0:(A?B)/N=0(A \cdot B)/N=0(A?B)/N=0,其中N為序列長度
- 擴頻:用碼片序列調制數據比特的過程,將窄帶信號轉換為寬帶信號
- 解擴/相關:接收端用發送端相同的碼片序列與接收到的混合信號進行內積運算,回復原始數據比特的過程
CDMA 完整流程
-
分配碼片序列
- 在通信開始前,基站為每個需要同時通信的用戶分配唯一的、預先定義好的、相互正交的二進制序列
-
發送端數據處理
- 數據比特準備:用戶準備好要發送的原始數據比特
- 比特到符號的映射(可選):為了簡化處理,通常將比特
0
映射為符號-1
,將比特1
映射為+1
,我們記這個符號為D
(D = -1
或D = +1
) - 擴頻
- 用戶使用分配給自己的碼片序列
C = [c1, c2, c3, ..., cN]
(其中每個ci
是+1
或-1
)對數據符號D
進行調制 - 將碼片序列
C
乘以數據符號D
- 生成一個擴展后的信號序列S=D?C=[D?c1,D?c2,D?c3,...,D?cN]S=D * C = [D*c1, D*c2, D*c3, ..., D*cN]S=D?C=[D?c1,D?c2,D?c3,...,D?cN]
- 如果
D = +1
則S
就是C
本身(原碼),如果D = -1
則S
就是C
取反(反碼) - 帶寬擴展:原始數據比特
D
的持續時間被擴展成N
個碼片的持續時間。信號帶寬被擴展了N倍(擴頻因子為N
)
- 用戶使用分配給自己的碼片序列
-
空中接口(混合信號)
- 所有用戶的擴展后信號序列
S_user1, S_user2, ..., S_userK
,同時在同一個無線信道上傳輸 - 在接收天線處,接收到的信號
R
是所有這些用戶擴展信號的線性疊加,再加上噪聲Noise
,即:Suser1+Suser2+...+SuserK+NoiseS_user1 + S_user2 + ... + S_userK + NoiseSu?ser1+Su?ser2+...+Su?serK+Noise
- 所有用戶的擴展后信號序列
-
接收端解碼
- 設接收端想要回復User X的數據
- 解擴/相關
- 接收端用接收到的混合信號
R
與User X的碼片序列cx
進行逐碼片相乘 - 對相乘后的結果進行求和,并將求和結果除以碼片序列長度
N
(歸一化) - 即:Result=(R?Cx)/N=([R1,R2,...,RN]?[Cx1,Cx2,...,CxN])/N=(R1?Cx1+R2?Cx2+...+RN?CxN)/NResult = (R \cdot Cx) / N = ([R1, R2, ..., RN] \cdot [Cx1, Cx2, ..., CxN]) / N = (R1*Cx1 + R2*Cx2 + ... + RN*CxN) / NResult=(R?Cx)/N=([R1,R2,...,RN]?[Cx1,Cx2,...,CxN])/N=(R1?Cx1+R2?Cx2+...+RN?CxN)/N
- 接收端用接收到的混合信號
-
解釋結果:
- 由于碼片序列的正交性,其他用戶的信號(
S_userY, Y≠X
)與Cx
的相關結果理論上接近于 0(理想正交時為 0),它們的影響被極大地抑制了。 - 噪聲的影響會被平均掉一部分(處理增益)。
- 目標用戶 User X 的信號
Sx = Dx * Cx
與Cx
的相關結果為:
(Sx ? Cx) / N = ((Dx * Cx) ? Cx) / N = Dx * (Cx ? Cx) / N = Dx * (N) / N = Dx
- 因為
(Cx ? Cx) = c1*c1 + c2*c2 + ... + cN*cN = (+1或-1的平方和) = N
。
- 因為
- 因此,最終的相關結果
Result ≈ Dx
(目標用戶發送的原始符號,+1 或 -1)。
- 由于碼片序列的正交性,其他用戶的信號(
-
符號到比特映射
- 如果
Result > 0
(接近+1
),則判決為比特1
。 - 如果
Result < 0
(接近-1
),則判決為比特0
。
- 如果
具體舉例
場景: 兩個用戶 Alice (A
) 和 Bob (B
) 要同時向基站發送數據。基站使用長度為 4 的 Walsh 碼。
分配碼片序列:
- Alice (
A
) 的碼片序列:Ca = [+1, +1, +1, +1]
- Bob (
B
) 的碼片序列:Cb = [+1, -1, +1, -1]
- 驗證正交性:
(Ca ? Cb) / 4 = ((+1)(+1) + (+1)(-1) + (+1)(+1) + (+1)(-1)) / 4 = (1 -1 +1 -1)/4 = 0/4 = 0
。完美正交。
發送數據:
- Alice 要發送比特
1
:- 映射為符號
Da = +1
。 - 擴頻:
Sa = Da * Ca = (+1) * [+1, +1, +1, +1] = [+1, +1, +1, +1]
- 映射為符號
- Bob 要發送比特
0
:- 映射為符號
Db = -1
。 - 擴頻:
Sb = Db * Cb = (-1) * [+1, -1, +1, -1] = [-1, +1, -1, +1]
- 映射為符號
空中混合信號 R:
R = Sa + Sb = [+1, +1, +1, +1] + [-1, +1, -1, +1] = [ (1-1), (1+1), (1-1), (1+1) ] = [0, +2, 0, +2]
基站接收并解碼:
-
解碼 Alice 的數據 (使用
Ca = [+1, +1, +1, +1]
):- 逐碼片相乘:
R * Ca = [0*+1, +2*+1, 0*+1, +2*+1] = [0, +2, 0, +2]
- 求和:
0 + 2 + 0 + 2 = +4
- 歸一化:
Result_A = +4 / 4 = +1
- 判決:
+1 > 0
=> 比特1
(Alice 發送的數據正確恢復)。
- 逐碼片相乘:
-
解碼 Bob 的數據 (使用
Cb = [+1, -1, +1, -1]
):- 逐碼片相乘:
R * Cb = [0*+1, +2*(-1), 0*+1, +2*(-1)] = [0, -2, 0, -2]
- 求和:
0 + (-2) + 0 + (-2) = -4
- 歸一化:
Result_B = -4 / 4 = -1
- 判決:
-1 < 0
=> 比特0
(Bob 發送的數據正確恢復)。
- 逐碼片相乘:
CDMA線代推導
假設有k
個用戶共享信道,碼片序列長度為m
(要求k≤mk\le mk≤m,以確保正交向量組存在),碼向量c1,c2,…,ck\mathbf{c}_1, \mathbf{c}_2, \dots, \mathbf{c}_kc1?,c2?,…,ck?構成正交向量組,且假設已歸一化,即(∥ci∥2=1(\|\mathbf{c}_i\|^2=1(∥ci?∥2=1,非歸一化情況將在后面討論)
-
碼序列的正交條件
- 碼向量滿足
ci?cj={1if?i=j0if?i≠j \mathbf{c}_i \cdot \mathbf{c}_j = \begin{cases} 1 & \text{if } i = j \\ 0 & \text{if } i \neq j \end{cases} ci??cj?={10?if?i=jif?i=j?
這等價于碼序列矩陣 (C=[c1,c2,…,ck])(C = [\mathbf{c}_1, \mathbf{c}_2, \dots, \mathbf{c}_k])(C=[c1?,c2?,…,ck?])的列向量組是標準正交向量組,即 (CTC=Ik)(C^T C = I_k)(CTC=Ik?)((k×k)(k \times k)(k×k) 單位矩陣)
- 碼向量滿足
-
信號生成
- 每個用戶 發送數據did_idi?(例如二進制系統的di=±1d_i = \pm 1di?=±1)
- 發送信號是碼向量的線性組合:
s=∑i=1kdici \mathbf{s} = \sum_{i=1}^k d_i \mathbf{c}_i s=i=1∑k?di?ci?
這里,s∈Rm\mathbf{s} \in \mathbb{R}^ms∈Rm 是疊加后的信號向量
-
接收信號模型
- 接收端收到信號 r\mathbf{r}r(忽略噪聲):
r=s=∑i=1kdici \mathbf{r} = \mathbf{s} = \sum_{i=1}^k d_i \mathbf{c}_i r=s=i=1∑k?di?ci?
實際中包括噪聲 n\mathbf{n}n,但為簡化,假設 n=0\mathbf{n} = \mathbf{0}n=0。
- 接收端收到信號 r\mathbf{r}r(忽略噪聲):
-
信號分離(關鍵步驟!!)
- 接收端計算 r\mathbf{r}r 與用戶
j
的碼向量 cj\mathbf{c}_jcj? 的內積:
yj=r?cj=(∑i=1kdici)?cj y_j = \mathbf{r} \cdot \mathbf{c}_j = \left( \sum_{i=1}^k d_i \mathbf{c}_i \right) \cdot \mathbf{c}_j yj?=r?cj?=(i=1∑k?di?ci?)?cj? - 由內積的線性性質
yj=∑i=1kdi(ci?cj) y_j = \sum_{i=1}^k d_i (\mathbf{c}_i \cdot \mathbf{c}_j) yj?=i=1∑k?di?(ci??cj?) - 由正交性,ci?cj=0\mathbf{c}_i \cdot \mathbf{c}_j = 0ci??cj?=0 當 i≠ji \neq ji=j,且 cj?cj=1\mathbf{c}_j \cdot \mathbf{c}_j = 1cj??cj?=1
yj=dj(cj?cj)+∑i≠jdi(ci?cj)=dj?1+∑i≠jdi?0=dj y_j = d_j (\mathbf{c}_j \cdot \mathbf{c}_j) + \sum_{i \neq j} d_i (\mathbf{c}_i \cdot \mathbf{c}_j) = d_j \cdot 1 + \sum_{i \neq j} d_i \cdot 0 = d_j yj?=dj?(cj??cj?)+i=j∑?di?(ci??cj?)=dj??1+i=j∑?di??0=dj?
因此,接收端完美提取用戶j
的數據:dj=yjd_j = y_jdj?=yj?。
- 接收端計算 r\mathbf{r}r 與用戶
擴展到非歸一化碼序列
實際系統中,碼序列可能未歸一化(例如,使用二進制序列 {±1}\{\pm 1\}{±1})。設 ∥cj∥2=cj?cj≠1\|\mathbf{c}_j\|^2 = \mathbf{c}_j \cdot \mathbf{c}_j \neq 1∥cj?∥2=cj??cj?=1,但正交性仍保持:ci?cj=0\mathbf{c}_i \cdot \mathbf{c}_j = 0ci??cj?=0(當 i≠ji \neq ji=j)。
- 發送信號仍為 r=∑i=1kdici\mathbf{r} = \sum_{i=1}^k d_i \mathbf{c}_ir=∑i=1k?di?ci?。
- 分離時:
yj=r?cj=dj(cj?cj)+∑i≠jdi(ci?cj)=dj∥cj∥2 y_j = \mathbf{r} \cdot \mathbf{c}_j = d_j (\mathbf{c}_j \cdot \mathbf{c}_j) + \sum_{i \neq j} d_i (\mathbf{c}_i \cdot \mathbf{c}_j) = d_j \|\mathbf{c}_j\|^2 yj?=r?cj?=dj?(cj??cj?)+i=j∑?di?(ci??cj?)=dj?∥cj?∥2 - 因此,數據恢復為:
dj=yj∥cj∥2 d_j = \frac{y_j}{\|\mathbf{c}_j\|^2} dj?=∥cj?∥2yj??
這里,∥cj∥2\|\mathbf{c}_j\|^2∥cj?∥2 是碼向量的范數平方(能量),在接收端已知。