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

📄 power_allocate.m

📁 协同通信以及感知无线电方面的仿真
💻 M
字号:
function [Ps,Pr]=power_allocate(P,asd,asr,ard,combining_type,al_method,transMode,sd_weight);
%根据接收端不同的接收合并方式进行最优功率分配

%MRC方式
switch transMode
    case 'AAF'
        switch combining_type
           case 'MRC'
              for(i=1:1:size(asd,2))
                 switch al_method
                     case 'Best'
                       if(((asd(i)*ard(i)+asr(i)*ard(i)-asd(i)*asr(i))>0)&&((asr(i)*ard(i)*P-asr(i)*asd(i)*P-asd(i))>0))
                         Ps(i)=(asr(i)*ard(i)*P+asd(i)*ard(i)*P+asd(i))/(asd(i)*ard(i)+asr(i)*ard(i)-asd(i)*asr(i)+sqrt((asd(i)*ard(i)+asr(i)*ard(i)-asd(i)*asr(i))*asr(i)*ard(i)*(asr(i)*P+1)/(ard(i)*P+1)));
                         Pr(i)=(asr(i)*ard(i)*P-asr(i)*asd(i)*P-asd(i))/(asd(i)*ard(i)+asr(i)*ard(i)-asd(i)*asr(i)+sqrt((asd(i)*ard(i)+asr(i)*ard(i)-asd(i)*asr(i))*asr(i)*ard(i)*(ard(i)*P+1)/(asr(i)*P+1)));
                       else
                        Ps(i)=P/2;
                        Pr(i)=P/2;
                       end
                    case 'equal'
                       Ps(i)=P/2;
                       Pr(i)=P/2;
                    case 'onlys'
                       Ps(i)=P;
                       Pr(i)=0;
                    otherwise
                       error('No such power allocate method'); 
                 end
              end
            case 'ERC'
                for(i=1:1:size(asd,2))
                    switch al_method
                        case 'Best'
                            if(((asd(i)-ard(i))*(asd(i)-2*asr(i))>0)&&(2*asr(i)*ard(i)*P-2*asd(i)-2*asd(i)*asr(i)*P-asd(i)*ard(i)*P>0))
                               Ps(i)=(asr(i)*ard(i)*P+asd(i))/(asr(i)*ard(i)-asr(i)*asd(i)+sqrt((asr(i)*P+1)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*asr(i)*ard(i)/(ard(i)*P+2)));
                               Pr(i)=(2*asr(i)*ard(i)*P-2*asd(i)-2*asd(i)*asr(i)*P-asd(i)*ard(i)*P)/(2*asr(i)*ard(i)-2*asr(i)*asd(i)+sqrt((ard(i)*P+2)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*ard(i)*asr(i)/(asr(i)*P+1)));
                            else
                               Ps(i)=P/2;
                               Pr(i)=P/2;
                            end
                        case 'equal'
                            Ps(i)=P/2;
                            Pr(i)=P/2;
                        case 'onlys'
                            Ps(i)=P;
                            Pr(i)=0;
                        otherwise
                            error('No such power allocate method'); 
                    end                           
                end
            case 'FRC'
                for(i=1:1:size(asd,2))
                    switch al_method
                        case 'Best'
                            if(((asd(i)*sd_weight^2-ard(i))*(asd(i)*sd_weight^2-sd_weight^2*asr(i)-asr(i))>0)&&((P*asr(i)*ard(i)-asd(i)*sd_weight^2)*(sd_weight^2+1)-P*sd_weight^2*asd(i)*(asr(i)*sd_weight^2+asr(i)+ard(i))>0))
                               Ps(i)=(asr(i)*ard(i)*P+sd_weight^2*asd(i))/(asr(i)*ard(i)-asr(i)*sd_weight^2*asd(i)+sqrt((asr(i)*P+1)*(asd(i)*sd_weight^2-ard(i))*(sd_weight^2*asd(i)-sd_weight^2*asr(i)-asr(i))*asr(i)*ard(i)/(ard(i)*P+sd_weight^2+1)));
                               Pr(i)=((P*asr(i)*ard(i)-asd(i)*sd_weight^2)*(sd_weight^2+1)-P*sd_weight^2*asd(i)*(asr(i)*sd_weight^2+asr(i)+ard(i)))/((asr(i)*ard(i)-asd(i)*asr(i)*sd_weight^2)*(sd_weight^2+1)+sqrt((asd(i)*asr(i)*sd_weight^2-asr(i)*ard(i))*(ard(i)*P+sd_weight^2+1)*(sd_weight^2*asd(i)-sd_weight^2*asr(i)-asr(i))*ard(i)/(asr(i)*P+1)));
                            else
                               Ps(i)=P/2;
                               Pr(i)=P/2;
                            end
                        case 'equal'
                            Ps(i)=P/2;
                            Pr(i)=P/2;
                        case 'onlys'
                            Ps(i)=P;
                            Pr(i)=0;
                        otherwise
                            error('No such power allocate method'); 
                    end                     
                end
            case 'ESNRC'
                for(i=1:1:size(asd,2))
                    switch al_method
                      case 'Best'
                           if(((asd(i)-ard(i))*(asd(i)-2*asr(i))>0)&&(2*asr(i)*ard(i)*P-2*asd(i)-2*asd(i)*asr(i)*P-asd(i)*ard(i)*P>0))
                               basic_ps(i)=(asr(i)*ard(i)*P+asd(i))/(asr(i)*ard(i)-asr(i)*asd(i)+sqrt((asr(i)*P+1)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*asr(i)*ard(i)/(ard(i)*P+2)));
                               basic_pr(i)=(2*asr(i)*ard(i)*P-2*asd(i)-2*asd(i)*asr(i)*P-asd(i)*ard(i)*P)/(2*asr(i)*ard(i)-2*asr(i)*asd(i)+sqrt((ard(i)*P+2)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*ard(i)*asr(i)/(asr(i)*P+1)));
                               if(0.1<asd(i)*(asr(i)*basic_ps(i)+ard(i)*basic_pr(i)+1)/(basic_pr(i)*asr(i)*ard(i))&&(asd(i)*(asr(i)*basic_ps(i)+ard(i)*basic_pr(i)+1)/(asr(i)*ard(i)*basic_pr(i))<10))
                                   Ps(i)=(asr(i)*ard(i)*P+asd(i))/(asr(i)*ard(i)-asr(i)*asd(i)+sqrt((asr(i)*P+1)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*asr(i)*ard(i)/(ard(i)*P+2)));
                                   Pr(i)=(2*asr(i)*ard(i)*P-2*asd(i)-2*asd(i)*asr(i)*P-asd(i)*ard(i)*P)/(2*asr(i)*ard(i)-2*asr(i)*asd(i)+sqrt((ard(i)*P+2)*(asd(i)-ard(i))*(asd(i)-2*asr(i))*ard(i)*asr(i)/(asr(i)*P+1)));
                               else
                                   Ps(i)=P/2;
                                   Pr(i)=P/2;
                               end
                           else
                               Ps(i)=P/2;
                               Pr(i)=P/2;
                           end  
                        case 'equal'
                           Ps(i)=P/2;
                           Pr(i)=P/2;
                        case 'onlys'
                           Ps(i)=P;
                           Pr(i)=0;
                        otherwise
                            error('No such power allocate method'); 
                    end
                end                        
            otherwise
               error(['Unknown relay-type:',combining_type]);
        end
    case 'DAF'
        for(i=1:1:size(asd,2))
            Ps(i)=P/2;
            Pr(i)=P/2;
        end
    otherwise
        error('No such tran Mode'); 
end
            
            
            
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -