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

📄 miso.m

📁 miso simulates the ser for different miso systemms 2*1,3*1 4*1 and 8*1
💻 M
字号:
%%%%%%%%%%%%%%%% miso simulates the ser for different miso systemms 2*1,3*1 4*1 and 8*1 

    clear 
    clc
% declaration 
    numOfBlk = 1000;     
    qamOrder = 2;     
    Eb_N0_dB = [0:25]; 
    errRate = zeros(size(Eb_N0_dB));


%% AlamoutiSpace Time Code  2*1
for i = 1 : length(Eb_N0_dB)
    
%%%%%%%%  data generation
    txData = randint(numOfBlk*2,1,qamOrder);
    
%%%%%%%%    
    temp = reshape(txData,numOfBlk,2);

   
    temp = qammod(temp,qamOrder);
   %channel definition
    H  = 1/sqrt(2) * (randn(numOfBlk,2) + sqrt(-1)*randn(numOfBlk,2));
    
   % transmission 
    
    txMod(:,1) =  H(:,1).* 1/sqrt(2).*temp(:,1)     + H(:,2).* 1/sqrt(2).*temp(:,2)     ;
    txMod(:,2) = -H(:,1).*(1/sqrt(2).*temp(:,2)').' + H(:,2).*(1/sqrt(2).*temp(:,1)').' ;
    % noise addition 
    txMod = awgn(txMod,Eb_N0_dB(i),'measured');
 %%%reception
    temp(:,1) = sqrt(2)*(H(:,1)'.' .* txMod(:,1) + H(:,2) .* txMod(:,2)'.')./(abs(H(:,1)).^2 + abs(H(:,2)).^2);
    temp(:,2) = sqrt(2)*(H(:,2)'.' .* txMod(:,1) - H(:,1) .* txMod(:,2)'.')./(abs(H(:,1)).^2 + abs(H(:,2)).^2);
    
    
 %%%%%% demodulation
    rxData(:,1) = qamdemod(temp(:,1),qamOrder);
    rxData(:,2) = qamdemod(temp(:,2),qamOrder);
    
    [numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,2));
end

% observations 
    f1 = figure(1);
    semilogy(Eb_N0_dB,errRate,['k',':','o']);
    xlabel('Eb/No en dB');
    ylabel('BER');


  
    
    
    
    %% AlamoutiSpace Time Code3*1
    
    for i = 1:length(Eb_N0_dB)
        

    txData = randint(numOfBlk*3,1,qamOrder);
    temp3 = reshape(txData,numOfBlk,3);

    
    temp3 = qammod(temp3,qamOrder);
     
    
    H11  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H12  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H13  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H21  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H22  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H23  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    
    
    
   
  
    r1(:,1) =  H11.* 1/sqrt(3).*temp3(:,1)     - H13.* 1/sqrt(3).*conj(temp3(:,2));
    r1(:,2) =  H12.* 1/sqrt(3).*temp3(:,1)     - H13.* 1/sqrt(3).*temp3(:,3) ;
    r1(:,3) =  H11.* 1/sqrt(3).*temp3(:,2)     + H12.* 1/sqrt(3).*conj(temp3(:,3)) +H13.* 1/sqrt(3).*conj(temp3(:,1));
    r1(:,4) = -H11.*1/sqrt(3) .*temp3(:,3)      + H12.*(1/sqrt(3).*conj(temp3(:,2)));
    r2(:,1) =  H21.* 1/sqrt(3).*temp3(:,1)     - H23.* 1/sqrt(3).*conj(temp3(:,2));
    r2(:,2) =  H22.* 1/sqrt(3).*temp3(:,1)     - H23.* 1/sqrt(3).*temp3(:,3) ;
    r2(:,3) =  H21.* 1/sqrt(3).*temp3(:,2)     + H22.* 1/sqrt(3).*conj(temp3(:,3)) +H23.* 1/sqrt(3).*conj(temp3(:,1));
    r2(:,4) = -H21.*1/sqrt(3) .*temp3(:,3)      + H22.*(1/sqrt(3).*conj(temp3(:,2))) ;
    
    
     
    r1 = awgn(r1,Eb_N0_dB(i),'measured');
    r2 = awgn(r2,Eb_N0_dB(i),'measured');
    
      
    s11=r1(:,1).*conj(H11)+r1(:,2).*conj(H12)+H13.*conj(r1(:,3));
    s12=-conj(r1(:,1)).*H13+r1(:,3).*conj(H11)+H12.*conj(r1(:,4));
    s13=-r1(:,2).*conj(H13)+conj(r1(:,3)).*H12-conj(H11).*r1(:,4);
    
    
    sv11=sqrt(3)*(s11./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2));
    sv12=sqrt(3)*s12./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2);
    sv13=sqrt(3)*(s13./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2));
   
   

     rxData(:,1) = qamdemod(sv11,qamOrder); 
     rxData(:,2) = qamdemod(sv12,qamOrder);
     rxData(:,3) = qamdemod(sv13,qamOrder);
    [numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,3));
end


    f1 = figure(1);
    hold on
    semilogy(Eb_N0_dB,errRate,['b','-']);
    xlabel('Eb/No en dB');
    ylabel('BER'); 
    
    
    
    
       %% Space Time Code4*1
    
    for i = 1:length(Eb_N0_dB)    

    txData = randint(numOfBlk*3,1,qamOrder);
    temp3 = reshape(txData,numOfBlk,3);

    
    temp3 = qammod(temp3,qamOrder);
     
    
    H11  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H12  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H13  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H14  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H21  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H22  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H23  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    H24  = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
    
    
    
   
  
    r1(:,1) =  H11.* 1/sqrt(4).*temp3(:,1)     - H13.* 1/sqrt(4).*conj(temp3(:,2))+H14.* 1/sqrt(4).*conj(temp3(:,3));
    r1(:,2) =  H12.* 1/sqrt(4).*temp3(:,1)     - H13.* 1/sqrt(4).*temp3(:,3)- H14.* 1/sqrt(4).*temp3(:,2);
    r1(:,3) =  H11.* 1/sqrt(4).*temp3(:,2)     + H12.* 1/sqrt(4).*conj(temp3(:,3)) +H13.* 1/sqrt(4).*conj(temp3(:,1));
    r1(:,4) = -H11.* 1/sqrt(4).*temp3(:,3)     + H12.*(1/sqrt(4).*conj(temp3(:,2)))+H14.* 1/sqrt(4).*conj(temp3(:,1));
    r2(:,1) =  H21.* 1/sqrt(4).*temp3(:,1)     - H23.* 1/sqrt(4).*conj(temp3(:,2))+H24.* 1/sqrt(4).*conj(temp3(:,3));
    r2(:,2) =  H22.* 1/sqrt(4).*temp3(:,1)     - H23.* 1/sqrt(4).*temp3(:,3)- H24.* 1/sqrt(4).*temp3(:,2);
    r2(:,3) =  H21.* 1/sqrt(4).*temp3(:,2)     + H22.* 1/sqrt(4).*conj(temp3(:,3)) +H23.* 1/sqrt(4).*conj(temp3(:,1));
    r2(:,4) = -H21.* 1/sqrt(4).*temp3(:,3)     + H22.*(1/sqrt(4).*conj(temp3(:,2)))+H24.* 1/sqrt(4).*conj(temp3(:,1));
    
     
    r1 = awgn(r1,Eb_N0_dB(i),'measured');
    r2 = awgn(r2,Eb_N0_dB(i),'measured');
    
   
    
    s11=r1(:,1).*conj(H11)+r1(:,2).*conj(H12)+H13.*conj(r1(:,3))+H14.*conj(r1(:,4));
    s12=-conj(r1(:,1)).*H13-conj(H14).*r1(:,2)+r1(:,3).*conj(H11)+H12.*conj(r1(:,4));
    s13=conj(r1(:,3)).*H12-r1(:,2).*conj(H13)-conj(H11).*r1(:,4)+H14.*conj(r1(:,1));
   
   
   
    sv11=sqrt(4)*(s11./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
    sv12=sqrt(4)*(s12./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
    sv13=sqrt(4)*(s13./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
   
     rxData(:,1) = qamdemod(sv11,qamOrder);
     rxData(:,2) = qamdemod(sv12,qamOrder);
     rxData(:,3) = qamdemod(sv13,qamOrder);
    [numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,3));
end


    f1 = figure(1);
    hold on
    semilogy(Eb_N0_dB,errRate,['b',':']);
    xlabel('Eb/No en dB');
    ylabel('BER');
    
    
    
    %% Space Time Code 8*1
    
    
    
    for i = 1:length(Eb_N0_dB)    

    txData = randint(numOfBlk*4,1,qamOrder);
    temp4 = reshape(txData,numOfBlk,4);

    
    temp4 = qammod(temp4,qamOrder);
     
    
    H8  = 1/sqrt(2) * (randn(numOfBlk,8) + sqrt(-1)*randn(numOfBlk,8));
    
    
  
  
    r1(:,1) =  H8(:,1).* 1/sqrt(8).*temp4(:,1)  - H8(:,5).* 1/sqrt(8).*conj(temp4(:,4))-H8(:,7).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,8).* 1/sqrt(8).*conj(temp4(:,3));
    r1(:,2) =  H8(:,2).* 1/sqrt(8).*temp4(:,1)  - H8(:,6).* 1/sqrt(8).*conj(temp4(:,4))- H8(:,7).* 1/sqrt(8).*temp4(:,3)- H8(:,8).* 1/sqrt(8).*temp4(:,2);
    r1(:,3) =  H8(:,3).* 1/sqrt(8).*temp4(:,1)  + H8(:,5).* 1/sqrt(8).*conj(temp4(:,2)) +H8(:,6).* 1/sqrt(8).*conj(temp4(:,3))-H8(:,7).*1/sqrt(8).*temp4(:,4);
    r1(:,4) =  H8(:,4).*1/sqrt(8).*temp4(:,1)   - H8(:,5).*(1/sqrt(8).*temp4(:,3))+H8(:,6).* 1/sqrt(8).*conj(temp4(:,2))- H8(:,8).*(1/sqrt(8).*temp4(:,4));
    r1(:,5) =  H8(:,1).* 1/sqrt(8).*temp4(:,4)  - H8(:,3).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,4).* 1/sqrt(8).*conj(temp4(:,3))+H8(:,5).* 1/sqrt(8).*conj(temp4(:,1));
    r1(:,6) =  H8(:,2).* 1/sqrt(8).*temp4(:,4)  - H8(:,3).* 1/sqrt(8).*temp4(:,3) -H8(:,4).* 1/sqrt(8).*temp4(:,2)+H8(:,6).*1/sqrt(8).*conj(temp4(:,1));
    r1(:,7) =  H8(:,1).* 1/sqrt(8).*temp4(:,2)  + H8(:,2).* 1/sqrt(8).*conj(temp4(:,3))+H8(:,3).* 1/sqrt(8).*conj(temp4(:,4))+H8(:,7).* 1/sqrt(8).*conj(temp4(:,1));
    r1(:,8) =  -H8(:,1).* 1/sqrt(8).*temp4(:,3)  + H8(:,2).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,4).* 1/sqrt(8).*conj(temp4(:,4))+H8(:,8).* 1/sqrt(8).*conj(temp4(:,1));
    
    
    
  
    r1 = awgn(r1,Eb_N0_dB(i),'measured');
 
   
    
    s1=r1(:,1).*conj(H8(:,1))+r1(:,2).*conj(H8(:,2))+conj(H8(:,3)).*r1(:,3)+conj(H8(:,4)).*r1(:,4)+H8(:,5).*conj(r1(:,5))+H8(:,6).*conj(r1(:,6))+H8(:,7).*conj(r1(:,7))+H8(:,8).*conj(r1(:,8));
    s2=-H8(:,7).*conj(r1(:,1))-r1(:,2).*conj(H8(:,8))+conj(H8(:,5)).*r1(:,3)+conj(H8(:,6)).*r1(:,4)-H8(:,3).*conj(r1(:,5))-conj(H8(:,4)).*r1(:,6)+conj(H8(:,1)).*r1(:,7)+H8(:,2).*conj(r1(:,8));
    s3=H8(:,8).*conj(r1(:,1))-r1(:,2).*conj(H8(:,7))+H8(:,6).*conj(r1(:,3))-conj(H8(:,5)).*r1(:,4)+H8(:,4).*conj(r1(:,5))-conj(H8(:,3)).*r1(:,6)+H8(:,2).*conj(r1(:,7))-conj(H8(:,1)).*r1(:,8);
    s4=-H8(:,5).*conj(r1(:,1))-H8(:,6).*conj(r1(:,2))-conj(H8(:,7)).*r1(:,3)-conj(H8(:,8)).*r1(:,4)+conj(H8(:,1)).*r1(:,5)+conj(H8(:,2)).*r1(:,6)+H8(:,3).*conj(r1(:,7))+H8(:,4).*conj(r1(:,8));
    
    sv1=sqrt(8)*(s1./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
    sv2=sqrt(8)*(s2./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
    sv3=sqrt(8)*(s3./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
    sv4=sqrt(8)*(s4./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
   
    
     rxData(:,1) = qamdemod(sv1,qamOrder);
     rxData(:,2) = qamdemod(sv2,qamOrder);
     rxData(:,3) = qamdemod(sv3,qamOrder);
     rxData(:,4) = qamdemod(sv4,qamOrder);
    [numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,4));
    end
    
    f1 = figure(1);
    hold on
    semilogy(Eb_N0_dB,errRate,['r',':']);
    xlabel('Eb/No en dB');
    ylabel('BER');
    
   
    
   
%%2*1  Without 'space time coding'
for i = 1 : length(Eb_N0_dB)
     txData = randint(numOfBlk*2,1,qamOrder);
    temp = qammod(txData,qamOrder);
    
  
    H  = 1/sqrt(2) * (randn(numOfBlk*2,1) + sqrt(-1)*randn(numOfBlk*2,1));
    
    txMod = H.*temp;
    
    
    txMod = awgn(txMod,Eb_N0_dB(i),'measured');
    
    
    temp = txMod./H;
    rxData = qamdemod(temp,qamOrder);
    
    [numErr errRate(i)] = symerr(rxData,txData); 
end

    figure(1);
    hold on
    semilogy(Eb_N0_dB,errRate,['r','-','o']); 
    xlabel('Eb/No en dB');
    ylabel('BER');
    
grid on
 
   

⌨️ 快捷键说明

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