简介这份PPT资料聚焦移动通信领域的5G NR理论速率计算面向通信专业学生、终端研发人员及网络规划工程师帮助读者从零理解FDD与TDD两种双工模式下的峰值速率推导过程。内容从子载波间隔、帧结构、时隙与OFDM符号等基础概念切入逐步延伸到调制方式、编码效率、载波聚合、mMIMO空域资源及协议开销等实际影响因素并给出FDD上下行、TDD单双周期及5ms单周期等多种配置下的完整计算公式与数值示例小白也能跟着算。资源包共1个pptx文件约817KB以图文并茂的幻灯片形式呈现便于快速查阅与演示。目前已有2519人学习下载适合希望透彻掌握5G NR速率来源、评估终端与网络性能的读者参考。1. 5G NR理论速率计算从参数集到峰值速率的完整推导做5G网络规划或者终端性能评估时经常被问到“这个小区的理论峰值速率到底是多少”。很多人第一反应是查厂家给的参数表但不同厂家、不同配置下数字对不上甚至同一个基站换个时隙配比结果就变了。5G NR理论速率计算不是查表能解决的它需要从OFDM参数集、帧结构、调制方式、MIMO层数一路推导下来。这篇文章面向需要做网络容量规划、终端能力评估、或者单纯想把3GPP TS 38.211/38.214里的公式落到实处的工程师。我会把整个计算链路拆开给出每一步的公式、参数取值和可复现的计算脚本同时把那些容易翻车的地方标出来。读完你不仅能算峰值还能根据子载波间隔、时隙配比、调制阶数快速判断不同配置下的速率边界。2. 参数集与帧结构速率计算的物理层地基2.1 子载波间隔如何决定OFDM符号数与时隙长度5G NR最核心的变化是引入了灵活的 numerology也就是参数集。子载波间隔SCS不再固定为15 kHz而是支持15、30、60、120、240 kHz五档。这个变化直接决定了OFDM符号长度和每帧的时隙数量。具体关系是SCS翻倍OFDM符号长度减半每子帧的时隙数翻倍。3GPP定义了一个参数 μSCS 15 × 2^μ kHz。μ0对应15 kHzμ1对应30 kHz以此类推。每子帧1 ms的时隙数为 2^μ每个时隙包含14个OFDM符号常规CP下。μSCS (kHz)每子帧时隙数每时隙符号数时隙长度 (ms)典型频段0151141.0FR1低频1302140.5FR1主流2604140.25FR1/FR231208140.125FR2毫米波424016140.0625FR2高频这张表是后面所有计算的起点。你选定了SCS就等于选定了每帧有多少个时隙可用于传输。比如30 kHz SCS下一个10 ms的无线帧有20个时隙每个时隙14个符号总共280个OFDM符号。这里有个容易混淆的点时隙长度和符号长度是两回事。时隙长度 14 × 符号长度常规CP而符号长度 ≈ 1/SCS。30 kHz下符号长度约33.3 μs加上CP后约35.7 μs14个符号就是0.5 ms。这个换算在算TDD配比时特别重要。2.2 帧结构配比TDD下有多少符号真正用于下行算理论速率不能只看总符号数因为TDD模式下有一部分符号要分给上行和灵活符号。5G NR的帧结构通过时隙格式来定义常见的有“DDDSU”这种模式D代表下行时隙U代表上行时隙S代表特殊时隙。特殊时隙内部又分为下行符号、灵活符号和上行符号。以常见的2.5 ms双周期配置为例DDDSU DDSUU每个周期内下行时隙6个上行时隙4个特殊时隙2个。特殊时隙通常配成10个下行符号、2个灵活符号、2个上行符号。那么一个5 ms周期内下行符号总数 6×14 2×10 104个上行符号 4×14 2×2 60个灵活符号 2×2 4个。灵活符号通常也算作下行或者根据调度动态分配保守计算时不计入下行。这个配比直接决定了下行可用符号的比例。如果按10 ms周期算下行符号占比大约在52%左右。很多人在算峰值速率时直接拿全符号数乘结果比实际高了近一倍这就是没考虑帧结构配比的后果。2.3 从符号数到资源粒子RE、RB、RBG的层级关系有了可用符号数下一步要算有多少个资源粒子RE可以承载数据。一个RE是一个OFDM符号上的一个子载波。12个子载波组成一个资源块RB这是调度的基本单位。以30 kHz SCS、100 MHz带宽为例。100 MHz带宽对应273个RB这是3GPP定义的标准配置。每个RB有12个子载波所以总子载波数 273×12 3276个。但并不是所有RE都能用于数据传输。每个时隙中有一部分RE要留给DMRS解调参考信号。假设DMRS占用每RB每时隙的1/4符号那么实际可用于数据的RE比例大约是75%到85%取决于DMRS配置类型。常见做法是按开销比例折算比如控制信道开销加DMRS开销合计约20%到25%。所以单时隙可用RE数 ≈ 273 × 12 × 14 × (1 - 开销比例)。如果开销按25%算就是273×12×14×0.75 ≈ 34,398个RE。这个数字再乘以每RE承载的比特数就是单时隙的原始比特量。注意不同厂家的开销取值不同有的按固定值有的按动态调度。做精确计算时建议按3GPP TS 38.214的DMRS配置表逐项算做快速估算时按20%到25%折算即可。3. 调制与MIMO把RE换算成比特流3.1 调制阶数与每RE比特数的对应关系每个RE能承载多少比特取决于调制方式。5G NR支持QPSK、16QAM、64QAM、256QAM对应的每RE比特数分别是2、4、6、8。这个对应关系很直接但选哪个调制方式不是随便定的它取决于信道质量和调度策略。调制方式每RE比特数理论频谱效率 (bps/Hz)典型SINR门限QPSK220 dB以下16QAM445-10 dB64QAM6615-20 dB256QAM8825 dB以上算理论峰值速率时通常取最高阶调制也就是256QAM每RE 8比特。但实际网络中边缘用户可能只用QPSK所以理论峰值和边缘速率是两回事。做容量规划时峰值用256QAM算边缘用QPSK算中间用64QAM算这样出来的结果才有参考价值。3.2 MIMO层数单用户和多用户的天花板MIMO是速率倍增的关键。5G NR下行支持最多8层传输但实际能跑几层取决于终端能力和信道条件。常见配置是4层4T4R或者8层8T8R毫米波下可以做到更多。层数对速率的影响是线性的。单层速率乘以层数就是总速率。但要注意层数增加会带来解调复杂度上升和信道估计误差实际增益往往打折扣。做理论计算时按满层算做实际评估时按2层或4层算更靠谱。还有一个容易忽略的点MIMO层数和DMRS端口数相关。每层需要一个DMRS端口DMRS开销随层数增加而增加。8层传输时DMRS开销可能占到20%以上这会吃掉一部分理论增益。3.3 完整计算链路从帧结构到峰值速率的Python实现把前面所有步骤串起来用Python写一个可复现的计算脚本。这个脚本接受SCS、带宽、时隙配比、调制阶数、MIMO层数作为输入输出下行峰值速率。def calculate_5g_nr_peak_rate(scs_khz, bandwidth_mhz, tdd_pattern, modulation_bits, mimo_layers, dmrs_overhead0.25): 计算5G NR下行理论峰值速率 scs_khz: 子载波间隔单位kHz bandwidth_mhz: 带宽单位MHz tdd_pattern: 一个周期内的(下行时隙数, 上行时隙数, 特殊时隙数, 特殊时隙下行符号数) modulation_bits: 每RE比特数256QAM为8 mimo_layers: MIMO层数 dmrs_overhead: DMRS和控制信道开销比例 # 根据SCS确定每子帧时隙数 mu {15:0, 30:1, 60:2, 120:3, 240:4}[scs_khz] slots_per_subframe 2 ** mu slots_per_frame slots_per_subframe * 10 # 10ms无线帧 # 根据带宽确定RB数3GPP标准配置 rb_table {5:25, 10:52, 15:79, 20:106, 25:133, 30:160, 40:216, 50:270, 60:162, 80:217, 90:245, 100:273} num_rb rb_table.get(bandwidth_mhz, 273) # 解析TDD配比 dl_slots, ul_slots, special_slots, special_dl_symbols tdd_pattern total_slots_in_pattern dl_slots ul_slots special_slots # 计算一个周期内的下行符号数 dl_symbols dl_slots * 14 special_slots * special_dl_symbols # 计算一个周期内的下行RE数 re_per_slot num_rb * 12 * 14 dl_re dl_slots * re_per_slot special_slots * num_rb * 12 * special_dl_symbols # 扣除开销 effective_re dl_re * (1 - dmrs_overhead) # 计算一个周期内的比特数 bits_per_pattern effective_re * modulation_bits * mimo_layers # 计算一个周期的时长ms pattern_duration_ms total_slots_in_pattern / slots_per_subframe # 转换为每秒速率 peak_rate_bps bits_per_pattern / (pattern_duration_ms / 1000) return peak_rate_bps / 1e9 # 返回Gbps # 示例30kHz SCS, 100MHz, DDDSU DDSUU配比, 256QAM, 4层MIMO pattern (6, 4, 2, 10) # 6个下行时隙4个上行时隙2个特殊时隙特殊时隙10个下行符号 rate calculate_5g_nr_peak_rate(30, 100, pattern, 8, 4) print(f下行峰值速率: {rate:.2f} Gbps)这段代码的逻辑说明首先根据SCS确定每子帧的时隙数然后查表得到带宽对应的RB数。接着解析TDD配比计算一个周期内的下行符号数和对应的RE数。扣除DMRS和控制信道开销后乘以调制比特数和MIMO层数得到总比特数。最后除以周期时长得到速率。参数说明dmrs_overhead默认0.25实际取值要根据DMRS配置类型调整。Type 1 DMRS单符号时开销约1/4双符号时约1/3。tdd_pattern的格式是元组需要根据实际网络配置填写。modulation_bits在算峰值时填8算边缘速率时填2。跑这个脚本30 kHz、100 MHz、4层MIMO、256QAM下下行峰值大约在1.6到1.8 Gbps之间。如果换成8层MIMO能到3.2 Gbps以上。这个数字和厂家宣传的峰值基本对得上差异主要来自开销取值和特殊时隙配置。4. 上行速率计算和下行完全不同的逻辑4.1 上行帧结构配比与符号分配上行速率计算不能简单套用下行的逻辑因为上行有两个特殊之处一是上行时隙数通常少于下行二是上行有PUSCH和PUCCH的信道复用。以DDDSU DDSUU为例上行时隙4个特殊时隙2个每个特殊时隙2个上行符号。那么一个5 ms周期内上行符号数 4×14 2×2 60个。这个数字只有下行104个的57%左右。但上行还有一个关键限制终端发射功率。下行基站可以满功率发射上行终端受限于功率放大器往往跑不到最高调制阶数。所以上行理论峰值通常按64QAM算而不是256QAM。除非是CPE或者固定无线接入场景终端功率足够才考虑256QAM。4.2 上行MIMO与码字映射上行MIMO层数通常比下行少。常见终端支持2层上行基站侧可以支持4层甚至8层接收。但上行层数受限于终端发射通道数手机一般只有1T2R或者2T4R。上行码字到层的映射和下行不同。下行最多2个码字映射到8层上行通常1个码字映射到1到4层。做理论计算时上行按1个码字、2层或4层算。上行的DMRS开销也比下行高因为上行需要更多的解调参考信号来保证基站侧的信道估计精度。通常上行DMRS开销在30%左右比下行的25%要高。4.3 上行峰值速率计算脚本与参数调整def calculate_5g_nr_ul_peak_rate(scs_khz, bandwidth_mhz, tdd_pattern, modulation_bits, mimo_layers, dmrs_overhead0.30): 计算5G NR上行理论峰值速率 tdd_pattern: (下行时隙数, 上行时隙数, 特殊时隙数, 特殊时隙上行符号数) mu {15:0, 30:1, 60:2, 120:3, 240:4}[scs_khz] slots_per_subframe 2 ** mu rb_table {5:25, 10:52, 15:79, 20:106, 25:133, 30:160, 40:216, 50:270, 60:162, 80:217, 90:245, 100:273} num_rb rb_table.get(bandwidth_mhz, 273) dl_slots, ul_slots, special_slots, special_ul_symbols tdd_pattern total_slots_in_pattern dl_slots ul_slots special_slots # 上行符号数 ul_symbols ul_slots * 14 special_slots * special_ul_symbols # 上行RE数 ul_re ul_slots * num_rb * 12 * 14 special_slots * num_rb * 12 * special_ul_symbols # 扣除开销 effective_re ul_re * (1 - dmrs_overhead) # 比特数 bits_per_pattern effective_re * modulation_bits * mimo_layers # 周期时长 pattern_duration_ms total_slots_in_pattern / slots_per_subframe # 速率 peak_rate_bps bits_per_pattern / (pattern_duration_ms / 1000) return peak_rate_bps / 1e9 # 示例30kHz, 100MHz, 上行64QAM, 2层MIMO pattern_ul (6, 4, 2, 2) # 特殊时隙2个上行符号 rate_ul calculate_5g_nr_ul_peak_rate(30, 100, pattern_ul, 6, 2) print(f上行峰值速率: {rate_ul:.2f} Gbps)这个脚本和下行版本的主要区别在于tdd_pattern的第四个参数变成了特殊时隙的上行符号数dmrs_overhead默认值提高到0.30modulation_bits通常填664QAM。跑出来上行峰值大约在300到400 Mbps之间和下行差了一个数量级。这个差距主要来自时隙配比不对称、调制阶数低、MIMO层数少三个因素。提示如果做的是FDD场景上下行时隙配比是对称的上行速率会高很多。但5G NR主流部署是TDD所以上行受限是常态。5. 避坑与排查速率对不上的5个常见原因5.1 现象算出来比厂家标称值高很多原因没有扣除PDCCH、PDSCH DMRS、CSI-RS、SSB等开销。很多快速计算只扣了DMRS忽略了控制信道和同步信号的开销。SSB在每个半帧占用4个符号CSI-RS周期发送也要占RE。解决把开销比例从25%提高到30%到35%重新算。或者按3GPP TS 38.214的开销表逐项扣。实际网络中控制信道开销在低负载时可能只有10%高负载时能到30%以上。5.2 现象TDD配比换了但速率没变原因脚本里tdd_pattern参数没更新或者更新了但total_slots_in_pattern没跟着变。常见错误是改了时隙数但忘了改周期时长导致速率计算的分母不对。解决检查tdd_pattern的四个参数是否和实际配置一致特别是特殊时隙的符号数。不同厂家的特殊时隙配比可能不同有的配10:2:2有的配6:4:4。这个差异对速率影响很大。5.3 现象毫米波频段算出来速率反而低原因毫米波用120 kHz SCS符号长度短但每帧时隙数多。如果RB数没跟着调整或者开销比例没变算出来可能比Sub-6 GHz还低。实际上毫米波带宽大400 MHz或800 MHzRB数多速率应该更高。解决检查rb_table里有没有对应大带宽的RB数。400 MHz带宽对应264个RB120 kHz SCS下800 MHz对应528个RB。如果表里没有需要手动扩展。另外毫米波的DMRS开销比例和Sub-6 GHz不同需要单独设置。5.4 现象上行速率算出来只有几十Mbps原因特殊时隙的上行符号数填错了。很多配置里特殊时隙只有2个上行符号如果填成10个上行速率会虚高。反过来如果填成0上行速率会偏低。解决查3GPP TS 38.213的时隙格式表确认特殊时隙的实际符号分配。常见格式是“DL:UL10:2:2”即10个下行符号、2个灵活符号、2个上行符号。灵活符号通常算作下行所以上行只有2个符号。5.5 现象MIMO层数翻倍但速率没翻倍原因DMRS开销随层数增加而增加。8层传输时DMRS端口数从4个增加到8个开销比例从25%上升到35%左右。另外层数增加后信道估计误差变大实际调度可能降阶。解决在脚本里把dmrs_overhead和mimo_layers联动。层数≤4时开销按25%层数4时按35%。这样算出来的结果更接近实际。如果要做精确计算按3GPP TS 38.214的DMRS配置表逐端口算。6. 进阶技巧用速率反推调度策略和终端能力算理论速率不只是为了得到一个数字更重要的是用它来反推网络配置是否合理。我一般会做三件事第一把算出来的峰值速率和现网实测速率对比如果实测只有理论的30%以下说明调度策略有问题可能是MCS阶数上不去或者RB分配不足。第二用上行和下行的速率比判断时隙配比是否匹配业务需求如果下行-heavy业务多但配比是上行-heavy那就需要调整。第三用不同SCS下的速率对比选择参数集30 kHz和60 kHz在覆盖和容量上的权衡算一遍速率就清楚了。还有一个实用技巧把脚本封装成命令行工具输入带宽和配比就能出结果。我习惯用argparse写个小工具放在服务器上每次规划新站点时跑一下比翻厂家文档快得多。import argparse def main(): parser argparse.ArgumentParser(description5G NR峰值速率计算器) parser.add_argument(--scs, typeint, default30, help子载波间隔kHz) parser.add_argument(--bw, typeint, default100, help带宽MHz) parser.add_argument(--dl-slots, typeint, default6, help下行时隙数) parser.add_argument(--ul-slots, typeint, default4, help上行时隙数) parser.add_argument(--special-slots, typeint, default2, help特殊时隙数) parser.add_argument(--special-dl-sym, typeint, default10, help特殊时隙下行符号数) parser.add_argument(--mod-bits, typeint, default8, help每RE比特数) parser.add_argument(--layers, typeint, default4, helpMIMO层数) args parser.parse_args() pattern (args.dl_slots, args.ul_slots, args.special_slots, args.special_dl_sym) rate calculate_5g_nr_peak_rate(args.scs, args.bw, pattern, args.mod_bits, args.layers) print(f下行峰值速率: {rate:.2f} Gbps) if __name__ __main__: main()这个工具跑起来就是一行命令的事比每次打开Excel填公式快。参数默认值设成最常见的配置需要改的时候加参数就行。最后说一个我踩过的坑早期做毫米波规划时直接拿Sub-6 GHz的脚本改了个SCS就用了结果算出来速率比实际低了40%。后来发现是毫米波的RB数和开销比例都不一样而且毫米波通常配8层MIMODMRS开销要按35%算。改完参数后结果就对上了。所以做速率计算参数取值比公式本身更重要每个频段、每种配置都要单独确认。希望帮到你。本文还有配套的精品资源点击获取
