Walsh码与m序列扩频机制:正交性边界与工程实现
简介这份文档面向通信工程、无线通信课程学习者及CDMA系统入门研究者系统梳理扩频序列中m序列与Walsh码的原理与实现。内容涵盖m序列的线性移位寄存器生成机制、周期特性与反馈系数影响Walsh码基于Hadamard矩阵的正交构造、64阶序列在前向链路中的信道分配以及Gold序列的模2加扩展思路并附有Walsh序列生成的Matlab函数代码便于读者理解矩阵排列转换与实际计算过程。资源包为1个doc文档大小约355KB内容紧凑适合作为课堂笔记或自学参考。目前已有636人学习下载读者可借此掌握扩频码的数学基础、正交性局限及多址干扰来源为后续多用户检测与系统仿真打下基础。1. 扩频序列的底层逻辑为什么正交码也消不掉干扰很多人第一次接触 CDMA都会记住一个结论Walsh 码是正交的所以多址干扰可以被彻底消除。这个结论在教科书里成立在真实系统里却会翻车。原因不复杂——正交性只在“严格同步”这个前提下成立而无线信道从来不会配合你保持同步。多径信号晚到几微秒来自邻区的信号压根不在你的时序里这些信号落到接收端时与本地 Walsh 码的相关值不再是零干扰就漏进来了。m 序列和 Walsh 码是扩频通信里两条不同的技术路线m 序列靠线性移位寄存器产生长周期伪随机序列擅长抗截获和抗窄带干扰Walsh 码靠 Hadamard 矩阵的正交行向量区分信道擅长在同一载波上并行堆叠多个用户。搞懂这两者的生成机制和正交性边界才能理解为什么实际系统里还要引入 Gold 序列、多用户检测和导频辅助估计。这份资源把 Walsh 矩阵的三种排序生成代码和 m 序列的移位寄存器结构放在一起正好是拆解这套机制的入口。2. Walsh 码的生成机制Hadamard 矩阵到三种排序的映射2.1 从 H 矩阵到 Walsh 矩阵交变次数决定行序Walsh 码的源头是 Hadamard 矩阵。一个 2^N 阶 Hadamard 矩阵 H 由 1 和 -1 构成任意两行做内积结果为零这就是正交性的数学基础。但直接拿 H 矩阵的行当扩频码有个问题行的排列顺序是固定的而实际系统需要按“交变次数”来分配信道——交变次数少的序列适合传导频和同步信息交变次数多的序列适合传业务数据因为交变越多频谱扩展越宽抗窄带干扰能力越强。所谓交变次数就是一行序列里符号从 1 跳到 -1 或反向跳变的次数。把 H 矩阵的行按交变次数从少到多重新排列就得到 Walsh 序。资源里的walshf1函数做了三件事先用hadamard(2^N)生成原始矩阵再通过 Paley 序做一次中间排列最后按 Walsh 序输出Wg矩阵。Paley 序的作用是把自然序的 Hadamard 行按二进制位反转规则重排这一步是为了让后续 Walsh 序的生成有统一的索引映射。function Xwalshf1(N) Nceil(log2(N)); Hhadamard(2^N); % Matlab 内置函数生成 Hadamard 矩阵 Hpzeros(2^N); Epzeros(2^N); Wgzeros(2^N); Egzeros(2^N); Eeye(2^N); % Paley 序排列按位反转规则重排 H 的行 for n1:2^N p0; for i1:N pbitset(p,i,bitget(n-1,N-i1)); end Hp(p1,:)H(n,:); Ep(p1,:)E(n,:); end % Walsh 序排列按交变次数规则重排 Hp 的行 for n1:2^N g0; gbitset(g,N,bitget(n-1,N)); for i2:N if (bitget(n-1,N-i1)0) gbitset(g,N-i1,bitget(g,N-i2)); else gbitset(g,N-i1,1-bitget(g,N-i2)); end end Wg(g1,:)Hp(n,:); Eg(g1,:)Ep(n,:); end XWg;这段代码的关键在第二个循环。g的每一位由前一位和当前输入位共同决定如果输入位是 0当前位等于前一位如果输入位是 1当前位等于前一位取反。这个递推规则本质上是在计算格雷码的变体而格雷码的相邻码字只差一位映射到 Walsh 序列上就表现为交变次数的有序递增。Wg矩阵的第 1 行是全 1 序列对应交变次数为 0通常分配给导频信道第 2 行是 1/-1 交替交变次数为 1分配给同步信道越往后的行交变次数越高分配给业务信道。2.2 逆 Walsh 序与变换矩阵为什么需要三种排序资源里还生成了Hm矩阵也就是逆 Walsh 序。逆 Walsh 序的交变次数从多到少排列和 Walsh 序正好相反。为什么需要这个因为在接收端做解扩时如果发射端用的是 Walsh 序接收端用逆 Walsh 序做相关相关峰的极性会翻转这可以用来区分前向链路和反向链路或者在差分编码里做相位参考。Ep、Eg、Em这三个变换矩阵记录的是行排列的映射关系。Ep把自然序的 Hadamard 矩阵映射到 Paley 序Eg把 Paley 序映射到 Walsh 序Em把 Walsh 序映射到逆 Walsh 序。这三个矩阵的乘积等于一个置换矩阵作用在单位矩阵上就得到对应的行序。在实际系统里这些变换矩阵不需要显式存储因为索引映射可以用位运算实时算出来但理解它们的层级关系有助于调试扩频解扩的索引错位问题。注意hadamard(2^N)要求阶数是 2 的幂。如果传入的 N 不是 2 的幂ceil(log2(N))会向上取整到最近的 2 的幂生成的矩阵阶数会大于请求的 N。这是 Matlab 内置函数的约束不是 Walsh 码本身的限制。2.3 64 阶 Walsh 码在 CDMA 前向链路的分配逻辑CDMA 前向链路采用 64 阶 Walsh 序列码片速率 1.2288 Mc/s。64 阶意味着有 64 个正交行向量对应 W0 到 W63 共 64 个码分信道。W0 通常分配给导频信道因为全 1 序列在接收端做相关时能提供最大的相关峰便于终端做信道估计和同步。W1 到 W7 分配给同步信道和寻呼信道交变次数较低解调门限也低。W8 到 W63 分配给业务信道每个用户占用一个 Walsh 码理论上 64 个用户可以在同一载波上同时通信而不互相干扰。但这里有个常见的误解64 阶 Walsh 码不等于 64 个用户。实际系统中Walsh 码还要和 PN 短码配合使用。PN 短码负责区分小区Walsh 码负责区分小区内的信道。不同小区可以用相同的 Walsh 码因为 PN 短码的相位偏移不同接收端做相关时会把这些信号区分开。所以 Walsh 码的正交性只在同一个小区内、且信号同步到达时才成立。3. m 序列的生成机制线性移位寄存器的反馈系数与周期3.1 n 级移位寄存器的状态转移m 序列的全称是最长线性移位寄存器序列由 n 级移位寄存器和反馈逻辑构成。每个时钟周期寄存器整体右移一位最右边移出的位是输出最左边移入的位是反馈位。反馈位由若干寄存器的输出做模 2 加得到哪些寄存器的输出参与反馈由反馈系数决定。一个 n 级移位寄存器的状态可以用 n 位二进制数表示总共有 2^n 种状态。全零状态是死循环一旦进入就永远出不来所以有效状态数是 2^n - 1。m 序列的周期就是 2^n - 1这也是“最长”的含义——在所有可能的线性反馈连接中它能达到最大周期。反馈系数通常用本原多项式表示。一个 n 次本原多项式决定了哪些抽头参与反馈也决定了序列的周期和自相关特性。不同的本原多项式产生不同的 m 序列但同一 n 级下的所有 m 序列都具有相似的统计特性自相关函数在零延迟处为 1在其他延迟处为 -1/(2^n - 1)互相关函数的值也在这个量级附近。3.2 反馈系数为什么决定序列起点和周期起始状态决定 m 序列的起点但不改变序列的周期和统计特性。因为移位寄存器是线性系统起始状态只是把序列在周期内平移了一个相位。反馈系数决定的是状态转移矩阵的结构也就是序列的周期和本原性。如果反馈系数对应的多项式不是本原多项式状态转移会进入一个更短的循环周期小于 2^n - 1这样的序列不是 m 序列。在实际系统中m 序列的起始状态通常由系统帧号或时隙号初始化保证不同基站或不同时隙的序列相位不同。反馈系数则固化在硬件里因为改变反馈系数意味着改变整个系统的扩频码代价太大。CDMA 前向链路的 PN 短码用的是 15 级 m 序列周期 32767 个码片码片速率 1.2288 Mc/s对应约 26.67 毫秒的周期正好是一个寻呼周期的长度。3.3 m 序列的自相关与互相关为什么需要 Gold 序列m 序列的自相关特性很好但互相关特性不够理想。两个不同的 m 序列做互相关时峰值可能达到 2^(n/2) 量级这在多用户场景下会导致严重的多址干扰。Gold 序列的提出就是为了解决这个问题取一对周期和速率相同的 m 序列优选对做模 2 加得到的 Gold 序列集合里任意两个序列的互相关值都被限制在 2^(n/2) 附近比 m 序列的互相关峰值低得多。Gold 序列的代价是自相关特性略差于 m 序列但互相关特性的改善对多用户系统更重要。CDMA 反向链路就用了 Gold 序列做长码周期 2^42 - 1用于区分不同用户。前向链路用 PN 短码区分小区反向链路用 Gold 长码区分用户Walsh 码在前向链路区分信道这三层码的分工是 CDMA 系统设计的核心。4. 正交性的边界多径和异步为什么让 Walsh 码失效4.1 多径延迟破坏正交性的数学推导Walsh 码的正交性建立在“所有信号在同一时刻到达接收端”这个前提上。假设两个用户分别用 Walsh 码 w1 和 w2 扩频w1 和 w2 的内积为零。接收端收到的是两个信号的叠加做相关时如果两个信号同时到达相关值就是零干扰被完全抑制。但如果用户 2 的信号经过一条多径反射延迟了 τ 个码片到达接收端收到的用户 2 信号是 w2 的延迟版本。w1 和延迟后的 w2 做内积结果不再是零而是 w1 和 w2 在延迟 τ 下的互相关值。这个值的大小取决于 w1 和 w2 的交变次数差异和延迟量。延迟越大互相关值越高干扰越严重。这就是为什么 CDMA 系统需要 RAKE 接收机RAKE 接收机用多个相关器分别跟踪不同延迟的多径信号把各径的能量合并起来同时利用多径分集对抗衰落。但 RAKE 接收机只能合并自己信号的多径无法消除其他用户的多径干扰。多用户检测技术就是在这个背景下提出的它利用所有用户的扩频码和信道估计联合解调多个用户把多址干扰当作有用信息来处理。4.2 邻区干扰与同步误差的叠加效应来自其他小区的信号与本地小区的信号不同步因为每个小区的 PN 短码相位偏移不同。接收端用本地 PN 短码做解扩时邻区信号被推到噪声底不会形成相关峰。但邻区信号的能量仍然落在接收带宽内抬高了噪声底降低了信噪比。这种干扰叫邻区干扰它和 Walsh 码的正交性无关因为邻区信号压根不在本地 Walsh 码的正交集合里。同步误差是另一个问题。即使在同一小区内不同用户的信号到达基站的时间也有差异因为用户距离基站的远近不同。CDMA 反向链路通过闭环功率控制和时间对齐来减小这种差异但不可能完全消除。残余的同步误差会让 Walsh 码的正交性打折扣干扰泄漏量与同步误差的平方成正比。提示在实际系统测试中如果发现解扩后的误码率高于理论值先检查多径延迟扩展和邻区干扰强度再检查 Walsh 码的索引分配是否冲突。索引冲突是常见的人为错误两个用户分到同一个 Walsh 码正交性直接消失。4.3 从 Walsh 码到多用户检测干扰抑制的工程取舍Walsh 码的正交性在同步条件下能把多址干扰压到零但多径和异步让这个理想条件无法满足。工程上的取舍是用 Walsh 码做信道区分用 PN 码做小区和用户区分用 RAKE 接收机做多径合并用功率控制做远近效应抑制用多用户检测做残余干扰消除。每一层都在弥补上一层留下的缺口。多用户检测的计算复杂度随用户数指数增长所以实际系统里只用次优的多用户检测算法比如解相关检测和最小均方误差检测。解相关检测把扩频码矩阵求逆完全消除多址干扰但会放大噪声。最小均方误差检测在干扰消除和噪声放大之间取平衡复杂度比解相关检测低性能接近最优。这些算法的共同前提是知道所有用户的扩频码和信道响应所以导频辅助的信道估计是多用户检测的基础。5. 避坑与排查扩频序列实现中的常见问题5.1 现象Walsh 矩阵生成后行向量不正交原因hadamard函数生成的矩阵本身是正交的但后续的 Paley 序和 Walsh 序排列如果索引映射写错会导致行向量被重复或遗漏破坏正交性。常见错误是bitset的位索引从 0 开始还是从 1 开始搞混Matlab 的bitset索引从 1 开始而二进制位通常从 0 开始计数。解决生成Wg后用Wg*Wg检查结果是否为单位矩阵的倍数。如果不是逐行打印Wg的索引映射确认每个行向量只出现一次。资源里的代码用p1和g1做索引偏移就是为了适配 Matlab 的 1-based 索引。5.2 现象m 序列周期不等于 2^n - 1原因反馈系数对应的多项式不是本原多项式状态转移进入了短循环。或者起始状态是全零寄存器锁死在零状态。解决查本原多项式表确认反馈抽头的位置正确。n 级 m 序列的本原多项式可以查表得到比如 n15 时常用的是 x^15 x^14 1。起始状态设为任意非零值通常用全 1 或帧号初始化。5.3 现象解扩后误码率随用户数增加而急剧上升原因Walsh 码的正交性被多径和异步破坏多址干扰随用户数线性增长。功率控制不理想时远近效应会让强信号淹没弱信号。解决检查 RAKE 接收机的多径搜索窗口是否覆盖了主要多径分量检查功率控制的闭环延迟是否过大检查 Walsh 码分配是否冲突。如果用户数接近 64考虑用准正交码或者扇区化来降低同时激活的用户数。5.4 现象Gold 序列互相关值超出理论界限原因优选对选取错误。不是任意两个 m 序列做模 2 加都能得到 Gold 序列必须用优选对。优选对的互相关值满足三值特性非优选对的互相关值可能远高于理论界限。解决用互相关函数扫描所有 m 序列对找出满足三值特性的优选对。n 级 m 序列的优选对数量有限可以预先计算并存储。5.5 现象Walsh 码索引与信道分配不匹配原因Walsh 序和逆 Walsh 序的索引映射搞反了。发射端用 Walsh 序接收端用逆 Walsh 序相关峰极性翻转解调器可能误判为噪声。解决在系统集成时明确约定发射端和接收端使用的排序方式。资源里的Wg和Hm分别对应 Walsh 序和逆 Walsh 序调试时先用已知序列做环回测试确认索引映射一致后再接入实际信道。6. 设计取舍正交码的边界在哪里Walsh 码和 m 序列的设计取舍本质上是在“理想正交”和“实际异步”之间找平衡。Walsh 码在同步条件下提供完美的正交性代价是对同步误差极其敏感m 序列在异步条件下提供稳定的自相关特性代价是互相关特性不够理想Gold 序列在两者之间取折中用略差的自相关换取更好的互相关。没有一种序列能在所有场景下最优选择哪种序列取决于系统对同步精度的控制能力、对多址干扰的容忍度、以及对计算复杂度的约束。我一般会这么理解扩频序列的设计不是追求数学上的完美正交而是追求工程上的可控干扰。理论上的正交性给出一个下界实际系统的干扰水平取决于同步精度、多径扩展、功率控制误差和邻区干扰强度。把这些因素逐一量化才能判断当前系统离理论下界有多远以及还有多少优化空间。验证方法上我习惯用三步走第一步在 Matlab 里生成 Walsh 矩阵和 m 序列用Wg*Wg和自相关函数验证数学性质第二步在链路级仿真里加入多径信道和同步误差观察误码率随用户数和延迟扩展的变化第三步在硬件环回测试里用已知序列做端到端验证确认索引映射和排序方式一致。这三步走完基本能定位大部分扩频序列相关的问题。从那以后我每次做扩频系统调试都强制走一遍“数学验证→链路仿真→硬件环回”的流程不再跳过任何一步。希望帮到你。本文还有配套的精品资源点击获取