想象一下基站调度器就像个忙碌的交通指挥中心,每毫秒(TTI周期)都要处理上百辆"数据卡车"的通行请求。我参与过多个4G/5G基站项目,最头疼的就是如何在1毫秒内完成从数据优先级判定到资源分配的完整决策链。这里用个生活场景类比:调度器相当于快餐店经理,要在30秒内决定哪些顾客优先取餐(HARQ重传用户)、给每人分配多少食材(RB资源)、用什么包装盒(MCS调制方式)。
典型的下行调度包含四个关键阶段:
实测中,20MHz带宽下单个TTI要处理约100个RB的分配,整个过程必须在900μs内完成,留给每个阶段的决策时间不足250μs。下面我就拆解这个"毫秒级决策艺术"的完整流程。
基站待发数据就像急诊室里的病人,必须严格分级处理。根据3GPP标准,优先级从高到低依次为:
在华为某基站实测中,HARQ重传占比约15%时,系统吞吐量会下降23%。因此我们采用动态权重算法:
python复制def calculate_priority(data_type, retry_count):
base_priority = {
'system_info': 100,
'harq': 80 + retry_count*5,
'rrc': 70,
'gbr': 50,
'non_gbr': 30
}
return base_priority[data_type]
完成数据类型筛选后,还要在同类用户间二次排序。常见算法有:
以PF算法为例,其核心公式为:
code复制优先级 = 当前可达速率 / 历史平均速率 * QoS权重
在某城市密集区测试显示,PF算法使得小区边缘用户速率提升65%,而中心用户仅下降12%。
信道质量指示(CQI)就像用户发来的"信号自拍",取值范围0-15。在爱立信某次外场测试中:
CQI到MCS的转换需要三步:
python复制# CQI到MCS的典型转换逻辑
def cqi_to_mcs(cqi):
if cqi >= 13:
return {'modulation':'64QAM', 'code_rate':0.92}
elif cqi >=7:
return {'modulation':'16QAM', 'code_rate':0.61}
else:
return {'modulation':'QPSK', 'code_rate':0.3}
实际项目中我们发现,直接采用CQI建议的MCS会导致15%的重传率。更稳妥的做法是:
某运营商测试数据显示,采用保守MCS策略后:
RB(Resource Block)是调度的最小单位,每个RB包含12个子载波×7个符号。三种分配方式对比如下:
| 类型 | 粒度 | 连续性 | 带宽 | 适用场景 |
|---|---|---|---|---|
| Type0 | RBG | 非连续 | 全带宽 | 大流量业务 |
| Type1 | RB | 非连续 | 部分 | 多用户分集 |
| Type2 | RB | 连续 | 全带宽 | 低时延业务 |
Type1的独特优势在于:
在实际编码中,RB分配要考虑:
中兴某基站采用的动态分配伪代码:
python复制def allocate_rb(users):
for u in sorted(users, key=lambda x: -x.priority):
if u.qos_type == 'GBR':
allocate_contiguous_rb(u) # Type2
else:
if u.channel_variance > threshold:
allocate_distributed_rb(u) # Type1
else:
allocate_rbg(u) # Type0
根据诺基亚实测数据,推荐参数组合:
踩过几次坑后总结的常见问题:
在某地铁站优化案例中,通过将PF算法的alpha参数从0.5调整到0.8,使得高峰时段用户平均速率提升39%,而系统吞吐量仅损失7%。