📄 cdmatuibi.m
字号:
roll(source)=1;
roll(desti)=1;
RTS(2,source)=RTS(2,source)-1;
RTS(2,desti)=RTS(2,desti)-1;
%RTS(5,source)=round(rand(1,1)); % 发下一比特
else
roll(source)=roll(source)+1; % 准备发下一码字
roll(desti)=roll(desti)+1;
end
end
end
if RTS(1,s)==4 % 若为收CTS状态
desti=s;
source=RTS(3,s);
RTRece(desti,mod(roll(desti)+14,16)+1)=sum(RTS(4,:).*G(desti,:))+xigema*randn(1,1); % 接收端天线电压值
if roll(desti)==1 % 若发完一个比特,则
rece=(sign(sum(RTRece(desti,:).*BCode(desti,:)))+1)/2; % 接收端进行判决
if rece~=RTS(5,source) % 记录误码个数
error(desti)=error(desti)+1;
end
RTRece=0*RTRece;
RTS(5,source)=round(rand(1,1)); % 发下一比特
end
if (RTS(2,desti)==0)&(roll(desti)==1) % 若该状态结束
if error(desti)>menxian % 若误码率过高,则此次通信失败
RTS(:,source)=0*RTS(:,source);
RTS(:,desti)=0*RTS(:,source);
else % 否则继续,并重置状态标志
RTS(1,source)=6;
RTS(1,desti)=5;
RTS(2,source)=DataLenth;
RTS(2,desti)=DataLenth;
RTS(4,source)=0;
RTS(4,desti)=0;
RTS(5,source)=0;
RTS(5,desti)=0;
roll(source)=1; % 收发双方的码字循环变量清零
roll(desti)=1;
end
error(desti)=0;
RTRece=0*RTRece;
end
end
if RTS(1,s)==5 % 若为发数据状态
source=s; % 本次循环的发送节点
desti=RTS(3,source); % 本次循环的接收节点
if (RTS(2,source)==DataLenth)&(roll(source)==1) % 若刚刚进入此状态,则先找码和进行初始化
datacode(desti,:)=BCode(8+codeuse,:);
if codeuse==4
codeuse=1;
else
codeuse=codeuse+1;
end
RTS(5,source)=round(rand(1,1)); % 信息比特
end
if (RTS(2,source)==0)&(roll(source)==1) % 若该状态结束
RTS(1,source)=8; % 则进入等收ACK状态
RTS(2,source)=ConLenth;
RTS(4,source)=0; % 天线停止发电磁波
roll(source)=1; % 收发双方的码字循环变量清零
roll(desti)=1;
%datacode(desti,:)=0*datacode(desti,:);
else % 普通情况
%RTS(5,source)=round(rand(1,1)); % 发端的信息比特
RTS(4,source)=Vmax*(2*RTS(5,source)-1)*datacode(desti,roll(desti)); % 发端天线电压值
if roll(source)==16
roll(source)=1;
roll(desti)=1;
RTS(2,source)=RTS(2,source)-1;
RTS(2,desti)=RTS(2,desti)-1;
%RTS(5,source)=round(rand(1,1)); % 发下一比特
else
roll(source)=roll(source)+1; % 准备发下一码字
roll(desti)=roll(desti)+1;
end
end
end
if RTS(1,s)==6 % 若为收数据状态
desti=s;
source=RTS(3,s);
RTRece(desti,mod(roll(desti)+14,16)+1)=sum(RTS(4,:).*G(desti,:))+xigema*randn(1,1); % 接收端天线电压值
if roll(desti)==1 % 若发完一个比特,则
rece=(sign(sum(RTRece(desti,:).*datacode(desti,:)))+1)/2; % 接收端进行判决
if rece~=RTS(5,source) % 记录误码个数
error(desti)=error(desti)+1;
end
RTRece=0*RTRece;
RTS(5,source)=round(rand(1,1)); % 发下一比特
end
if (RTS(2,desti)==0)&(roll(desti)==1) % 若该状态结束
if error(desti)>4*menxian % 若误码率过高,则此次通信失败
RTS(:,source)=0*RTS(:,source);
RTS(:,desti)=0*RTS(:,source);
else % 否则继续,并重置状态标志
RTS(1,source)=8;
RTS(1,desti)=7;
RTS(2,source)=ConLenth;
RTS(2,desti)=ConLenth;
RTS(4,source)=0;
RTS(4,desti)=0;
RTS(5,source)=0;
RTS(5,desti)=0;
roll(source)=1; % 收发双方的码字循环变量清零
roll(desti)=1;
end
error(desti)=0;
RTRece=0*RTRece;
datacode(desti,:)=0*datacode(desti,:);
end
end
if RTS(1,s)==7 % 若为发ACK状态
source=s; % 本次循环的发送节点
desti=RTS(3,source); % 本次循环的接收节点
if (RTS(2,source)==0)&(roll(source)==1) % 若该状态结束
RTS(1,source)=0; % 则空闲
else % 普通情况
%RTS(5,source)=round(rand(1,1)); % 发端的信息比特
RTS(4,source)=Vmax*(2*RTS(5,source)-1)*BCode(desti,roll(source)); % 发端天线电压值
if roll(source)==16
roll(source)=1;
roll(desti)=1;
RTS(2,source)=RTS(2,source)-1;
RTS(2,desti)=RTS(2,desti)-1;
%RTS(5,source)=round(rand(1,1)); % 发下一比特
else
roll(source)=roll(source)+1; % 准备发下一码字
roll(desti)=roll(desti)+1;
end
end
end
if RTS(1,s)==8 % 若为收ACK状态
desti=s;
source=RTS(3,s);
RTRece(desti,mod(roll(desti)+14,16)+1)=sum(RTS(4,:).*G(desti,:))+xigema*randn(1,1); % 接收端天线电压值
if roll(desti)==1 % 若发完一个比特,则
rece=(sign(sum(RTRece(desti,:).*BCode(desti,:)))+1)/2; % 接收端进行判决
if rece~=RTS(5,source) % 记录误码个数
error(desti)=error(desti)+1;
end
RTRece=0*RTRece;
RTS(5,source)=round(rand(1,1)); % 发下一比特
end
if (RTS(2,desti)==0)&(roll(source)==1) % 若该状态结束
if error(desti)>menxian % 若误码率过高,则此次通信失败
RTS(:,source)=0*RTS(:,source);
RTS(:,desti)=0*RTS(:,source);
else % 否则继续,并重置状态标志
RTS(:,source)=0*RTS(:,source);
RTS(:,desti)=0*RTS(:,source);
roll(source)=1; % 收发双方的码字循环变量清零
roll(desti)=1;
packett(1,N1)=packett(1,N1)+1
end
error(desti)=0;
RTRece=0*RTRece;
end
end
end
end
%packetg
end
%packetg(1,N1)=0;
%packetg(1,N1)
N1
roll=0*roll+1;
RTS=RTS*0;
RTRece=0*RTRece;
end
plot(ol,packett./(packetg-1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -