www.pudn.com > wcdma_simulink.rar > dl_2_start.m


function [size, crc, chCode, C, control,ratem_flag] = dl_start(nCode, c_type, Kindex, nFrames,tx_ch)
%
%
%
%
% MIGHT WANNA ADD LATER tx_ch_type
%
% nCode = spreading factor
% c_type = mode indicating the channel coding scheme
%      1 = Convolutional coding with   
%      3 = Turbo coding (NOT YET)
% K_index = Coding ratio (input values: (1,2)
% nFrames = number of frames in each block interleaver
% tx_ch = transport channel type
%         1 = Dedicated transport channel			  
%         3 = Secondary common control physical channel (FACH or PCH)			  
%         2 = Primarly common control physical cahnnel (NO CRC)
% OUTPUTS: 
% size = [N b_frame nFrames N_offset nSlot]
% crc = [nCRC poly]
% chCode = [c_type K tail poly]
% control = [nPilot TPC TFI] 
% code = [nCode C]
% 
%
% N = User input block size
% N_frame = number of coded bits in one frame
% K = Coding ratio  (output values: 2 or 3)
% nTail = tail length
% nPilot  = number of Pilot bits per slot
% TPC  = number of power bits per slot
% TFI = number of TFI bits per slot
% ratem_flag = 0 or 1 depending if ratematching is used or not
%
% ***************************************************************
% Common parameters to all Downlink transport channels

R = 4096000;        % chips /s
nSlot = 16;         % Number of slots per frame same as wcdma_config.h = SLOTS_IN_FRAME
tFrame = 1/100;     % 10 ms = frame time 
                    % Simulink s-functions use TD_FRAME = 1 defined in wcdma_config.h

    nCRC = 16 ;                     % Number of CRC bits;  
    crc_q ='1321';                  % CRC polynomial 
    CRCQ = base2dec(crc_q,16);      % same in decimal representation
    crc = [nCRC CRCQ];

% ***************************************************************
% IF CONVOLUTIONAL CODING IS USED
% *************************************************************** 
if (c_type == 1)


% The Generator polynomials for convolutional coding and decoding
     Base = 8;  % indicates the base in which the numbers are given/**/
     p1_o = '557';  % desimal: 367;
     p2_o = '663';  % desimal: 435;
     p3_o = '711';  % desimal: 457; 

     poly = [base2dec(p1_o,Base) base2dec(p2_o,Base) base2dec(p3_o,Base)];

     %*****************************************
     % CODING RATIO
     if (Kindex ~= 2) 
        disp('Only coding ratio 3 is implemented currently.'); 
        disp('K = 3 will be used in the simulations'); 
	end; 


     K = 3 ;  tail = 8;  

     nPilot = 8;  TPC = 3;    TFI = 2;

     % If not Dedicated transport channel update the following parameters:
     if(tx_ch == 3)
          TPC = 0;    TFI = 0;                 % Secondary common control
     elseif(tx_ch == 2)
          TPC = 0;    TFI = 0;  nCRC = 0;       % Primary common control
	  crc = [nCRC CRCQ];
     end;

     chCode = [c_type  K tail poly];
     control = [nPilot TPC TFI];

     %*****************************************
     % SPREADING CODE  FOR SECOND CHANNEL
     % if the spreading code has not been assigned
     if length(nCode) < 2
           C = [ones(1,nCode / 2) -ones(1,nCode/2)];
		% for(i = 1:nCode)  C(i) = (-1)^i; end; 
     else  % if the spreading code has already been assigned 
           C = nCode;
           nCode = length(C);
     end;

     %*****************************************
     % NUMBER OF BITS IN FRAME AND SLOT ETC
     total_bits = R/nCode * 2 ;
     bits_slot = total_bits * tFrame / nSlot ; 
     coded_bits_frame = (bits_slot - nPilot -TPC - TFI) * nSlot  ;

     % Size of the inputblock to CRC must be * 8 

     N_total = nFrames * coded_bits_frame - tail  ;
     N_tmp = floor(N_total / K);
     if( nCRC > 0)
         N_tmp = 8 * floor(N_tmp / 8)  ;
     end;
     N = N_tmp - nCRC ;
     N_offset = N_total - N_tmp*K;

     size =[N coded_bits_frame nFrames N_offset nSlot];

     %*****************************************
     % NUMBER OF BITS IN FRAME AND SLOT ETC
     ratem_flag = 0;
     return;
end;


% ***************************************************************
% IF Turbo coding is used NOT IMPLEMENTED YET

if (c_type > 1)
    disp('Only the convolutiona channel coding (1/3, 9) is implemented currently');
size = 0;
crc =0;
ratem_flag = 0; 
C = 0;
chCode = 0;
control =0;

    return;
end;