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

📄 vblastml.m

📁 MIMO多天线收发 各种性能比较(BER曲线) 包括MMRC EGC SC Alamouti V-BLAST。信道为瑞利信道
💻 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 + -