📄 vblastml.m
字号:
function ber_22=vblastML(snr2,Nr)
Nt=2;
Nr=Nr;
%p=p;
no_bit_sym=1;
bits=10000;
%iter=0;
toterr=0;
% while toterr<soglia
% iter=iter+1;
for i=1:bits
a=rand;
if(a<0.25)
trans1(i)=(1+j)/2;
elseif(a<0.5)
trans1(i)=(1-j)/2;
elseif(a<0.75)
trans1(i)=(-1+j)/2;
else
trans1(i)=(-1-j)/2;
end
b=rand;
if(b<0.25)
trans2(i)=(1+j)/2;
elseif(b<0.5)
trans2(i)=(1-j)/2;
elseif(b<0.75)
trans2(i)=(-1+j)/2;
else
trans2(i)=-(1-j)/2;
end
% a=16*rand;
% if(a<1)
% trans1(i)=3+j*3;
% elseif(a<2)
% trans1(i)=3+j;
% elseif(a<3)
% trans1(i)=3-j;
% elseif(a<4)
% trans1(i)=3-j*3;
% elseif(a<5)
% trans1(i)=1+j*3;
% elseif(a<6)
% trans1(i)=1+j;
% elseif(a<7)
% trans1(i)=1-j;
% elseif(a<8)
% trans1(i)=1-j*3;
% elseif(a<9)
% trans1(i)=-1+j*3;
% elseif(a<10)
% trans1(i)=-1+j;
% elseif(a<11)
% trans1(i)=-1-j;
% elseif(a<12)
% trans1(i)=-1-j*3;
% elseif(a<13)
% trans1(i)=-3+j*3;
% elseif(a<14)
% trans1(i)=-3+j;
% elseif(a<15)
% trans1(i)=-3-j;
% else
% trans1(i)=-3-j*3;
% end
%
% b=16*rand;
% if(b<1)
% trans2(i)=3+j*3;
% elseif(b<2)
% trans2(i)=3+j;
% elseif(b<3)
% trans2(i)=3-j;
% elseif(b<4)
% trans2(i)=3-j*3;
% elseif(b<5)
% trans2(i)=1+j*3;
% elseif(b<6)
% trans2(i)=1+j;
% elseif(b<7)
% trans2(i)=1-j;
% elseif(b<8)
% trans2(i)=1-j*3;
% elseif(b<9)
% trans2(i)=-1+j*3;
% elseif(b<10)
% trans2(i)=-1+j;
% elseif(b<11)
% trans2(i)=-1-j;
% elseif(b<12)
% trans2(i)=-1-j*3;
% elseif(b<13)
% trans2(i)=-3+j*3;
% elseif(b<14)
% trans2(i)=-3+j;
% elseif(b<15)
% trans2(i)=-3-j;
% else
% trans2(i)=-3-j*3;
% end
data1=trans1(i);
data2=trans2(i);
%Channel
H=rey(Nr,Nt);
%AWGN
sig=sqrt(0.5/(10^(snr2/10)));
n=sig*(randn(Nr,1)+j*randn(Nr,1));
X=[data1;data2];
R=H*X+n;
%Combiner
s1=norm(R-H*[(1+j)/2;(1+j)/2],'fro')^2;
s2=norm(R-H*[(1+j)/2;(1-j)/2],'fro')^2;
s3=norm(R-H*[(1+j)/2;(-1+j)/2],'fro')^2;
s4=norm(R-H*[(1+j)/2;(-1-j)/2],'fro')^2;
s5=norm(R-H*[(1-j)/2;(1+j)/2],'fro')^2;
s6=norm(R-H*[(1-j)/2;(1-j)/2],'fro')^2;
s7=norm(R-H*[(1-j)/2;(-1+j)/2],'fro')^2;
s8=norm(R-H*[(1-j)/2;(-1-j)/2],'fro')^2;
s9=norm(R-H*[(-1+j)/2;(1+j)/2],'fro')^2;
s10=norm(R-H*[(-1+j)/2;(1-j)/2],'fro')^2;
s11=norm(R-H*[(-1+j)/2;(-1+j)/2],'fro')^2;
s12=norm(R-H*[(-1+j)/2;(-1-j)/2],'fro')^2;
s13=norm(R-H*[(-1-j)/2;(1+j)/2],'fro')^2;
s14=norm(R-H*[(-1-j)/2;(1-j)/2],'fro')^2;
s15=norm(R-H*[(-1-j)/2;(-1+j)/2],'fro')^2;
s16=norm(R-H*[(-1-j)/2;(-1-j)/2],'fro')^2;
S=[s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16];
SS=[(1+j)/2,(1+j)/2,(1+j)/2,(1+j)/2,(1-j)/2,(1-j)/2,(1-j)/2,(1-j)/2,(-1+j)/2,(-1+j)/2,(-1+j)/2,(-1+j)/2,(-1-j)/2,(-1-j)/2,(-1-j)/2,(-1-j)/2;...
(1+j)/2,(1-j)/2,(-1+j)/2,(-1-j)/2,(1+j)/2,(1-j)/2,(-1+j)/2,(-1-j)/2,(1+j)/2,(1-j)/2,(-1+j)/2,(-1-j)/2,(1+j)/2,(1-j)/2,(-1+j)/2,(-1-j)/2];
[v,p]=min(S);
Decoded1=SS(1,p);
Decoded2=SS(2,p);
%Decoding
% Decoded1=0;
% Decoded2=0;
% switch (D)
% case(s1)
% Decoded1=(1+j)/2;
% Decoded2=(1+j)/2;
% case(s2)
% Decoded1=(1+j)/2;
% Decoded2=(1-j)/2;
% case(s3)
% Decoded1=(1+j)/2;
% Decoded2=(-1+j)/2;
% case(s4)
% Decoded1=(1+j)/2;
% Decoded2=(-1-j)/2;
% case(s5)
% Decoded1=(1-j)/2;
% Decoded2=(1+j)/2;
% case(s6)
% Decoded1=(1-j)/2;
% Decoded2=(1-j)/2;
% case(s7)
% Decoded1=(1-j)/2;
% Decoded2=(-1+j)/2;
% case(s8)
% Decoded1=(1-j)/2;
% Decoded2=(-1-j)/2;
% case(s9)
% Decoded1=(-1+j)/2;
% Decoded2=(1+j)/2;
% case(s10)
% Decoded1=(-1+j)/2;
% Decoded2=(1-j)/2;
% case(s11)
% Decoded1=(-1+j)/2;
% Decoded2=(-1+j)/2;
% case(s12)
% Decoded1=(-1+j)/2;
% Decoded2=(-1-j)/2;
% case(s13)
% Decoded1=(-1-j)/2;
% Decoded2=(1+j)/2;
% case(14)
% Decoded1=(-1-j)/2;
% Decoded2=(1-j)/2;
% case(s15)
% Decoded1=(-1-j)/2;
% Decoded2=(-1+j)/2;
% case(s16)
% Decoded1=(-1-j)/2;
% Decoded2=(-1-j)/2;
% end
% if(real(s0)>0&imag(s0)>0)
% Decoded1=(1+j)/2;
% elseif(real(s0)>0&imag(s0)<0)
% Decoded1=(1-j)/2;
% elseif(real(s0)<0&imag(s0)>0)
% Decoded1=(-1+j)/2;
% elseif(real(s0)<0&imag(s0)<0)
% Decoded1=(-1-j)/2;
% end
%
% if(real(s1)>0&imag(s1)>0)
% Decoded2=(1+j)/2;
% elseif(real(s1)>0&imag(s1)<0)
% Decoded2=(1-j)/2;
% elseif(real(s1)<0&imag(s1)>0)
% Decoded2=(-1+j)/2;
% elseif(real(s1)<0&imag(s1)<0)
% Decoded2=(-1-j)/2;
% end
% Decoded1=0;
% Decoded2=0;
% if(real(s0)>2&imag(s0)>2)
% Decoded1=(3+j*3);
% elseif(real(s0)>2&imag(s0)>0)
% Decoded1=(3+j);
% elseif(real(s0)>2&imag(s0)>-2)
% Decoded1=(3-j);
% elseif(real(s0)>2)
% Decoded1=(3-j*3);
% elseif(real(s0)>0&imag(s0)>2)
% Decoded1=(1+j*3);
% elseif(real(s0)>0&imag(s0)>0)
% Decoded1=(1+j);
% elseif(real(s0)>0&imag(s0)>-2)
% Decoded1=(1-j);
% elseif(real(s0)>0)
% Decoded1=(1-j*3);
% elseif(real(s0)>-2&imag(s0)>2)
% Decoded1=(-1+j*3);
% elseif(real(s0)>-2&imag(s0)>0)
% Decoded1=(-1+j);
% elseif(real(s0)>-2&imag(s0)>-2)
% Decoded1=(-1-j);
% elseif(real(s0)>-2)
% Decoded1=(-1-j*3);
% elseif(imag(s0)>2)
% Decoded1=(-3+j*3);
% elseif(imag(s0)>0)
% Decoded1=(-3+j);
% elseif(imag(s0)>-2)
% Decoded1=(-3-j);
% else
% Decoded1=(-3-j*3);
% end
%
% if(real(s0)>2&imag(s0)>2)
% Decoded2=(3+j*3);
% elseif(real(s0)>2&imag(s0)>0)
% Decoded2=(3+j);
% elseif(real(s0)>2&imag(s0)>-2)
% Decoded2=(3-j);
% elseif(real(s0)>2)
% Decoded2=(3-j*3);
% elseif(real(s0)>0&imag(s0)>2)
% Decoded2=(1+j*3);
% elseif(real(s0)>0&imag(s0)>0)
% Decoded2=(1+j);
% elseif(real(s0)>0&imag(s0)>-2)
% Decoded2=(1-j);
% elseif(real(s0)>0)
% Decoded2=(1-j*3);
% elseif(real(s0)>-2&imag(s0)>2)
% Decoded2=(-1+j*3);
% elseif(real(s0)>-2&imag(s0)>0)
% Decoded2=(-1+j);
% elseif(real(s0)>-2&imag(s0)>-2)
% Decoded2=(-1-j);
% elseif(real(s0)>-2)
% Decoded2=(-1-j*3);
% elseif(imag(s0)>2)
% Decoded2=(-3+j*3);
% elseif(imag(s0)>0)
% Decoded2=(-3+j);
% elseif(imag(s0)>-2)
% Decoded2=(-3-j);
% else
% Decoded2=(-3-j*3);
% end
decoded=[Decoded1 Decoded2];
% dh=sqrt(2)*[1 -1]/2;
% d11=((dh(1)-real(S(1)))^2+(imag(S(1)))^2);
% d12=((dh(2)-real(S(1)))^2+(imag(S(1)))^2);
% D1=[d11 d12];
%
% d21=((dh(1)-real(S(2)))^2+(imag(S(2)))^2);
% d22=((dh(2)-real(S(2)))^2+(imag(S(2)))^2);
% D2=[d21 d22];
% %Decision
% [scelta1,posizione1]=min(D1);
% [scelta2,posizione2]=min(D2);
% decoded=[dh(posizione1) dh(posizione2)];
err_m1=((data1)~=(Decoded1));
err_m2=((data2)~=(Decoded2));
toterr=err_m1+err_m2+toterr;
end
%end
ber_22=toterr/(bits*2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -