基于MATLAB的无线通信ARQ协议仿真与实验系统
项目介绍
本系统是一个专门用于无线网络通信教学与研究的仿真平台,聚焦于数据链路层的差错控制技术。系统通过MATLAB编程,完整模拟了发射机、带有加性高斯白噪声(AWGN)的无线信道以及接收机的通信全过程。其核心目标是展示和对比三种经典的自动重传请求(ARQ)协议:停止等待协议(Stop-and-Wait)、后退N帧协议(Go-Back-N)以及选择性重传协议(Selective Repeat)。通过本系统,用户可以直观地观察到在不同信噪比(SNR)环境下,不同重传机制对系统吞吐量和误包率的实际影响。
功能特性
- 协议全覆盖:完整实现了SW、GBN和SR三种链路层重传协议的逻辑仿真。
- 差错检测机制:内置手动实现的CRC-3循环冗余校验算法,模拟真实的帧校验过程。
- 物理层仿真:等效模拟BPSK调制解调过程,并在信道中加入可调功率的AWGN噪声。
- 动态参数配置:支持自定义信噪比范围、数据包长度、发送窗口大小、最大重传次数等关键参数。
- 性能闭环分析:系统不仅计算吞吐量(Throughput),还统计误包率(PER),并自动生成对比曲线图。
- 模块化设计:代码逻辑清晰,功能函数分解明确,便于二次开发或扩展。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 硬件要求:标准PC即可,无需高性能GPU或特殊DSP硬件。
- 工具箱要求:本系统采用纯脚本编写,不依赖特定的通信工具箱(Communications Toolbox),具备极强的通用性。
核心实现逻辑
系统运行流程严格遵循无线通信的物理层与数据链路层交互规范:
- 初始化阶段:定义信噪比序列、仿真包总数、CRC校验多项式以及各协议所需的窗口跨度。
- 循环仿真阶段:针对每一个SNR点,依次调用三个协议仿真函数。
- 协议执行细节:
- 停止等待协议:每发送一个数据包即停下等待校验结果,若失败则重传,直至收到ACK或达到最大重传上限。
- 后退N帧协议:按照滑动窗口连续发送包,若序列中的某个包校验失败,发送端会从该包开始及其后续所有包重新发送,体现了按序接收的特点。
- 选择性重传协议:允许接收端缓存失序到达的包,发送端仅对校验失败的特定数据包进行重传,显著提升信道利用率。
- 信号处理模拟:数据包在传输前进行BPSK映射(0->-1, 1->1),在信道中叠加高斯噪声,接收端通过零电平判决进行硬件解调。
- 结果生成:最终将统计数据转化为可视化图表,展示吞吐量随SNR上升而提高、误包率随SNR上升而下降的趋势。
关键函数与算法分析
- 停止等待仿真函数:利用while循环实现单包确认机制。其核心在于逻辑变量acked的切换,只有在CRC校验通过时,成功计数值才增加,确保了传输的可靠性。
- 后退N帧仿真函数:引入了next_frame_to_send和ack_expected两个指针维护发送状态。模拟了发送端窗口填满逻辑,当发生错误时,通过重置发送指针强制执行“回退”动作,真实反映了该协议的非选择性重传特性。
- 选择性重传仿真函数:使用布尔逻辑数组ack_status记录每个原始数据包的确认状态。通过ptr_base指针滑动来管理当前活跃窗口,只针对状态为false的包触发传输尝试,实现了高效率的精准重传。
- CRC校验算法:系统手动实现了位异或(bitxor)运算来模拟模2除法。add_crc函数负责在原始序列后拼接校验码,check_crc函数负责验证余数是否为零。这种底层实现方式有助于深入理解循环冗余校验的数学原理。
- 信道模型函数:根据输入的SNRdB值计算噪声标准差。该函数实现了从位流到电平信号的转换、加噪以及反向判决,是衡量ARQ协议在不同坏信道环境下表现的基础。
使用方法
- 启动MATLAB并进入主程序所在的文件夹。
- 在命令行窗口输入主程序名称并回车。
- 程序自动开始仿真并在命令行实时显示当前计算的SNR进度。
- 仿真结束后,系统会自动弹出包含“归一化吞吐量”和“误包率(PER)”两个子图的性能分析界面。
- 命令行窗口会同步打印出一份包含SNR、SW吞吐量、GBN吞吐量和SR吞吐量的对比报表。