📄 deinterleaver.c
字号:
/*****************************************************************************//* FIle Name : deinterleaver.c *//* Description : WLAN FEC deinterleaver for decoder *//* 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 deinterleaver (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("deinterleaver 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 deinterleaver.c\n") ; } //fail else { //allocated //permutation1 tmp1 = 1 ; if ((Nbpsc/2)>tmp1) tmp1 = (Nbpsc/2) ; for(ii=0;ii<datain.size;ii++) { //p1 pp = tmp1*(ii/tmp1) + (ii +(16*ii/datain.size)) % tmp1 ; //printf("permutation1 %d %d\n", ii, pp ) ; top1[ pp ] = datain.data[ ii ] ; //printf(" top1(%d)=%d \n", pp, top1[pp] ) ; } //p1 //permutation2 for(ii=0;ii<datain.size;ii++) { //p2 pp = 16 * ii - ( datain.size -1 )*(16*ii/datain.size) ; //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 ) ;} //deinterleaver
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -