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

📄 ofdmstbc1.m

📁 computing the BER for QPSK in STBC-OFDM
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% All rights reserved by A. Elazreg and Prof J. Chambers            %   
%                Loughborough University                            %
% %  A SPACE TIME CODED TRANSMITTER DIVERSITY TECHNIQUE             %
%     FOR FREQUENCY SELECTIVE FADING CHANNELS                       %
%      Script for computing the BER for QPSK in STBC-OFDM           %
%                                                                   %
% Author	: Abdulghani M.Elazreg                                  %
% Email		: A.elazreg@lboro.ac.uk                                 %                                 
% Version	: 2.0                                                   %
% Date		: 10 -10- 2008                                          %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear
dataNo=64;
%Number of OFDM Blocks
No_of_block=200;
%Number of multipath channel
Mc=2;
% Single to Noise Ratio
snrdb=0:20
% Start of BER index
 counter=1;
 % Start of cycilc prefix
cp_start=50;
 

for i=0:length(snrdb)-1
   %Start of SER value
   SERerror=0;
   %Start of SER value
   BERerror=0;

    for k=1:No_of_block

        n_scale=sqrt(10.^(-i/10));

        qpsk=(sign(randn(dataNo,2,1))+j*sign(randn(dataNo,2,1)))./sqrt(2);
        %Start of OFDM
     %1- IFFT to STBC signal during two time slot
        x1=sqrt(dataNo)*ifft(qpsk(:,1));
        x2=sqrt(dataNo)*ifft(qpsk(:,2));
        x11=sqrt(dataNo)*ifft(-conj(qpsk(:,2)));
        x22=sqrt(dataNo)*ifft(conj(qpsk(:,1)));
     %2-Adding CP to STBC signal during two time slot
        t1=[x1(cp_start:dataNo);x1];
        t2=[x2(cp_start:dataNo);x2];
        t11=[x11(cp_start:dataNo);x11];
        t22=[x22(cp_start:dataNo);x22];
        [t1 t11 t2 t22];
        
        %generate Noise 
      %1- Noise 1 for channel one
         noise1=((n_scale)*(randn(1,length(t1))+j*randn(1,length(t1))))./sqrt(2);
      %1- Noise 2 for channel two
         noise2=((n_scale)*(randn(1,length(t2))+j*randn(1,length(t2))))./sqrt(2);
       % generate channel
         h0=(randn(1,3)+j*randn(1,3))./sqrt(2);
         h1=(randn(1,3)+j*randn(1,3))./sqrt(2);
        %frequncey domain
         h0f=fft([h0 zeros(1,64)]);
         h1f=fft([h1 zeros(1,64)]);
  
 %Received signals
         
       r0=(filter(h0,[1],t1))+(filter(h1,[1],t2))+noise1.';
       r1=(filter(h0,[1],t22)+filter(h1,[1],t11))+noise2.';
  
    %Remove CP
          y1=r0(dataNo-cp_start+2:length(r0));
          y2=r1(dataNo-cp_start+2:length(r1));
          [y1 y2];
          yT1=sqrt(1/dataNo)*fft(y1);
          yT2=sqrt(1/dataNo)*fft(y2);
          [yT1 yT2];
                  %### Combiner ###
      for m=1:64 
          hmat=[h0f(m) h1f(m);conj(h1f(m)) -conj(h0f(m))];
          rmat=[yT1(m) conj(yT2(m))];
          xtemp=rmat*hmat';
          s_11 = sign(real(xtemp(1))) 
          s_22 = sign(imag(xtemp(1))) 
     s0hat(m) = (s_11 + j*s_22)./sqrt(2)
     
     s_33 = sign(real(xtemp(2)));
     s_44 = sign(imag(xtemp(2)));
     s1hat(m) = (s_33 + j*s_44)./sqrt(2)
      end
        
     Errors1 = sum(qpsk(:,1).'~=s0hat);
     Errors2 = sum(qpsk(:,2).'~=s1hat);
    [Errors1 Errors2];
    BERerror=  BERerror+Errors1+Errors2;
    end 
    BER(counter)=BERerror./(4*dataNo*No_of_block); 
    %Ser(counter)=SERerror./(dataNo*No_of_block) ;
    counter=counter+1;
end       
 semilogy(snrdb,BER,'mx-','LineWidth',3,'Color',[.4 1 .3]);
       

⌨️ 快捷键说明

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