基于MATLAB的IEEE 802.11 DCF协议仿真与性能分析系统
项目介绍
本项目是一个基于MATLAB环境开发的无线网络仿真系统,专注于实现和分析IEEE 802.11标准中的分布式协调功能(DCF)MAC层协议。系统通过离散事件与时隙驱动相结合的方式,模拟了多节点网络环境下的信道竞争、数据传输、碰撞处理及退避过程。
仿真核心完全依据IEEE 802.11g/n物理层参数规范构建,能够精确计算传输时延、吞吐量及协议开销,并对比基础接入模式与RTS/CTS模式下的网络性能。
主要功能特性
- CSMA/CA 信道接入控制:实现了载波监听多路访问/冲突避免机制,模拟节点在尝试发送数据前的DIFS监听与时隙倒数过程。
- 二进制指数退避算法 (BEB):完整实现了标准定义的退避机制。当发生碰撞时,竞争窗口(CW)翻倍(
CW * 2 + 1),直到达到最大值(CWmax);传输成功后重置为最小值(CWmin)。 - 虚拟载波感测 (RTS/CTS):支持基于数据包大小阈值的RTS/CTS开启机制。当数据包长度超过设定的阈值(默认1000 Bytes)时,自动启用RTS/CTS握手以确保存输稳定性。
- 自动重传机制 (ARQ):模拟ACK确认帧交换。若传输失败(碰撞),系统自动增加重传计数,直至达到最大重传次数(默认7次)后丢弃数据包。
- 泊松业务流量生成:内置流量生成器,每个节点根据泊松过程独立产生数据包到达时间,模拟真实的非饱和或饱和网络流量。
- 多维度性能评估:实时计算网络总吞吐量、端到端时延、碰撞率、丢包率、信道利用率以及控制开销占比。
系统要求
- 软件环境:MATLAB (推荐 R2016b 及以上版本)
- 工具箱:无特殊工具箱需求,基于MATLAB基础函数实现。
使用方法
- 确保MATLAB当前工作路径包含仿真脚本文件。
- 直接运行主函数
main() 即可启动仿真。 - 仿真结束后,控制台将输出统计结果,并自动弹出性能分析图表。
仿真逻辑与实现细节
本项目的核心逻辑位于 main 函数中,采用时隙驱动(Time-Slotted)与事件跳转相结合的仿真引擎。实现流程分析如下:
1. 初始化与流量预生成
- 系统首先定义物理层参数(SlotTime 20us, SIFS 10us, DIFS 50us, 速率54Mbps等)和MAC层参数(CW范围, 帧长)。
- 初始化节点结构体数组,包含状态变量:退避计数器(Backoff)、竞争窗口(CW)、重传次数及统计计数器。
- 在仿真循环开始前,预先为所有节点生成符合泊松分布的数据包到达时间队列,从而确定了全周期的业务负载。
2. 主仿真循环 (CSMA/CA 核心)
仿真采用
while CurrentTime < INPUT_SimTime 循环,主要步骤包括:
* 检查所有节点队列,若当前没有任何节点有待发数据包,系统将时间直接“跳跃”至最早的数据包到达时刻,避免无效循环。
* 若有节点数据包已到达,则进入竞争阶段。
* 遍历所有节点,对于有数据且退避计数值
Backoff > 0 的节点,将其计数值减1(模拟经过一个空闲Slot)。
* 识别出所有
Backoff == 0 的节点,标记为本时隙的
发送节点集合 (TxNodes)。
*
空闲:若无节点退避至0,时间推进一个
PHY_SlotTime。
*
传输/冲突:若有节点尝试发送(
TxNodes 非空),计算本次传输所需的物理时间。时间计算涵盖了:帧头传输时间、数据传输时间、控制帧(RTS/CTS/ACK)时间以及帧间间隔(SIFS/DIFS)。
3. 碰撞处理与退避算法
当
TxNodes 数量大于1时,判定为
碰撞:
- 所有参与碰撞的节点重传计数器加1。
- 执行二进制指数退避:
Nodes(idx).CW = min(Nodes(idx).CW * 2 + 1, MAC_CWmax)。 - 重新随机选择退避时间:
Backoff = randi([0, CW])。 - 若重传次数超过
INPUT_MaxRetries,则丢弃该包并重置CW。
当
TxNodes 数量等于1时,判定为
成功:
- 更新节点成功计数与总时延统计。
- 重置CW为
MAC_CWmin 并移除队列中的已发送包。
4. 模式切换 (RTS/CTS)
代码中根据当前数据包大小动态判定传输模式:
- 若
PktBytes >= INPUT_RTS_Threshold(默认1000字节),计算传输时间包含:RTS + SIFS + CTS + SIFS + DATA + SIFS + ACK + DIFS。 - 否则使用基础模式:DATA + SIFS + ACK + DIFS。
输出结果与图表分析
仿真完成后,控制台将打印以下汇总数据:
- 总吞吐量 (Mbps):网络承载的有效数据速率。
- 平均时延 (ms):数据包从到达队列到成功确认的平均延迟。
- 信道碰撞率:发生碰撞的传输次数占总传输尝试次数的比例。
- 丢包率:因达到最大重传次数而被丢弃的数据包比例。
- 信道利用率:信道处于繁忙(传输数据或控制帧)的时间占比。
- 控制开销占比:非数据载荷(如头部、ACK、RTS/CTS、帧间隙)占用的信道时间比例。
同时生成可视化图表:
- 吞吐量随时间变化曲线:展示网络性能的实时波动。
- 节点级统计堆叠柱状图:显示前10个节点的成功发送数、碰撞数与丢包数。
- 碰撞后退避窗口分布:直方图展示网络拥塞时各个节点竞争窗口(CW)的分布情况。
- 协议开销分析(代码中定义了第四个子图区域,用于展示相关统计)。