用线性代数推导码分多址(CDMA)

发布于:2025-07-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

什么是码分多址

码分多址:CDMA允许多个用户同时、在同一频率上传输数据。它通过给每个用户分配唯一的、相互正交的二进制序列来实现区分。用户的数据比特被这个码片序列扩展成一个高速率的信号,然后在接收端通过相同的码片序列进行相关运算来回复原数据

关键概念

  • 比特:用户要发送的原始数据(0/1)
  • 码片:组成码片序列的单个二进制元素(通常+1和-1表示)
  • 码片序列:分配给用户的唯一二进制序列。它的长度(码片速率)远高于原始数据比特的速率(比特速率)。码片速率/比特速率=扩频因子码片速率/比特速率=扩频因子码片速率/比特速率=扩频因子
  • 正交性:两个码片序列A和B正交,当且仅当它们的归一化内积为0:(A⋅B)/N=0(A \cdot B)/N=0(AB)/N=0,其中N为序列长度
  • 扩频:用码片序列调制数据比特的过程,将窄带信号转换为宽带信号
  • 解扩/相关:接收端用发送端相同的码片序列与接收到的混合信号进行内积运算,回复原始数据比特的过程

CDMA 完整流程

  1. 分配码片序列

    • 在通信开始前,基站为每个需要同时通信的用户分配唯一的、预先定义好的、相互正交的二进制序列
  2. 发送端数据处理

    • 数据比特准备:用户准备好要发送的原始数据比特
    • 比特到符号的映射(可选):为了简化处理,通常将比特0映射为符号-1,将比特1映射为+1,我们记这个符号为D(D = -1D = +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=DC=[Dc1,Dc2,Dc3,...,DcN]
      • 如果D = +1S就是C本身(原码),如果D = -1S就是C取反(反码)
      • 带宽扩展:原始数据比特D的持续时间被扩展成N个码片的持续时间。信号带宽被扩展了N倍(扩频因子为N
  3. 空中接口(混合信号)

    • 所有用户的扩展后信号序列 S_user1, S_user2, ..., S_userK,同时在同一个无线信道上传输
    • 在接收天线处,接收到的信号R是所有这些用户扩展信号的线性叠加,再加上噪声Noise,即:Suser1+Suser2+...+SuserK+NoiseS_user1 + S_user2 + ... + S_userK + NoiseSuser1+Suser2+...+SuserK+Noise
  4. 接收端解码

    • 设接收端想要回复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=(RCx)/N=([R1,R2,...,RN][Cx1,Cx2,...,CxN])/N=(R1Cx1+R2Cx2+...+RNCxN)/N
  5. 解释结果:

    • 由于码片序列的正交性,其他用户的信号(S_userY, Y≠X)与 Cx 的相关结果理论上接近于 0(理想正交时为 0),它们的影响被极大地抑制了。
    • 噪声的影响会被平均掉一部分(处理增益)。
    • 目标用户 User X 的信号 Sx = Dx * CxCx 的相关结果为:
      (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)。
  6. 符号到比特映射

    • 如果 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。完美正交。

发送数据:

  1. Alice 要发送比特 1
    • 映射为符号 Da = +1
    • 扩频:Sa = Da * Ca = (+1) * [+1, +1, +1, +1] = [+1, +1, +1, +1]
  2. 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]):

    1. 逐码片相乘:R * Ca = [0*+1, +2*+1, 0*+1, +2*+1] = [0, +2, 0, +2]
    2. 求和:0 + 2 + 0 + 2 = +4
    3. 归一化:Result_A = +4 / 4 = +1
    4. 判决:+1 > 0 => 比特 1 (Alice 发送的数据正确恢复)。
  • 解码 Bob 的数据 (使用 Cb = [+1, -1, +1, -1]):

    1. 逐码片相乘:R * Cb = [0*+1, +2*(-1), 0*+1, +2*(-1)] = [0, -2, 0, -2]
    2. 求和:0 + (-2) + 0 + (-2) = -4
    3. 归一化:Result_B = -4 / 4 = -1
    4. 判决:-1 < 0 => 比特 0 (Bob 发送的数据正确恢复)。

CDMA线代推导

假设有k个用户共享信道,码片序列长度为m(要求k≤mk\le mkm,以确保正交向量组存在),码向量c1,c2,…,ck\mathbf{c}_1, \mathbf{c}_2, \dots, \mathbf{c}_kc1,c2,,ck构成正交向量组,且假设已归一化,即(∥ci∥2=1(\|\mathbf{c}_i\|^2=1(ci2=1,非归一化情况将在后面讨论)

  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} cicj={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) 单位矩阵)
  2. 信号生成

    • 每个用户 发送数据did_idi(例如二进制系统的di=±1d_i = \pm 1di=±1
    • 发送信号是码向量的线性组合:
      s=∑i=1kdici \mathbf{s} = \sum_{i=1}^k d_i \mathbf{c}_i s=i=1kdici
      这里,s∈Rm\mathbf{s} \in \mathbb{R}^msRm 是叠加后的信号向量
  3. 接收信号模型

    • 接收端收到信号 r\mathbf{r}r(忽略噪声):
      r=s=∑i=1kdici \mathbf{r} = \mathbf{s} = \sum_{i=1}^k d_i \mathbf{c}_i r=s=i=1kdici
      实际中包括噪声 n\mathbf{n}n,但为简化,假设 n=0\mathbf{n} = \mathbf{0}n=0
  4. 信号分离(关键步骤!!)

    • 接收端计算 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=rcj=(i=1kdici)cj
    • 由内积的线性性质
      yj=∑i=1kdi(ci⋅cj) y_j = \sum_{i=1}^k d_i (\mathbf{c}_i \cdot \mathbf{c}_j) yj=i=1kdi(cicj)
    • 由正交性,ci⋅cj=0\mathbf{c}_i \cdot \mathbf{c}_j = 0cicj=0i≠ji \neq ji=j,且 cj⋅cj=1\mathbf{c}_j \cdot \mathbf{c}_j = 1cjcj=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(cjcj)+i=jdi(cicj)=dj1+i=jdi0=dj
      因此,接收端完美提取用户 j 的数据:dj=yjd_j = y_jdj=yj

扩展到非归一化码序列

实际系统中,码序列可能未归一化(例如,使用二进制序列 {±1}\{\pm 1\}{±1})。设 ∥cj∥2=cj⋅cj≠1\|\mathbf{c}_j\|^2 = \mathbf{c}_j \cdot \mathbf{c}_j \neq 1cj2=cjcj=1,但正交性仍保持:ci⋅cj=0\mathbf{c}_i \cdot \mathbf{c}_j = 0cicj=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=rcj=dj(cjcj)+i=jdi(cicj)=djcj2
  • 因此,数据恢复为:
    dj=yj∥cj∥2 d_j = \frac{y_j}{\|\mathbf{c}_j\|^2} dj=cj2yj
    这里,∥cj∥2\|\mathbf{c}_j\|^2cj2 是码向量的范数平方(能量),在接收端已知。

网站公告

今日签到

点亮在社区的每一天
去签到