📄 long_track.c
字号:
/*****************************************************************************//* FIle Name : longtrack.c *//* Description : WiMax LONGsequence Decoder to initialize track SRAM *//* author : miffie *//* Date : Nov/04/05 *//* Copyright (c) 2005 miffie All rights reserved. *//*****************************************************************************////////////////////////////////////////////////////////////////////////////////struct complexset long_track( struct complexset datain ) { // struct complexset cset ;struct complexset ctop ;struct complex *top ;struct complex tmp1 ;double phase, lpfout ;int ii , jj ;static char Pall[]={ 1,-1, 1,-1, -1,-1, 1, 1, 1,-1, 1,-1, -1, 1, 1,-1, 1,-1, 1,-1, 1, 1, -1,-1, 1, 1, 1, 1, -1,-1, 1, 1, -1,-1, -1,-1, 1,-1, -1, 1, 1,-1, 1,-1, -1,-1, 1, 1, 1,-1, 1,-1, -1, 1, 1,-1, 1,-1, 1,-1, 1, 1, -1,-1, 1, 1, 1, 1, -1,-1, 1, 1, -1,-1, -1,-1, 1,-1, -1, 1, 1,-1, 1,-1, -1,-1, 1, 1, 1,-1, 1,-1, -1, 1, 1,-1, 1,-1, 1,-1, 1, 1, -1,-1, 1, 1, 1, 1, -1,-1, 1, 1, -1,-1, -1,-1, 1,-1, -1, 1, 1, 1, 1, 1, 1,-1, -1, 1, 1, 1, 1, 1, -1,-1, 1, 1, 1, 1, 1, 1, -1, 1, 1,-1, -1, 1, -1, 1, 1,-1, -1, 1, 1,-1, 1,-1, 1, 1, -1,-1, -1,-1, -1,-1, -1, 1, 1,-1, -1,-1, -1,-1, 1, 1, -1,-1, -1,-1, -1,-1, 1,-1, -1, 1, 1,-1, 1,-1, -1, 1, 1,-1, -1, 1, -1, 1, -1,-1, 1, 1, 0,0, -1,-1, 1, 1, -1, 1, -1, 1, -1,-1, 1, 1, 1, 1, 1, 1, -1,-1, 1, 1, 1,-1, 1,-1, 1,-1, -1, 1, -1, 1, 1, 1, -1, 1, 1,-1, -1,-1, -1,-1, -1, 1, 1,-1, 1, 1, 1, 1, -1, 1, 1,-1, 1,-1, 1,-1, -1, 1, 1,-1, -1,-1, -1,-1, -1,-1, 1, 1, 1, 1, 1, 1, 1, 1, -1,-1, -1, 1, -1, 1, 1, 1, -1,-1, 1,-1, 1,-1, 1, 1, -1,-1, -1,-1, -1,-1, 1, 1, -1,-1, -1, 1, -1, 1, -1, 1, 1,-1, 1,-1, 1,-1, 1,-1, -1, 1, 1, 1, 1, 1, -1,-1, 1, 1, -1, 1, -1, 1, -1,-1, 1, 1, 1, 1, 1, 1, -1,-1, 1, 1, 1,-1, 1,-1, 1,-1, -1, 1, -1, 1, -1, 1, -1, 1, 1,-1, -1,-1, -1,-1, 1,-1, -1, 1, -1,-1, -1,-1, 1,-1, -1, 1, -1, 1, -1, 1, 1,-1, -1, 1, 1, 1, 1, 1, 1, 1, -1,-1, -1,-1, -1,-1, -1,-1, 1, 1, 1,-1, 1,-1 }; //Main if ((top = (struct complex *)malloc(201*sizeof(struct complex)) ) == NULL) { PRINTF( " malloc failed in long_track.c\n") ; } //fail else { //allocated PRINTF("long_track size=%d \n", datain.size ) ; lpfout = 0 ; for(ii=-100;ii<=100;ii+=2) { //each EVEN subcarrier if (ii!=0) {//not zero tmp1.realp = Pall[ii*2+200]*root2 ; tmp1.image = Pall[ii*2+201]*root2 ; tmp1 = division_complex(tmp1, datain.data[ii+128]) ; top[ii+100].realp = tmp1.realp ; top[ii+100].image = tmp1.image ; tmp1 = cordic( tmp1 ) ; if ((abs(ii)<100)&(abs(ii)>2)) { //not edge phase = phase - tmp1.image ; phase = (phase<-pi) ? phase+(2*pi) : (phase>=pi) ? phase-(2*pi) : phase ; lpfout = iir_lpf( phase, lpfout, (double)(1.0/16.0) ) ; } //not edge phase = tmp1.image ; }//not zero } //each EVEN subcarrier tmp1.realp = cos( lpfout/2 ) ; tmp1.image = -sin( lpfout/2 ) ; for(ii=-99;ii<=-1;ii+=2) { //each ODD subcarrier top[ii+100] = multiply_complex(top[ii+99], tmp1) ; } //each ODD subcarrier tmp1.image = -tmp1.image ; for(ii=1;ii<=99;ii+=2) { //each ODD subcarrier top[ii+100] = multiply_complex(top[ii+101], tmp1) ; } //each ODD subcarrier cset.size = 201 ; cset.data = top ; } //allocated free ( datain.data ) ; return( cset ) ;} //long_track
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -