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

📄 pre_spatialmultiplexing.asv

📁 PDCCH的实现过程及其遇见的问题应该遇见的问题
💻 ASV
字号:
function y=pre_spatialMultiplexing(x,P,v,index_codeBook,index_CDD,numbits)
if P== 2;%P is the numbers of antenna ports; 
    switch index_codeBook
        case 0
          if v==1;
             W = 1 /sqrt(2) * [1,1]';
          else    
             W= 1 /sqrt(2) * [1,0;0,1];
          end  
        case 1
            if v==1;
               W = 1 /sqrt(2) * [1,-1]';
            else    
               W = 1 /2 * [1,1;1,-1];
            end
        case 2
            if v==1;
               W= 1 /sqrt(2) * [1,j].';
            else    
               W = 1 /2 * [1,1;j,-j];
            end
        case 3
            if v==1;
               W = 1 /sqrt(2) * [1,-j].';
            else  
               W = [];
            end
    end;
else P==4;%P is the numbers of antenna ports; 
    I = eye(4);
%    for  n = 1:16;
%      u=[1,-1,-1,-1;1,-j,1,j;1,1,-1,1;1,j,1,-j;1,(-1-j)/sqrt(2),-j,(1-j)/sqrt(2);1,(1-j)/sqrt(2),j,(-1-j)/sqrt(2);1,(1+j)/sqrt(2),-j,(-1+j)/sqrt(2);1,(-1+j)/sqrt(2),j,(1+j)/sqrt(2);1,-1,1,1;1,-j,-1,-j;1,1,1,-1;1,j,-1,j;1,-1,-1,1;1,-1,1,-1;1,1,-1,-1;1,1,1,1].';
%      U(n)=u(:,n);
    
%    end;
    switch  index_codeBook
        case 0
        u=[1,-1,-1,-1].';    
        W1= I - 2*u * u' / (u' * u);
          if v==1
             W = W1(1:end,1);
          elseif v==2
             W= W1(1:end,[1,4]) /sqrt(2) ;
          elseif v==3
             W =  W1(1:end,[1,2,4]) /sqrt(3);
           else 
             W=  W1(1:end,[1,2,3,4]) /2;
          end
        case 1
        u = [1,-j,1,j].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W= W1(1:end,1);
          elseif v==2;  
             W = W1(1:end,[1,2]) /sqrt(2);
          elseif v==3;
            W = W1(1:end,[1,2,3]) /sqrt(3) ;
          else 
            W = W1(1:end,[1,2,3,4]) /2 ;
          end
        case 2
        u=[1,1,-1,1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1
             W = W1(:,1);
          elseif v==2
             W = W1(:,[1,2]) /sqrt(2) ;
          elseif v==3
             W = W1(:,[1,2,3]) /sqrt(3) ;
          else 
             W = W1(:,[3,2,1,4]) /2 ;   
          end
        case 3
        u= [1,j,1,-j].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,2]) /sqrt(2) ;
          elseif v==3;
             W= W1(:,[1,2,3]) /sqrt(3) ;
          else
             W = W1(:,[3,2,1,4]) /2 ;  
          end
        case 4
        u= [1,(-1-j)/sqrt(2),-j,(1-j)/sqrt(2)].';
        W1= I - 2*u * u' / (u' * u);
           if v==1;
             W = W1(:,1);
           elseif v==2;
             W = W1(:,[1,4]) /sqrt(2) ;
           elseif v==3;
             W = W1(:,[1,2,4]) /sqrt(3) ;
           else 
             W = W1(:,[1,2,3,4]) /2 ;
           end
        case 5
        u = [1,(1-j)/sqrt(2),j,(-1-j)/sqrt(2)].';
        W1= I - 2*u * u' / (u' * u);
          if v==1 ;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,4]) /sqrt(2) ;
          elseif v==3;
             W = W1(:,[1,2,4])/sqrt(3) ;
          else 
             W = W1(:,[1,2,3,4])/2; 
          end
        case 6
        u = [1,(1+j)/sqrt(2),-j,(-1+j)/sqrt(2)].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,3])/sqrt(2) ;
          elseif v==3;
             W = W1(:,[1,3,4])/sqrt(3) ;
          else 
             W = W1(:,[1,3,2,4])/2;    
          end
        case 7
        u= [1,(-1+j)/sqrt(2),j,(1+j)/sqrt(2)].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,3])/sqrt(2) ;
          elseif v==3;
             W = W1(:,[1,3,4])/sqrt(3) ;
          else 
             W = W1(:,[1,3,2,4])/2;   
          end
        case 8
        u = [1,-1,1,1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,2])/sqrt(2);
          elseif v==3; 
             W = W1(:,[1,2,4])/sqrt(3);
          else 
             W = W1(:,[1,2,3,4])/2 ;    
          end
        case 9
        u = [1,-j,-1,-j].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
         elseif v==2;
             W = W1(:,[1,4])/sqrt(2) ;
         elseif v==3;
             W = W1(:,[1,3,4])/sqrt(3) ;
          else 
             W = W1(:,[1,2,3,4])/2 ;    
          end
        case 10
        u= [1,1,1,-1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1
             W = W1(:,1);
         elseif v==2
             W = W1(:,[1,3])/sqrt(2) ;
         elseif v==3
             W = W1(:,[1,2,3])/sqrt(3);
          else 
            W = W1(:,[1,3,2,4])/2 ;  
          end
        case 11
        u = [1,j,-1,j].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
         elseif v==2;
             W = W1(:,[1,3])/sqrt(2);
         elseif v==3;
             W = W1(:,[1,3,4])/sqrt(3);
          else 
            W = W1(:,[1,3,2,4])/2 ; 
          end
        case 12
        u = [1,-1,-1,1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,2])/sqrt(2);
          elseif v==3;
             W= W1(:,[1,2,3])/sqrt(3) ;
          else 
             W = W1(:,[1,2,3,4])/2 ;   
          end
        case 13
        u = [1,-1,1,-1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,3])/sqrt(2) ;
          elseif v==3;
             W = W1(:,[1,2,3])/sqrt(3) ;
          else 
             W = W1(:,[1,3,2,4])/2 ;       
          end
        case 14
        u = [1,1,-1,-1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,3])/sqrt(2) ; 
          elseif v==3;
             W = W1(:,[1,2,3])/sqrt(3) ;
          else 
             W = W1(:,[3,2,1,4])/2 ;   
          end
        case 15
        u = [1,1,1,1].';
        W1= I - 2*u * u' / (u' * u);
          if v==1;
             W = W1(:,1);
          elseif v==2;
             W = W1(:,[1,2])/sqrt(2);
          elseif v==3;
             W = W1(:,[1,2,3])/sqrt(3) ;
          else 
             W = W1(:,[1,2,3,4])/2 ;  
          end
    end;
end;   
 M_ap=numbits/4;
for i=1:M_ap;
  %index_CDD由高层给出;
  if index_CDD==0;% without cyclic delay diversity ;
       y(i) = W * x((1:end),i)
  else index_CDD==1;%large delay CDD;    
      switch v
          case 1
             U = [1];
             D(i) = [1];
          case 2
             U = 1/sqrt(2) * [1,1;1,exp(-j*pi)];
             D(i) = diag([1,exp(-j*pi*i)]);
          case 3   
             U = 1/sqrt(3) * [1,1,1;1,exp(-j*2*pi/3),exp(-j*4*pi/3);1,exp(-j*4*pi/3),exp(-j*8*pi/3)];
             D(i) = diag([1,exp(-j*2*pi*i/3),exp(-j*4*pi*i/3)]);
          case 4
             U = 1/2 * [1,1,1,1;1,exp(-j*2*pi/4),exp(-j*4*pi/4),exp(-j*6*pi/4);1,exp(-j*4*pi/4),exp(-j*8*pi/4),exp(-j*12*pi/4);1,exp(-j*6*pi/4),exp(-j*12*pi/4),exp(-j*18*pi/4)];
             D(i) = diag([1,exp(-j*2*pi*i/4),exp(-j*4*pi*i/4),exp(-j*6*pi*i/4)]);
      end;  
      y(i) = W * D(i) * U * x(i);
  end   
end   

        
        
        
        
        
        
        
        
        
        

⌨️ 快捷键说明

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