www.pudn.com > filter.rar > Rayleigh_channel.m


% Program 2-6 
% sefade.m 
% 
% This function generates frequency selecting fading 
%  
% Programmed by H.Harada	 	 
%  
 
function[iout,qout,ramp,rcos,rsin]=sefade(idata,qdata,itau,dlvl,th,n0,itn,n1,nsamp,tstp,fd,flat) 
 
%****************** variables ************************* 
% idata  input Ich data      
% qdata  input Qch data      
% iout   output Ich data 
% qout   output Qch data 
% ramp   : Amplitude contaminated by fading 
% rcos   : Cosine value contaminated by fading 
% rsin   : Cosine value contaminated by fading 
% itau   : Delay time for each multipath fading 
% dlvl   : Attenuation level for each multipath fading 
% th     : Initialized phase for each multipath fading 
% n0     : Number of waves in order to generate each multipath fading 
% itn    : Fading counter for each multipath fading 
% n1     : Number of summation for direct and delayed waves  
% nsamp   : Total number od symbols 
% tstp   : Mininum time resolution 
% fd   : Maxmum doppler frequency 
% flat     flat fading or not  
% (1->flat (only amplitude is fluctuated),0->nomal(phase and amplitude are fluctutated)    
%****************************************************** 
 
iout = zeros(1,nsamp); 
qout = zeros(1,nsamp); 
 
total_attn = sum(10 .^( -1.0 .* dlvl ./ 10.0)); 
 
for k = 1 : n1  
 
	atts = 10.^( -0.05 .* dlvl(k)); 
 
	if dlvl(k) >= 40.0  
	       atts = 0.0; 
	end 
 
	theta = th(k) .* pi ./ 180.0;	 
 
	%[itmp,qtmp] = delay ( idata , qdata , nsamp , itau(k)); 
    % Gives delay to input signal 
    idel=itau(k); 
itmp=zeros(1,nsamp); 
qtmp=zeros(1,nsamp); 
 
if idel ~= 0  
  itmp(1:idel) = zeros(1,idel); 
  qtmp(1:idel) = zeros(1,idel); 
end 
 
itmp(idel+1:nsamp) = idata(1:nsamp-idel); 
qtmp(idel+1:nsamp) = qdata(1:nsamp-idel); 
 
     
     
     
    % Generate Rayleigh fading 
 
	%[itmp3,qtmp3,ramp,rcos,rsin] = fade (itmp,qtmp,nsamp,tstp,fd,n0(k),itn(k),flat); 
	 
  %if fd ~= 0.0   
  fd=160; 
  no=n0(k); 
  counter=itn(k); 
    ac0 = sqrt(1.0 ./ (2.0.*(no + 1)));   % power normalized constant(ich) 
    as0 = sqrt(1.0 ./ (2.0.*no));         % power normalized constant(qch) 
    ic0 = counter;                        % fading counter 
  
    pai = 3.14159265;    
    wm = 2.0.*pai.*fd; 
    n = 4.*no + 2; 
    ts = tstp; 
    wmts = wm.*ts; 
    paino = pai./no;                         
 
    xc=zeros(1,nsamp); 
    xs=zeros(1,nsamp); 
    ic=[1:nsamp]+ic0; 
 
  for nn = 1: no 
	  cwn = cos( cos(2.0.*pai.*nn./n).*ic.*wmts ); 
	  xc = xc + cos(paino.*nn).*cwn; 
	  xs = xs + sin(paino.*nn).*cwn; 
  end 
 
  cwmt = sqrt(2.0).*cos(ic.*wmts); 
  xc = (2.0.*xc + cwmt).*ac0; 
  xs = 2.0.*xs.*as0; 
 
  ramp=sqrt(xc.^2+xs.^2);    
  rcos=xc./ramp; 
  rsin=xs./ramp; 
 
  %if flat ==1 
    itmp3 = sqrt(xc.^2+xs.^2).*itmp(1:nsamp);    % output signal(ich) 
    qtmp3 = sqrt(xc.^2+xs.^2).*qtmp(1:nsamp);    % output signal(qch) 
    %else 
    %iout = xc.*idata(1:nsamp) - xs.*qdata(1:nsamp);   % output signal(ich) 
    %qout = xs.*idata(1:nsamp) + xc.*qdata(1:nsamp);   % output signal(qch) 
    %end 
 
    %else   
  %iout=idata; 
  %qout=qdata; 
  %end 
 
     
     
     
     
     
     
     
    %********************************************************************** 
    %% 
    iout = iout + atts .* itmp3 ./ sqrt(total_attn); 
  qout = qout + atts .* qtmp3 ./ sqrt(total_attn); 
 
end 
% ************************end of file***********************************