(31, 25) RS码编译码MATLAB仿真系统
项目简介
本项目是一个基于MATLAB开发的里德-所罗门(RS)码仿真系统,专注于 (31, 25) RS码的编码与译码过程。该系统在有限域 GF(2^5) 上运行,码字长度为31符号,包含25个信息符号和6个校验符号,具备纠正3个随机符号错误的能力。
项目不仅实现了基础的有限域算术与多项式运算,还包含了完整的通信链路模拟:从随机信号生成、RS编码、信道错误注入(包括定点错误和高斯白噪声)、RS译码到最终的性能分析。
功能特性
- 有限域 GF(2^5) 构建:自定义实现基于本原多项式 $P(x) = x^5 + x^2 + 1$ (十进制37) 的有限域构建,生成指数表与对数表以加速乘除运算。
- 参数化生成多项式:根据纠错能力 $t=3$,动态计算生成多项式 $g(x)$。
- 系统码编码:实现系统RS编码,编码后的码字结构为 [信息位, 校验位],便于直接提取原始数据。
- 详细的单帧演示模式:
* 展示编码前后数据对比。
* 支持手动注入达到纠错极限的错误(3个特定位置的错误)。
* 输出伴随式、错误定位多项式系数、计算出的错误位置及数值等中间调试信息。
* 集成BPSK调制与解调(硬判决)。
* 模拟加性高斯白噪声(AWGN)环境。
* 计算并绘制不同信噪比(SNR 0-12dB)下的误比特率(BER)和误符号率(SER)曲线。
系统要求
- 软件环境:MATLAB
- 工具箱依赖:使用了基础通信函数(如
de2bi, bi2de),建议安装 Communications Toolbox,但核心RS逻辑均为原生代码实现。
仿真流程与实现细节
系统主要逻辑主要包含在主入口脚本中,分为演示部分、性能仿真部分以及底层的算法函数实现。
1. 系统初始化
- 定义基本参数:符号位宽 $m=5$,码长 $N=31$,信息长 $K=25$。
- 初始化有限域查找表(GF Exp/Log Tables)。
- 计算生成多项式:$g(x) = prod_{i=1}^{2t} (x - alpha^i)$。
2. 单帧编/译码演示(Demo)
此模块用于直观验证算法的正确性:
- 信源生成:随机生成长度为25的符号序列。
- 编码:调用编码函数生成31位码字。
- 错误注入:在第5、15、28个符号位置人为注入错误值(分别为10, 22, 7),模拟极限纠错场景。
- 译码与验证:执行译码算法,输出关键的调试参数(伴随式序列、错误位置多项式),并自动比对译码结果与原始消息是否一致。
3. AWGN信道性能分析
此模块用于评估算法在噪声环境下的统计性能:
- 信噪比循环:在 0dB 至 12dB 范围内,步长为 2dB 进行扫描。
- 调制传输:
* 将RS码符号(5 bit/symbol)转换为二进制比特流。
* 执行BPSK调制(0映射为-1,1映射为1)。
* 根据当前SNR和码率计算噪声方差,引入高斯白噪声。
* 接收端执行硬判决解调恢复比特流。
* 将比特流重组为符号序列。
* 记录误符号数(Symbol Errors)和误比特数(Bit Errors)。
* 计算SER和BER,并使用
semilogy 绘制性能曲线。
4. 核心算法实现
项目中包含了一系列自定义子函数来支撑RS码运算:
*
init_galois_field:构建 GF(32) 的域元素表。
*
gf_mul /
gf_div:利用对数表和指数表实现快速的伽罗华域乘除法。
*
gf_inv:计算域元素的逆元。
*
poly_mul:实现GF上的多项式乘法。
* 采用线性反馈移位寄存器(LFSR)思路。
* 原理为计算 $M(x) cdot x^{N-K} mod g(x)$ 得到余式作为校验位,构造系统码。
*
伴随式计算 (Syndrome Calculation):计算接收多项式在 $1, dots, 2t$ 幂次根处的求值结果,若全为0则认为无错。
*
关键方程求解:实现了 Berlekamp-Massey (BM) 算法,通过迭代计算差异值(Discrepancy),推导出错误位置多项式 $sigma(x)$。
*
错误定位与求值:流程包括求解 $sigma(x)$ 的根以确定错误位置(Chien搜索逻辑),并计算错误幅值(Forney算法逻辑),最后通过异或操作校正接收码字。
*
调试信息:函数返回详细的内部状态,包括计算出的错误位置索引和对应的错误数值。
使用方法
- 直接在MATLAB中运行主脚本。
- 控制台将首先输出单帧演示的详细步骤,包括原始数据、注入错误后的数据以及译码恢复的数据。
- 随后系统将进入蒙特卡洛仿真阶段,并在运行结束后弹出一个窗口,显示BER和SER随信噪比变化的曲线图。