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