⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 constellation.c

📁 基于wimax中ofdm在vxworks的仿真代码
💻 C
字号:
/*****************************************************************************//*   FIle Name : constellation.c                                             *//*   Description : WiMax OFDM Subcarrier constellation Decoder               *//*   author : miffie                                                         *//*   Date   : Nov/03/05                                                      *//*   Copyright (c) 2005 miffie   All rights reserved.                        *//*****************************************************************************/struct binaryset constellation (struct complexset datain,                           char Nbpsc ) {int 	ii ;char 	shifter ;double 	realp, image ;char    pilot_polarity ;struct 	binaryset bset ;char  	*top ;char    *pp ;static  char  bpsk_map[] = {1, -1 } ;static  char  qpsk_map[] = {1, -1 } ;static  char  qam16_map[] = {1, 3, -1, 3 } ; //Gray codedstatic  char  qam64_map[] = {3, 1, 5, 7, -3, -1, -5, -7 } ; //Gray codedstatic  double Kmod_bpsk = 1 ;	static  double Kmod_qpsk = 0.70710678 ; //1/(sqrt (2)) ;	static  double Kmod_qam16 = 0.31622777 ;static  double Kmod_qam64 = 0.15430335 ;  //Main     if ((top = (char *)malloc(datain.size*Nbpsc*sizeof(char)) ) == NULL) {        PRINTF( " malloc failed in constellation.c\n") ;    } //fail    else { //allocated     PRINTF("constellation size=%d \n", datain.size ) ;     pp= top ;     for(ii=0;ii<datain.size;ii++) { //each subcarrier        realp = datain.data[ii].realp ;        image = datain.data[ii].image ;          switch ( Nbpsc ) { //switch            case 1: { //BPSK               //-1:f 0:8 1:0                 *pp = (-realp +1) * 8 ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 //printf("%d realp=%6.3f  %x\n", ii, realp, *pp );                 pp++ ;                 break ;                } //BPSK            case 2: { //QPSK                 *pp = ((Kmod_qpsk-realp) * 16)/(2*Kmod_qpsk) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = ((Kmod_qpsk-image) * 16)/(2*Kmod_qpsk) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 break ;                } //QPSK            case 4: { //16QAM                 *pp = ((-realp + Kmod_qam16) * 16)/(2*Kmod_qam16) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(realp)-Kmod_qam16 ) * 16)/(2*Kmod_qam16) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = ((-image + Kmod_qam16) * 16)/(2*Kmod_qam16) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(image)-Kmod_qam16 ) * 16)/(2*Kmod_qam16) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 break ;                } //16QAM            default: { //64QAM                 *pp = ((-realp + Kmod_qam64) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(realp)-Kmod_qam64*3 ) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(fabs(realp)-4*Kmod_qam64)-Kmod_qam64) * 16)/                      (2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = ((-image + Kmod_qam64) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(image)-Kmod_qam64*3 ) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( fabs(fabs(image)-4*Kmod_qam64)-Kmod_qam64) * 16)/                      (2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 break ;                } //64QAM          }//switch     } //each subcarrier     bset.size = datain.size*Nbpsc ;     bset.format = 1 ;     bset.data = top ;    }//allocated    free ( datain.data ) ;    return ( bset ) ;} //constellation

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -