⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhrma_sim_node.m

📁 本源码是用于ad hoc中一种改进的预约多址协议的仿真
💻 M
字号:
slot=10;              %时隙数
length=slot+1;
minislot=10;           %其它微时隙数
prop0=0.8;              %有业务节点竞争微时隙0的概率
prop1=0.4;              %有业务节点竞争其它微时隙的概率
t1=1;                   %一个突发平均持续时间,1s
lengofr=0.0444;         %一个帧长,单位秒
lengopa=4;             %一个业务分组长,单位kbit
node=10;
noprofin=exp(-lengofr/t1);
profin=1-noprofin;                 %一个话音业务在一帧内结束的概率
loopnum=1;

a=zeros(length,length);             %各矩阵初始化
b=zeros(length,1);
p=zeros(length,1);
node_num=zeros(1,loopnum);
x=zeros(1,length);
z=zeros(1,length);
throughput=zeros(1,loopnum);
drop=zeros(1,loopnum);



for i=1:loopnum
    landa=0.05*i;
    lan(i)=landa;
    notraf=exp(-landa);
    traf=1-notraf;           %节点有业务的概率
    
    con0=traf*prop0;
    con1=traf*prop1;
    suc0=con0;
    suc1=0;
    for k=1:minislot
        suc1=suc1+(1-con0)*((1-con1)^(k-1))*con1;
    end
    succ=suc0+suc1;               %任意一节点竞争某个空闲时隙成功概率
    nosucc=1-succ;
 
    for n=1:length                    %对状态转移矩阵a第一行赋值
        leave1=profin^(n-1);
        sum0=0;
        for r=0:(node-(n-1))
            sum0=sum0+groups(node-n+1,r)*(notraf^(node-r))*(slot-n+1)*(nosucc^r);
        end
        a(1,n)=leave1*sum0;
    end
    
    for m=2:(length-1)                      %n表示当前状态,m表示下一个状态,给矩阵a赋值
        for n=1:length
            lea_max=min(n-1,length-m);
            if m>n
                for c=0:lea_max
                    sum1=0; 
                    leave2=groups(n-1,c)*(profin^c)*(noprofin^(n-1-c));
                    for r=(m-n+c):(node-c)
                        sum2=0;
                        for k=0:(m-n+c-1)
                            sum2=sum2+(r-k)*succ*(nosucc^(r-k-1));
                        end
                        sum1=sum1+groups(node-c,r)*(notraf^(node-r))*sum2;
                    end
                    a(m,n)=a(m,n)+leave2*sum1;
                end    
            else
                leave3=groups(n-1,n-m)*(profin^(n-m))*(noprofin^(m-1));
                sum0=0;
                for r=0:(node-n+m)
                    sum0=sum0+groups(node-n+m,r)*(notraf^(node-r))*(slot-n+1)*(nosucc^r);
                end
                first=leave3*sum0;
                if n==length
                    a(m,n)=first;
                else
                    second=0;
                    for c=(n-m+1):lea_max
                        sum2=0;
                        leave4=groups(n-1,c)*(profin^c)*(noprofin^(n-1-c));
                        for r=(m-n+c):(node-c)
                            sum3=0;
                            for k=0:(m-n+c-1)
                                sum3=sum3+(r-k)*succ*(nosucc^(r-k-1));
                            end
                            sum2=sum2+groups(node-c,r)*(notraf^(node-r))*sum3;
                        end
                        second=second+leave4*sum2;
                    end 
                    a(m,n)=first+second;
                end
            end
        end
    end
   for m=1:(length-1)
        for n=1:(length-1)
            if m==n
                a(m,n)=a(m,n)-1;
            end
        end
    end
    
    for n=1:length
        a(length,n)=1;
        b(n,1)=0;
    end
    b(length,1)=1;
    
    
    p=a\b;               %求系统每个状态的概率
    
    %求解吞吐量
    for h=0:(length-2)
        sum3=0;
        for k=1:(slot-h)
            sum4=0;
            for r=k:node
                sum5=0;
                for c=0:(k-1)
                    sum5=sum5+(r-c)*suc0*(nosucc^(r-c-1));
                end
                sum4=sum4+groups(node,r)*(notraf^(node-r))*sum5;
            end
            sum3=sum3+k*sum4;
        end
        x(h+1)=h+sum3;
    end
    x(length)=slot;
    throughput(i)=x*p*lengopa/lengofr;
    
    %求丢包率
    tot_tra=node*traf;
    for h=0:(length-2)
        sum5=0;
        for k=1:(slot-h)
            sum6=0;
            for r=0:(k-1)
                sum6=sum6+(node-r-h)*suc0*(nosucc^(node-r-h-1));
            end
            sum5=sum5+k*sum6;
        end
        z(h+1)=(tot_tra-sum5)/(tot_tra+h);
    end
    z(length)=tot_tra/(tot_tra+slot);
    drop(i)=z*p;
end
    
    subplot(1,2,1);
    plot(lan,throughput);
    
    subplot(1,2,2);
    plot(lan,drop);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -