📄 signal_enc.c
字号:
/*****************************************************************************//* FIle Name : signal_enc.c *//* Description : WLAN FEC SIGNAL Field Encoder *//* author : miffie *//* Date : aug/10/05 *//* Copyright (c) 2005 miffie All rights reserved. *//*****************************************************************************////////////////////////////////////////////////////////////////////////////////struct complexset signal_enc( char RATE , short LENGTH , char *pilot_shifter) { // struct binaryset bset0,bset1 ;struct complexset cset0, cset1 ;struct complexset ctop ;struct complex ctmp1, ctmp2 ;char *tmp1 , *tmp2 ;char parity ;int ii ;// Rate(Mbps) RATE(R1-R4) Coding_Rate Modulation Nbpsc Ncbps Ndbps// 6 1101 0:1/2 BPSK 1 48 24 //Make SIGNAL bits //SERVICE field if ((tmp1 = (char *)malloc(3*sizeof(char)) ) == NULL) { PRINTF( " malloc failed in SIGNAL\n") ; } //fail else { //allocated //bset1 for SERVICE field PRINTF("SIGNAL Encoder RATE=%x LENGTH=%x\n" ,RATE, LENGTH) ; bset1.format = 1 ; //a byte octet bset1.size = 3 ; //a byte octet bset1.data = tmp1 ; // tmp2 = tmp1 ; parity = 0 ; //first byte *tmp2 = ((LENGTH &0x7) <<5) //first byte + (0x0<<4) //Reserved + RATE ; //RATE for (ii=0;ii<8;ii++) parity ^= (*tmp2>>ii) &0x1 ; tmp2++ ; //second byte *tmp2 = (LENGTH &0x7f8)>>3 ; //second byte for (ii=0;ii<8;ii++) parity ^= (*tmp2>>ii) &0x1 ; tmp2++ ; //third byte parity ^= (LENGTH>>11) &0x1 ; *tmp2 = ((LENGTH &0x800)>>11) //third byte + ((parity &0x1) <<1) ; } //allocated bset0 = byte2binary(bset1) ; print_binaryset( bset0 ) ; //No Scrambler in SIGNAL //Convolution encoder bset0 = convolution_encoder(bset0 , 0 ) ; //rate 0:1/2 //Compare with Table G.8 for convolution encoder print_binaryset( bset0 ) ; //interleaver bset0 = interleaver(bset0 , 1 ) ; //Nbpsc=1 //Compare with Table G.9 for interleaved bits print_binaryset( bset0 ) ; //OFDM mapper cset0 = mapper (bset0, 1, pilot_shifter) ; //Compare with Table G.11 for Frequency Domain data print_complexset( cset0 ) ; //OFDM IFFT cset0 = idft64 ( cset0 ) ; //Compare with Table G.12 for Frequency Domain data print_complexset( cset0 ) ; //build a DATA symbol cset1 = extract_complexset(cset0 , 48 , 16 ) ; //Guard Interval cset1 = cat_complexset(cset1 , cset0 ) ; ctop = cset1 ; return( ctop ) ;} //signal_enc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -