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

📄 reallocat_power.asv

📁 好东西
💻 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 + -