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

📄 schedulingmaxc2i.m

📁 ofdm系统当中的接纳控制技术 程序当中有三种接纳控制算法的对比 都是基于ofdm系统的
💻 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 + -