1. 为什么要在ORAN上做NB-IoT下行链路
1.1 ORAN的软件化带来的机会与考验
这几年做无线接入网项目的朋友应该都感受到了,ORAN(Open RAN)架构从概念验证逐渐走向小规模部署,而NB-IoT在海量物联网连接里依然扮演着重要角色。尤其在垂直行业园区、智慧表计这类场景里,客户往往要求在同一套ORAN基础设施上把NB-IoT的下行链路也跑起来。这不再像传统厂商设备里那样是一个软件Feature开关,而是要从协议栈、资源调度、天线射频到网管配置,全链路确认一遍。
ORAN把所有功能拆成了三个大块:O-RU负责射频和中频,O-DU负责物理层和MAC层,O-CU负责RRC和PDCP。对NB-IoT下行链路来说,所有基带处理、信道编码、调制映射、资源分配都发生在O-DU上,O-RU只做波形发射。这意味着,启用NB-IoT下行链路的核心工作不是换硬件,而是让O-DU的协议栈认得出NB-IoT的信道结构,能在正确的时频资源上生成NPSS、NSSS、MIB-NB、SIB1-NB这些系统消息,同时把NPDCCH和NPDSCH调度起来。
与传统一体化的BBU相比,这种软件化架构带来了两个直接变化。第一,下行链路的能力不再绑定在专用芯片上,只要O-DU的计算资源和基带处理板卡够用,理论上就能同时跑LTE和NB-IoT两套下行协议。第二,由于O-RU与O-DU之间走的是标准化的eCPRI前传接口,任何一家O-RU只要通过了互操作测试,都可以接入NB-IoT下行链路。但也别高兴太早,正因为它是个开放系统,配置链路比原来长了一倍,任何一个环节的接口参数不对,终端可能连小区都搜不到。
1.2 NB-IoT下行链路到底包含什么
要理解NB-IoT下行链路,首先要把它拆成五条物理信道:NPSS用于终端粗同步,NSSS用于精同步和小区ID识别,NPBCH承载MIB-NB,NPDCCH承载下行控制信息(DCI),NPDSCH承载用户数据和系统消息。下行链路是否"通",本质就是这五条信道能不能在终端侧被正确解调。
NB-IoT下行带宽只有180kHz,也就是一个LTE物理资源块(PRB),子载波间隔固定15kHz,调制方式只支持QPSK。对比LTE下行最高256QAM,NB-IoT明显牺牲了峰值速率,换来的是更低解调门限和更强的覆盖能力。也正因为窄带,它的帧结构、重传机制和资源分配方式都和LTE有很大差异。比如NB-IoT一个无线帧还是10ms,但NPSS固定在每个子帧3到9上发送,NSSS在每个偶数帧的子帧9上重复,MIB-NB则要经历640ms的周期才能完整发完一次。
记得第一次在测试台上抓NB-IoT下行频谱时,如果不告诉设备去解析NPSS,光看频谱你可能会以为O-RU没有发射任何东西,因为所有信号都挤在一个PRB里,功率密度很低。这个现象恰恰反映出NB-IoT下行链路的目标:把有限的功率集中在窄带资源上,通过重复发送让IoT终端即便在负信噪比环境下也能完成解调。所以在ORAN上启用NB-IoT下行链路,最核心的验证标准不是速率,而是覆盖等级和重传机制是否符合规划。
2. 下行链路启用的前置条件与关键参数
2.1 部署模式与频谱规划
启用NB-IoT下行链路之前,第一件要定死的事是部署模式。NB-IoT支持三种模式:Standalone独立部署、Guard Band保护带部署、In-Band带内部署。在ORAN场景下,最常见的其实是In-Band,因为这能复用LTE的现网频谱和已经建好的O-RU/O-DU硬件。
如果是In-Band模式,下行链路规划就要格外小心了。NB-IoT要占用LTE频谱里的某一个PRB,这个PRB不能和LTE的PDCCH区域、CRS端口以及同步信号冲突。LTE的CRS在每个子帧的前几个OFDM符号里,NB-IoT在映射NPSS、NSSS和NPBCH时不能占用这些符号,否则终端在解调参考信号时会互相干扰。
实际规划中我会按下面的顺序操作:先确认LTE小区的物理小区ID和CRS天线端口数,再根据LTE的PCI模6确定CRS在频域上的具体位置,然后在PCI模6不等于CRS频移的PRB里选一个作为NB-IoT的锚点PRB。这一步很多人会忽略,觉得ORAN架构下基带已经解耦,资源冲突可以自动避开。实际上O-DU不会自动干活,所有资源映射参数都得在网管配置里显式写明。
使用独立部署模式时,情况简单一些,NB-IoT占用的载波是单独分配的频谱,不存在和LTE复用问题。但此时O-RU需要支持该频段的工作带宽和功率配置,如果O-RU是宽频产品,要确认滤波器通道在目标频段内的增益平坦度够不够,避免因为O-RU硬件特性导致下行有效全向辐射功率不足。
2.2 覆盖等级与重传机制
下行链路的"能不能通"和"通得好不好",最后都落在覆盖等级(CE Level)和重传次数这两组参数上。
NB-IoT定义了三个覆盖等级:CE0、CE1和CE2。终端驻留后会上报参考信号接收功率(RSRP),网络侧根据RSRP把终端分到不同的覆盖等级,每个等级对应不同的最大重传次数和MCS。以典型的商用配置为例,CE0对应RSRP大于-105dBm,下行NPDSCH最大重传次数可能只有1到2次;CE1对应RSRP在-115dBm到-105dBm之间,重传次数4到8次;CE2对应RSRP低于-115dBm,重传次数可以配置到16次甚至更多。
重传次数乍一看就是个计数器,但它背后是链路预算的权衡。NB-IoT下行最大耦合损耗目标通常在164dB量级,这个指标要靠重传增益来凑。每次重传理论上能带来约3dB的累积增益,30次重传加起来就是15dB,覆盖能力比单次发送显著提升。代价则是时频资源被重复占用,一个终端重传时,其他终端就得等待调度。
我在现场配置时有个习惯:先把CE2的重传次数上限放开,用扫频仪和终端实测覆盖边缘的误块率,再逐步收缩重传次数。不要一上来就按保守值全开重传,不然小区很快被重传塞满,下行吞吐会变得很难看。顺便提醒一个容易出错的点——NPDCCH和NPDSCH的重传次数是独立配置的,两个信道的重复因子最大值各自有一张映射表,配置的时候要分别确认,不能只改一个。
2.3 O-RU能力确认与O1接口配置
很多ORAN项目里,O-DU侧的下行协议栈已经启动,但终端就是搜不到小区,最后查下来问题出在O-RU上。O-RU作为射频单元,它的固件里有一个通道使能列表,NB-IoT的窄带信号如果不在O-RU的滤波器通带配置里,会被直接滤掉。
所以在做任何下行链路配置之前,先通过O1接口的M-plane把O-RU的射频能力扫一遍,确认它支持的带宽、频段、最大发射功率以及是否包含NB-IoT特性。商用O-RU在默认固件里通常只开启了LTE宽带通道,NB-IoT窄带通道需要单独下发配置文件。这个配置走的是O1接口的Netconf/YANG模型,把O-RU的射频通道状态从Disabled改成Enabled,然后重启一次射频通道。
这个步骤听上去平淡,但遇到的实际坑非常多。比如某些O-RU厂商的固件版本里,NB-IoT特性需要在License文件里单独购买,O1配置即使下发成功,硬件也不会真正发射。另一个坑是前传接口上的天线端口映射,O-DU下发NB-IoT下行数据时按照特定的eCPRI流序号发送,O-RU如果收到的流量携带的天线端口号和本地配置不一致,信号会静默丢弃。
我的建议是,首次接入新O-RU型号时,先不走NB-IoT,直接用LTE信号把O-RU和O-DU的前传链路调通,确认C-plane控制字和U-plane数据都能正常流转。然后再叠加NB-IoT信道,这样锁定问题范围会高效很多。
3. 实操过程:下行链路一步步调通
3.1 同步信号与系统消息的建立
下行链路真正开始发射的第一步,是让终端能完成小区搜索。这个过程依赖NPSS和NSSS两条同步信道。在O-DU配置里,需要明确写入小区的物理小区ID(PCI),NPSS和NSSS的序列都从PCI推导而来。除此之外还要配置锚点PRB的位置和子载波偏移。
以In-Band模式为例,MIB-NB里需要携带SIB1-NB的调度信息、操作模式指示、频带指示等字段。MIB-NB周期640ms,重复8次,意味着终端要监听至少一个完整的MIB窗口才能拿到系统信息。如果O-DU侧MIB内容配置有误,比如操作模式写了Standalone,但实际下行频点在LTE带内,终端解读MIB后就会按错误方式去解调SIB1-NB,导致驻留失败。
我在现场调试时有一个必查项:用协议分析仪抓O-DU发给O-RU的U-plane数据,检查NPBCH的星座点是否正常。很多O-DU软件在早期版本里对MIB-NB的CRC附加和加扰过程处理不对,星座图看着没问题,但终端解调时ART序列校验不过。这类问题排查起来特别隐蔽,因为频谱仪上看到的信号是"有"的,只有上终端才知道"不可用"。
SIB1-NB的配置同样关键,它携带小区接入参数、频带列表、重选参数和NPDCCH的公共搜索空间配置。终端只有读完SIB1-NB,才知道接下来去哪里监听NPDCCH。如果这里把NPDCCH周期配错了,比如公共搜索空间的最大重复次数配置只有4次,但终端却按16次去盲检,就会造成寻呼消息丢失,触发终端反复发起随机接入,网络表现就是大量的RRC连接建立失败。
3.2 NPDCCH控制链路与DCI调度配置
NPSS和系统消息建立起来之后,终端能搜到小区,但不代表下行业务链路已经通了。终端还要依靠NPDCCH接收调度指令,NPDCCH承载三种DCI:N0调度上行、N1调度下行、N2用于寻呼和随机接入响应。对于下行链路启用来说,最核心的是N1和N2。
NPDCCH的搜索空间由RRC参数里的Narrowband-PDCCH-config配置,核心参数是搜索空间周期、起始子帧、持续时间以及最大重复次数。这些参数组合起来形成一张搜索空间表,比如周期128个子帧、起始偏移0、持续2个子帧。终端会按这个表在特定子帧位置做盲检。
我在实际操作中遇到过最典型的故障:搜索空间里的起始子帧偏移配置和O-DU发射时的子帧对齐不一致,导致终端在错误的位置盲检NPDCCH。排查这个问题的思路是同时抓取O-DU的用户面子帧索引和终端侧的日志,看终端实际在哪个子帧上解到了DCI。如果两边对不上,基本可以判断是搜索空间配置偏移问题,而不是射频问题。
DCI N1里的调度延迟参数k0同样值得单独强调。k0表示从NPDCCH所在子帧到NPDSCH所在子帧的间隔,它和HARQ的重传时序绑定在一起。在配置时,如果k0取值太小,O-DU的调度器在没有完成MAC层资源预分配时就会发出DCI,终端在指定子帧里解不到NPDSCH。如果k0取值太大,则增加了下行数据链路的空口时延。ORAN的调度器如果本身面向LTE优化,往往对NB-IoT的k0范围不熟悉,需要手动指定一个合理区间。
3.3 NPDSCH业务链路与HARQ重传配置
NPDCCH通之后,轮到NPDSCH。NPDSCH承载下行用户面数据以及部分系统消息,它支持的最大传输块大小受限于180kHz带宽。资源分配的方式是给终端指定若干资源单元(RU),每个RU对应一段时频资源,再叠加MCS和重传次数。
我在配置NPDSCH时最看重的是下行MCS选择逻辑。因为NB-IoT只支持QPSK,MCS的可调空间不大,但O-DU的调度器会根据CQI上报去动态调整MCS。如果调度器的CQI滤波器时间常数设置太长,在覆盖边缘的终端会频繁出现NPDSCH解码失败,然后触发HARQ重传。这个问题在实际网络中表现为下行速率不稳定,但速率本来就低,用户感知不到,只能通过路测日志里的BLER统计发现。
HARQ重传参数是NB-IoT下行链路里一个绕不开的优化点。NB-IoT支持下行异步HARQ,重传次数可以从1一直到2048。每个终端的HARQ进程分配数量有限,意味着如果某一条链路持续触发重传,这个终端占用的下行资源会指数级上升,俗称"重传风暴"。
对于重传配置,我的经验是把最大HARQ重传次数配置在中等档位,并在O-DU里开启重传统计监控。当统计显示某终端重传次数超过设定值时,主动下发RRC重配置,把该终端调整到更低的覆盖等级,或者降低它的调度优先级,避免影响其他终端。
4. 覆盖增强与IoT典型应用场景落地
4.1 智能表计场景
NB-IoT下行链路最成熟的应用场景无疑是水、电、气、热智能表计。这类场景的特点是终端数量大、单终端流量极小、数据上报周期长、部分表计安装在楼宇地下室甚至管道井里,覆盖需求非常极端。
在ORAN架构下做表计场景时,下行链路启用后的第一个考验就是网络能不能容纳大量终端的周期性寻呼。每天凌晨是表计集中上报窗口,O-DU要同时处理大量终端的NPDCCH寻呼调度。如果搜索空间配置过于保守,寻呼容量不足,终端就会出现上行数据到了网络侧,但无法下发ACK确认的现象,形成大量重连。
我在项目里常用的优化手法是给表计场景单独划分一个NB-IoT专属小区,而不是和eMBB业务混跑。下行链路的NPDCCH周期按128个子帧配置,终端几乎全天候可以收到下行指令。实测下来,单小区支持十万级表计终端的离线容量是没问题的,关键是下行寻呼周期和重复次数要跟网络节点数匹配。
4.2 智慧停车与市政设施监测
智慧停车的地磁传感器、市政路灯、井盖监测、垃圾桶满溢检测,这些场景对下行链路的需求和表计又不一样。这些终端往往处于有短暂业务、长时间待机的状态,靠电池供电,对下行功耗极度敏感。
从下行链路角度看,这类场景最需要注意的是PSM和eDRX这两项省电特性的配置。终端进入PSM后,网络侧缓存的任何下行数据都要等终端下次主动上行时才传送。O-DU的下行调度器必须正确处理"终端不可达"状态,不要在终端睡眠期间反复发起重传,否则不仅浪费下行资源,还会加速终端电量消耗。
我有个印象深刻的调试经历:一批地磁桩终端每隔几分钟就离线,排查发现O-DU的寻呼策略在终端进入PSM后依然持续下发寻呼消息,导致终端每次从睡眠中醒来都要处理冗余的寻呼重传。修改O-DU的寻呼状态机,让它在终端进入PSM后暂停下行寻呼,问题立刻解决。这个案例很好地说明,ORAN的软件化灵活性是双刃剑——配置得当能省电,配置不当也会白白浪费。
智慧停车场景还有一个高频需求就是下行参数远程调优。因为停车场的覆盖条件往往随着周边建筑施工、季节变化而改变,传统网络需要人工到现场改配置。而ORAN的近实时RIC可以基于路测数据和终端上报,自动调整NPDCCH重复次数和发射功率参数,把原本几天一次的巡检变成分钟级闭环。这个能力虽然不是NB-IoT本身带来的,但ORAN架构让这类优化真正落地了。
4.3 结合RIC的节能与覆盖优化
谈ORAN的NB-IoT应用,没法绕过RIC这个亮眼的部分。非实时RIC可以通过A1接口下发策略,近实时RIC通过E2接口从O-DU采集NB-IoT下行链路的性能指标,然后闭环调整调度参数。
一个实际的节能策略是:在凌晨低业务量时段,RIC下发策略把NPDCCH的搜索空间周期从64个子帧拉长到256个子帧,同时降低MIB-NB里广播的SIB1重传次数。这样终端在空闲态下监听控制信道的频率降低,基站侧下行功放的开启时间也同步减少。别小看这一点,对于数量庞大的IoT小区来说,每小区每天节省的射频功耗累积起来相当可观。
在覆盖优化方面,RIC可以结合TA(终端到达角)和RSRP上报,生成下行发射功率热力图。当某个区域出现明显的覆盖空洞时,RIC下发指令把对应PRB的发射功率提高几个dB,并同步提升NPDCCH重传次数。这种精细化的覆盖补偿,在传统一体化基站里要实现需要动硬件,而在ORAN架构里就是一条策略消息的事。
我还想提醒一点:RIC的下行调优策略不能直接修改物理层发射参数而不经过校验。A1策略下发后,应该在O-DU侧做一轮一致性校验,确认RIC建议的重复次数、MCS等参数在协议规定的取值范围之内,避免非法参数导致信道波形异常。
5. 常见问题与排查心得
5.1 终端搜网失败的排查顺序
ORAN NB-IoT项目里最常被问的问题,就是"终端为什么一直搜不到小区"。遇到这种情况,我的排查顺序是按照物理信道从底层往上走。
先看O-RU是否真的在发射。用频谱仪看下行频点附近是否有约180kHz的窄带信号,如果没有,检查O-RU的通道使能状态和License。
再看O-DU的同步信道是否发射正常。如果频谱上能看到窄带信号,但终端始终无法同步,大概率是NPSS和NSSS的PCI配置或子帧位置出了问题。这时的排查手段是通过O-RU的回传口抓取U-plane IQ数据,在软件里做一次同步解调,确认NPSS时域位置与协议吻合。
然后检查MIB-NB和SIB1-NB的内容。这一步最有效的方法是直接查询O-DU的SIB配置数据库,比对操作模式、PRB位置、频带号等字段。
我在一个实验室项目里,曾排查过三天都搜不到网的问题,最后发现是O-DU的时钟同步模块没有锁定GPS,导致O-RU发射的无线帧时序整体偏移了几个微秒。NB-IoT终端对时偏的容忍度虽然比LTE高,但偏移过大也会导致同步失败。所以只要遇到搜网问题,先确认全链路的时钟同步状态,往往能省去很多弯路。
5.2 下行重传率飙升的根因排查
下行链路通了之后,最常见的性能问题就是重传率居高不下。重传率飙升的第一个嫌疑是覆盖问题,但很多时候查遍覆盖都是正常的,问题出在参数配置上。
我遇到过一则典型案例:小区CE0门限配得太紧,导致大量中远点终端被打进CE1和CE2,NPDCCH和NPDSCH的重复次数随之成倍增加。表面看起来是重传率过高,本质上是覆盖等级划分不合理。解决办法是参考现场路测的RSRP分布,把CE0门限适当放宽,让更多中近点终端使用较低的重传次数。
第二个典型根因是O-DU的调度器不支持对NB-IoT终端的自适应调制编码调整。NB-IoT的CQI上报周期很长,调度器如果一直使用保守的MCS和过大的重复次数,重传率当然不高,但资源效率极低。这种情况下要确认O-DU的调度算法有没有针对NB-IoT做优化,目前的商用ORAN解决方案在NB-IoT自适应调度方面差异很大。
第三个根因则让人哭笑不得——基站和终端的HARQ进程号映射不一致。O-DU按进程号0到7循环调度,但终端侧某些模组对DCI里的HARQ进程号解读有偏差,导致解码结果总对不上,层层触发重传。这个问题只能通过更换模组或者升级O-DU协议栈版本来解决,好在现在主流模组厂商已经修掉了大部分类似问题。
5.3 O-RU与O-DU协作异常时的对策
ORAN前传接口的互操作性,是实际部署里绕不开的坎。即使O-RU和O-DU都宣称符合O-RAN规范,不同厂商的设备放在一起仍可能出现各种奇怪问题。
最常见的协作异常是C-plane控制字里的符号偏移和参数集不匹配。NB-IoT的参数集和LTE不同,O-RU如果只按LTE的参数集解析C-plane消息,就会把NB-IoT的时隙资源映射错。排查时可以开启O-RU本地日志,查看它收到C-plane后识别出的子载波间隔和CP模式,和O-DU发出来的配置做比照。
另一个对策是切换前传类别。O-RAN定义了Category A和Category B两种前传功能拆分方式,Category A的O-RU只做射频,而Category B的O-RU要承担部分物理层处理。NB-IoT下行信号如果走Category B,而O-RU的固件里没有正确实现NB-IoT相关的物理层功能,信号就会出现异常。遇到这种情况,我会优先建议把链路切到Category A,让O-DU侧全权处理物理层,O-RU只当射频模块用,互操作问题通常能解决大半。
最后想说,ORAN的NB-IoT下行链路启用并不是一个标准化程度很高的过程,每个设备商的实现都有细微差别。在实际项目中,我养成了一个习惯:每次做完一轮新配置,就把O-DU和O-RU两侧的关键参数导出存档,和下一轮配置做差异比对。这能帮你在参数被误改后快速回滚,也是最简单有效的现场保护手段。