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 吞吐量影响因素全景图

下面这张图,我把所有影响因素按层级整理了一下。你调试的时候可以对照着排查:

UWB吞吐量影响因素全景图 UWB吞吐量 物理层因素 信道条件 / 多径衰落 发射功率 / 信噪比 天线设计 / 阻抗匹配 PRF / 数据速率选择 MAC层因素 帧长选择 / 开销占比 确认机制 / 重传策略 退避算法 / 碰撞率 调度策略 / 时隙开销 协议栈/驱动因素 中断延迟 / 响应时间 DMA配置 / 数据搬运 缓冲区管理 / 丢包 上下文切换 / CPU占用 系统级因素 CPU负载 / 算力瓶颈 总线带宽 / 接口速率 电源管理 / 时钟频率 温度漂移 / 器件老化 调试建议:从物理层开始逐层排查,优先解决影响最大的因素 每个层级优化5%-10%,累积起来吞吐量提升非常可观

这张图我建议你保存下来。每次做吞吐测试遇到瓶颈,就对着这张图一个个排查。我自己调试时,习惯先看物理层,再看MAC层,最后查协议栈和系统级。为什么?因为物理层的问题往往影响最大,而且容易定位。

我的习惯:做吞吐测试前,先列一个检查清单。信道环境、天线连接、发射功率、帧长配置、确认模式、驱动中断优先级,一项项打勾。别嫌麻烦,省掉这一步,后面排查问题的时间可能是它的十倍。