Code covered by the BSD License  

Highlights from
wimax physical layer simulation

image thumbnail

wimax physical layer simulation

by

Deepak Rathore (view profile)

 

Wimax physical layer simulation using mandatory channel coding.

rsencodecod(data_in,rate_id,TxRx)
function [data_out] = rsencodecod(data_in,rate_id,TxRx)
%%  Description: The Reed-Solomon encoder is realized according to the standard. %                       
          
if rate_id==0
    if TxRx==10
        data_out=[data_in;0;0;0;0;0;0;0;0]; %RS encoder is by passed for BPSK1/2
    elseif TxRx==01
        data_out=[data_in(1:end-8)];     %remove added zero bit
    end
else
switch (rate_id)
    case 1
         n = 32;                  
         k = 24;     
    case 2  
        n = 40;                  
        k = 36;        
    case 3                                 
        n = 64;                  
        k = 48; 
    case 4
        n = 80;                  
        k = 72; 
    case 5
        n = 108;                  
        k = 96;  
    case 6
        n = 120;                  
        k = 108; 
 end
m = 8;   % Number of bits per symbol
d=n-k;
if TxRx==10
    %  To realize the Reed-Solomon code, the information is needed in decimal.
    data = reshape(data_in,8,length(data_in)/8);
    data = bi2de(data.','left-msb');
    % one bytes are needed with a stuffed zero at the end of the vector:
      data=[data.' 0];   
   % The Galois vector is generated, the generating polynomial of the
   % code. Then the symbols are encoded with Reed-Solomon.
     msg = gf([data],m);   % used polynomial to generate gf field array is same as describe in ieee standrds 
     codeRS = rsenc(msg,n,k);  % here we used primitive polynomial as in bydefault in matlab
     out = codeRS.x ;           % convert codeRS a gf object to uni8 array
     data_out=double(out);     % convert to double array
     data_out=[data_out(end-d+1:end) data_out(1:end-d)];  % extra bits should be send befor the orignal bits
   % decimal to binary conversion for continue
   data_out=de2bi(data_out,'left-msb');
   data_out=reshape(data_out.',length(data_out)*8,1);
 
elseif TxRx==01
    % RS DECODER
    % binary to decimal conversion
    data = reshape(data_in,8,length(data_in)/8);
    data = bi2de(data.','left-msb');
    data=[data.'];
    data=[data(d+1:end) data(1:d)]; % putting the extra bit to last of the array
    %decoding
    msg = gf([data],m); 
    decodeRS = rsdec(msg,n,k);      
    out = decodeRS(1:end-1)';
    out= out.x;
    out = double (out);
    % The binary data to continue working:
    out = de2bi (out,'left-msb');
    out = reshape (out.', 1, length(out)*8);
   data_out=out';
end
end


     
     
     
  

Contact us