ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

5GNR理论笔记实战指南:从帧结构、numerology到BWP与参考信号

5GNR理论笔记实战指南:从帧结构、numerology到BWP与参考信号 简介这份《5GNR学习笔记-理论v1.0.pdf》面向通信工程、无线网络优化方向的初学者与进阶读者系统梳理5G新空口的基础理论框架帮助读者建立从网络架构到物理层的完整认知。内容涵盖NR总体架构与功能划分包括gNB与ng-eNB节点、AMF/UPF/SMF三大核心网功能模块以及NG、Xn接口的协议栈与主要功能同时深入无线协议栈对比用户面与控制面的层次差异重点说明SDAP层在NR中的新增作用。物理层部分讲解波形、子载波间隔与CP配置、帧结构梳理15KHz至240KHz五种子载波配置、常规与扩展CP的适用条件以及PRB、时隙与符号数的对应关系。资源包为1个PDF文件大小约3.23MB结构紧凑便于随时查阅。目前已有303人学习适合作为5GNR理论入门与协议栈复习的参考笔记。1. 从一份 5GNR 学习笔记说起理论 v1.0 到底该记什么很多人第一次接触 5GNR都是从一份名为「5GNR学习笔记-理论v1.0.pdf」的资料开始的。它不像 3GPP 协议原文那样动辄几千页也不像厂商培训 PPT 那样只给结论不给推导而是把物理层帧结构、 numerology、带宽部分、参考信号这几块最硬的内容用工程视角重新串了一遍。问题在于大多数人拿到这类笔记后第一反应是「存下来慢慢看」结果永远停在第一页。真正该做的是把它当成一张施工图先搞清楚 5GNR 理论里哪些参数会直接影响你后面调基站、看日志、算吞吐再决定哪些章节值得反复啃。这篇笔记面向的是刚入行无线优化、传输承载或终端测试的工程师也适合已经做过 LTE 但想快速把 5GNR 理论框架搭起来的人。下面我按自己带新人的顺序把这份理论笔记拆成能动手验证的几条线。2. 5GNR 理论笔记的骨架帧结构、numerology 与带宽部分怎么串2.1 先分清 FR1 和 FR2 在笔记里的位置任何一份 5GNR 理论笔记第一章几乎都会先甩出频率范围划分。FR1 是 410 MHz 到 7125 MHzFR2 是 24250 MHz 到 52600 MHz。笔记里通常只给一张表但实际用起来这个划分决定了你后面所有参数的单位和量级。比如同样叫一个时隙FR1 里子载波间隔 15 kHz 时是 1 msFR2 里子载波间隔 60 kHz 时就变成 0.25 ms。如果你在看笔记时没有把频率范围钉死后面算调度周期、算 HARQ RTT 就会全乱。我一般建议在笔记第一页空白处手写一行FR1 看覆盖和移动性FR2 看带宽和波束。这样后面每读一个参数都能先问一句它属于哪个范围。2.2 numerology 不是玄学是子载波间隔和符号长度的换算表5GNR 相比 LTE 最大的理论变化就是引入了多套 numerology。笔记里通常用 μ 表示μ0 对应 15 kHzμ1 对应 30 kHzμ2 对应 60 kHzμ3 对应 120 kHzμ4 对应 240 kHz。每往上走一级子载波间隔翻倍符号长度减半一个时隙里的符号数仍然是 14 个但绝对时间缩短。这个换算关系必须背到能脱口而出因为后面看 DCI 调度、看 TDD 配比、算上行覆盖全都要用。我见过太多人把 μ1 的时隙当成 1 ms 来算结果吞吐量预估直接差一倍。笔记里如果只给了公式你最好自己补一张表把每个 μ 对应的时隙长度、符号长度、CP 开销都列出来贴在显示器边上。2.3 带宽部分 BWP 是笔记里最容易被跳过但最该动手画的部分BWP 是 5GNR 里比较新的概念一份理论笔记如果只写「BWP 是带宽子集」那基本等于没写。实际工程里BWP 决定了终端在哪个频段上收 PDCCH、在哪个频段上发 PUSCH还决定了初始接入时用哪个 BWP。笔记里通常会画一张图显示一个载波里可以配多个 BWP但不会告诉你为什么需要多个。我一般会带着新人做一件事拿一个 100 MHz 的载波假设子载波间隔 30 kHz算出一个 BWP 最多能占多少个 PRB然后手动标出初始 BWP、专用 BWP 和默认 BWP 的位置。这个动作做完后面看 RRC 重配消息里的 BWP 切换就不会懵。笔记里的理论值要和实际配置对一遍对不上就说明你漏了保护带或者载波聚合的偏移。2.4 参考信号DMRS、PTRS、CSI-RS 在笔记里各自管什么5GNR 的参考信号比 LTE 更灵活也更让人头大。DMRS 用于解调PTRS 用于相位跟踪CSI-RS 用于信道测量。笔记里一般会分别介绍但不会强调它们之间的时序关系。实际看日志时你会发现 DMRS 的配置直接决定了 PDSCH 能解调成什么样PTRS 只在 FR2 高频段才真正起作用CSI-RS 的周期又和波束管理绑在一起。我建议在读这一章时拿一张纸画出三个参考信号在一个时隙里的位置然后标出哪些符号是固定的哪些是可配的。这个图一旦画出来后面看 MIB、SIB1 里的配置字段就会快很多。笔记里的理论描述是骨架你自己画的图才是血肉。3. 把理论笔记变成可复现的验证步骤从参数计算到日志对照3.1 用 Python 算一遍 numerology 和时隙长度光看笔记里的公式容易飘最好写几行代码把关键参数算出来。下面这段脚本把 μ 从 0 到 4 的时隙长度、符号长度、每帧时隙数都打出来你可以直接拿去和笔记里的表格对。# 5GNR numerology 关键参数计算 # 参考 3GPP TS 38.211 中的帧结构定义 subcarrier_spacing_base 15 # kHz基础子载波间隔 symbols_per_slot 14 # 常规 CP 下每个时隙的符号数 slots_per_frame 10 # 一帧 10 ms for mu in range(5): scs subcarrier_spacing_base * (2 ** mu) # 子载波间隔 kHz slot_duration_ms 10 / (2 ** mu) # 一个时隙的绝对时长 ms symbol_duration_us slot_duration_ms * 1000 / symbols_per_slot # 符号时长 us slots_per_subframe 2 ** mu # 每个子帧的时隙数 print(fμ{mu}, SCS{scs}kHz, 时隙{slot_duration_ms:.4f}ms, f符号{symbol_duration_us:.2f}us, 每子帧时隙数{slots_per_subframe})这段代码的逻辑很直接子载波间隔每翻一倍时隙长度就减半符号长度也减半。参数说明里要注意symbol_duration_us 算的是包含 CP 的平均符号长度不是纯 FFT 周期。如果你拿这个结果去和笔记里的表对发现 μ2 时时隙长度是 0.25 ms那就说明你算对了。这个脚本我一般让新人自己敲一遍不要复制敲的过程中就会记住 2 的幂次关系。3.2 用表格把 BWP 配置和 PRB 数量对齐BWP 的理论计算离不开 PRB。下面这张表是我从笔记里整理出来的假设载波带宽 100 MHz、子载波间隔 30 kHz不同 BWP 配置下对应的 PRB 数和占用带宽。你可以拿它去对照实际基站配置。BWP 类型起始 PRBPRB 数量占用带宽 (MHz)典型用途初始 BWP0248.64小区搜索、SIB1 接收默认 BWP06623.76空闲态驻留专用 BWP1013247.52业务态调度高频专用 BWP2026495.04FR2 大带宽场景表格里的占用带宽是按 30 kHz 子载波间隔、每个 PRB 12 个子载波算出来的实际还要扣保护带。笔记里如果只给了 PRB 数量没给带宽你就自己乘一下。这张表的价值在于当你看到 RRC 重配里 BWP 的 PRB 范围时能立刻反应出它占了多少频谱会不会和邻区冲突。3.3 从 MIB 和 SIB1 里反推理论参数理论笔记读完后最好的验证方式是抓一次真实的小区搜索日志把 MIB 和 SIB1 里的字段和笔记里的定义对一遍。MIB 里会带 pdcch-ConfigSIB1、subCarrierSpacingCommon、dmrs-TypeA-Position 这些字段。你拿笔记里 DMRS 类型 A 的位置定义去对日志里的 dmrs-TypeA-Position 是 pos2 还是 pos3就能知道这个小区用的是哪种时域图案。SIB1 里会带 initialUplinkBWP 和 initialDownlinkBWP把里面的 locationAndBandwidth 字段换算成 PRB再和上面那张表对就能验证你算的 BWP 对不对。这个过程不需要连基站很多终端测试仪表都能导出日志。我一般会要求新人至少对三个不同的小区把 MIB 和 SIB1 的关键字段抄下来和笔记里的理论值做一次交叉验证。对不上的地方往往就是笔记里没写清楚的边界条件。3.4 用 TDD 配比验证时隙格式5GNR 的 TDD 配比在笔记里通常只给一个示意表但实际网络里配比是半静态加动态的。你可以拿笔记里的时隙格式定义去对一下实际配置。比如一个 DDDSU 的周期D 是下行时隙U 是上行时隙S 是特殊时隙。特殊时隙里又分下行符号、灵活符号、上行符号。笔记里如果写了「特殊时隙的符号分配由 tdd-UL-DL-ConfigCommon 决定」你就去找这个 IE 里的 nrofDownlinkSymbols 和 nrofUplinkSymbols算一下灵活符号还剩几个。这个动作能帮你理解为什么有些小区上行调度会卡在特殊时隙的边界上。我见过一个案例特殊时隙里灵活符号配了 6 个但实际调度只用了 4 个剩下 2 个被保护间隔占了笔记里没提保护间隔结果新人算上行吞吐时多算了 2 个符号误差就出来了。4. 5GNR 理论笔记里最容易翻车的几个坑4.1 把 μ 和时隙长度记反导致调度周期算错现象看笔记时觉得 μ1 就是 1 ms 时隙配调度周期时按 1 ms 配结果实际只有 0.5 msHARQ 反馈对不上。原因笔记里通常把 μ 和子载波间隔放在一起写时隙长度另起一行读快了就容易串。解决自己画一张 μ 到 时隙长度 的映射表贴在工位上每次配参数前看一眼。我自己的习惯是把 μ0 到 μ4 的时隙长度写成 1、0.5、0.25、0.125、0.0625单位 ms背下来。4.2 BWP 切换时忘了默认 BWP 的回退现象专用 BWP 配置了 132 个 PRB但终端在某个时刻突然回到 24 个 PRB 的初始 BWP吞吐掉底。原因笔记里只讲了 BWP 切换的触发条件没讲 BWP 定时器超时后会回退到默认 BWP。解决在笔记的 BWP 章节旁边补一行「bwp-InactivityTimer 超时回默认 BWP」然后去查这个定时器的实际配置值。一般默认 BWP 的 PRB 数比专用 BWP 少回退后调度器需要重新分配资源如果没预留过渡时间就会丢包。4.3 DMRS 类型选错解调门限直接恶化现象同样的信道质量别人能解 256QAM你只能解 64QAM。原因笔记里 DMRS 类型 A 和类型 B 的时域位置不同类型 A 靠前类型 B 靠后选错了会导致信道估计不准。解决先确认笔记里 dmrs-TypeA-Position 的取值再去对实际配置。类型 A 适合常规 CP类型 B 适合短时隙。如果你在 FR2 用类型 A 配短时隙DMRS 符号不够解调性能就崩。我一般会在笔记上标注FR1 常规时隙优先类型 AFR2 短时隙优先类型 B。4.4 参考信号周期和波束扫描周期搞混现象CSI-RS 配了 20 ms 周期但波束扫描是 5 ms 一次结果 CSI 上报跟不上波束切换。原因笔记里把 CSI-RS 和波束管理放在两章没强调两者的周期要匹配。解决把 CSI-RS 周期设成波束扫描周期的整数倍或者反过来。实际配置里SSB 周期和 CSI-RS 周期要一起看。我踩过的坑是 SSB 配了 20 msCSI-RS 配了 10 ms结果终端在 SSB 没发的时隙里做 CSI 测量测了个寂寞。4.5 把理论峰值吞吐当成实际可调度吞吐现象按笔记里的公式算100 MHz、30 kHz、4 层 MIMO 能到 1.5 Gbps实际一测只有 800 Mbps。原因笔记里的峰值是假设所有符号都用于 PDSCH、所有 PRB 都满调度、没有控制开销。实际有 PDCCH 占符号、有 DMRS 占 RE、有保护带、有 SSB 开销。解决在笔记的吞吐公式旁边补一个开销系数一般控制开销按 15% 到 20% 估DMRS 开销按 1/4 到 1/3 估。我自己的经验是理论峰值打七折才是实际能调度的上限打五折才是稳定吞吐。5. 把理论笔记用活从参数反查到排障的进阶习惯理论笔记读到最后最容易陷入的误区是把它当字典遇到问题才翻。我自己的做法是反过来先拿一个实际排障案例然后逼自己从笔记里找出对应的理论依据。比如有一次遇到上行覆盖受限终端在小区边缘发 PUSCH 一直失败。我先去笔记里翻 PUSCH 的功率控制公式找到路损补偿因子 alpha 和 P0 的配置然后去查实际参数发现 alpha 配了 1P0 配了 -100 dBm但终端上报的功率余量已经到 0 了。这说明理论公式里的路损补偿已经拉满问题不在功率控制而在上行波形。再翻笔记的 DFT-s-OFDM 和 CP-OFDM 章节发现这个小区配的是 CP-OFDM而终端在边缘应该用 DFT-s-OFDM 来降低峰均比。把波形切换后上行覆盖立刻改善。这个案例让我养成一个习惯每次排障先定位到笔记里的哪个公式或哪张表然后只改那个公式里的变量不要东改西改。另一个习惯是定期把笔记里的参数和现网配置做一次批量对照。我一般会导出基站侧的 BWP 配置、TDD 配比、DMRS 类型、CSI-RS 周期然后写一个简单的脚本和笔记里的理论值做 diff。下面这段伪代码展示了思路实际用 Python 读 CSV 就行。# 理论值与现网配置对照的伪代码 # 假设 theory.csv 和 live.csv 都有 cell_id, param, value 三列 import csv def load_params(path): params {} with open(path) as f: for row in csv.DictReader(f): key (row[cell_id], row[param]) params[key] row[value] return params theory load_params(theory.csv) live load_params(live.csv) for key in theory: if key in live and theory[key] ! live[key]: print(f不一致: {key}, 理论{theory[key]}, 现网{live[key]})这段代码的关键是 key 的设计cell_id 加 param 能唯一确定一个配置项。参数说明里要注意value 的类型要统一字符串比较容易把 30 和 30.0 判成不一致。我一般会在加载时做一次归一化。这个对照脚本跑一次就能把笔记里过时的或者理解错的地方全暴露出来。我自己的笔记已经改过三版每次都是被现网配置打脸后改的。最后一个习惯是给笔记留「后悔药」。每次改配置前先把当前配置和笔记里的理论值截个图存到一个按日期命名的文件夹里。改完如果出问题直接回滚不用凭记忆恢复。这个习惯听起来笨但救过我两次。一次是改 BWP 的 PRB 数改完发现终端接入不了翻出截图一看初始 BWP 的起始 PRB 被我不小心从 0 改成了 10终端搜不到 SSB。回滚后五分钟恢复。理论笔记的价值不在于你读了多少遍而在于你每次动手前有没有拿它当检查清单。希望帮到你。本文还有配套的精品资源点击获取
返回列表