4. UWB吞吐量概念:吞吐量定义、理论吞吐量计算、实际吞吐量影响因素
吞吐量,说白了就是单位时间内能传多少有效数据。做UWB测试这么多年,我见过不少工程师一上来就盯着峰值速率看,结果实际跑出来差一大截。嗯,这里面的门道,咱们今天好好捋一捋。
4.1 吞吐量的定义
UWB吞吐量,指的是在特定信道条件下,物理层或MAC层在单位时间内成功传输的有效数据比特数。单位通常是Mbps。
注意我强调的“有效”二字。你传了100个比特,但接收端只正确收到了80个,那吞吐量只能按80算。我在项目中遇到过有人把空中速率直接当吞吐量报给客户,结果现场演示时数据传不动,场面一度很尴尬。
吞吐量 ≠ 空中速率
空中速率是物理层调制编码决定的原始符号速率。吞吐量要扣掉前导码、帧头、校验、重传、退避时间等所有开销。实际能用的,往往只有理论值的50%-70%。
4.2 理论吞吐量计算
理论吞吐量怎么算?咱们先看一个简化公式:
理论吞吐量 = (有效载荷比特数) / (传输一帧所需总时间)
传输一帧总时间 = T_preamble + T_header + T_payload + T_IFS + T_ACK
其中:
- T_preamble:前导码时长,用于同步和信道估计
- T_header:帧头时长,包含物理层和MAC层头部
- T_payload:数据载荷传输时长
- T_IFS:帧间间隔,收发切换的固定开销
- T_ACK:确认帧时长(如果使用确认机制)
举个例子,IEEE 802.15.4z HRP模式下,PRF=64 MHz,数据速率27.24 Mbps,帧长1000字节:
| 参数 | 数值 | 说明 |
|---|---|---|
| 前导码时长 | 32 μs | SYNC+SFD |
| 帧头时长 | 8.5 μs | PHR+MAC头 |
| 载荷时长 | 293.6 μs | 1000字节 @ 27.24 Mbps |
| 帧间间隔 | 12 μs | SIFS |
| ACK时长 | 20 μs | 短确认帧 |
| 总时长 | 366.1 μs | |
| 理论吞吐量 | 21.85 Mbps | 8000比特 / 366.1 μs |
你看,空中速率27.24 Mbps,算下来理论吞吐量只有21.85 Mbps,直接打了八折。这还没算重传和调度开销呢。
我的经验:做吞吐量预算时,我习惯先按空中速率的60%估算。如果实测能到70%以上,说明你的协议栈和驱动优化得相当不错了。
4.3 实际吞吐量影响因素
理论算完了,咱们看看实际跑起来会碰到哪些坑。我按影响程度排个序:
4.3.1 物理层因素
- 信道条件:多径衰落、信号遮挡、同频干扰。我在一个仓库项目里遇到过,金属货架把信号反射得乱七八糟,吞吐量直接掉了40%。
- 发射功率:功率不够,接收端信噪比低,误码率上升,重传率飙升。
- 天线设计:天线增益、极化方向、阻抗匹配。别小看这个,换根好天线,吞吐量能差出10%-15%。
- PRF与数据速率:高PRF模式抗干扰好但开销大,低PRF模式覆盖远但速率低。你得根据场景选。
4.3.2 MAC层因素
- 帧长选择:帧太短,前导码和帧头开销占比大;帧太长,重传代价高。我一般建议500-1000字节是个甜区。
- 确认机制:无确认模式吞吐量最高,但不可靠;立即确认模式最常用;延迟确认模式适合高延迟场景。
- 退避算法:CSMA/CA的退避窗口设置不合理,会导致碰撞率上升。我曾经调过一个设备,退避窗口设得太小,三个设备同时发数据,碰撞率超过30%。
- 调度策略:TDMA调度时,时隙分配粒度越细,开销越大。
4.3.3 协议栈与驱动因素
- 中断处理延迟:中断响应太慢,会导致帧接收超时。我在嵌入式平台上遇到过,中断优先级设低了,吞吐量直接腰斩。
- DMA配置:DMA描述符链长度、传输粒度、对齐方式,都会影响数据搬运效率。
- 缓冲区管理:缓冲区太小容易丢包,太大浪费内存。我习惯按最大帧长的2-3倍来配。
- 上下文切换:RTOS任务切换太频繁,CPU时间都花在调度上了。
4.3.4 系统级因素
- CPU负载:主控芯片还要跑定位算法、传感器融合,CPU忙不过来时,吞吐量自然上不去。
- 总线带宽:SPI、USB、PCIe等接口的传输速率,不能成为瓶颈。我见过一个设计,UWB芯片能跑27 Mbps,但SPI接口只支持20 Mbps,白白浪费了硬件能力。
- 电源管理:低功耗模式下,时钟频率降低,收发器性能也会下降。
避坑指南:我曾经在一个量产项目中,发现同一批UWB模块吞吐量差异很大。查了三天,最后发现是PCB天线区域的阻焊层厚度不一致,导致天线阻抗偏移。从那以后,我每次做吞吐测试都会先确认天线匹配状态。
4.4 吞吐量影响因素全景图
下面这张图,我把所有影响因素按层级整理了一下。你调试的时候可以对照着排查:
这张图我建议你保存下来。每次做吞吐测试遇到瓶颈,就对着这张图一个个排查。我自己调试时,习惯先看物理层,再看MAC层,最后查协议栈和系统级。为什么?因为物理层的问题往往影响最大,而且容易定位。
我的习惯:做吞吐测试前,先列一个检查清单。信道环境、天线连接、发射功率、帧长配置、确认模式、驱动中断优先级,一项项打勾。别嫌麻烦,省掉这一步,后面排查问题的时间可能是它的十倍。