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

📄 diversity_stbc.m

📁 对应论文写的时空码的仿真程序。为2天线
💻 M
字号:
% Space time block codes
% This is for the simple senario involving 2 transmit antennas and 1-2 receive antennas with BPSK modulation. 

% Reference: S.M. Alamouti, "A simple transmit diversity technique for wireless communications",IEEE Journal on Selected Areas in Communications, vol. 16, pp. 1451-1458, Oct. 1998.

clear all;
close all;

M=2;
bps=log2(M);

% Your range of SNR
EbNodB=[1:1:12];
[a,datapoints]=size(EbNodB);
EbNo=10.^(EbNodB/10);
EsNo=bps*EbNo;
var=1./(EsNo);

%Bits per frame
NumberBits=2000;
NumberSymbols=NumberBits/bps;

%Number of transmit antennas
Mt=2;

%Number of receive antennas
Mr=2;

%Number of frame errors per SNR (since these are Monte Carlo trials, the  more errors you log, the more accurate your simulated results)
err_vector=[100*ones(1,datapoints)];
max_errors = err_vector;
minBER = 10^-5;

% initialize storage
frame_errors = zeros( 1,datapoints);
bit_errors = zeros(1,  datapoints);
trials = zeros(1, datapoints );
P_e = zeros(1, datapoints);
P_b = zeros(1,  datapoints);

fname = strcat( 'STBC','Mt',sprintf('%d', Mt),'times','Mr',sprintf('%d', Mr),'.mat' );
% % % %   see if this is a continuation 
%      if (fopen(fname, 'r') > 0)
%             load (fname);
%         end 

% reseed the random number generator
 randn( 'state', cputime); 
 for snrpoint = 1:datapoints
    fprintf( '\nEbNo = %f dB\n', EbNodB(snrpoint) );

    while  frame_errors( snrpoint) < max_errors( snrpoint ) 
        trials(snrpoint) = trials(snrpoint) + 1 ;
        
        % Generate random data bits
        cin=round(rand(1, NumberBits)); 
        x=2*cin-1;
        cnt=1;
        r=zeros(Mr,2);
        
        for i=1:Mt:NumberBits
        
          h=randn(Mt,Mr)+sqrt(-1)*randn(Mt, Mr);
          data_slot1=sqrt(0.5)*[x(i), x(i+1)]';
          
          r(1:Mr,1)=transpose(h)*data_slot1+sqrt(var(snrpoint))*(randn(Mr,1)+sqrt(-1)*randn(Mr,1)); 
          
          data_slot2=sqrt(0.5)*[-x(i+1), x(i)]';
          r(1:Mr,2)=transpose(h)*data_slot2+sqrt(var(snrpoint))*(randn(Mr,1)+sqrt(-1)*randn(Mr,1)); 
        
          MF_in(1:Mt:Mt*Mr,1)=r(1:Mr,1);
          MF_in(Mt:Mt:Mt*Mr,1)=conj(r(1:Mr,2));

         % For 1 receive antenna, simply comment out the the last two rows
                   
          H =[h(1,1), h(2,1);...
              conj(h(2,1)), -conj(h(1,1))];
              h(1,2), h(2,2);...
              conj(h(2,2)), -conj(h(1,2))];
                    
          d(1:2)=H'*MF_in(1:Mt*Mr,1);   
          cout(1,i:i+1)=(real(d)>0);          
          cnt=cnt+1;                  
        end
          
        errors=0;
        [err,vec]=find(cin~=cout);
        errors=sum(err); 
  
        frame_errors(snrpoint) = frame_errors( snrpoint ) + (errors >0);
        bit_errors(snrpoint ) =   bit_errors(snrpoint ) + errors;       
        P_e(snrpoint) = frame_errors(snrpoint)/trials( snrpoint );% Frame error rate
        P_b(snrpoint) = bit_errors(snrpoint)/( trials(snrpoint)*(NumberBits) );% Bit error rate        
        save (fname, 'frame_errors','bit_errors','trials', 'P_e', 'P_b','EbNodB');
    end% trials    
        fprintf('%f  %f   \n',EbNodB(1,snrpoint),P_b(1,snrpoint) );

end%snrpoint


%  STBC with 2 transmit and 2 receive antennas should have the same  diversity gain as 4 branch MRC, but with a 3 dB loss in the SNR
 semilogy(EbNodB, P_b,'b-o');
 grid on;

⌨️ 快捷键说明

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