📄 schedulingmaxc2i.m
字号:
function [starveRate,realSCNum] = SchedulingMaxC2I(K,N,M,ATDRC,ATActive,ATServBTS,ATC2I,DeltaF,ATTrafficType)
%利用MaxC2I算法实现子载波调度
% Decision = zeros(K,N);
% Resource = zeros(M,K,N);
global ATRate;
ATRate = zeros(1,N);
starveRate = ATDRC;
% Rate = zeros(1,N); %每个用户的瞬时实际传输速率
BER = 1e-4;
BETA = -1.5/log(5*BER);
realSCNum = zeros(M);
for cell = 1:M
for subcarrier = 1:K
C2I = ATC2I(subcarrier,:);
[maxC2I user] = max(C2I);
while maxC2I > 0
if ATActive(user) == 1 && ATServBTS(user) == cell && starveRate(user) > 0 && ATTrafficType(user) == 4
r = DeltaF*log2(1+BETA*maxC2I);
% Resource(cell,subcarrier,user) = Resource(cell,subcarrier,user);
ATRate(user) = ATRate(user) + min(r,starveRate(user));
starveRate(user) = max(0,starveRate(user)-r);
C2I(user) = 0;
realSCNum(cell) = realSCNum(cell) + 1; %成功分配了一个子载波给video业务
break;
else
C2I(user) = 0;
[maxC2I user] = max(C2I);
end
% continue;
end
end
end
for cell = 1:M
for subcarrier = realSCNum(cell)+1:K
C2I = ATC2I(subcarrier,:);
[maxC2I user] = max(C2I);
while maxC2I > 0
if ATActive(user) == 1 && ATServBTS(user) == cell && starveRate(user) > 0 && ATTrafficType(user) == 2
r = DeltaF*log2(1+BETA*maxC2I);
% Resource(cell,subcarrier,user) = Resource(cell,subcarrier,user);
ATRate(user) = ATRate(user) + min(r,starveRate(user));
starveRate(user) = max(0,starveRate(user)-r);
% starveRate(user) = 0; %将非实时业务的饥饿速率设为0
C2I(user) = 0;
break;
else
C2I(user) = 0;
[maxC2I user] = max(C2I);
end
% continue;
end
end
end
for user = 1:N
if ATTrafficType(user) == 2
starveRate(user) = 0;
end
end
% if ATActive(user) == 1
% temp = -1;
% no = 0;
% for cell = 1:M
% if ATServBTS(user) == cell
% priority = ATDRC(a) / ATAverageRate(a);
% if priority > temp
% temp = priority;
% no = a;
% end
% end
% end
% if no ~= 0
% D(no) = 1;
% end
% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -