4、UWB信道编码:卷积编码、里德-所罗门编码、LDPC编码在UWB中的应用

信道编码这事儿,说白了就是在数据里加点「冗余」,让接收端能在噪声和干扰中把原始信息捞回来。UWB 系统工作在极宽的频带上,干扰多、信噪比波动大,没有好的编码方案,抓包成功率会惨不忍睹。

我个人习惯把 UWB 的编码体系分成三层来看:卷积编码打底,里德-所罗门(RS)编码做外层纠错,LDPC 编码则是高性能场景的进阶选择。下面我们逐个拆开聊。

核心观点: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。嗯,这里要注意,抓包时一定要确认解码器的码率配置。

避坑指南:我曾经在调试一个 UWB 定位系统时,发现数据帧的 payload 偶尔出现连续错误。后来定位到是卷积码的「尾比特」处理不对——UWB 要求在帧结束时插入 6 个 0 比特来复位编码器状态。如果抓包工具没正确处理这 6 个尾比特,最后几个字节就会全错。

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 解码器,迭代次数一定要可配置。

重要提醒:LDPC 编码的 UWB 帧,其 PHR 仍然使用卷积编码。抓包时,必须先解卷积码拿到 PHR 中的编码类型字段,再根据该字段决定 payload 用哪种解码器。如果直接拿 LDPC 去解卷积码编码的 payload,结果就是一堆乱码。

4.4 三种编码的协同工作流程

下面这张图展示了 UWB 发送端编码的完整流程。注意看,编码器不是随便选的,而是由 PHR 中的一个字段明确指定。

UWB 发送端编码流程 原始数据 RS 编码器 卷积编码器 调制发送 PHR 生成 卷积编码器 调制发送 编码类型选择 由 PHR 中编码字段决定 说明: PHR 始终使用卷积编码(K=7, R=1/3)。Payload 编码由 PHR 中的字段指定: 00=无编码, 01=卷积码, 10=RS+卷积级联, 11=LDPC

从图中可以看到,PHR 和 payload 走的是两条不同的编码路径。PHR 固定走卷积编码,而 payload 则根据 PHR 中的 2 比特编码字段,选择不同的编码方案。抓包时,解码器必须严格按照这个流程反向操作:先解 PHR 的卷积码,读出编码类型,再解 payload。

4.5 抓包实战中的编码识别技巧

在实际抓包中,你拿到的是一串 IQ 采样点,或者已经是解调后的软比特。怎么判断当前帧用了哪种编码?我总结了几个经验:

  1. 看帧同步头(SHR)之后的第一个字段:PHR 的前 19 个比特(包括 2 比特编码类型)是用卷积码编码的。先解这 19 个比特,就能知道 payload 的编码方式。
  2. 如果解 PHR 失败:可以尝试用不同的编码参数盲解。比如先假设是卷积码 R=1/3,如果校验和不对,再试 R=1/2 或 LDPC。但这样效率很低,我一般只在调试未知设备时用。
  3. 注意帧长度字段:PHR 中有一个 13 比特的长度字段,表示 payload 的字节数。如果解码后得到的长度值明显不合理(比如 0 或超过 4095),那很可能是编码类型猜错了。
实用技巧:我曾经写过一个抓包工具,在解码 PHR 时同时用卷积码和 LDPC 两种解码器并行尝试,哪个先通过 CRC 校验就用哪个。虽然浪费了一点计算资源,但在复杂电磁环境下,抓包成功率从 70% 提升到了 95% 以上。

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 信道编码的三种方案就聊到这里。理解了这些编码的原理和差异,你在抓包时就能更准确地配置解码器,也能更快地定位问题——到底是信道太差,还是解码器参数没设对。