📄 interleaver.c
字号:
/*****************************************************************************//* FIle Name : interleaver.c *//* Description : WLAN FEC interleaver for Encoder *//* 1st : i=(Ncbps/16)(kmod 16) + floor(k/16) *//* 2nd : j=s*floor(i/s) + (i+Ncbps-floor(16*i/Ncbps))mod s *//* author : miffie *//* Date : aug/05/05 *//* Copyright (c) 2005 miffie All rights reserved. *//*****************************************************************************/struct binaryset interleaver (struct binaryset datain, char Nbpsc ) {int ii , pp ;char shifter ;char tmp1 ;struct binaryset bset ;char *top1, *top2 ;//Ncbps is same as datain.size //Main PRINTF("interleaver size=%d\n", datain.size ) ; if (((top1 = (char *)malloc(datain.size*sizeof(char)) ) == NULL) | ((top2 = (char *)malloc(datain.size*sizeof(char)) ) == NULL)) { PRINTF( " malloc failed in interleaver.c\n") ; } //fail else { //allocated //permutation1 for(ii=0;ii<datain.size;ii++) { //p1 pp = (datain.size/16) * (ii % 16) + (ii/16) ; //printf("permutation1 %d %d\n", ii, pp ) ; top1[ pp ] = datain.data[ ii ] ; //printf(" top1(%d)=%d \n", pp, top1[pp] ) ; } //p1 //permutation2 tmp1 = 1 ; if ((Nbpsc/2)>tmp1) tmp1 = (Nbpsc/2) ; for(ii=0;ii<datain.size;ii++) { //p2 pp = tmp1* (ii/tmp1) + ( ii + datain.size - (16*ii/datain.size)) % tmp1 ; //printf("permutation2 %d %d\n", ii, pp ) ; top2[ pp ] = top1[ ii ] ; //printf(" top2(%d)=%d \n", pp, top2[pp] ) ; } //p2 bset.format = 0 ; bset.size = datain.size ; bset.data = top2 ; }//allocated free( top1 ) ; free( datain.data ) ; return ( bset ) ;} //interleaver
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -