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

什么是码分多址

码分多址: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 是码向量的范数平方(能量),在接收端已知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91836.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac 配置svn

1.查看brew的版本&#xff1a;brew install subversion2.安装brew命令&#xff1a;bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"3.把路径添加到path环境变量&#xff1a;echo export PATH"/opt/homebrew/b…

使用 .NET Core 的原始 WebSocket

在 Web 开发中&#xff0c;后端存在一些值得注意的通信协议&#xff0c;用于将更改通知给已连接的客户端。所有这些协议都用于处理同一件事。但鲜为人知的协议很少&#xff0c;鲜为人知的协议也很少。今天&#xff0c;将讨论 WebSocket&#xff0c;它在开发中使用最少&#xff…

编程实现Word自动排版:从理论到实践的全面指南

在现代办公环境中&#xff0c;文档排版是一项常见但耗时的工作。特别是对于需要处理大量文档的专业人士来说&#xff0c;手动排版不仅费时费力&#xff0c;还容易出现不一致的问题。本文将深入探讨如何通过编程方式实现Word文档的自动排版&#xff0c;从理论基础到实际应用&…

力扣经典算法篇-25-删除链表的倒数第 N 个结点(计算链表的长度,利用栈先进后出特性,双指针法)

1、题干 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a;输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&…

VIT速览

当我们取到一张图片&#xff0c;我们会把它划分为一个个patch&#xff0c;如上图把一张图片划分为了9个patch&#xff0c;然后通过一个embedding把他们转换成一个个token&#xff0c;每个patch对应一个token&#xff0c;然后在输入到transformer encoder之前还要经过一个class …

【服务器与部署 14】消息队列部署:RabbitMQ、Kafka生产环境搭建指南

【服务器与部署 14】消息队列部署&#xff1a;RabbitMQ、Kafka生产环境搭建指南 关键词&#xff1a;消息队列、RabbitMQ集群、Kafka集群、消息中间件、异步通信、微服务架构、高可用部署、消息持久化、生产环境配置、分布式系统 摘要&#xff1a;本文从实际业务场景出发&#x…

LeetCode中等题--167.两数之和II-输入有序数组

1. 题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 <…

【C# in .NET】19. 探秘抽象类:具体实现与抽象契约的桥梁

探秘抽象类:具体实现与抽象契约的桥梁 在.NET类型系统中,抽象类是连接具体实现与抽象契约的关键桥梁,它既具备普通类的状态承载能力,又拥有类似接口的行为约束特性。本文将从 IL 代码结构、CLR 类型加载机制、方法调度逻辑三个维度,全面揭示抽象类的底层工作原理,通过与…

Apache RocketMQ + “太乙” = 开源贡献新体验

Apache RocketMQ 是 Apache 基金会托管的顶级项目&#xff0c;自 2012 年诞生于阿里巴巴&#xff0c;服务于淘宝等核心交易系统&#xff0c;历经多次双十一万亿级数据洪峰稳定性验证&#xff0c;至今已有十余年发展历程。RocketMQ 致力于构建低延迟、高并发、高可用、高可靠的分…

永磁同步电机控制算法--弱磁控制(变交轴CCR-VQV)

一、原理介绍CCR-FQV弱磁控制不能较好的利用逆变器的直流侧电压&#xff0c;造成电机的调速范围窄、效率低和带载能力差。为了解决CCR-FQV弱磁控制存在的缺陷&#xff0c;可以在电机运行过程中根据工况的不同实时的改变交轴电压给定uq的值&#xff0c;实施 CCR-VQV弱磁控制。…

达梦数据守护集群搭建(1主1实时备库1同步备库1异步备库)

目录 1 环境信息 1.1 目录信息 1.2 其他环境信息 2 环境准备 2.1 新建dmdba用户 2.2 关闭防火墙 2.3 关闭Selinux 2.4 关闭numa和透明大页 2.5 修改文件打开最大数 2.6 修改磁盘调度 2.7 修改cpufreq模式 2.8 信号量修改 2.9 修改sysctl.conf 2.10 修改 /etc/sy…

电感与电容充、放电极性判断和电感选型

目录 一、电感 二、电容 三、电感选型 一、电感 充电&#xff1a;左右-为例 放电&#xff1a;极性相反&#xff0c;左-右 二、电容 充电&#xff1a;左右-为例 放电&#xff1a;左右-&#xff08;与充电极性一致&#xff09; 三、电感选型 主要考虑额定电流和饱和电流。…

新建模范式Mamba——“Selectivity is All You Need?”

目录 一、快速走进和理解Mamba建模架构 &#xff08;一&#xff09;从Transformer的统治地位谈起 &#xff08;二&#xff09;另一条道路&#xff1a;结构化状态空间模型&#xff08;SSM&#xff09; &#xff08;三&#xff09;Mamba 的核心创新&#xff1a;Selective SSM…

Python实现Word文档中图片的自动提取与加载:从理论到实践

在现代办公和文档处理中&#xff0c;Word文档已经成为最常用的文件格式之一。这些文档不仅包含文本内容&#xff0c;还经常嵌入各种图片、图表和其他媒体元素。在许多场景下&#xff0c;我们需要从Word文档中提取这些图片&#xff0c;例如进行内容分析、创建图像数据库、或者在…

Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析

Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析 在分布式系统中&#xff0c;消息队列承担着异步解耦、流量削峰、削峰填谷等重要职责。为了保证应用的数据一致性和业务可靠性&#xff0c;各大消息中间件都提供了多种高可靠消息保障机制。本文以Kafka、RabbitMQ和Rock…

四足机器人远程视频与互动控制的全链路方案

随着机器人行业的快速发展&#xff0c;特别是四足仿生机器人在巡检、探测、安防、救援等复杂环境中的广泛部署&#xff0c;如何实现高质量、低延迟的远程视频监控与人机互动控制&#xff0c;已经成为制约其应用落地与规模化推广的关键技术难题。 四足机器人常常面临以下挑战&a…

把leetcode官方题解自己简单解释一下

自用自用&#xff01;&#xff01;&#xff01;leetcode hot 100

hive的sql优化思路-明白底层运行逻辑

一、首先要明白底层map、shuffle、reduce的顺序之中服务器hdfs数据文件在内存与存储之中是怎么演变的&#xff0c;因为hive的性能瓶颈基本在内存&#xff0c;具体参考以下他人优秀文章&#xff1a; 1.Hive SQL底层执行过程详细剖析 2.Hive JOIN性能调优 二是要明白hive对应的…

驱动隔离芯片在现代工业上的卓越贡献

在智能时代的精密齿轮中&#xff0c;驱动隔离芯片如同一位精通跨界语言的“安全架构师”&#xff0c;在高压与低压、危险与精密的交界处重构秩序。它不生产数据&#xff0c;却是信息的守门人&#xff1b;不创造能量&#xff0c;却是电流的驯兽师。从钢铁丛林到生命方舟&#xf…

使用MATLAB探索圆周率π的奇妙计算之旅

在数学的璀璨星河中,圆周率π无疑是最耀眼的明星之一。这个看似简单的无理数蕴含着宇宙的奥秘,吸引着无数科学家和数学爱好者探索其计算方法。今天,我们将使用MATLAB这一强大的科学计算工具,踏上π的计算之旅,体验从古典算法到现代技巧的奇妙过程。 1. 蒙特卡洛法:随机的…