KTH 网络编码完整仿真程序
项目项目介绍
本项目是由瑞典皇家理工学院(KTH)相关研究团队开发的网络编码仿真框架。该程序旨在通过MATLAB环境模拟无线或有损多跳网络中的数据传输,特别关注随机线性网络编码(Random Linear Network Coding, RLNC)的实现与性能评估。与传统的存储转发协议(Routing)相比,该项目展示了网络编码在提升系统鲁棒性及通过有损链路保持有效吞吐量方面的核心优势。
功能特性
- 实现了完整的有限域(Galois Field)运算库,支持 GF(2^8) 域下的四则运算及矩阵操作。
- 模拟了基于 RLNC 的数据包组合与传输机制,能够自动适应不同的链路丢包环境。
- 集成了高斯消元解码算法(Gaussian Elimination),支持在有限域内高效求解线性方程组以还原原始数据。
- 提供了与传统路由转发模式(无编码转发)的性能对比分析。
- 自动化生成多维度的性能图表,直观展示丢包率对解码成功率及有效吞吐量的影响。
系统要求
- MATLAB R2016a 或更高版本。
- 硬件要求:标准 PC 即可,内存建议 8GB 或以上以支持大量循环迭代。
- 无需额外安装第三方工具箱。
仿真流程说明
程序遵循标准的研究仿真流程,主要包含以下逻辑阶段:
1. 初始化设置
- 参数定义:设定有限域大小(默认 256 阶)、块大小(Generation Size,默认为 4)、每个数据包的大小(10字节)以及丢包率测试范围(0% 到 50%)。
- 有限域环境构建:首先通过原始多项式(0x11D)生成指数表和对数表。由于有限域内的乘法和除法运算开销较大,程序通过查表法极大地提升了仿真速度。
2. 数据处理与编码传输
- 源数据生成:在每一轮实验中,随机生成符合 $GF(2^8)$ 取值范围的原始数据包矩阵。
- 随机编码(RLNC):不同于固定编码,程序模拟了节点生成随机线性组合的过程。在传输过程中,模拟每一代(Generation)数据包的收集。系统会不断向接收端发送随机线性组合,直到接收端获得足够秩的包(通常为 $K+2$ 个以确保高解码概率)或达到最大传输尝试次数。
- 对比组模拟:同时模拟传统路由模式,此时若单个数据包在链路中丢失,则该包无法被还原,直接导致传输失败。
3. 解码与结果验证
- 高斯消元解码:接收端收集到系数矩阵和编码载荷后,调用消元算法进行增广矩阵的简化。如果收集到的线性无关向量数量达到 $K$,则判定为解码成功。
- 一致性校验:解码后的数据将与原始生成的随机数据进行逐字节对比,确保仿真结果的准确性。
4. 数据统计与可视化
- 计算每个丢包率点的平均成功率、平均有效位吞吐量。
- 绘制“丢包率 vs 解码成功率”曲线以及“网络编码 vs 传统路由”的吞吐量对比图。
关键算法实现细节
有限域运算系统
- 查表法乘除法:利用对数和指数特性,将乘法转化为索引加法,避免了复杂的位运算。
- 矩阵乘法:在 GF 域内实现矩阵相乘,加法操作替换为逻辑异或(XOR),这是线性网络编码的核心。
传输环境模拟
- 丢包模拟:利用随机函数通过概率判定每个数据包是否成功到达,真实重现了在不可靠网络环境下的传输特性。
- 秩的收集逻辑:程序体现了 RLNC “只要收集到足够的线性无关包即可解锁原始信息”的特性,而非特定位置的数据包。
线性方程组求解
- 高斯消元法:在解码子函数中,算法会寻找主元、进行行交换、归一化主行并进行消元操作。最后通过检查秩是否达到 $K$ 来判断系统是否可解。
使用方法
- 启动 MATLAB 软件。
- 将该项目的所有函数所在的文件夹设置为工作路径。
- 执行主程序入口函数。
- 仿真结束后,程序将自动弹出两个对比图表,并在命令行窗口输出在最高丢包率下的仿真统计摘要。