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

📄 constellation.c

📁 This model is just testing an idea of MIMO, which IEEE802.11n will have. But I havo not seen the s
💻 C
字号:
/*****************************************************************************//*   FIle Name : constellation.c                                             *//*   Description : WLAN OFDM Subcarrier modulation constellation Decoder     *//*   author : miffie                                                         *//*   Date   : aug/11/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[] = {-3, -1, 3, 1 } ; //Gray codedstatic  char  qam64_map[] = {-7, -5, -1, -3, 7, 5, 1, 3 } ; //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(48*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=-26;ii<=26;ii++) { //each subcarrier        realp = datain.data[ii+32].realp ;        image = datain.data[ii+32].image ;        if ((ii!=-21)&(ii!=-7)&(ii!=0)&(ii!=7)&(ii!=21)) { //not pilot          switch ( Nbpsc ) { //switch            case 1: { //BPSK               //-1:0 0:8 1:f                 *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 = ((realp + Kmod_qpsk) * 16)/(2*Kmod_qpsk) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = ((image + Kmod_qpsk) * 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 = (( Kmod_qam16*3 - fabs(realp) ) * 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 = (( Kmod_qam16*3 - fabs(image) ) * 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 = (( Kmod_qam64*5 - fabs(realp) ) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( Kmod_qam64*3 - fabs(fabs(realp)-4*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 = (( Kmod_qam64*5 - fabs(image) ) * 16)/(2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 *pp = (( Kmod_qam64*3 - fabs(fabs(image)-4*Kmod_qam64) ) * 16)/                      (2*Kmod_qam64) ;                 if( *pp > 0xf ) *pp = 0xf ;                 else if (*pp <0 ) *pp = 0 ;                 pp++ ;                 break ;                } //64QAM          }//switch        }//not pilot     } //each subcarrier     bset.size = 48*Nbpsc ;     bset.format = 1 ;     bset.data = top ;    }//allocated    free ( datain.data ) ;    return ( bset ) ;} //constellation

⌨️ 快捷键说明

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