📄 deinterleaver.c
字号:
/*****************************************************************************//* FIle Name : deinterleaver.c *//* Description : WiMax OFDM FEC deinterleaver for decoder *//* 1st : i=(Ncbps/12)(kmod 12) + floor(k/12) *//* 2nd : j=s*floor(i/s) + (i+Ncbps-floor(12*i/Ncbps))mod s *//* author : miffie *//* Date : Nov/07/05 *//* Copyright (c) 2005 miffie All rights reserved. *//*****************************************************************************/struct binaryset deinterleaver (struct binaryset datain, char Ncpc ) {int ii , pp ;char shifter ;char ss ;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 ss = 1 ; if ((Ncpc/2)>ss) ss = (Ncpc/2) ; for(ii=0;ii<datain.size;ii++) { //p1 pp = ss*(ii/ss) + (ii +(12*ii/datain.size)) % ss ; //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 = 12 * ii - ( datain.size -1 )*(12*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 + -