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

📄 dl_start.m

📁 一个WCDMA接收机的matlab程序
💻 M
字号:
function [size, crc, chCode, C, control] = dl_start(nCode, c_type, Kindex, nFrames,tx_ch)%%% FUNCTION:     dl_start      % AUTHOR:       Maarit Melvasalo% DATE:         April 21, 1999%% DESC:         This fuction set values for downlink transport channels%               defined in Simulink library:  utra_lib %               These values have been obtained from ETSI UTRA %               for ITU-R RTT.  %% NOTE:         Parameter value may be changed, but be carefully!%               Do not change the calcutions.   %% HISTORY:      June 17,1999 Maarit Melvasalo%                   Comments added% Copyright disclaimer:%   This software was developed at the National Institute of Standards%   and Technology by employees of the Federal Government in the course%   of their official duties. Pursuant to title 17 Section 105 of the%   United States Code this software is not subject to copyright%   protection and is in the public domain.%%   We would appreciate acknowledgement if the software is used.%% *******************************************************************%% INPUTS:%%  nCode =[code_length, index ] = %            spreading factor and index (NOTE index is not required!!) %            If the code has been pre set i.e nCode = C, nothing is done% 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			  %         2 = Primarly common control physical cahnnel (NO CRC)%         3 = Secondary common control physical channel (FACH or PCH)			  %% OUTPUTS: %% size = [N = input_block_size bits_in_frame nFrames N_offset nSlot]%             input_block_size= number of bits in each input block (calculated)%             bits_in_frame   = number of coded bits in frame (calculated)%                               Note that this does not include contorl bits%             nFrames         = number of frames in each block (calculated) %             N_offset        = offset required to obtain correct blocksize (calculated)%                               after channel coding (and before interleaving)%             nSlot           = number of slots in frame (set by user)%             chips_in_slot   = number of slots in frame (constant for given bit bandwidth)%% crc = [nCRC poly] %             nCRC  = number of CRC bits  (set by user) different for different %                     physical channels%             poly  = generating polynomial for CRC (set by user)%% chCode = [c_type K tail poly]%             c_type  = channel type (given in function call = set by user) %             K       = Coding gain  (given in function call = set by user) %             tail    = Coding tail length  (set by user)%             poly    = Generating polynomials for channel coding (set by user)%% C = spreading code%             spreading code depends on given parameters (calculated / given by user)%% control = [nPilot TPC TFI] %             nPilot  = number of Pilot bits (given by user) %             TPC     = number of Power control bits (given by user) %             TFI     = number of Transport Format Indicator bits (given by user)  % %%%% ***************************************************************%% Common parameters to all Downlink transport channels%% ***************************************************************       R = 4096000;        % chips rate  1/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       chips_in_slot = R/nSlot*tFrame;                            % Number of chips in each slot (constant) % ***************************************************************    % If only only one argument is given at the function call    % only the basic parameters are returned to the user    if(nargin == 1)    size = [nSlot,chips_in_slot];    crc =0;    C = 0;    chCode = 0;    control =0;    return    end;% ***************************************************************%%        CRC Basic settings %% ***************************************************************     nCRC = 16 ;                     % Number of CRC bits;      crc_q = '1021';                 % ARIB  in decimal presentation  4129    CRCQ = base2dec(crc_q,16);      % same in decimal representation    crc = [nCRC CRCQ]; % ***************************************************************%%       CONVOLUTIONAL CODING PARAMETERS%% *************************************************************** if (c_type == 1)     % CODING RATIO     % Kindex == 1 -> K = 2;      % Kindex == 2 -> K = 3;     K = Kindex + 1 ;  tail = 8;       %*****************************************% The Generator polynomials for convolutional coding and decoding% see UTRA specification chapter 5.2.1.1.1      Base = 8;  % indicates the base in which the numbers are given/**/     if (K == 3)         p1_o = '557';  % desimal: 367;         p2_o = '663';  % desimal: 435;	 p3_o = '711';  % desimal: 457;      else          p1_o = '561';  % desimal: 367;	 p2_o = '753';  % desimal: 435;	 p3_o = '0';    % desimal: N/A;      end;     poly = [base2dec(p1_o,Base) base2dec(p2_o,Base) base2dec(p3_o,Base)];% ***************************************************************%%      NUMBER OF CONTROL BITS%% ***************************************************************      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     end;     if (tx_ch == 2)          TPC = 0;    TFI = 0;  nCRC = 0;       % Primary common control	  crc = [nCRC CRCQ];	  if (nCode(1) < 256) 	       disp('Only Spreading ratio 256 allowed for Primary common control channel');	       nCode(1)=256;	       end;     end;     % ***************************************************************      % Update return values     chCode = [c_type  K tail poly];     control = [nPilot TPC TFI];% *************************************************************** %%      SPREADING CODE%% ***************************************************************      % if the spreading code has not been assigned     if ( length(nCode)  < 3)                % set the code index for a inital value            index = nCode(1) / 2 ;           % If the code index has been defined by the use 	   % in thefunction call check that is valid index           if ((length(nCode) == 2) & ((index <= nCode) & (index >0) ))                 index = nCode(2);     end;	   % Call a matalb mex function which returns the code      	   C = get_ovsf_code(nCode(1),index);                      end;           if ( length(nCode) > 2) % if the spreading code has already been assigned            C = nCode;           nCode = length(C);     end;% *************************************************************** %%      NUMBER OF BITS IN BLOCK, FRAME AND SLOT ETC %           %              DO NOT CHANGE!!!!!!!!%% ***************************************************************      total_bits = R/nCode(1) * 2 ;     bits_in_slot = total_bits * tFrame / nSlot ;      coded_bits_frame = (bits_in_slot - nPilot -TPC - TFI) * nSlot  ;     % NOTE:     % 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 chips_in_slot];     return;end;% ***************************************************************%       END of CONVOLUTIONAL CODING% ***************************************************************% ***************************************************************%%       TURBO CODING PARAMETERS%%       NOT IMPLEMENTED YET%% *************************************************************** if (c_type > 1)    disp('Only the convolutiona channel coding (1/3, 9) is implemented currently');size = 0;crc =0;C = 0;chCode = 0;control =0;    return;end;

⌨️ 快捷键说明

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