资讯动态

扩频序列详解:m序列与Walsh码的原理、区别及应用场景

发布时间:2026/10/16 16:50:46 来源:尧图企业网站定制
简介本资源围绕扩频通信中的两类核心序列——m序列与Walsh码展开面向通信工程、无线通信课程学习者及CDMA系统入门研究者帮助理解扩频码的生成原理与工程应用。压缩包内为1个doc文档约355KB以文字讲解配合公式推导与代码片段的方式组织内容。文档系统梳理了m序列由n级线性移位寄存器产生、周期为2^n-1的机理反馈系数与起始状态对序列的影响以及其自相关、互相关特性在PN序列与CDMA扩频中的应用同时讲解Walsh码源于Hadamard矩阵的正交性64阶Walsh序列在前向链路中对应W0至W63信道、码片速率1.2288Mc/S并分析多径与异步信号导致多址干扰无法完全消除的原因。文中还给出Hadamard矩阵转换为Walsh序列的Matlab函数实现涉及Paley序、Walsh序与逆Walsh序的变换矩阵并延伸介绍Gold序列的构造思路。目前已有636人学习适合作为扩频序列原理学习与代码实践的参考材料。1. 扩频序列到底是什么从“多人同时说话”说起想象一个嘈杂的鸡尾酒会十几个人同时说话声音混在一起你很难听清任何一个人。但如果给每个人分配一种独特的“口音”并且约定只有听懂这种口音的人才能提取出对应内容那么即使大家同时开口信息也能被区分出来。扩频通信里的“扩频序列”扮演的就是这种“独特口音”的角色——它把原本窄带的信号像撒胡椒面一样摊到一个很宽的频带上接收端再用同一套序列把信号“收拢”回来。m序列和Walsh码就是两种最常被拿来做这件事的序列。一个擅长制造“看起来像随机噪声”的伪随机信号一个擅长让多个信道彼此“互不串味”。搞懂它们你就能明白为什么CDMA系统能让几十个用户同时用同一段频谱打电话也能明白为什么理论上完美的正交到了真实环境里总会打折扣。这篇内容不堆公式只把这两个概念讲透顺带说清它们和Gold序列的区别以及什么时候该用谁。2. m序列为什么“最长”反而最有用2.1 从移位寄存器说起一个不断“翻新”的队列m序列的全称是“最长线性移位寄存器序列”。名字听着拗口拆开看就简单了。想象一排n个盒子每个盒子里装着0或1。每来一个时钟节拍所有盒子里的数字同时往右挪一格最右边那个数字被挤出去成为输出同时从左边补进来一个新数字这个新数字是某些盒子里数字的“异或”结果——具体取哪几个盒子由反馈系数决定。这个结构就是线性移位寄存器。n个盒子最多能表示2ⁿ种状态但全0状态会卡死一直输出0所以有效状态最多2ⁿ−1种。m序列的“最长”就体现在这里它能不重复地遍历所有2ⁿ−1个非零状态周期达到理论最大值。通俗地说它把一副牌里除了大小王之外的每一张都翻了一遍才重新洗牌所以叫“最长”。反馈系数决定了从哪些盒子抽头做异或。不同的抽头组合产生的是完全不同的m序列。起始状态则决定从这副牌的哪一张开始翻。两者合在一起就定义了一条具体的m序列。2.2 伪随机性为什么它“像噪声”却“可复现”m序列最讨人喜欢的地方是它的统计特性非常接近真正的随机噪声。在一个周期内0和1的数量几乎各占一半1比0多一个连续相同数字的“游程”分布也有规律。这意味着从频谱上看它把信号能量均匀地摊开了很像背景噪声。但关键在于“伪”字。真正的随机噪声无法复现而m序列只要反馈系数和起始状态确定接收端就能在本地生成一条一模一样的序列。发送端用这条序列去扩频接收端用同一条序列去解扩信号就被还原了。这种“看起来随机、实际上确定”的特性正是伪随机噪声序列的核心价值。在CDMA系统里m序列常被用作扰码或前导序列。它良好的自相关性——只有完全对齐时相关峰才极高错开一点就迅速下降——让接收端能精确地找到信号起始位置。互相关性虽然不如Walsh码那么理想但在同一系统内通过优选对搭配也能控制在可接受范围内。2.3 反馈系数怎么选不是随便抽头都行n级移位寄存器有很多种抽头方式但能产生m序列的抽头组合并不多。以n3为例抽头取第1和第3个盒子做异或反馈可以产生周期为7的m序列换一种抽法可能只能产生短得多的周期甚至退化成非最长序列。实际工程中反馈系数通常用本原多项式来表示。选错了多项式序列周期会大幅缩短扩频效果大打折扣。这就像配钥匙齿形差一点锁就打不开。所以m序列发生器的设计第一步就是查表选一个经过验证的本原多项式而不是自己随便试。3. Walsh码正交这件事到底正交在哪里3.1 从Hadamard矩阵到Walsh矩阵重新排队的过程Walsh码来源于Hadamard矩阵。Hadamard矩阵是一个只由1和−1组成的方阵它的任意两行或两列对应位置相乘再求和结果都是0。这个性质就叫“正交”。正交意味着两行之间“完全不相干”一个行向量里包含的信息在另一个行向量上投影为零。但Hadamard矩阵的行序是乱的直接拿来用不方便。于是人们按照“符号交变次数”重新排列这些行交变次数少的排前面多的排后面。重排之后得到的矩阵就是Walsh矩阵。Walsh矩阵的每一行就是一个Walsh序列行与行之间依然保持正交。在CDMA前向链路中常用64阶Walsh序列也就是64行、每行64个码片的矩阵。每个Walsh序列分配给一个前向物理信道编号W0到W63。码片速率1.2288Mc/s这个数字乘以64正好对应1.2288MHz的带宽划分方式。不同信道用不同的Walsh序列扩频接收端用对应的序列解扩就能把各自的信息从混合信号里“捞”出来。3.2 正交的好处多址干扰理论上可以为零多址干扰是CDMA系统里最头疼的问题之一多个用户同时发信号彼此之间会互相干扰。Walsh码的正交性提供了一种理想化的解决方案——如果所有信号严格同步且都使用相互正交的Walsh序列那么接收端解扩某个用户信号时其他用户的信号投影为零多址干扰理论上可以降到零。这就是“码分多址”这个名字的由来用不同的码来区分用户而不是用不同的频率或不同的时间。频率划分像把一条路分成多条车道时间划分像轮流上路码分则像所有人同时上路但各说各的暗号只有对上暗号的人才能听懂。3.3 现实打脸为什么正交不能解决所有问题理论很美好现实很骨感。Walsh码的正交性有两个前提严格同步且只考虑本小区信号。真实环境里这两个前提都很难满足。多径传播会让同一个信号经过不同路径到达接收端延迟和衰减各不相同。这些延迟到达的信号与原始同步信号之间不再保持正交关系。来自其他小区的信号更是不同步的它们使用的Walsh序列即使与本小区相同由于到达时间错开正交性也被破坏。结果就是多址干扰不会为零只是被抑制到一定程度。这也解释了为什么实际系统里还要研究多用户检测、干扰消除等技术。如果Walsh码真的能完全正交这些技术就没有存在的必要了。正交是起点不是终点。4. 易混概念m序列、Walsh码、Gold序列到底怎么分4.1 易混点一m序列和Walsh码都是扩频码能互换吗为什么混两者都叫“扩频序列”都在CDMA里用都跟“正交”或“相关”沾边。怎么区分m序列的核心优势是伪随机性和良好的自相关性适合做扰码、同步码Walsh码的核心优势是严格正交适合做信道划分。m序列的互相关性通常不如Walsh码理想而Walsh码的自相关性又不如m序列尖锐。它们不是替代关系而是分工关系——一个负责“让信号像噪声”一个负责“让信道互不干扰”。4.2 易混点二Walsh码是正交的所以多址干扰为零为什么混教材在讲Walsh码时往往先讲理想正交模型再讲实际干扰读者容易只记住前半句。怎么区分正交性只在严格同步且同小区的条件下成立。多径延迟、异步到达、邻区干扰都会破坏正交性。实际系统中Walsh码抑制多址干扰的能力是有限的不能指望它把干扰降到零。把“理论上可以为零”当成“实际上就是零”是初学者最容易翻车的地方。4.3 易混点三Gold序列就是m序列的简单拼接为什么混Gold序列确实是用m序列构造的名字里又带“序列”容易以为只是把两条m序列接在一起。怎么区分Gold序列是用一对周期和速率相同的m序列优选对逐位模2加得到的。它不是拼接而是“混合”。这样做的目的是在保持良好自相关性的同时获得更优的互相关性——同一组Gold序列里任意两条之间的互相关值都控制在较低水平。对于多用户场景互相关性好意味着用户之间干扰小所以Gold序列在CDMA里常被用作地址码。4.4 易混点四n级移位寄存器产生的都是m序列为什么混m序列的定义就是“由n级线性移位寄存器产生”容易反推成“只要是n级移位寄存器输出就是m序列”。怎么区分只有反馈系数对应本原多项式时才能产生周期为2ⁿ−1的最长序列。其他抽头方式可能产生短周期序列甚至进入全零死循环。所以“n级移位寄存器”是硬件结构“m序列”是满足特定条件的输出。结构对了参数不对照样出不来m序列。4.5 易混点五Walsh码的阶数越高越好为什么混64阶比16阶能容纳更多信道看起来“越大越强”。怎么区分阶数越高每个码片持续的时间越短对同步精度的要求也越高。同时可用正交序列的数量增加了但每条序列的抗干扰能力并没有同步提升。选择阶数要匹配系统带宽、用户数量和同步能力不是无脑选大。64阶Walsh码对应1.2288Mc/s的码片速率是特定标准下的匹配设计换一个场景未必适用。5. 什么时候用m序列什么时候用Walsh码一个具体例子假设你在设计一个室内无线通信Demo有8个传感器节点要向一个中心接收机同时发数据。你手里有两种扩频序列可选m序列和Walsh码。怎么选先看需求。8个节点同时发接收机要能区分开。如果节点之间能严格同步Walsh码是首选——8阶Walsh矩阵正好提供8条正交序列每个节点分一条接收端解扩时互不干扰。但室内环境多径反射严重严格同步很难做到延迟到达的信号会破坏正交性。这时候Walsh码的优势会被削弱。再看m序列。如果每个节点用不同本原多项式产生的m序列做扰码接收端用对应的本地序列解扩即使有延迟m序列尖锐的自相关峰也能帮助接收机锁定目标信号。代价是互相关性不如Walsh码理想节点之间的干扰会比理想正交时大一些。实际工程中常见的做法是组合使用用Walsh码做信道划分用m序列做加扰。这样既利用了Walsh码的正交性来区分信道又用m序列的伪随机性来改善信号的统计特性降低邻区干扰的影响。Gold序列则适合用户数量更多、对互相关性要求更严格的场景因为它在一组序列内部提供了更均衡的互相关性能。下面是一个简化的Walsh序列生成示例用Python演示如何从Hadamard矩阵得到Walsh矩阵。注意这里只展示核心逻辑实际工程中还要考虑阶数选择和同步处理。import numpy as np def hadamard_matrix(n): 生成2^n阶Hadamard矩阵只含1和-1 H np.array([[1]]) for _ in range(n): H np.block([[H, H], [H, -H]]) return H def walsh_matrix(n): 按交变次数重排Hadamard矩阵得到Walsh矩阵 H hadamard_matrix(n) # 计算每一行的符号交变次数 transitions [] for row in H: count 0 for i in range(1, len(row)): if row[i] ! row[i-1]: count 1 transitions.append(count) # 按交变次数升序排列 order np.argsort(transitions) return H[order] # 生成8阶Walsh矩阵 W walsh_matrix(3) print(Walsh矩阵行数, W.shape[0]) print(第一行W0, W[0]) print(第二行W1, W[1]) # 验证正交性任意两行点积为0 print(W0与W1的点积, np.dot(W[0], W[1]))这段代码先构造Hadamard矩阵再按每行的符号交变次数排序。hadamard_matrix函数用递归方式生成2ⁿ阶矩阵walsh_matrix函数统计每行相邻元素不同的次数按次数从小到大排列。最后打印W0和W1并验证它们的点积为0说明正交性成立。实际系统中Walsh序列的阶数、码片速率和分配方式都要根据具体标准来定不能直接套用这个Demo。回到选择问题。如果同步条件好、用户数固定、且主要干扰来自本小区Walsh码是直接有效的方案。如果同步困难、多径严重、或者需要更好的伪随机特性来对抗截获m序列更合适。Gold序列则在用户数多、互相关要求高的场景下表现更均衡。没有一种序列能通吃所有场景关键是把它们的特性匹配到具体约束上。从那以后我每次选扩频序列都先把同步条件和干扰来源列清楚再决定用哪种。正交性不是万能药伪随机性也不是搞清边界比记住定义重要得多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑