3. DRX(非连续接收)机制:用参数配置换取功耗

DRX 这玩意儿,说白了就是让 UE 在没事干的时候睡大觉。我见过不少工程师一上来就猛调发射功率,却忽略了接收通路才是功耗大头。你想想看,UE 大部分时间都在监听 PDCCH,如果一直保持唤醒状态,那电流根本压不下来。

DRX 的核心思想很简单:只在可能收数据的时候醒来,其余时间关闭接收机。但具体怎么睡、睡多久、什么时候醒,全靠三个参数来调配——DRX 周期、On Duration 和 Inactivity Timer。

核心公式:功耗 ≈ 唤醒时间 / 总时间 × 接收电流 + 睡眠时间 / 总时间 × 睡眠电流

你调参数,本质上就是在改这个比值。

3.1 DRX 周期:决定你多久醒一次

DRX 周期就是 UE 两次尝试接收数据之间的时间间隔。周期越长,UE 睡的时间越久,功耗越低,但代价是数据来了你得等下一个周期才能收到。

我个人习惯把 DRX 周期分成两类:

类型 取值范围 典型场景 功耗影响
短 DRX 周期 2~640 ms VoLTE、实时游戏 较高,但延迟低
长 DRX 周期 10~2560 ms 后台推送、心跳保活 较低,但延迟高

我在项目中遇到过一个问题:某款智能手表用长 DRX 周期(1280 ms)来省电,结果消息经常延迟 1 秒以上。用户反馈「消息来了手表不震」,后来我们把周期降到 320 ms,延迟可接受,功耗也只多了 8%。

我的经验:如果业务允许 200~500 ms 的延迟,直接用长周期。如果要求 100 ms 以内,老老实实用短周期,别在延迟上赌。

3.2 On Duration:每次醒来听多久

On Duration 是 UE 在每个 DRX 周期开始时保持唤醒的时间窗口。在这段时间里,UE 监听 PDCCH,看看网络有没有给自己调度数据。

这个值设大了,UE 醒着的时间长,功耗高;设小了,可能还没来得及收到调度信息就睡过去了,导致数据重传。

嗯,这里要注意:On Duration 的单位是 PDCCH 子帧数,通常配置为 1~200 个子帧(1 子帧 = 1 ms)。

  • On Duration = 1~2 ms:极低功耗,但只适合信道条件好、调度及时的场景。
  • On Duration = 5~10 ms:平衡点,我大部分项目都用这个范围。
  • On Duration > 20 ms:功耗明显上升,除非信道很差,否则不推荐。

我曾经在一个 NB-IoT 项目里把 On Duration 从 10 ms 降到 3 ms,结果丢包率从 0.5% 飙升到 8%。后来发现是基站侧调度延迟不稳定,3 ms 窗口太短,UE 经常错过调度。最后调到 6 ms,丢包率回到 1% 以下,功耗比原来省了 22%。

避坑指南:On Duration 不是越小越好。我曾经吃过亏——为了省电把值压到 1 ms,结果 UE 频繁进入 DRX 又立刻被唤醒,反而增加了状态切换功耗。这叫「频繁进出损耗」,比一直醒着还费电。

3.3 Inactivity Timer:数据来了别急着睡

Inactivity Timer 是 UE 在收到最后一个数据包后,继续监听 PDCCH 的时间。说白了,就是「再等一会儿,说不定还有数据来」。

这个参数很关键。设短了,数据刚传完 UE 就睡,结果下一个包马上到,又得重新唤醒,延迟和功耗都吃亏。设长了,UE 一直醒着等,功耗白费。

我一般这样配置:

业务类型 推荐 Inactivity Timer 理由
VoLTE(语音) 40~80 ms 语音包间隔 20 ms,留 2~4 个包的时间
视频流 100~200 ms 视频帧间隔较大,需要更长的等待窗口
TCP 下载 50~100 ms TCP 确认和重传可能密集到达
后台心跳 1~10 ms 数据稀疏,没必要等

我记得有一次做 VoLTE 功耗优化,把 Inactivity Timer 从 80 ms 降到 40 ms,功耗降了 15%,但语音包偶尔出现断续。后来抓 log 发现,网络侧有时会延迟 50 ms 才发下一个包,40 ms 的窗口刚好错过。最后调到 60 ms,问题解决。

关键原则:Inactivity Timer 必须大于业务数据包的最大间隔,否则 UE 会频繁进出 DRX,反而更费电。

3.4 三个参数的联动配置

这三个参数不是孤立的。你调一个,另外两个也得跟着动。我画了一张图,帮你理清它们的关系:

DRX 参数联动关系图 DRX 周期 决定睡眠总时长 On Duration 决定每次监听窗口 Inactivity Timer 决定数据后等待时间 包含 触发 三个参数共同决定:唤醒时间 / 总时间 最终输出:UE 平均功耗 配置口诀 周期定睡眠,窗口定监听,定时器防早睡 三者联动调,功耗延迟两相宜

3.5 实战配置策略

说了这么多理论,来点实际的。我总结了一套配置流程,你照着做基本不会翻车:

  1. 先定业务延迟要求——这是硬约束,不能妥协。
  2. 根据延迟选 DRX 周期——延迟要求 ÷ 2 作为周期上限。
  3. 根据信道质量定 On Duration——RSRP 好的用 2~5 ms,差的用 8~10 ms。
  4. 根据数据包间隔定 Inactivity Timer——取最大间隔 × 1.5 作为初始值。
  5. 实测调优——跑业务场景,抓 log 看实际唤醒次数和延迟。

我的习惯:先在实验室用信号源模拟不同信道条件,把参数扫一遍,找到 Pareto 最优曲线。然后到外场验证 2~3 个候选配置,选那个「功耗最低但延迟刚好达标」的。

3.6 一个真实案例

去年我做了一个 Cat-M1 定位器的项目,要求电池续航 3 个月,定位上报间隔 30 秒。初始配置是长 DRX 周期 1280 ms、On Duration 10 ms、Inactivity Timer 80 ms,实测功耗 2.5 mA。

我做了三轮调优:

轮次 DRX 周期 On Duration Inactivity Timer 平均电流 定位延迟
初始 1280 ms 10 ms 80 ms 2.5 mA 1.3 s
第一轮 2560 ms 8 ms 40 ms 1.8 mA 2.6 s
第二轮 2560 ms 5 ms 20 ms 1.4 mA 2.8 s
最终 1280 ms 5 ms 20 ms 1.6 mA 1.4 s

最终配置比初始省了 36% 的功耗,延迟只多了 0.1 秒。为什么没选第二轮?因为定位器要求延迟不超过 2 秒,第二轮 2.8 秒超标了。

血的教训:别只看功耗数字。第二轮虽然电流最低,但延迟超标,用户投诉定位不准。功耗优化必须在业务约束内做,否则就是白费功夫。

DRX 参数配置,说白了就是一场「功耗 vs 延迟」的博弈。你手里有三张牌——周期、窗口、定时器——怎么打,取决于你的业务到底能容忍多少延迟。我见过太多人只盯着功耗表,结果产品上市后被骂「反应慢」。记住:省电的前提是不影响用户体验,否则你省下来的那点电,全得花在售后上。