4. 线性分组码在水声数据帧中的应用
水声短帧通信的典型约束是:一帧有效载荷往往只有几十到几百比特,而水声信道在低信噪比下随机误码与突发误码并存,且可用带宽窄、帧同步开销大。线性分组码之所以适合这一场景,是因为它把校验位以确定性的代数结构附加在信息位之后,接收端可以用伴随式(syndrome)快速判断错误位置,而不需要重传或长交织。本节围绕汉明码与BCH码的构造、译码,以及短帧条件下的码长与码率选择展开,并给出一个可复算的编码实例。
一、汉明码:最小距离3的完备单错纠正码
汉明码是参数为 (n, k) = (2^m − 1, 2^m − 1 − m) 的线性分组码,校验位数 m,最小汉明距离 d_min = 3,因此可以纠正 1 位错误、检测 2 位错误。以最常用的 (7,4) 汉明码为例,信息位 4 bit,校验位 3 bit,码率 4/7 ≈ 0.571。其校验矩阵 H 的列由 1 到 7 的 3 位二进制非零向量组成:
H = [1 1 0 1 1 0 0
1 0 1 1 0 1 0
1 1 1 0 0 0 1] (列序对应 c1..c7)
译码时计算伴随式 s = r·Hᵀ。若 s = 0,判定无错;若 s 非零,则 s 的二进制值直接指示出错列号(按上述列排列约定),将该位取反即完成纠错。这种“伴随式即错误位置”的性质,使汉明码译码只需一次矩阵乘法和一次查表,非常适合水声调制解调器中的低时延实现。
但汉明码的局限也很明显:d_min = 3 只能纠 1 位错。水声信道在低信噪比下常出现 2 位以上的错误,此时汉明码可能把 2 位错“纠”成第 3 位错,形成误纠。因此在实际水声帧中,汉明码更适合作为短控制帧(如帧头、应答、参数通告)的轻量保护,而不宜单独保护较长的数据载荷。
二、BCH码:可调纠错能力的循环分组码
BCH码是汉明码的推广,属于循环码,具有明确的代数构造:在伽罗瓦域 GF(2^m) 上选取本原元 α,以连续 2t 个根 α^1, α^2, …, α^{2t} 构造生成多项式 g(x),得到码长 n = 2^m − 1、可纠 t 位错误的 (n, k) BCH 码,其中 k = n − deg g(x)。工程上常用的短码包括 (15,7,t=2)、(15,5,t=3)、(31,21,t=2)、(31,16,t=3)、(63,45,t=3) 等。
以 (15,7,t=2) BCH 码为例:m = 4,n = 15,可纠 2 位错,信息位 7 bit,校验位 8 bit,码率 7/15 ≈ 0.467。其生成多项式为 g(x) = x^8 + x^7 + x^6 + x^4 + 1(对应二进制 111010001)。编码时把信息多项式 m(x) 乘以 x^{n−k} 后对 g(x) 取模,得到校验多项式,再拼接成码字 c(x) = m(x)·x^{n−k} + r(x)。
BCH 译码分三步:由接收多项式计算 2t 个伴随式 S_1…S_{2t};用 Berlekamp-Massey 算法或 Peterson 算法求错误位置多项式 σ(x);用 Chien 搜索求根,得到错误位置并纠正。对 (15,7,t=2),伴随式只有 4 个,BM 迭代规模很小,适合在 DSP 或 FPGA 中以查表加有限域乘法实现。
三、短帧低信噪比下的码长与码率选择
水声短帧的码长选择受两个相反因素牵制:码长越长,纠错能力越强、编码增益越高;但码长越长,帧持续时间越长,信道相干时间内的时变与多普勒扩展越容易破坏码字结构,且交织深度和译码时延随之增加。工程经验是:在中等信噪比(约 5~10 dB)的短数据帧中,优先选用 n ≤ 63 的短 BCH 码;在极低信噪比(< 3 dB)且帧长允许时,可考虑 (63,45,t=3) 或级联方案。
码率选择则要在纠错能力与有效吞吐之间折中。码率过高(如 0.8 以上),校验位太少,低信噪比下纠错能力不足;码率过低(如 0.3 以下),冗余过大,短帧的有效载荷被严重压缩。对水声短帧,码率 0.4~0.6 通常是较合理的区间。下表给出几种候选码在短帧场景下的对比(示例参数,供选型参考):
| 码型 | n | k | 码率 | 纠错能力 t | 适用场景 |
|---|---|---|---|---|---|
| (7,4) 汉明码 | 7 | 4 | 0.571 | 1 | 帧头、控制短帧 |
| (15,7) BCH | 15 | 7 | 0.467 | 2 | 短数据帧、中等信噪比 |
| (31,16) BCH | 31 | 16 | 0.516 | 3 | 较长数据帧、低信噪比 |
| (63,45) BCH | 63 | 45 | 0.714 | 3 | 帧长允许、吞吐优先 |
四、一个水声数据帧的编码实例
设某水声数据帧的有效载荷为 14 bit,信息序列为 1011010 0110101(分两组,每组 7 bit)。为便于短帧传输并兼顾纠错,选用 (15,7,t=2) BCH 码,对每组 7 bit 独立编码,形成两个 15 bit 码字,帧内共 30 bit 编码数据。以第一组 m = 1011010 为例,按 g(x) = x^8 + x^7 + x^6 + x^4 + 1 做多项式除法,得到校验位 r = 01101001,拼接后码字为 1011010 01101001(示例计算,实际实现需按位对齐验证)。
接收端对每个 15 bit 码字计算 4 个伴随式。若全部为零,判定该码字无错;若不全为零,进入 BM 迭代求 σ(x),再用 Chien 搜索定位错误位。假设第一码字在传输中第 3、第 11 位发生翻转,译码器应得到两个错误位置并纠正,恢复出原始 7 bit 信息。若伴随式非零但 Chien 搜索无解(错误数超过 t),则判定为不可纠错误,触发上层重传或丢弃该帧。
五、纠错性能分析与工程判断
对 (15,7,t=2) BCH 码,在二进制对称信道模型下,码字错误概率可近似为 P_cw ≈ Σ_{i=3}^{15} C(15,i) p^i (1−p)^{15−i},其中 p 为信道误码率。当 p = 0.01 时,单码字不可纠概率约为 3.2×10⁻³ 量级;当 p = 0.05 时迅速上升到约 2.5×10⁻² 量级。这说明 t = 2 的短 BCH 码在误码率 1% 附近有效,但在 5% 以上时纠错能力明显吃紧,需要提高 t 或采用级联。
工程上判断一个码型是否够用,不能只看理论纠错能力,还要看帧级成功率。若一帧含 L 个码字,帧成功概率约为 (1 − P_cw)^L。对 30 bit 编码数据(2 个码字)的短帧,p = 0.01 时帧成功率仍在 99% 以上;若帧内码字数增加到 10 个以上,同样的 P_cw 会使帧成功率明显下降。因此短帧场景应尽量控制单帧内码字数量,或对长帧采用交织把突发错误分散到多个码字中。
综上,水声短帧的线性分组码应用应遵循“按帧长定码长、按信噪比定纠错能力、按吞吐定码率”的原则:控制短帧用 (7,4) 汉明码,数据短帧用 (15,7) 或 (31,16) BCH 码,帧长允许且吞吐优先时用 (63,45) BCH 码;译码端以伴随式判断、BM 迭代和 Chien 搜索构成完整闭环,并对超出纠错能力的码字明确判为不可纠,交由上层重传或丢弃,避免误纠扩散。