什么是码分多址
码分多址: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 + NoiseSuser1+Suser2+...+SuserK+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={10if 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∑kdici
这里,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∑kdici
实际中包括噪声 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∑kdici)⋅cj - 由内积的线性性质
yj=∑i=1kdi(ci⋅cj) y_j = \sum_{i=1}^k d_i (\mathbf{c}_i \cdot \mathbf{c}_j) yj=i=1∑kdi(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=1kdici。
- 分离时:
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 是码向量的范数平方(能量),在接收端已知。