十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

5G小区搜索全流程解析:从PSS/SSS检测到SIB1解码

5G小区搜索全流程解析:从PSS/SSS检测到SIB1解码 简介这是一份面向5G网络优化与通信技术人员的专业技术文档聚焦终端开机后的小区搜索与SIB1获取完整流程可作为日常优化、报告撰写和认证复习的参考资料。内容依据3GPP TS 38.300规范结合同步栅格、主同步信号PSS、次同步信号SSS及物理广播信道PBCH设计拆解了从频率调谐、PSS/SSS检测、PBCH解码、MIB解析到CORESET0配置、DCI 1_0盲解、PDSCH解码与SIB1读取共九个阶段并明确各阶段异常时的回退策略。文档还介绍了SSB探测将PSS/SSS检测与PBCH解码合并的优化方法帮助读者理解小区ID识别、系统帧号获取和系统消息调度的时序逻辑。资源为docx格式全包仅1个文件压缩包大小15KB轻量便携。目前已有375人浏览学习适合5G网络优化工程师、基站维护人员和通信专业学生阅读既可建立完整接入流程框架也能辅助实际优化与排障工作。1. 开机即要闯的第一关5G小区搜索为什么是同步的艺术不少网优同事在弱覆盖区域做过类似的定位手机在重搜网络后要等好几秒才出现驻留图标。这背后其实是5G终端在开机后的第一次握手——小区搜索。在5G NR中UE需要沿着同步栅格逐个频点扫描完成PSS/SSS检测、PBCH解码最终解析出MIB和SIB1才能拿到小区ID和接入配置。这个过程由TS 38.300 5.2.5.3定义是整个5G信令流程的第一环也是网络侧的小区选择、重选和切换正常工作的基础。做网络优化的人如果只看路测RSRP不看小区搜索异常很容易漏掉“信号强但入不网”的假性问题。这篇文章我会把从PSS检测到SIB1解码的完整链路拆开讲顺带给出可复现的参数计算和排错思路。2. 物理层底牌PSS/SSS、PBCH DMRS与同步栅格设计2.1 从TS 38.300看小区搜索定义3GPP在TS 38.300 5.2.5.3中用一段话定义了小区搜索UE获取时间和频率同步并检测该小区ID的过程。这里的“同步”不是简单对上一个参考时钟而是要求UE的本地振荡器与基站保持时间和频率基本一致这才有可能正确解调后续物理信道。检测小区ID则是确定该小区是哪个PCI后续的加扰、解调参考信号序列、波束测量都要依赖PCI。在LTE时代小区搜索只需要扫6个中心RB到了5G NR由于带宽可变、子载波间隔多样终端不可能在所有频点上盲搜。3GPP因此引入了同步栅格它是一组稀疏的频点位置SSB只可能出现在这些位置上。UE扫描同步栅格而不是全带宽搜索复杂度大幅下降。这一点在2.3节会展开计算。2.2 PSS与SSS序列检测如何锁定小区IDSSB由PSS、SSS和PBCH组成。PSS和SSS都是长度127的伪随机序列其中PSS只有3种序列对应物理层小区ID组内的ID 0、1、2SSS有336种序列对应小区ID组号。终端通过相关运算检测PSS最大值确定半帧边界然后再检测SSS得到完整的PCI01007。这种两级检测把PSS-3和SSS-336组合成1008个PCI检测复杂度远低于一次性做1008次全相关。信号长度序列种类承载信息接收端作用PSS1273NID(2)时隙/符号同步粗频率同步SSS127336NID(1)帧同步确定小区ID组PBCH DMRS与PCI和SSB index相关多种部分CRC加扰、SSB time indexPBCH解调参考辅助确定SSB索引PSS检测通常用本地序列与接收信号在时域做滑动相关相关峰超过门限即认为检测到。频偏较大会导致相关峰分裂一般在检测前会先做粗频偏估计。NR的同步栅格步长从5kHz到17.28kHz不等在毫米波频段频率误差可能达到几百ppb所以毫米波终端还会先用PBCH DMRS做二次频偏校正。2.3 同步栅格与GSCN终端去哪里找SSB同步栅格不是在所有频率上都存在3GPP用GSCN来标识这些候选位置。SSB的中心频率和GSCN之间存在分段线性映射关系。工程上常见的问题是计算出的SSB频点落在栅格以外导致前端调谐错误然后PSS一直测不到。所以这一步不能省。下面是GSCN转SSB频率的计算实现按TS 38.104的同步栅格定义分段处理# GSCN - SSB中心频率(MHz) # 范围B/C起算频率固定范围A的N_SSB_Start需要按频段查TS 38.104表5.4.3.1-2 def gscn_to_ssb_freq_mhz(gscn, n_ssb_start_khz0): if 0 gscn 7499: # 范围A0-3000MHz频段实际频点需要叠加上频段相关偏移 return (n_ssb_start_khz gscn * 5) / 1000 elif 7500 gscn 22249: # 范围B3000-24250MHz步长15kHz return 3000 (gscn - 7500) * 15 / 1000 elif 22250 gscn 26639: # 范围C24250-100000MHz步长17.28kHz return 24250.08 (gscn - 22250) * 17.28 / 1000 else: raise ValueError(GSCN out of range) print(gscn_to_ssb_freq_mhz(7800))代码第5行到第8行处理范围A其中n_ssb_start_khz是频段相关的起始偏移第10到第13行处理范围B这是C-Band和大部分主频段常用的区间第15到第17行处理毫米波范围C。注意范围B的步长是15kHz所以同样的GSCN变化在3GHz以上频率偏移更大如果误把5kHz步长用于C-Band算出来的频点会偏离实际SSB几百kHz直接导致PSS相关峰消失。这个函数在写扫频工具或回放log做频点换算时可以直接复用。提示实际网规里SSB频点通常由ssbFrequency参数直接下发但终端在初始小区搜索时必须自己从同步栅格中识别因此网优配置的“频点”需要和GSCN一一对应。另外GSCN和NR-ARFCN是两套编号比如n78频段的SSB周围常看到ARFCN 630000附近但GSCN必须落在同步栅格上两者对不上时UE会优先按GSCN扫描。3. 从MIB到SIB1CORESET0、DCI 1_0盲解与PDSCH探测3.1 PBCH解调与MIB关键字段PSS/SSS检测通过后UE立即解码PBCH。PBCH放在SSB的第二个slot内经过加扰、CRC和极化编码。终端解出MIB后等于拿到了进入系统信息大门的钥匙。MIB本身非常短但每个字段都直接决定下一步动作。MIB字段比特数含义使用场景systemFrameNumber6系统帧号高6位与相位隐含的低4位组成10bit SFNsubCarrierSpacingCommon1公共子载波间隔为15或30kHz确定SIB1的numerologyssb-SubcarrierOffset4SSB相对CRB的频域偏移计算SIB1的小区定义pdcch-ConfigSIB18CORESET0和SearchSpace0索引找到PDCCH监测位置reserved1保留位固定为0解码MIB时UE还会利用PBCH DMRS的相位与序列来获取SSB time index的低位信息。在非初始接入场景中这些用于波束测量和邻区识别。因此MIB不只是“消息”它同时携带了时域位置的隐式编码。3.2 pdcch-ConfigSIB1如何推导CORESET0与搜索空间pdcch-ConfigSIB1可以说是整个小区搜索过程中最关键的8个比特。高4位controlResourceSetZero指示CORESET0的时频资源组合低4位searchSpaceZero指示监测周期、偏移和持续符号数。两者组合决定了UE在找到MIB后去哪个时频位置盲解PDCCH。如果这一项配置错误后面SIB1解析必然失败而且失败现象会非常“干净”PBCH成功MIB解码成功但PDCCH盲检一直无结果。下面是一段解析MIB payload的Python函数输入为PBCH解调后的有效载荷bit list输出MIB关键字段# 简化MIB解析payload为32位bit列表实际信道编码后还需解Rate match def decode_mib(payload): if len(payload) ! 32: raise ValueError(payload必须为32位) sfn_high6 int(.join(str(b) for b in payload[0:6]), 2) scs_common 15 if payload[6] 0 else 30 ssb_offset int(.join(str(b) for b in payload[7:11]), 2) pdcch_config_sib1 int(.join(str(b) for b in payload[11:19]), 2) coreset0_idx pdcch_config_sib1 4 searchspace0_idx pdcch_config_sib1 0x0F return { sfn_high6: sfn_high6, subcarrier_spacing_common_khz: scs_common, ssb_subcarrier_offset: ssb_offset, coreset0_index: coreset0_idx, searchspace0_index: searchspace0_idx, } # 示例一台设备MIB中pdcch-ConfigSIB10x3C payload [0]*11 [0,0,1,1,1,1,0,0] [0]*13 mib decode_mib(payload) print(mib)代码第4到第6行提取SFN高6位第7行根据第7个比特决定子载波间隔是15kHz还是30kHz。第9行到第11行提取pdcch-ConfigSIB1的8个比特其中高4位是coreset0_index低4位是searchspace0_index。示例中高四位是3、低四位是12分别对应TS 38.213表13-1和表13-15中的一类配置具体RB数和符号数需要结合子载波间隔查表。如果网优配置的SSB位置与系统默认不一致就需要检查这8bit是否同时兼容频段和带宽。3.3 DCI 1_0盲解与SI-RNTI调度SIB1在找到CORESET0和搜索空间后UE需要盲解DCI 1_0。DCI 1_0是调度SIB1的下行控制信息其CRC用SI-RNTI加扰SI-RNTI固定为0xFFFF。UE不知道聚合级别和DCI位置所以要在搜索空间候选集中做多轮尝试。每轮解出候选DCI后用SI-RNTI做CRC校验校验通过则认为成功。之后从DCI 1_0的“systemInformation1”字段中拿到频域资源分配、调制编码方式和TB大小再在实际映射的PDSCH上解出SIB1。这里有三个常见误判一、把SI-RNTI当成RNTI配置下发实际在初始接入阶段终端固件里写死二、把DCI 1_0的DCI format误配成其他格式导致盲解次数翻倍三、忽略PDCCH的聚合等级CORESET0的候选集合由searchSpaceZero确定不同子载波间隔下候选数量不同。一般聚合级别为4和8时候选数量通常在2到4个之间。调试时可以通过日志观察盲解次数如果候选数量总是超过理论值优先怀疑pdcch-ConfigSIB1与ssb-subcarrierOffset之间的RB偏移是否一致。SIB1解码成功后UE从SIB1的si-SchedulingInfo中获取其他SIB的调度窗口。也就是说SIB1既是第一个广播消息也是其他SIB的“目录”。此时小区搜索流程才算完整结束。整个链路中任何一步失败终端都会回到频点调谐而不是从失败步骤重试因此排障时最好能从日志中定位到底是在PSS、PBCH还是PDCCH阶段失败的。4. 5G全网排障视角小区搜索失败分析与网络优化参数调整4.1 失败环节与根因定位小区搜索失败不会是“整条链路都失败”而是有阶段性的。以我的排障经验大多数问题集中在两个点一是同步栅格扫描不到SSB二是找到SSB后PDCCH盲解不成功。前者常由频率配置错误或SSB功率过低引起后者常由pdcch-ConfigSIB1和实际带宽配置不匹配造成。另外SSB周期过长也会导致搜索时延变大。虽然UE不需要等SSB周期结束才能检测因为SSB是周期发送的但若网络侧将SSB周期设为160ms在失步重搜场景下终端就可能多等一个周期。所以在优化中不建议把SSB周期调得过大尤其是高移动性区域。4.2 从路测日志中快速定位问题阶段网优人员手头的路测软件基本都能输出事件日志但要看明白阶段特征需要一点技巧。通常日志中会记录PSS correlation peak、SSB RSRP、PBCH decoding result、SIB1 acquisition status等。如果没有这些字段也可以通过RSRP与解码结果的关系来推断。下面的脚本可以从路测CSV数据中筛出“SSB信号好但SIB1解码失败”的样本这类样本大概率是配置问题而不是覆盖问题awk -F, NR1{print; next} $4-110 $NF0{print} nrdrive_test.csv假设CSV的第4列是SSB RSRPdBm最后一列是SIB1解码状态1成功、0失败。这个命令的含义是取表头然后输出RSRP高于-110dBm但SIB1解码失败的每一行。如果筛出的样本占比很高说明该路段的SSB覆盖足够问题在MIB/CORESET0或系统信息配置上。反之如果RSRP全面低于-120dBm则先做覆盖补强不用急着查配置。用Python做统计更直观import csv fail_but_good 0 total_fail 0 with open(nrdrive_test.csv) as f: for row in csv.DictReader(f): if int(row[sib1_decoded]) 0: total_fail 1 if float(row[ssb_rsrp]) -110: fail_but_good 1 if total_fail 0: print(fSIB1失败样本中RSRP-110dBm占比: {fail_but_good/total_fail:.1%}) else: print(无SIB1失败样本)这里total_fail统计所有SIB1解码失败的点再筛选出其中SSB RSRP较好的部分。如果这个占比超过60%基本可以排除“纯弱覆盖”应优先回看该区域小区重选参数和CORESET0配置。注意csv.DictReader要求表头有sib1_decoded和ssb_rsrp字段实际路测软件导出时可能叫别的名字需要按头文件调整列名。4.3 关键参数调整建议小区搜索涉及的参数可以分成两组终端侧的搜索策略和网络侧的广播配置。网络侧我们能直接影响的是SSB频点、SSB周期、功率以及CORESET0配置。下面是一张常用调整表基于TS 38.213和38.331。参数典型值影响调整建议ssbFrequency由GSCN换算决定SSB在频域位置必须落在同步栅格上ssb-periodicityServingCell5/10/20/40/80/160ms搜索/测量时延一般用20ms高优先级小区可设10msss-PBCH-BlockPower如26~36dBm覆盖范围与RSRP和PSS检测成功率正相关pdcch-ConfigSIB18bit查表指示CORESET0和搜索空间不要脱离带宽配置随意改controlResourceSetZero高4bitCORESET0的时频大小需要在RB数和符号数之间做权衡我曾在一次整改中遇到这样的情况某城中村站点RSRP在-95dBm左右但SIB1解码失败率接近30%。排查后发现该基站开了40MHz带宽却沿用了默认的pdcch-ConfigSIB1CORESET0的时频范围偏小导致PDCCH和PDSCH频繁碰撞。将controlResourceSetZero调整到与40MHz匹配的索引后SIB1成功率恢复到99%以上。调整这类参数后验证方法不光是看路测RSRP还要关注终端日志中的“PSS Detection Success”事件和“SIB1 Acquisition Time”。如果SIB1获取时间中位数超过100ms就要回头查上面的表。5. 进阶利用SSB波束索引和SIB1窗口估算接入时延5.1 从SSB index反推波束覆盖在SA组网中SSB的每个burst内最多包含64个候选SSB索引具体取决于子载波间隔和频段每个索引通常对应一个SSB波束。SSB index可以通过PBCH的DMRS序列和MIB中的ssb-SubcarrierOffset隐式部分共同确定。网优工程师看到路测数据里的SSB RSRP和SSB index就能判断终端收到了哪个方向的波束甚至可以从相邻各个波束的信号组合推断终端相对基站的角度区间。实用技巧是如果同一个小区的SSB index 0和index 1的RSRP差值一直小于3dB而其他索引差值很大说明终端落在两个波束的交叠区域可能处于波束主瓣边缘。此时可以适当调低波束切换门限避免终端在波束边缘频繁触发测量报告进而拉低接入成功率。5.2 计算最小系统信息获取时延小区搜索优化需要量化评估特别是接入时延这个指标。它由三部分构成频点扫描时间、SSB检测与同步时间、MIBSIB1获取时间。前两部分与UE实现强相关我们可以在网络侧最小化SIB1等待时间。SIB1的调度由si-WindowLength和si-Periodicity决定默认窗口长度为5ms、周期为160ms。UE在周期内需要醒来监听PDCCH所以从MIB解码完成到SIB1真正接收平均等待约半个SIB1周期。结合SSB周期的等待可以用下面的代码粗略估计def estimate_system_info_delay(ssb_period_ms20, sib1_period_ms160): # 平均等待SSB需要半个SSB周期 ssb_wait ssb_period_ms / 2 # 平均等待SIB1调度需要半个SIB1周期 sib1_wait sib1_period_ms / 2 # 再加上PBCH解调和DCI盲解的处理时延约10ms量级 processing_delay 10 return ssb_wait sib1_wait processing_delay for sib1_p in [40, 80, 160]: print(fSIB1周期{sib1_p}ms, 估算时延{estimate_system_info_delay(20, sib1_p)}ms)这个函数把SSB同步和SIB1调度独立看待实际网络里两个周期可能存在相位对不齐的情况但用来对比不同SIB1周期的相对差异足够了。从输出结果看SIB1周期160ms时估算时延约110ms而SIB1周期40ms时约50ms。当然减少SIB1周期会增加PDCCH的资源占用实际部署需要平衡。验证时可以从终端log里取“MIB decoded”和“SIB1 received”两个时间戳相减和这个估算值对比。如果差距超过一倍大概率是SSB周期和SIB1周期之间的相位关系没有对齐可以尝试在si-SchedulingInfo中显式配置窗口偏移使SIB1排在每个SSB burst之后减少终端持续唤醒时间。本文还有配套的精品资源点击获取
返回列表