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

📄 cdmatuibi.m

📁 给出了简单的点到点CDMA系统的物理层和链路层联合仿真的Matlab程序。程序不长
💻 M
📖 第 1 页 / 共 2 页
字号:
                            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 + -