?? subcarrier_allocation.m
字號:
for j=1:1:subcarrier_number
if i~=j
if (C_max(occupy(j),i)+C_max(occupy(i),j))>(C_max(occupy(i),i)+C_max(occupy(j),j))
if (R1(t,occupy(i))-C_max(occupy(i),i)+C_max(occupy(i),j))>=R_least(1,occupy(i)) && (R1(t,occupy(j))-C_max(occupy(j),j)+C_max(occupy(j),i))>=R_least(1,occupy(j))
R1(t,occupy(i))=R1(t,occupy(i))-C_max(occupy(i),i)+C_max(occupy(i),j);
R1(t,occupy(j))=R1(t,occupy(j))-C_max(occupy(j),j)+C_max(occupy(j),i);
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%fairness-aware allocation algorithm
C=zeros(user_number(for_user_number),subcarrier_number,3);
C=C_all;
user_index=ones(1,user_number(for_user_number));
subcarrier_index=ones(1,subcarrier_number);
while sum(user_index)>0
row_max=1;
column_max=1;
height_max=1;
C_max=C(1,1,1);
for i=1:1:user_number(for_user_number)
if user_index(1,i)>0
for j=1:1:subcarrier_number
for k=1:1:3
if C(i,j,k)>C_max
row_max=i;
column_max=j;
height_max=k;
C_max=C(i,j,k);
end
end
end
end
end
R2(t,row_max)=R2(t,row_max)+C_max;
C(:,column_max,:)=0;
subcarrier_index(1,column_max)=0;
if R2(t,row_max)>=R_least(1,row_max)
user_index(1,row_max)=0;
end
end
for j=1:1:subcarrier_number
if subcarrier_index(1,j)>0
C1=zeros(user_number(for_user_number),3);
for m=1:1:user_number(for_user_number)
for k=1:1:3
C1(m,k)=C(m,j,k);
end
end
[max1,index]=max(max(C1'));
R2(t,index)=R2(t,index)+max1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%improved algorithm3
occupy=zeros(1,subcarrier_number);
C=zeros(user_number(for_user_number),subcarrier_number,3);
C=C_all;
C_max=zeros(user_number(for_user_number),subcarrier_number);
for i=1:1:user_number(for_user_number)
for j=1:1:subcarrier_number
C_max(i,j)=max(C(i,j,:));
end
end
C_max2=C_max;
occupy=zeros(1,subcarrier_number);
for j=1:1:subcarrier_number
[max1,index]=max(C_max(:,j));
R3(t,index)=R3(t,index)+max1;
occupy(1,j)=index;
end
for i=1:1:user_number(for_user_number)
if R3(t,i)<R_least(1,i)
e=zeros(1,subcarrier_number);
for j=1:1:subcarrier_number
if occupy(1,j)~=i
e(1,j)=(C_max(occupy(1,j),j)-C_max(i,j))/C_max(i,j);
end
end
while R3(t,i)<R_least(1,i)
[e_min,index]=min(e);
if R3(t,occupy(1,index))-C_max(occupy(1,index),index)>=R_least
R3(t,occupy(1,index))=R3(t,occupy(1,index))-C_max(occupy(1,index),index);
R3(t,i)=R3(t,i)+C_max(i,index);
else
e(1,index)=100000;
end
if sum(e)==0
break;
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%optimal-best
occupy=zeros(1,subcarrier_number);
C=zeros(user_number(for_user_number),subcarrier_number,3);
C=C_all;
C_max=zeros(user_number(for_user_number),subcarrier_number);
for i=1:1:user_number(for_user_number)
for j=1:1:subcarrier_number
C_max(i,j)=max(C(i,j,:));
end
end
C_max2=C_max;
occupy=zeros(1,subcarrier_number);
for j=1:1:subcarrier_number
[max1,index]=max(C_max(:,j));
R4(t,index)=R4(t,index)+max1;
occupy(1,j)=index;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%rand algorithm
C=zeros(user_number(for_user_number),subcarrier_number,3);
C=C_all;
C_max=zeros(user_number(for_user_number),subcarrier_number);
for i=1:1:user_number(for_user_number)
for j=1:1:subcarrier_number
select_index=rand;
if select_index<1/3
C_max(i,j)=C(i,j,1);
elseif select_index<2/3
C_max(i,j)=C(i,j,2);
else
C_max(i,j)=C(i,j,3);
end
end
end
user_index=zeros(1,user_number(for_user_number));
for i=1:1:user_number(for_user_number)
user_index(i)=i;
end
for j=1:1:subcarrier_number
while length(user_index)>=1
index=ceil(length(user_index)*rand);
R5(t,user_index(1,index))=R5(t,user_index(1,index))+C_max(user_index(1,index),j);
if R5(t,user_index(1,index))>=R_least(1,user_index(1,index))
if length(user_index)>1
user_index(index)=[];
else
user_index=[];
end
end
end
index=ceil(length(user_number(for_user_number))*rand);
R5(t,index)=R5(t,index)+C_max(index,j);
end
end
R1_ave(cycle_number,for_user_number)=sum(sum(R1))/number;
R2_ave(cycle_number,for_user_number)=sum(sum(R2))/number;
R3_ave(cycle_number,for_user_number)=sum(sum(R3))/number;
R4_ave(cycle_number,for_user_number)=sum(sum(R4))/number;
R5_ave(cycle_number,for_user_number)=sum(sum(R5))/number;
end
end
R1_user=zeros(1,length(user_number));
R2_user=zeros(1,length(user_number));
R3_user=zeros(1,length(user_number));
R4_user=zeros(1,length(user_number));
R5_user=zeros(1,length(user_number));
for i=1:1:length(user_number)
R1_user(1,i)=sum(R1_ave(:,i))/(B*subcarrier_number*total_number);
R2_user(1,i)=sum(R2_ave(:,i))/(B*subcarrier_number*total_number);
R3_user(1,i)=sum(R3_ave(:,i))/(B*subcarrier_number*total_number);
R4_user(1,i)=sum(R4_ave(:,i))/(B*subcarrier_number*total_number);
R5_user(1,i)=sum(R5_ave(:,i))/(B*subcarrier_number*total_number);
end
figure
plot(user_number,R1_user,'r-*',user_number,R2_user,'r-+',user_number,R3_user,'b-*',user_number,R4_user,'b-+',user_number,R5_user,'b-v');
xlabel('Average SNR(dB)');
ylabel('Spectral Efficiency(bits/sec/Hz)');
grid on;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -