www.pudn.com > WCDMA.rar > gen_uplink_WCDMA_frame.m


function [y,z]=gen_uplink_WCDMA_frame(N,scramble_code,chan_code,DPCCH_code,beta_c,beta_d) 
%************************************************************************* 
%function [y z]=gen_uplink_WCDMA_frame(N,scramble_code,chan_code,DPCCH_code,beta_c,beta_d) 
% Copyright 2002 The Mobile and Portable Radio Research Group 
% 
% 
%Generates the exactly one complex frame of the Dedicated Physical 
%Data Channel/Dedicated Physical Control Channel (DPDCH/DPCCH) prior to  
%transmission into the channel.  Specifically, this function 
%     1.  Generates the data for each of the N data channels (DPDCH) 
%     2.  Generates the data for the control channel (DPCCH) 
%     3.  Applies the channel code 
%     4.  Combines the N data channels and the one control channel 
%         into a complex data stream 
%     5.  Applies the srambling code 
% 
%Parameters 
%   Input 
%      N               Scalar    # of data channels (DPDCH). 
%                                Must be between 1 and 6 
%      scramble_code   Vector    complex scramble code generated by 
%                                "scramble_long" or "scramble_short" 
%      chan_code       Matrix    Channel code matrix.  If N>1, then 
%                                "chan_code" must be a 4x4 matrix 
%      DPCCH_code      Scalar    The data in the control channel (DPCCH) 
%      beta_c          Scalar    Gain factor for DPCCH (between 0 and 1) 
%      beta_d          Scalar    Gain factor for DPDCH (between 0 and 1) 
% 
%   Output 
%      y               Vector    Complex frame for radio uplink 
%      z               Vector    Data used to generate complex frame  
% 
%*************************************************************************** 
 
chips_per_frame=38400; 
 
%Only 6 data channels are allowed 
if (N<1)|(N>6), error('N must be between 1 and 6'); end 
 
%For the case where N>1, check to see if chan_code is a 4x4 matrix 
[nrow,ncol]=size(chan_code); 
if N>1 
   if nrow~=4 
      error(['SF=',int2str(nrow),', N=',int2str(N),'!  spreading factor must equal 4 if N>1']);  
   end       
end 
 
%At least one of the weights must be equal to 1 
if ((beta_c~=1) & (beta_d~=1)) 
   error('At least one of the two weight terms must be equal to 1'); 
end 
 
%All weights must fall on the closed unit interval 
if (beta_c<0) | (beta_c>1), error('beta_c must be between 0 and 1'); end 
if (beta_d<0) | (beta_d>1), error('beta_d must be between 0 and 1'); end 
 
%Determine spreading factor 
SF=nrow; 
 
%Generate data channels prior to spreading 
Ndata_per_frame=chips_per_frame/SF; 
%*********************** 
%Commented out for Debug Purposes 
data_bits=sign(rand(N,Ndata_per_frame)-0.5); 
%Commented out for Debug Purposes 
 
z=data_bits; 
 
%Apply Orthogonal Channelizatoin Codes to data 
if N>1 
   kk=[1 1 3 3 2 2]+1; 
   for k=1:N 
      channelized_data(k,:)=reshape(chan_code(kk(k),:).'*data_bits(k,:),1,chips_per_frame); 
   end 
else 
   k=(SF/4)+1; 
   channelized_data=reshape(chan_code(k,:).'*data_bits,1,chips_per_frame); 
end 
 
clear data_bits 
 
%Apply Channelation code to control data 
control_data=reshape(ones(256,1)*DPCCH_code,1,chips_per_frame); 
 
%Create Complex Data Stream 
if N==1, complex_data=channelized_data+j*control_data; 
else 
   complex_data=sum(channelized_data(1:2:N,:),1)+j*(control_data+sum(channelized_data(2:2:N,:),1)); 
end 
clear channelized_data control_data 
%Scramble_data 
y=complex_data.*double(scramble_code); 
clear complex_data 
%save temp complex_data channelized_data