📄 constellation.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 + -