BCH(15,7,5) 纠错译码系统设计与仿真
项目介绍
本项目是一个基于 MATLAB 环境开发的完整纠错码仿真系统,专注于 BCH(15,7,5) 循环码。该系统模拟了信息在含有干扰的信道中传输的全过程,包括原始信息生成、系统码转换、随机噪声注入、有限域运算、错误定位以及最终的信息恢复。BCH(15,7) 码在长度为 15 位的码字中携带 7 位有效信息,并拥有能够纠正任意 2 位随机比特错误的能力,是现代通信和存储系统中常用的线性循环码。
功能特性
- 系统化编码:支持将 7 位原始信息生成符合 BCH 标准的 15 位系统码,确保信息位在码字中清晰可见。
- 有限域运算引擎:自主实现了基于 GF(16) 有限域的加法(异或)、乘法及多项式求值功能。
- 自动化纠错流程:集成 Berlekamp-Massey (BM) 算法和 Chien 搜索算法,实现从异常信号到错误定位的自动化转换。
- 容错仿真测试:支持在码字中注入多达 2 位的随机错误,并验证系统的恢复能力。
- 结果可视化:通过图形化波形直观对比原始数据、受损数据与修复后的数据。
使用方法
- 环境准备:打开 MATLAB 软件(建议 R2016b 或更高版本)。
- 执行仿真:在工作路径下直接运行主程序脚本。
- 观察输出:
- 命令行窗口将实时显示生成的原始信息、编码后的码字、注入错误的位置以及译码后的检测结果。
- 弹出窗口将展示三个维度的对比散点图(茎状图),包括信息位、受损码字和纠错后的完整码字。
- 性能验证:检查输出末尾的“结果校验”信息,以确认纠错是否成功。
系统要求
- MATLAB 软件基础版(由于关键算法均为手写实现,无需额外的 Communications Toolbox 通信工具箱)。
- 操作系统支持 Windows、macOS 或 Linux。
核心实现逻辑方案
#### 1. 参数与生成多项式
系统严格遵循 BCH(15,7,5) 标准,定义码长 n=15,信息位 k=7。
采用的生成多项式为 g(x) = x^8 + x^7 + x^6 + x^4 + 1,在代码中表示为二进制系数向量 [1 1 1 0 1 0 0 0 1]。该多项式决定了校验位的生成逻辑。
#### 2. 系统码编码实现
编码采用系统码形式,即 [信息位 + 校验位]。
实现逻辑:
- 将 7 位原始信息序列左移 8 位(等效于乘以 x^(n-k))。
- 调用自定义的 GF(2) 多项式除法函数,计算位移后的序列与生成多项式 g(x) 的余数。
- 如果余数长度不足 8 位,则在前面补零,最后将余数拼接到信息位之后形成 15 位码字。
#### 3. GF(16) 有限域构造
由于 BCH(15,7) 定义在 GF(2^4) 域上,系统构建了查找表:
- 本原多项式:采用 x^4 + x + 1(对应二进制 10011)。
- 状态转移:通过位移和异或操作生成 α^0 到 α^14 的所有元素。
- 查找表:建立了 alpha_to (幂次转向量值) 和 index_of (向量值转幂次) 两个表,以加速后续的有限域乘法运算。
#### 4. 译码与纠错核心算法
译码过程分为四个关键阶段:
- 计算伴随式 (Syndromes):计算接收到的码字多项式在 α^1, α^2, α^3, α^4 处的值。如果四个伴随式均为 0,则判定无错误。
- Berlekamp-Massey (BM) 算法:基于计算出的伴随式,通过迭代计算找出错误位置多项式 σ(x)。该算法在每一步迭代中计算差异值 d,并据此更新多项式阶数和系数。
- Chien 搜索算法:在 GF(16) 域内遍历寻找 σ(x) 的根。通过计算 α^(-i) 代入多项式的结果是否为 0,精准确定错误发生的比特位置。
- 错误纠正:根据 Chien 搜索反馈的索引,对受损码字中的相应比特进行翻转(0变1,1变0),从而恢复原始数据。
#### 5. 辅助与可视化功能
- 有限域乘法:通过指数相加取模 15 的方式实现。
- 随机噪声注入:利用随机采样函数在 1 到 15 的范围内选取 2 个位置注入比特翻转。
- 绘图功能:使用 subplot 和 stem 函数,清晰展示纠错前后的信号电平状态,方便直观评估性能。