📄 main_bak.c
字号:
#include <stdio.h>
#include <stdlib.h>
#define Nrs 228
#define Nb 12
#define Nm 19
int CIntlvStart[Nb];
int CIntlvEnd[Nb];
int CIntlvRead[Nb];
int CIntlvWrite[Nb];
int DeCIntlvStart[Nb];
int DeCIntlvEnd[Nb];
int DeCIntlvRead[Nb];
int DeCIntlvWrite[Nb];
int memcnt[Nb];
int dememcnt[Nb];
int CIntlvReg[1266];
int DeCIntlvReg[1266];
int CInterlvInit(void);
int CInterlv(int * pindata, int *pMemreg, int * poutdata, int B, int M, int Frames);
int DeCInterlvInit(void);
int DeCInterlv(int * pindata, int *pMemreg, int * poutdata, int B, int M, int Frames);
int main(void)
{
int i;
int *pInData, *tempData, *pOutData;
int Nframe;
char *temp;
FILE *fp;
Nframe=1000;
pInData = calloc(Nrs*Nframe, sizeof(int));
pOutData = calloc(Nrs*Nframe, sizeof(int));
tempData = calloc(Nrs*Nframe, sizeof(int));
temp = calloc(Nrs*Nframe, sizeof(char));
for (i=0;i<Nrs*Nframe;i++)
{
*(pInData+i)=(i+1)%256;
*(pOutData+i)=0;
*(tempData+i)=0;
*(temp+i)=0;
}
for (i=0;i<Nrs*Nframe;i++)
{
*(temp+i)=(char)(*(pInData+i));
}
fp=fopen("OriginData.dat","wb");
fwrite(temp,sizeof(char),Nrs*Nframe,fp);
fclose(fp);
//Initial
CInterlvInit();
DeCInterlvInit();
//Convolutional Interleaving
CInterlv(pInData, CIntlvReg, tempData, Nb, Nm, Nframe);
//De Convolutional Interleaving
DeCInterlv(tempData, DeCIntlvReg, pOutData, Nb, Nm, Nframe);
for (i=0;i<Nrs*Nframe;i++)
{
*(temp+i)=(char)(*(pOutData+i));
}
fp=fopen("DeIntlvData.dat","wb");
fwrite(temp,sizeof(char),Nrs*Nframe,fp);
fclose(fp);
for (i=0;i<Nrs*Nframe;i++)
{
*(temp+i)=(char)(*(tempData+i));
}
fp=fopen("IntlvData.dat","wb");
fwrite(temp,sizeof(char),Nrs*Nframe,fp);
fclose(fp);
free(pInData);
free(pOutData);
free(tempData);
free(temp);
return 0;
}
//卷积交织初始化函数
int CInterlvInit(void)
{
int i;
int tmp=0;
for ( i=0; i<Nb; i++ )
{
memcnt[i] = i*Nm+1;
}
CIntlvStart[0] = 0;
CIntlvEnd[0] = CIntlvStart[0]+memcnt[0]-1;
for ( i=1; i<Nb; i++ )
{
tmp=tmp+memcnt[i-1];
CIntlvStart[i] = tmp;
CIntlvEnd[i] = CIntlvStart[i]+memcnt[i]-1;
}
for ( i=0; i<Nb; i++ )
{
CIntlvRead[i] = CIntlvEnd[i];
CIntlvWrite[i] = CIntlvStart[i];
}
for (i=0;i<1266;i++)
{
CIntlvReg[i]=0;
}
return 0;
}
//解卷积交织初始化函数
int DeCInterlvInit(void)
{
int i;
int tmp=0;
for ( i=0; i<Nb; i++ )
{
dememcnt[i] = (Nb-1-i)*Nm+1;
}
DeCIntlvStart[0] = 0;
DeCIntlvEnd[0] = DeCIntlvStart[0] + dememcnt[0] - 1;
for ( i=1; i<Nb; i++ )
{
tmp = tmp + dememcnt[i-1];
DeCIntlvStart[i] = tmp;
DeCIntlvEnd[i] = DeCIntlvStart[i] + dememcnt[i]-1;
}
for ( i=0; i<Nb; i++ )
{
DeCIntlvRead[i] = DeCIntlvEnd[i];
DeCIntlvWrite[i] = DeCIntlvStart[i];
}
for (i=0;i<1266;i++)
{
DeCIntlvReg[i]=0;
}
return 0;
}
//卷积交织函数
int CInterlv(int * pindata, int *pMemreg, int * poutdata, int B, int M, int Frames)
{
int i,k;
int *in,*out;
in = pindata;
out = poutdata;
for (k=0;k<M*Frames;k++)
{
//Read data from register array
for (i=0;i<B;i++)
{
*(out+k*B+i)=*(pMemreg+CIntlvRead[i]);
}
//Shift the Read and Write index
for (i=1;i<B;i++)
{
CIntlvRead[i] = CIntlvRead[i] -1 ;
CIntlvWrite[i] = CIntlvWrite[i] -1 ;
if (CIntlvRead[i]<CIntlvStart[i])
{
CIntlvRead[i] = CIntlvRead[i] + memcnt[i];
}
if (CIntlvWrite[i]<CIntlvStart[i])
{
CIntlvWrite[i] = CIntlvWrite[i] + memcnt[i];
}
}
//Write data to the register array
for (i=0;i<B;i++)
{
*(pMemreg+CIntlvWrite[i])=*(in+k*B+i);
}
}
return 0;
}
//解卷积交织函数
int DeCInterlv(int * pindata, int *pMemreg, int * poutdata, int B, int M, int Frames)
{
int i,k;
int *in,*out;
in = pindata;
out = poutdata;
for (k=0;k<M*Frames;k++)
{
//Read data from register array
for (i=0;i<B;i++)
{
*(out+k*B+i)=*(pMemreg+DeCIntlvRead[i]);
}
//Shift the Read and Write index
for (i=0;i<B-1;i++)
{
DeCIntlvRead[i] = DeCIntlvRead[i] -1 ;
DeCIntlvWrite[i] = DeCIntlvWrite[i] -1 ;
if(DeCIntlvRead[i]<DeCIntlvStart[i])
{
DeCIntlvRead[i] = DeCIntlvRead[i] + dememcnt[i];
}
if(DeCIntlvWrite[i]<DeCIntlvStart[i])
{
DeCIntlvWrite[i] = DeCIntlvWrite[i] + dememcnt[i];
}
}
//Write data to the register array
for (i=0;i<B;i++)
{
*(pMemreg+DeCIntlvWrite[i])=*(in+k*B+i);
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -