www.pudn.com > wimax_ofdm_implementation_code.rar > detect_drift.c


/*****************************************************************************/
/*   FIle Name : detect_drift.c                                              */
/*   Description : Wi-Max detection of Drift                                 */
/*   author : miffie                                                         */
/*   Date   : oct/18/05                                                      */
/*   Copyright (c) 2005 miffie   All rights reserved.                        */
/*****************************************************************************/
///////////////////////////////////////////////////////////////////////////////

double detect_drift( struct complexset datain , short distance, double coef, 
                     char offset ) { // 
double  lpfout , lpfreg, drift ;
struct	complex tmp1 , tmp2 ;

int	ii  ;
int     size ;

//double  drift_phase, drift_amount ;

 //Main 
  lpfout = 0 ;
  size = datain.size-distance ;
  
  //search
  for(ii=offset;ii -pipi)  ? drift -2*pi :
              (drift<-pi) ? drift +2*pi : drift ;
      //if phase is different from previous one, correct
      drift = ((drift>=(pi/4.0))&(drift<(3.0*pi/4.0))) ? drift - (pi/2.0) : 
               (drift>=(3.0*pi/4.0)) ? drift - pi :
               (drift<=(-3.0*pi/4.0)) ? drift + pi :
              ((drift<=(-pi/4.0))&(drift>(-3.0*pi/4.0))) ? drift + (pi/2.0) : drift ;
      //lpfout += drift ;
        lpfout = iir_lpf( drift, lpfout, coef )   ;
  } //each symbol

  lpfout = lpfout/distance ;
  PRINTF("detect_drift size=%d %8.5f\n", datain.size , lpfout) ;
  return( lpfout ) ;
} //detect_drift