CSMA/CA算法的MATLAB仿真

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

       CSMA/CA分为两类,第一类是时分多路复用技术与CSMA/CD相结合的方式;第二类是二次检测避免冲突方式。下面分别介绍这两种方式。
       第一类避免冲突的工作方式要点如下:每次传递结束后,立即把时间划分成时间片,这些时间片分属网络中各结点。结点根据时间片的先后发送信息,具有第一个时间片的结点首先发送,发送结束后,按优先权顺序把发送权交给具有第二个时间片的结点。轮到某个结点而该结点又无报文可发时,它的时间片就空闲不用。如果在时间片轮回一周后,所有结点都无报文可发,那么网络就返回到CSMA/CD方式,这时又按竞争方式获取信道。信道在CSMA/CD方式下使用一次后,系统又回到时间片方式。在这种可避免冲突的系统中,通常给某些结点以特殊的优先权,使它们总是能在第一个时间片发送信息。如果给它们的时间片没有使用,则重新在其他结点轮流分配时间片。在这种系统中,结点必须有能力完成时间片的同步,执行分配时间片的算法以及CSMA/CD方式的算法,因此,实现起来较复杂,价格也较贵。这种方法的优点是效率高。
       第二类避免冲突的CSMA/CA技术,称为二次检测信道访问技术。这是一种与第一种方式完全不同的CSMA/CA技术。它由结点在发送信息前对介质进行两次检测来避免冲突的发生,其工作方式如下:准备发送信息的结点在发送前侦听介质一段时间(大约为介质最长传播延迟时间的2倍),如果在这一段时间内介质为“闲”,则开始准备发送,发送准备的时间较长,约为前一段侦听时间的2~3倍。准备结束后,真正要将信息发送前,再由结点对介质进行一次迅速短暂的侦听,若仍为空闲,则可正式发送。如果这时侦听到介质上有信息传输,则马上停止自己即将开始的发送。按某种算法延迟一段随机时间,然后再重复以上的二次检测过程,所以这种方式又称为“二次检测”法。由于第二次侦听的时间短,在这么短暂的时间内有两个点同时发送信息的可能性很小,因此基本上可以避免冲突。同时,这种方式没有“边发边听”,而仅仅是“先听后发”,这样,用不着“边听边发”的复杂的冲突检测装置,降低了成本。这种方法的缺点是,发送后一旦发生冲突,也不中止自己的发送,直到发送完毕才知道错误,再重新侦听、重发 。

       CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)是一种用于无线网络中的媒体访问控制(MAC)协议,旨在避免数据碰撞,提高网络的效率和可靠性。它在无线传输环境中广泛使用,特别是在IEEE 802.11标准的Wi-Fi网络中。CSMA/CA采用了一系列机制,以确保数据的可靠传输,并最小化碰撞的发生。

CSMA/CA的基本原理如下:

  1. 载波监听(Carrier Sense): 设备在发送数据之前会先监听信道,检测是否有其他设备正在发送数据。如果信道空闲,设备才能开始发送数据,以避免与其他设备的传输冲突。

  2. 碰撞避免(Collision Avoidance): 即使信道在开始时是空闲的,由于信号传播延迟,多个设备可能在不同位置同时检测到空闲信道,导致数据碰撞。为了避免这种情况,设备在准备发送数据之前会引入随机延迟(即截断二进制指数退避算法),以增加设备之间的时间间隔,降低碰撞的可能性。

  3. RTS/CTS握手: 在发送数据之前,设备可以使用“请求发送”(Request to Send,RTS)和“清除发送”(Clear to Send,CTS)握手过程来协调。发送设备首先发送RTS帧,其他设备在接收到RTS帧后等待一段时间,然后发送CTS帧作为确认。这种握手过程可以减少隐藏节点问题和碰撞。

  4. NAV(Network Allocation Vector): NAV是一个计数器,表示信道上还有多少时间是占用的。当设备接收到RTS或CTS帧时,会更新NAV的值,其他设备在发送数据之前会检查NAV,以确保信道已空闲。

       总体来说,CSMA/CA采用了一系列机制来减少碰撞的发生,提高无线网络的效率。然而,由于信号传播延迟和隐藏节点等问题,CSMA/CA无法完全消除碰撞,因此在高密度网络中可能会影响网络性能。尽管如此,CSMA/CA仍然是许多无线网络标准中的核心协议,用于提供可靠的数据传输。

二、核心程序

clear all;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AllFrame = zeros(1,15);                                                    %发的帧的总数
SuccessFrame = zeros(1,15);                                                %发送成功的帧的数量
SER_Nodes = zeros(1,15);                                                   %误码率
ConWindow = 2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:计算节点个数对系统性能的影响
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:15
    [AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
     temp1=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
    [AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
     temp2=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
    [AllFrame(i) SuccessFrame(i)] = Csmacd(i,ConWindow);
     temp3=(AllFrame(i)-SuccessFrame(i))/AllFrame(i);
     SER_Nodes(i)=(temp1+temp2+temp3)/3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AllFrame1 = zeros(1,15);                                                   %发送总的帧数
SuccessFrame1 = zeros(1,15);                                               %发送成功的帧数
SER_Window = zeros(1,15);                                                  %误码率
NumberNodes1 = 4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:计算争用期长短对系统性能的影响
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:15
    [AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
     temp1=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
    [AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
     temp2=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
    [AllFrame1(i) SuccessFrame1(i)] = Csmacd(NumberNodes1,i);
     temp3=(AllFrame1(i)-SuccessFrame1(i))/AllFrame1(i);
     SER_Window(i)=(temp1+temp2+temp3)/3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%:画图展示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);
subplot(2,1,1);
plot(1:15,SER_Nodes(:));
box on;
grid on;
xlabel('Nodes');
ylabel('SER');
title('CSMA_CD:Nodes-SER');
subplot(2,1,2);
plot(1:15,SER_Window(:));
box on;
grid on;
xlabel('ConWindow');
ylabel('SER');
title('CSMA_CD:ConWindow-SER');
UP531

三、仿真结论

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSMA/CA是一种用于无线网络的协议,它可以帮助解决网络中发生的冲突问题。在该协议中,每个设备在发送数据之前需要先监听信道,检测是否有其他设备正在传输数据。如果检测到信道有其他设备在传输数据,当前设备会进行等待,直到信道空闲时再进行数据传输。 在进行CSMA/CA协议的Matlab仿真时,我们可以通过模拟多个设备同时发送数据的场景来测试协议的性能和效果。首先,我们需要定义仿真的环境参数,如信道的带宽、传输速率、设备数量等。 接下来,我们可以编写一个Matlab脚本来模拟设备的行为。在每个时间单位,每个设备都要进行信道的监听,如果信道空闲,设备就可以发送数据;如果信道有其他设备正在传输数据,设备需要等待。 我们还可以通过修改一些参数来测试不同情况下的性能表现。例如,我们可以改变信道的带宽和传输速率,观察协议的性能是否随之改变。或者我们可以修改设备的数量,测试当设备数量增加时,协议的性能是否受到影响。 在仿真过程中,我们可以使用Matlab中的图表和统计工具来分析结果。例如,我们可以绘制信道利用率和传输成功率随时间的变化曲线,从而评估协议的稳定性和效率。 综上所述,通过使用Matlab进行CSMA/CA协议的仿真,我们可以更好地理解和评估该协议在不同条件下的性能和效果。这样的仿真可以帮助我们优化网络设计和改进协议,提高无线网络的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值