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

📄 main.m

📁 ofdm系统当中的接纳控制技术 程序当中有三种接纳控制算法的对比 都是基于ofdm系统的
💻 M
字号:
fprintf('simulation starts at:')disp(datestr(now,0));ticrand('seed',77);%******************以下参数可以更改*****************for AdmissionControlStrategy = 0:2    N = 150; %定义移动台的总数M = 1; %定义基站的总数BTSPower = 20000; %mW,定义基站的发射功率BandWidth = 5.0e6; %Hz,系统带宽DeltaF = 15e3; %Hz,子载波带宽K = 300; %子载波数目Eb2N0 = 5; %解调门限,约为4.8DBN0 = 10^(-134/10); %热噪声功率密度%初始化接入控制策略,0 没有接入控制% AdmissionControlStrategy = 0;Slot = 0; %初始化时隙计数器。SlotTime = 2e-3; %s,一个时隙的时间长度SimTime = 40000; %slot,仿真的时间长度MaxArrayLength = 5000;  %因为原来根据simtime产生了两个很长的数组,要把他们变短一些ATQueue ATDelay%确定基站的位置坐标,定义服务区的长度,定义服务区的宽度[BTSPosition,ServiceAreaLength,ServiceAreaWidth] = CreateBTSPosition(M); %M*2的矩阵,第i行表示第i个BTS的位置坐标%确定移动台的位置坐标ATPosition = CreateATPosition(N,M,BTSPosition,ServiceAreaLength,ServiceAreaWidth); %N*2的矩阵,第i行表示第i个移动台的位置坐标%计算路径损耗矩阵PathLossMatrix = CalculatePathLoss( N,M,BTSPosition, ATPosition); %N*M的矩阵。第i行第j列的元素代表第i个移动台到第j个基站的路径损耗%初始化AT的服务基站号ATServBTS = ServingBTS(PathLossMatrix);%初始化移动台的接收C2I向量global ATC2IATC2I = zeros(K,N);%初始化移动台的DRC向量bit/sATDRC = zeros(1,N);%初始化移动台的速率向量bit/sglobal ATRateATRate = zeros(1,N);%初始化移动台的指数平滑平均速率T=1000slot,bit/sATAverageRate = ones(1,N);%初始化移动台的时延要求向量,s秒ATDelayRequire = zeros(1,N);%初始化移动台在时延时间窗口内的指数平滑平均速率bit/sATDelayAverageRate = ones(1,N);%初始化移动台的数据队列,第一维到达的时刻slot,第二维表示移动台。global ATQueue ATQueue = zeros(MaxArrayLength,N);%初始化AT数据队列的头位置ATQueueFront = ones(1,N);%初始化AT数据队列的尾位置global ATQueueEndATQueueEnd = ones(1,N);%初始化AT队列的长度global ATQueueLengthATQueueLength = zeros(1,N);%初始化记录AT延迟的矩阵,第一维表示时隙,第2维表示移动台。global ATDelayATDelay = zeros(MaxArrayLength,N);%初始化移动台的数据到达速率。bit/slotATDataArriveRate = zeros(1,N);%初始化移动台的业务模型表示, 0_HTTP业务,1_WAP业务,2_FTP业务,3_VoIP业务,4_视频流业务ATTrafficType = zeros(1,N);%初始化移动台被调度的时隙数统计向量ATScheduledSlotCumulate = zeros(1,N);%用来计算积分值的零时变量Integrate = ones(1,N);%系统初始化的输入参数Strategy = 1;%系统初始化的输入参数PercentOfRealTime = 0.8;%**********以下为新增加参数**********************************%%初始化用户是否出于接入状态,用做接入控制使用global ATActiveATActive = zeros(1,N);%初始化用户在每次调度后的饥饿速率ATStarveRate = zeros(1,N);%初始化用于接入控制的平均饥饿速率global AverageStarveRateAverageStarveRate = zeros(1,N);%初始化用户已传输bitATScheduledBitCumulate = zeros(1,N);%初始化用户实时业务终止计时器,video voip都有一定的通话时长global ATRTTrafficTimerATRTTrafficTimer = zeros(1,N);%初始化用户处于非传输的状态计时器,如video,HTTP,FTP处于阅读的时间 or VOIP从上次完成通话后的计时器global ATDeactiveTimerATDeactiveTimer = zeros(1,N);%成功接入系统的呼叫次数ATSuccessAdmission = zeros(1,N);%呼叫接入失败的次数ATFailureAdmission = zeros(1,N);%实时数据包丢失记录global ATPacketDropNumATPacketDropNum = zeros(1,N);%总的packet记录global ATTotalPacketNumATTotalPacketNum = zeros(1,N);%packet interval timerglobal ATPacketIntervalTimerATPacketIntervalTimer = zeros(1,N);%frame interval timerglobal ATFrameIntervalTimerATFrameIntervalTimer = zeros(1,N);%当前frame已经产生的packet数ATPacketNumInCurrentFrame = zeros(1,N);%每个移动台因为PL得到的C2ILargeScaleATC2I = zeros(1,N);%每个移动台的传输时延PacketTotalDelay = zeros(1,N);%实时业务的丢包率ShortTermPacketDropRatio = zeros(1,N);%%用户从0到 当前Slot-ShortTerm的累积pkt数目AcumulatedPacketNum = zeros(1,N);   %用户从0到 当前Slot-ShortTerm的累积丢失pkt数目AcumulatedPktDropNum = zeros(1,N);%初始化动态调整门限比ACDynamicRatio = 1;%记录实时业务的传输累计时间global ATTotalActiveTimeATTotalActiveTime = zeros(1,N);%用来记录每个基站已经被实时业务占用的子载波数目RealSCNum = zeros(M);%用于接入控制的平均实时业务占用子载波数目global AverageRealSCnumAverageRealSCnum = zeros(M);%仿真循环开始%初始化    Slot    [ATTrafficType, ATDataArriveRate, ATDelayRequire, Integrate] = SystemInitialize(N,Strategy,PercentOfRealTime);    LargeScaleATC2I = InitializeLargeScaleATC2I( K,N,PathLossMatrix,ATServBTS,BandWidth,N0,BTSPower,DeltaF );    load -ascii FastFadingChA.txt; %read fast fading value    [ATTotalActiveTime,ATActive,ATRTTrafficTimer,ATDeactiveTimer,ATSuccessAdmission,ATFailureAdmission] = ATActiveInitialize(ATTotalActiveTime,N,ATTrafficType,SlotTime,ATSuccessAdmission,ATFailureAdmission,ATRTTrafficTimer,ATDeactiveTimer);%         [ATQueue,ATQueueLength,ATQueueFront,ATQueueEnd] = ATQueueInitialize(N,ATTrafficType);for Slot = 1:SimTime%         Slot%         ATPosition = UpdateATPosition(ATPosition); %更新移动台的位置坐标%         PathLossMatrix = UpdatePathLoss(PathLossMatrix); %更新路径损耗矩阵        UpdateATC2I( Slot,K,N,LargeScaleATC2I,FastFadingChA); %更新移动台的C2I%         ATDRC = UpdateATDRC( N,ATC2I,BandWidth,Eb2N0); %更新移动台的请求速率        [ATSuccessAdmission,ATFailureAdmission] = ...        ATAdmissionControl(RealSCNum,ACDynamicRatio,ATRate,ATStarveRate,N,ATTrafficType,SlotTime,AdmissionControlStrategy,ATSuccessAdmission,ATFailureAdmission);%这一步实现动态产生用户请求,完成接入控制%         ATDataArriveRate = UpdateATDataArriveRate(ATDataArriveRate,ATTrafficType,Slot); %更新数据到达的速率         [ATPacketNumInCurrentFrame] = ...         UpdateQueue(ATPacketNumInCurrentFrame,ATTrafficType,Slot,SlotTime,N,ATDataArriveRate,ATActive); %更新数据队列%        [ATTotalPacketNum,ATQueueLength,ATQueueEnd,ATFrameIntervalTimer,ATPacketIntervalTimer,ATPacketNumInCurrentFrame] = ...%        UpdateQueue(ATTotalPacketNum,ATPacketNumInCurrentFrame,ATFrameIntervalTimer,ATPacketIntervalTimer,ATTrafficType,Slot,SlotTime,N,ATDataArriveRate,ATQueueLength,ATQueueEnd,ATActive);        [ATDRC,ATQueueFront] = UpdateATDRC( ATTrafficType,ATDataArriveRate,SlotTime,N,ATQueue,ATQueueFront,ATDelay,ATDelayRequire);%根据业务队列请求传输速度,然后BTS结合这些请求速率做调度      %         ScheduleDecision = SchedulingCPF(N,M,ATDRC,ATAverageRate,ATServBTS); %正比公平的调度算法;        [ATStarveRate,RealSCNum] = SchedulingMaxC2I(K,N,M,ATDRC,ATActive,ATServBTS,ATC2I,DeltaF,ATTrafficType);%MaxC2I调度算法        %[ScheduleDecision, Integrate] = SchedulingMPF(N,M,ATDRC,ATAverageRate,ATServBTS,ATQueueLength,ATDelayAverageRate,ATDelayRequire,Integrate,SlotTime); %修改后的正比公平调度算法        %[ScheduleDecision, Integrate] = SchedulingMPF2(N,M,ATDRC,ATAverageRate,ATServBTS,ATQueueLength,ATDelayAverageRate,ATDelayRequire,Integrate,SlotTime); %修改后的正比公平调度算法        %         ATScheduledSlotCumulate = UpdateTimeCumulate(ScheduleDecision, ATScheduledSlotCumulate); %累计AT被调度的时间。        ATScheduledBitCumulate = UpdateBitCumulate(ATScheduledBitCumulate,ATRate,SlotTime);     %更新每个移动台的传输bit%         ATRate = UpdateATRate(ATStarveRate,ATDRC,ATQueueLength,SlotTime); %更新移动台的速率%         ATAverageRate = UpdateAverageRate( N,ATRate, ATAverageRate ); %更新移动台的平均速率%         ATAverageRate = UpdateAverageRate( N,ATScheduledBitCumulate, Slot,SlotTime );%         ATDelayAverageRate = UpdateDelayAverageRate( N,SlotTime,ATRate, ATDelayAverageRate, ATDelayRequire); %更新移动台在时延窗口内的平均速率        [ATQueueLength,ATQueueFront] = UpdateQueueAfterSchedule(ATTrafficType, ATDelayRequire,N, Slot, SimTime,ATRate, ATQueueLength, ATQueueFront, ATQueueEnd,SlotTime); %更新调度后的队列状态                if mod(Slot,100) == 0            Slot            [ACDynamicRatio,ShortTermPacketDropRatio,AcumulatedPacketNum,AcumulatedPktDropNum] = CalculateShortTermPktDropRatio(ACDynamicRatio,AcumulatedPacketNum,ATPacketDropNum,ATTotalPacketNum,AcumulatedPktDropNum);        end            if mod(Slot,MaxArrayLength) == 0            for user = 1:N                PacketTotalDelay(user) = PacketTotalDelay(user) + sum(ATDelay(:,user));            end            ATDelay = zeros(MaxArrayLength,N);  %每次累计完毕后清零        endend %仿真循环结束%统计输出RTThrpt = 0;FTPThrpt = 0;AverageRate = zeros(1,N);PktDelay = 0;for a = 1:N    if ATTrafficType(a) == 4        RTThrpt = ATScheduledBitCumulate(a) + RTThrpt;        AverageRate(a) = ATScheduledBitCumulate(a)/(SlotTime*max(1,(ATTotalActiveTime(a)-ATRTTrafficTimer(a))));        PktDelay = PacketTotalDelay(a) + sum(ATDelay(:,a)) + PktDelay;    elseif ATTrafficType(a) == 2        FTPThrpt = ATScheduledBitCumulate(a) + FTPThrpt;        AverageRate(a) = ATScheduledBitCumulate(a)/(SlotTime*SimTime);    endendRTThrpt = RTThrpt/(SimTime*SlotTime);FTPThrpt = FTPThrpt/(SimTime*SlotTime);TotalThrpt = RTThrpt + FTPThrpt;PktDropRate = sum(ATPacketDropNum)/sum(ATTotalPacketNum);PktDelay = PktDelay/sum(ATTotalPacketNum);CallFailureRatio = sum(ATFailureAdmission)/(sum(ATSuccessAdmission)+sum(ATFailureAdmission));%*****************The End********************%% ClearAndSaveResultclear ATDelay ATQueue FastFadingChA;filename = sprintf('%suser%dACStrategy%d',date,N,AdmissionControlStrategy);save(filename);end %for AdmissionControlStrategy = 0:2t=tocfprintf('simulation ends at:')disp(datestr(now,0));

⌨️ 快捷键说明

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