📄 interleaver.c
字号:
/*****************************************************************************//* FIle Name : interleaver.c *//* Description : WiMax OFDM FEC interleaver for Encoder *//* 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/03/05 *//* Copyright (c) 2005 miffie All rights reserved. *//*****************************************************************************/struct binaryset interleaver (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("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/12) * (ii % 12) + (ii/12) ; //printf("permutation1 %d %d\n", ii, pp ) ; top1[ pp ] = datain.data[ ii ] ; //printf(" top1(%d)=%d \n", pp, top1[pp] ) ; } //p1 //permutation2 ss = (Ncpc+1)/2 ; for(ii=0;ii<datain.size;ii++) { //p2 pp = ss* (ii/ss) + ( ii + datain.size - (12*ii/datain.size)) % ss ; //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 + -