📄 bitandpoweralloct2fenpei.m
字号:
function [poweralloctvectorold,Cbitvectorold,poweralloctvectornew,Cbitvectornew]=bitandpoweralloct2fenpei(N_carrier,groupnumber,Hk,SNR,Pe,N_ofdm)
K=groupnumber;
N=N_carrier;
HHk=zeros(K,N_ofdm);
gamag=zeros(K,N_ofdm);
flag=zeros(K,N_ofdm);
poweralloctvector=zeros(K,N_ofdm);
Cbitvector=zeros(K,N_ofdm);
Cbitvectorold=zeros(K,N_ofdm);
Cbitvectornew=zeros(K,N_ofdm);
poweralloctvectornew=zeros(K,N_ofdm);
poweralloctvectorold=zeros(K,N_ofdm);
An=1;
pow=0;
for i=1:N_ofdm
for k=1:K
% xxx=(N/K)*(k-1)+1
% yyy=(N/K)*k
% i=i
% zzz=(N/K)
% aaaaaa=size(Hk)
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)=(abs(HHk(k,i))).^2*SNR;
end
end
for i=1:N_ofdm
right=0;
for p=1:1:K
right=right+1/gamag(p,i);
end
right=right/K;
right=right-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=0;
for r=1:1:K
sum1=sum1+gamag(q,i)/gamag(r,i);
end
sum1=sum1/K;
sum1=sum1-(1.6*gamag(q,i))/log(5*Pe);
sum1=log(sum1)/log(2);
Cbitvector1(q)=sum1;
end
end
ssss=zeros(4,1);
for s=1:1:K
% Cbitvector1(s)=4;
% yyyyyyyyyyyyyyyyyyyyyyyy=Cbitvector1
if(Cbitvector1(s)<=1)
Cbitvector1(s)=0;
flag1(s)=0;
ssss(1)=ssss(1)+1;
end
% if(Cbitvector1(s)>=1 && Cbitvector1(s)<2)
% % if(Cbitvector1(s)>=1)
% Cbitvector1(s)=1;
% end
if(Cbitvector1(s)>1 && Cbitvector1(s)<4.5)
% if(Cbitvector1(s)>=3)
Cbitvector1(s)=2;
flag1(s)=2;
ssss(2)=ssss(2)+1;
end
% s=s
% aaaaaaaaaaaa=Cbitvector1
if(Cbitvector1(s)>=4.5 && Cbitvector1(s)<6.5)
Cbitvector1(s)=4;
flag1(s)=4;
ssss(3)=ssss(3)+1;
end
if(Cbitvector1(s)>=6.5)
Cbitvector1(s)=6;
flag1(s)=6;
ssss(4)=ssss(4)+1;
end
% % % %
% if(Cbitvector1(s)>=4.5)
% Cbitvector1(s)=4;
% end
end
Cbitvector(:,i)=Cbitvector1;
Cbitvectorold(:,i)=Cbitvector(:,i)
% 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);
poweralloctvector1old=zeros(K,1);
poweralloctvector1new=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;
Saverage=1;
sumsum2=0;
for u=1:1:K
% sumsumtemp(1,u)=flag(u,i)*(log(5*Pe)/log(2.7183))/(-1.6*gamag(u,i));
sumsumtemp(1,u)=(log(5*Pe)/log(2.7183))/(-1.6*gamag(u,i));
sumsum2=sumsum2+sumsumtemp(1,u);
end
sumsum2=sumsum2/K;
sumsum1=1+sumsum2+(log(5*Pe)/log(2.7183))/(1.6*gamag(t,i));
poweralloctvector1(t)=Saverage*sumsum1;
end
end
pow=pow+sum(poweralloctvector1);
pow=pow/K;
poweralloctvector(:,i)=poweralloctvector1/pow;
poweralloctvectorold(:,i)=poweralloctvector(:,i)
Cbitvectorold =[ 6
4
2
4
6
0
6
0
4
4
4
4
4
4
4
4]
poweralloctvectorold =[
1.0942
1.0777
0.9654
1.0777
1.0871
0.5471
1.0871
0.5455
1.0648
1.0648
1.0648
1.0648
1.0648
1.0648
1.0648
1.0647]
% poweralloctvector(:,i)=poweralloctvector1;
%进行功率二次分配,,,poweralloctvector Cbitvector
[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
% for tttt=1:1:ssss(1)
% poweralloctvector1new(numorignpower(tttt),i)=0;
% end
for tttt=1:1:ssss(1)
poweralloctvector1(numorignpower(tttt),i)=0;
end
diffpower=sum(poweralloctvector1new(:,i)-poweralloctvector1old(:,i))
diffbit=sum(Cbitvectornew(:,i)-Cbitvectorold(:,i))
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -