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 通常是较合理的区间。下表给出几种候选码在短帧场景下的对比(示例参数,供选型参考):

码型nk码率纠错能力 t适用场景
(7,4) 汉明码740.5711帧头、控制短帧
(15,7) BCH1570.4672短数据帧、中等信噪比
(31,16) BCH31160.5163较长数据帧、低信噪比
(63,45) BCH63450.7143帧长允许、吞吐优先

四、一个水声数据帧的编码实例

设某水声数据帧的有效载荷为 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),则判定为不可纠错误,触发上层重传或丢弃该帧。

水声短帧 BCH(15,7,t=2) 编码与译码数据流 信息位 m(x) 7 bit × 2 组 乘 x^(n−k) 后 对 g(x) 取模 g(x)=x⁸+x⁷+x⁶+x⁴+1 码字 c(x) 15 bit × 2 组 水声信道 低信噪比 · 随机/突发误码 接收 r(x) = c(x) + e(x) 计算伴随式 S₁…S₄ 全零 → 无错 BM 迭代 求错误位置多项式 σ(x) 次数 ≤ t = 2 Chien 搜索 求 σ(x) 的根 定位错误位并翻转 输出判决 纠错成功 / 不可纠 不可纠 → 重传或丢弃 示例:信息 1011010 → 码字 1011010 01101001;若第 3、11 位翻转,伴随式非零,BM+Chien 定位两位并纠正。 选型要点:短帧优先 n ≤ 63;码率 0.4~0.6;t 覆盖预期误码数,超 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 会使帧成功率明显下降。因此短帧场景应尽量控制单帧内码字数量,或对长帧采用交织把突发错误分散到多个码字中。

实现提示:在 DSP 上实现 (15,7) BCH 译码时,可把 GF(16) 的乘法表、BM 迭代系数和 Chien 搜索的根表预先固化为查找表,运行时只做查表和异或,避免实时有限域运算带来的时延抖动。
常见误区:把汉明码用于保护整个数据帧。汉明码只能纠 1 位错,低信噪比下 2 位错会被误纠为第 3 位错,反而扩大错误。数据载荷应优先选用 t ≥ 2 的 BCH 码,汉明码仅用于帧头等极短控制字段。

综上,水声短帧的线性分组码应用应遵循“按帧长定码长、按信噪比定纠错能力、按吞吐定码率”的原则:控制短帧用 (7,4) 汉明码,数据短帧用 (15,7) 或 (31,16) BCH 码,帧长允许且吞吐优先时用 (63,45) BCH 码;译码端以伴随式判断、BM 迭代和 Chien 搜索构成完整闭环,并对超出纠错能力的码字明确判为不可纠,交由上层重传或丢弃,避免误纠扩散。