4、UWB信道编码:卷积编码、里德-所罗门编码、LDPC编码在UWB中的应用
信道编码这事儿,说白了就是在数据里加点「冗余」,让接收端能在噪声和干扰中把原始信息捞回来。UWB 系统工作在极宽的频带上,干扰多、信噪比波动大,没有好的编码方案,抓包成功率会惨不忍睹。
我个人习惯把 UWB 的编码体系分成三层来看:卷积编码打底,里德-所罗门(RS)编码做外层纠错,LDPC 编码则是高性能场景的进阶选择。下面我们逐个拆开聊。
4.1 卷积编码:UWB 物理层的默认守卫
卷积编码是 UWB 最基础的编码方式。IEEE 802.15.4a/z 标准里,强制要求所有 UWB 帧的物理层头(PHR)都必须用卷积编码。为什么?因为它的实现简单,延迟低,适合对实时性要求高的控制帧。
UWB 用的卷积码参数是固定的:约束长度 K=7,码率 R=1/3。什么意思呢?就是每输入 1 个比特,输出 3 个比特,这 3 个比特由当前输入和前 6 个历史输入共同决定。生成多项式是八进制表示的 (133, 171, 165)。
我在项目中遇到过一个问题:用某款抓包器抓 UWB 测距帧,PHR 总是解错。查了半天发现,抓包器默认用了码率 1/2 的卷积码去解,而 UWB 标准要求的是 1/3。嗯,这里要注意,抓包时一定要确认解码器的码率配置。
4.2 里德-所罗门编码:对抗突发错误的利器
卷积码擅长对付随机错误,但 UWB 信道里经常出现突发干扰——比如 Wi-Fi 信号突然窜进来,一下子打掉连续几十个比特。这时候卷积码就有点力不从心了。RS 编码正好补这个短板。
UWB 标准中,RS 编码是可选的,通常用在高速率数据帧中。常用的参数是 RS(63, 55):每 55 个数据字节,生成 8 个校验字节,组成 63 个字节的码字。它能纠正最多 4 个字节的错误。
你想想看,如果突发干扰持续 32 个比特(4 个字节),卷积码可能已经彻底崩溃了,但 RS 码可以轻松把这 4 个字节全部恢复。这就是为什么很多 UWB 芯片在发送大数据包时,会先做 RS 编码,再做卷积编码——这叫级联编码。
| 编码类型 | 典型参数 | 纠错能力 | UWB 中的应用位置 |
|---|---|---|---|
| 卷积码 | K=7, R=1/3 | 随机错误,约 3-4 dB 编码增益 | PHR 强制使用,payload 可选 |
| RS 码 | RS(63,55) | 4 字节突发错误 | 高速率 payload 可选 |
| LDPC 码 | 码率 1/2, 3/4 | 接近香农极限,0.5-1 dB 优于卷积码 | HRP UWB 高可靠模式 |
4.3 LDPC 编码:逼近理论极限的性能怪兽
LDPC(低密度奇偶校验)码是近年来无线通信领域的明星。它的性能非常接近香农极限,也就是说,在同样的信噪比下,LDPC 能比卷积码多传 20%-30% 的数据,或者用更少的功率传同样的数据。
在 UWB 领域,LDPC 主要出现在 HRP(高重复率脉冲)UWB 标准中,比如 IEEE 802.15.4z 的某些扩展模式。它的码率可以是 1/2 或 3/4,码长通常为 672 或 1344 比特。
但 LDPC 有个缺点:解码复杂度高。卷积码用 Viterbi 算法,复杂度随约束长度指数增长,但 K=7 时还好。LDPC 要用迭代置信传播(BP)算法,需要多次迭代才能收敛。在抓包工具里实现 LDPC 解码器,对 CPU 和内存都是不小的挑战。
我记得有一次帮客户分析 UWB 抓包数据,发现 LDPC 解码后的 BER(误比特率)曲线有个「错误平层」——信噪比很高了,但错误率就是降不下去。后来发现是迭代次数设得太少,默认 10 次迭代不够,改成 25 次就好了。所以抓包工具里的 LDPC 解码器,迭代次数一定要可配置。
4.4 三种编码的协同工作流程
下面这张图展示了 UWB 发送端编码的完整流程。注意看,编码器不是随便选的,而是由 PHR 中的一个字段明确指定。
从图中可以看到,PHR 和 payload 走的是两条不同的编码路径。PHR 固定走卷积编码,而 payload 则根据 PHR 中的 2 比特编码字段,选择不同的编码方案。抓包时,解码器必须严格按照这个流程反向操作:先解 PHR 的卷积码,读出编码类型,再解 payload。
4.5 抓包实战中的编码识别技巧
在实际抓包中,你拿到的是一串 IQ 采样点,或者已经是解调后的软比特。怎么判断当前帧用了哪种编码?我总结了几个经验:
- 看帧同步头(SHR)之后的第一个字段:PHR 的前 19 个比特(包括 2 比特编码类型)是用卷积码编码的。先解这 19 个比特,就能知道 payload 的编码方式。
- 如果解 PHR 失败:可以尝试用不同的编码参数盲解。比如先假设是卷积码 R=1/3,如果校验和不对,再试 R=1/2 或 LDPC。但这样效率很低,我一般只在调试未知设备时用。
- 注意帧长度字段:PHR 中有一个 13 比特的长度字段,表示 payload 的字节数。如果解码后得到的长度值明显不合理(比如 0 或超过 4095),那很可能是编码类型猜错了。
4.6 编码对抓包性能的影响
不同的编码方案,对抓包工具的要求也不同。下面这个表格总结了关键差异:
| 编码方案 | 解码复杂度 | 所需信噪比 | 抓包工具建议 |
|---|---|---|---|
| 卷积码 (R=1/3) | 低(Viterbi 算法,64 状态) | 约 4-6 dB | 软件解码即可,实时性好 |
| RS(63,55) | 中(Berlekamp-Massey 算法) | 约 3-5 dB(配合卷积码) | 需要查表实现,适合 FPGA |
| LDPC (码率 1/2) | 高(BP 迭代,25 次以上) | 约 1-2 dB | 建议 GPU 或专用硬件加速 |
嗯,这里要特别提醒一下:如果你用软件做 LDPC 解码,迭代次数不要设得太高。25 次迭代在普通 PC 上处理一个 672 比特的码字大约需要 0.5 毫秒。如果 UWB 帧的 PRF(脉冲重复频率)是 64 MHz,一帧数据可能包含几千个码字,实时解码基本不可能。所以高性能抓包工具通常用 FPGA 或 GPU 做 LDPC 解码。
好了,关于 UWB 信道编码的三种方案就聊到这里。理解了这些编码的原理和差异,你在抓包时就能更准确地配置解码器,也能更快地定位问题——到底是信道太差,还是解码器参数没设对。