CSMA/CA算法的MATLAB仿真

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

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

二、核心程序

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

三、仿真结论

 

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/130313231