ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PDCCH深度解析:5G网络指挥中枢的原理与调优实战

PDCCH深度解析:5G网络指挥中枢的原理与调优实战

PDCCH这个词,干5G的人都不陌生。但说实话,能把PDCCH真正讲透的没几个。它是Physical Downlink Control Channel的缩写,中文叫做物理下行控制信道,却干着整个网络的“指挥调度”工作。数据什么时候发、发给谁、用什么格式发、上行资源怎么分配,全靠这一条信道发号施令。你甚至可以把它理解成交通警察的手势:没有它,PDSCH和PUSCH这两条“车流”就只能在路上乱撞。

这篇内容,重点讲清楚三件事:PDCCH到底怎么工作的,工程上怎么配置和调优,以及真实网络里频繁踩坑的问题怎么排查。不管你是刚入行的网优工程师、做协议栈开发的软件工程师,还是在高校研究空口物理层的同学,都应该能从里面拿到一些直接用得上的东西。

1. 为什么PDCCH是5G网络的“指挥中枢”

1.1 PDCCH到底在做什么

PDCCH承载的是下行控制信息,也就是DCI。UE要收发数据,必须先知道基站下发了什么指令。比如,基站想在某个时隙给你发下行数据,那就必须在PDCCH上先告诉你:“注意了,在时隙n、频域起始RB为X、时域符号为Y的位置,我将使用调制方式QAM256、传输层数2、码率0.5给你发一个传输块。”这个信息就是DCI。UE收到DCI后,才能准确去PDSCH上解数据。

反过来,当UE要发上行数据,也需要PDCCH先分配PUSCH资源,或者专门下发一个上行授权,告诉UE“你可以在这个时频资源上用多少功率、什么MCS(调制编码方案)发数据”。所以,无论是下行还是上行,PDCCH都是第一步。PDCCH一旦故障,整个数据面就瘫痪了。这就像一座大楼的中央控制系统失灵,电梯、空调、门禁全部失去统一指挥,出问题是迟早的事。

1.2 和LTE相比,PDCCH有什么变化

LTE时代,PDCCH固定占据每个子帧的前1到3个OFDM符号,频域占据整个带宽,而且不能做波束成形(LTE是小区级天线端口,PDCCH用全向或扇区级发射)。到了5G NR,基于波束赋形的需求,PDCCH必须足够灵活,于是引入了CORESET(控制资源集)的概念,频域上可以只占一部分带宽,时域上可以配置成1到3个OFDM符号,位置也不一定在子帧最前面。这就像一个临时停车场:以前整个广场都是停车位,但利用率低;现在改成若干个小型专用停车场,有车进有车出,灵活多了。

另一个大变化是PDCCH可以基于波束进行发射。5G是高频为主,如果还用LTE那种全向方式,覆盖会很差。所以NR里PDCCH是跟着SSB(同步信号块)或者CSI-RS的波束方向走的,每一个波束方向上的UE都可以收到对应的波束赋形后的PDCCH,覆盖和可靠性都大幅提升。

1.3 PDCCH设计要解决的核心矛盾:可靠性 vs 开销

PDCCH承载的是控制信息,控制信息一旦出错,后果很严重。比如基站告诉你下行分配的资源块是RB0到RB10,但UE错解成RB0到RB20,那解出来的数据全是乱的,还可能干扰到别人。所以PDCCH的可靠性要求非常高。但提高可靠性的手段无非是降低码率、提高聚合等级、增加发射功率,这些都会消耗更多资源。PDCCH资源占用多了,留给PDSCH数据信道的资源就少了,用户速率就会降下来。

在工程上,这就是个绕不开的权衡。极端情况下,如果把所有CCE(控制信道单元)都配成最高聚合等级,覆盖是稳了,但系统容量几乎归零。反过来,如果都得用最低聚合等级,容量上去了,边缘用户根本收不到控制信息。所以实际网络里,PDCCH的配置从来不是一成不变的,要依据覆盖场景、用户分布、信道质量动态调整。

2. 拆解PDCCH的时频资源与传输流程

2.1 CORESET:PDCCH的“专用停车场”

CORESET是PDCCH在时频域上的资源集合。它由频域上若干个资源块(RB)和时域上1到3个OFDM符号组成。这里面最关键的两个参数是:频域尺寸(用RB数表示)和时域长度(用符号数表示)。比如CORESET可以配置为带宽48个RB、长度2个符号,也可以配置为带宽96个RB、长度1个符号。

CORESET的最小单位不是RB,而是REG(资源元素组),一个REG在频域上等于一个RB,时域上等于一个OFDM符号。REG又被捆绑成REG bundle,用于预编码的粒度。进一步地,若干REG通过交织或非交织的方式映射到CCE上。一个CCE在NR里等于6个REG,即6个RB乘以1个符号的REG。如果CORESET时域长度是2个符号,那么一个CCE的6个REG可能分布在2个符号上,一般是3个REG在第1个符号,3个REG在第2个符号。

为什么要把CCE拆散到不同符号上?因为交叠信道编码和解调需要频率分集。如果全部挤在一个符号上,碰上频率选择性衰落,整个CCE都受影响。分散到多个符号,即使某个符号被深衰落打掉,其他符号也能帮忙把信息解出来。这就是频率分集带来的增益,也是NR设计上比LTE更精细的地方。

实际规划CORESET时,要注意频域带宽和时域长度的组合。带宽太小、符号数太少,能放的候选位置就少,盲检复杂度倒是低了,但可用的PDCCH容量也小了。带宽过大、符号数过多,则会浪费资源,因为PDCCH资源是周期性分配的,不用也会空着。

2.2 搜索空间与聚合等级:数据怎么排队上车

有了CORESET,还要知道PDCCH在CORESET里面具体从哪些时频位置开始发送。这个“查找坐标”的规则就叫做Search Space(搜索空间)。NR里有两个大类:公共搜索空间(Common Search Space,CSS)和UE专用搜索空间(UE-specific Search Space,USS)。

CSS主要用于系统消息、寻呼、随机接入响应等公共信息的传递,它使用固定的RNTI和较固定的位置。USS则是每个UE根据自己身份标识(如C-RNTI)算出来的专属位置,用于调度该UE的上/下行数据。之所以要算出一个专属位置,是为了避免多个UE在同一个资源上挤破头,也能让UE不用遍历所有位置,只在属于自己的那组候选中做尝试。

搜索空间还有一个重要属性叫聚合等级(Aggregation Level,AL)。聚合等级表示一个PDCCH占用几个CCE,比如AL=1就是1个CCE,AL=2、4、8、16以此类推。聚合等级越高,占用的CCE越多,码率越低,抗干扰能力越强,但能同时调度的用户数就越少。每个聚合等级在搜索空间里都有对应数量的候选位置(candidates),UE盲检时就是把这些候选都试一遍。

举个例子,一个搜索空间配置了AL=4的候选数为8,意味着UE要在8个不同位置尝试解调PDCCH,看CRC是否匹配。如果信道质量好,基站通常会选AL=2或AL=4;如果信道质量差,就得提到AL=8或16。

2.3 DCI格式与RNTI:给谁看,看什么

PDCCH承载的内容统称DCI,但DCI有很多格式。NR定义了几种常用格式:

  • 下行调度,主要格式是1_0和1_1。1_0是回退格式,资源分配方式比较简单,主要用于初传、重传以及公共场景;1_1是完整格式,包含了各种调度信息,如载波指示、BWP指示、频域资源分配、时域资源分配、MCS、HARQ进程号、天线端口等,信息量很大。

  • 上行调度,主要格式是0_0和0_1。0_0是回退格式,0_1是完整格式,类似下行那组。

  • 其他还有格式2_0、2_1、2_2、2_3等,分别用于指示时隙格式、抢占指示、功率控制、SRS切换等。这些格式通常通过专用RNTI区分。

RNTI是无线网络临时标识。PDCCH的CRC是用RNTI加扰的,UE用某一种RNTI去解CRC,如果解通了,说明这条PDCCH是发给自己的。比如C-RNTI用于小区级用户调度,SI-RNTI用于系统信息,RA-RNTI用于随机接入响应,P-RNTI用于寻呼,TC-RNTI用于竞争解决等等。每个UE的C-RNTI都是小区内唯一的,基站调度时就把DCI加扰成这个UE能解到的样子。

有一次我自己排查问题,发现一个UE在随机接入后总是收不到后续调度,后来发现是基站侧配置的C-RNTI和UE下一次分配时使用的RNTI错位了,导致UE根本解不出来。这种问题很隐蔽,只能靠抓信令逐层核对。所以RNTI的处理一定要格外小心。

3. 实操配置与参数选择

3.1 典型参数配置示例

在NR协议栈里,PDCCH配置是通过CORESET和SearchSpace两个信息对象完成的。下面是一个常见的小区级初始配置示例(用描述性文本展示,不是完整ASN.1):

CORESET#0: - frequencyDomainResource: 48个RB(以bitmap形式表示) - duration: 2个OFDM符号 - cce-to-reg-mapping: interleaved - interleaverSize: 2 - reg-bundle-size: 6 SearchSpace#0: - controlResourceSetId: 0 - monitoringSlotPeriodicityAndOffset: 20, 0 - duration: 2个连续时隙 - monitoringSymbolsWithinSlot: 0 - nrofCandidates: {aggregationLevel1: 0, aggregationLevel2: 0, aggregationLevel4: 4, aggregationLevel8: 4, aggregationLevel16: 0}

这里的CORESET#0是初始接入必须的,因为UE在还没有专属配置时,要先去CSS里读系统消息。SearchSpace#0关联到CORESET#0,周期设为20个时隙,偏移为0,意味着从每个帧的第一个时隙开始,每隔20个时隙监听一次。候选集中在AL=4和AL=8,各4个候选,既能保证公共消息的可靠性,又不至于把资源吃光。

这里需要特别提醒的是,CORESET的频域资源是以RB为单位的bitmap,bitmap里的每一位对应6个RB(除非是某些特殊频段),配置时一定要算清楚,避免出现超出BWP范围的错误。我见过有人把CORESET配到BWP之外,结果UE根本收不到任何控制信息,整个小区下所有用户都脱管了。

对于UE专用搜索空间,通常每个UE可以配置一个或多个SearchSpace。一般调度周期设成1个时隙(即每个时隙都监听),偏移根据UE分布散开。候选数上,AL=4配置4个、AL=8配置2个是常见做法,如果覆盖好,可以再加AL=2和AL=1。

3.2 如何做PDCCH的盲检与解调

盲检的意思是,UE不知道PDCCH到底发在哪个CCE,也不知道用了哪个聚合等级,只能按搜索空间定义的候选集,一个个去尝试解调。具体过程大致是:

  1. 先从频域取出CORESET对应的RE,进行信道估计(利用DMRS)。
  2. 对每个候选位置,按聚合等级解出对应的CCE上的软比特。
  3. 根据搜索空间对应的DCI格式长度(1_0、1_1、0_0、0_1等),尝试译码。
  4. 用一个RNTI去解扰CRC(实际是DCI比特附加CRC后,用RNTI加扰CRC)。如果CRC校验通过,就认为这条DCI是发给自己的,并且提取其中的调度信息。

盲检次数是有上限的。NR定义了UE最大盲检次数,比如在单小区、单BWP情况下,USS加上CSS总共不能超过44次(部分格式组合下更少)。设计人员必须保证搜索空间里候选总数不超限,否则UE会直接漏掉部分候选。

有一次我们优化时,为了增加容量,把多个SearchSpace叠在一个CORESET上,结果候选数累加超过了44的上限,大量UE出现调度失败。后来降低了一个冗余SearchSpace,问题就消失了。所以配置时不要只顾着增加候选,一定要统计总盲检次数。

解调方面,由于5G PDCCH支持波束成形,UE需要知道PDCCH DMRS的准共址(QCL)关系,也就是解调PDCCH时可以使用哪个SSB或CSI-RS来获取多普勒频移、平均时延和频偏。通常在SearchSpace里配置一个TCI状态,告诉UE“PDCCH和某个SSB是同一个波束方向”,这样UE才能用对应波束的测量结果辅助解调。如果TCI配置错误,即使信号强也可能解不出来。

3.3 覆盖增强:降低聚合等级的代价与收益

弱覆盖场景下,边缘用户的PDCCH是最容易丢的。因为数据信道PDSCH还能靠HARQ重传兜底,PDCCH丢了连调度都起不来,谈何重传。

增加聚合等级是最直接的手段。比如从AL=4提升到AL=8,CCE数量翻倍,码率大致减半,解调门限能下降好几个dB。实际外场验证时,很多弱场场景把PDCCH降到AL=8或者AL=16,控制信道就稳了。但代价也很明显:一个用户的PDCCH占用8个CCE,其他用户只能等着,小区用户容量直线下降。

还有一种办法是使用PDCCH重复发送。NR在R16之后引入了PDCCH的时域重复机制(比如重复2次或4次),把同一个DCI在多个时隙重复发,UE可以合并解调,效果类似聚合等级提升,但时延变大。这个技术很适合覆盖补盲,但要小心占用多个时隙的时域资源,可能把后续的数据调度周期都顶掉。

另一个被忽视的维度是CORESET的时域符号位置。时域的早期符号(比如符号0)往往受到同步信号和广播信道的干扰,如果CORESET配置在符号0,受干扰会更明显。把PDCCH放到符号1或2,有时也能改善解调性能。但这会牺牲一点时延,因为数据要等控制信道发完。具体取舍还得基于实测。

4. 常见问题与排查技巧实录

4.1 PDCCH漏检率高怎么办

漏检指的是基站确实发了PDCCH,但UE没有正确解出来。现象通常是UE的RSRP和SINR都不差,但MBR很低,或者频繁出现失步。

排查第一步是看UE侧上报的BLER(误块率)。PDCCH的误码率一般要求低于1%或2%。如果高于这个水平,就要怀疑信道估计不准或聚合等级不够。第二步是检查配置的聚合等级和实际的信道质量是否匹配。比如一个RSRP只有-100dBm的用户,如果基站还在给它用AL=2,那大概率漏检。这时可以在调度器里设置一个门限,比如RSRP低于-95dBm时强制使用AL=8,低于-105dBm时强制使用AL=16。

还有一类漏检是参数配置错误导致的。比如CORESET的频域位置和SSB位置不对应,导致UE的AGC增益没有对准;或者SearchSpace周期太长,赶上信道变化,PDCCH发送时UE正在调接收方向。我们曾遇到一个批量漏检的问题,最后发现是某厂商基站的CORESET配置在BWP边缘,一些发射功率受限的场景下,边缘RE的功率被压降,PDCCH因功率不足而解不出。把CORESET往BWP中心挪了挪,问题就解决了。

4.2 误检与DCI冲突

误检是指UE把不是发给自己的PDCCH当成自己的,或者把错误的DCI内容当成了有效调度。后果可能很恶劣:UE用错误的资源块去收数据,导致数据完全解错,还可能误发PUSCH干扰其他用户。

误检的主要源头是CRC碰撞。虽然CRC有足够长度,但当候选位置非常多、干扰又大时,小概率事件还是会发生。另一个原因是多个UE的候选位置重叠,基站分配CCE时出现冲突,导致同一个CCE上发了两个UE的DCI,结果一个UE解出了另一个的信息。这时候必须检查调度器是否会为不同RNTI分配重叠的CCE。

排查误检时,可以通过对比UE上报的 HARQ ACK/NACK 和调度记录来定位。如果发现某个UE对从未调度过的流程反馈了ACK,那就有误检。解决手段包括:

  • 减少USS里高聚合等级的候选数,降低碰撞概率。
  • 调整不同UE的SearchSpace偏移,让候选集尽量错开。
  • 检查DCI格式的比特数,确保相同格式下RNTI加扰正确。

软件层面,最好在接收端对DCI里的部分固定字段做合法性检查,比如频域资源分配值不能超出BWP范围,HARQ进程号必须在合理区间。多一道校验,能挡掉很多异常DCI。

4.3 容量受限:CCE资源不足的处理

想在一个时隙里调度很多用户,但CCE总数就那么多,高聚合等级又会占掉好几个CCE,所以系统容量很容易被PDCCH卡住。从统计角度看,一个时隙内被占用的CCE数除以总CCE数就是“PDCCH利用率”。利用率超过70%的时候,一般就会开始出现调度失败,因为需要留出一些候选位置给突发传输和重传。

处理CCE不足的通用方法是:

  • 降低用户级PDCCH的聚合等级。信道质量好的UE尽量用AL=2,甚至AL=1,把CCE省下来给弱场用户。
  • 增加CORESET的符号数或频域RB数。比如从2个符号扩到3个符号,或者从48RB扩到96RB,PDCCH容量直接翻倍。
  • 缩短SearchSpace的监听周期,让PDCCH可以更频繁地调度,但注意盲检次数。
  • 把不同用户疏开到不同时隙,利用周期性调度错峰。

有一次我遇到一个小区下行PRB利用率不到50%,但用户速率却上不去的怪问题。一查才发现PDCCH利用率已经接近100%,所有CCE都被AL=16的用户占光了,数据信道根本没资源可调度。后来通过优化那个小区的上行功控,把边缘UE的信号抬高了一点,让多数用户从AL=16降到AL=8,瞬间就腾出了一半多的CCE。这说明很多时候“覆盖增强”并不是单纯堆聚合等级,改善底层信号质量才是治本。

下面把常见的几个问题整理成一个速查表,方便现场使用:

现象可能原因快速处理方法
PDCCH BLER偏高聚合等级不够、信道差提高聚合等级,或开启PDCCH重复
所有用户都脱管CORESET频域位置越界或与BWP不匹配检查CORESET配置,调整到BWP内
单个用户频繁漏检波束方向没对准更新TCI状态,核对QCL关系
误检导致数据错乱候选冲突或CRC碰撞分散SearchSpace偏移,减少高聚合等级候选数
小区容量上不去CCE占用率过高降低用户聚合等级、扩大CORESET
定位难缺少PDCCH解调统计打开UE和基站的DCI收/发日志,逐层比对

排查PDCCH问题,最重要的一点是不要只看平均统计。PDCCH是分时隙、分用户的,平均值掩盖了突发问题。我建议把所有用户的DCI调度日志和PDCCH的解调结果按时间戳对齐,然后挑出几个采样点看细节。很多时候,问题就藏在某一瞬间的CCE重叠或波束切换里。

再分享一个小技巧:在做外场优化时,不要只盯着RSRP和SINR。PDCCH的解调性能和CSI反馈的CQI不一定同步,因为PDCCH的干扰来源和PDSCH不同。建议在测试终端里开启PDCCH BLER统计,并且把MCS、聚合等级、发射功率这几个值放在同一张图里看趋势。你会很快发现,哪些用户在什么条件下会丢控制信道,然后才能在调度策略上做出有针对性的调整。

最后想说的是,PDCCH这一层看着简单,就是传个DCI,但真正深入进去,牵涉到资源映射、波束管理、调度算法、信道估计方方面面。每一次优化都不是孤立调某一个参数,而是要和整个物理层的其他部分联动起来考虑。我踩过的坑很多,但每次把PDCCH调顺之后,整个网络的稳定性就会有肉眼可见的提升。这也是我一直觉得,控制信道优化是5G无线网络里“性价比”最高的工作之一。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进