📄 pre_spatialmultiplexing.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 + -