📄 reallocat_power.asv
字号:
% funcion:
% 功率和比特的预分配
%
function [poweralloctvector,Cbitvector,gama]=reallocat_power(N_carrier,groupnumber,Hk,SNR,Pe,N_ofdm)
% 初始化
K=groupnumber;
N=N_carrier;
%HHk=zeros(K,N_ofdm); % 每子信道组的平均信道响应
gamag=zeros(K,N_ofdm); % gama值
flag=zeros(K,N_ofdm); % 子信道组分配标志:0 不分配 1 分配
poweralloctvector=zeros(K,N_ofdm); % 子信道组分配功率
Cbitvector=zeros(K,N_ofdm); % 子信道组比特分配
An=1; % 放大倍数
pow=0; % 总功率
Saverage=1;
for i=1:N_ofdm
for k=1:K
% HHk(k,i)=sum(Hk((N/K)*(k-1)+1:(N/K)*k,i))/(N/K); %将N/K内的子载波信道响应求平均
% gamag(k,i)=(abs(HHk(k,i))).^2*10^log10(SNR);
%
% gamag(k,i)=An^2*(abs(HHk(k,i))).^2*SNR;
gamag(k,i)=sum((abs(Hk((N/K)*(k-1)+1:(N/K)*k,i)).^2))/(N/K)*SNR;
end
end
gama=10*log10(gamag);
for i=1:N_ofdm
right=0;
for p=1:1:K
right=right+1/gamag(p,i);
end
gama_sum=right/K;
right=gama_sum-1.6/log(5*Pe);
right=1/right;
% right2=0;
% for p=1:1:K
% right2=right2+(log(5*Pe)/log(2.7183))/(gamag(p,i)*(-1.6));
% end
% right2=right2/K;
% right2=(log(5*Pe)/log(2.7183))/(1.6*(-1-right2));
Cbitvector1=zeros(K,1);
for q=1:1:K
% if(gamag(q,i)<right|gamag(q,i)<right2)
if(gamag(q,i)<right)
Cbitvector1(q)=0;
flag(q,i)=0;
else
flag(q,i)=1;
sum1=gamag(q,i)*(gama_sum-1.6/log(5*Pe));
Cbitvector1(q)=log2(sum1);
end
end
for s=1:1:K
% Cbitvector1(s)=4;
if(Cbitvector1(s)<1)
Cbitvector1(s)=0;
end
% if(Cbitvector1(s)>=1 && Cbitvector1(s)<2)
% % if(Cbitvector1(s)>=1)
% Cbitvector1(s)=1;
% end
if(Cbitvector1(s)>=1 && Cbitvector1(s)<3)
% if(Cbitvector1(s)>=3)
Cbitvector1(s)=2;
end
if(Cbitvector1(s)>=3 && Cbitvector1(s)<5)
Cbitvector1(s)=4;
end
if(Cbitvector1(s)>=5)
Cbitvector1(s)=6;
end
% % % %
% if(Cbitvector1(s)>=4.5)
% Cbitvector1(s)=4;
% end
end
Cbitvector(:,i)=Cbitvector1;
% right2=0;
% for p=1:1:K
% right2=right2+(log(5*Pe)/log(2.7183))/gamag(p,i)*(-1.6);
% end
%
% right2=right2/K;
% right2=(log(5*Pe)/log(2.7183))/(1.6*(-1-right2));
%
poweralloctvector1=zeros(K,1);
for t=1:1:K
if(gamag(t,i)<right)
poweralloctvector1(t)=0;
% flag(t,i)=0;
else
% flag(t,i)=1;
sumsum1=1+(log(5*Pe)/1.6)*(1/gamag(t,i)-gama_sum);
poweralloctvector1(t)=Saverage*sumsum1;
end
end
poweralloctvector1=poweralloctvector1*(N_carrier*Saverage)/(sum(poweralloctvector1)*(N/K));
% pow=pow+sum(poweralloctvector1);
% pow=pow/N_carrier;
% poweralloctvector(:,i)=poweralloctvector1/pow;
poweralloctvector(:,i)=poweralloctvector1;
% An=poweralloctvector1;
end
for ii=1:N_ofdm
[seqbitvector,numorignbit]=sort(Cbitvector(:,i));
[seqpowervector,numorignpower]=sort(poweralloctvector);
if (ssss(1)~=0)
backuppower=sum(seqpowervector(1:ssss(1)))
ccccccccccccc=numorignpower(1:ssss(1))
for tttt=1:1:ssss(1)
poweralloctvector(numorignpower(tttt),i)=0;
end
for yyyy=2:1:4
if (ssss(yyyy)~=0)
numnum=sum(ssss(1:yyyy));
poweralloctvector(numorignpower(numnum),i)=backuppower+poweralloctvector(numorignpower(numnum),i);
if (numnum+1<=K)
% numnum=numnum
% pp=size(numorignpower)
% uuuuuuuuuuuuuuuuuuu=size(poweralloctvector)
% rrrrrrrrrrrrrrrrrrrrrr=numorignpower(2)
if(poweralloctvector(numorignpower(numnum),i)>seqpowervector(numnum+1))
Cbitvector(numorignpower(numnum),i)=Cbitvector(numorignpower(numnum),i)+2;
else
poweralloctvector(numorignpower(numnum),i)=-backuppower+poweralloctvector(numorignpower(numnum),i);
numnumqqqq=sum(ssss(1:yyyy-1))+1;
poweralloctvector(numorignpower(numnumqqqq),i)=poweralloctvector(numorignpower(numnumqqqq),i)+backuppower;
end
end
if (numnum==K)
poweralloctvector(numorignpower(numnum),i)=-backuppower+poweralloctvector(numorignpower(numnum),i);
numnumqqqq=sum(ssss(1:yyyy-1))+1;
poweralloctvector(numorignpower(numnumqqqq),i)=poweralloctvector(numorignpower(numnumqqqq),i)+backuppower;
end
end
end
end
Cbitvectornew(:,i)=Cbitvector
poweralloctvector1new(:,i)=poweralloctvector
end
%%%%%%%以下程序做功率二次分配%%%%%%%%%%
for ii=1:N_ofdm
bitzeros_num=0;
power1=0;
for kk=1:K
if Cbitvector(kk,ii)==0
bitzeros_num=bitzeros_num+1;%记录一个OFDM符号有多少组子载波分配的比特数为0
power1=power1+poweralloctvector(kk,ii);%分配比特数为0的子载波的功率和
poweralloctvector(kk,ii)=0;
end
end
power1=power1/(K-bitzeros_num);
for kk=1:K
if Cbitvector(kk,ii)>0
poweralloctvector(kk,ii)=poweralloctvector(kk,ii)+power1;
end
end
end
% %%%%%%%以上程序做功率二次分配%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -