📄 deinterleave_my.c
字号:
/*********************************************************************
* 文件名称: Deinterleaving.c
* 主要内容: 说明文件的内容,完成的功能,文件中包括哪些主要模块、函数等
*=====================================================================
* 版权所有 (C)2004, 东南大学移动通信国家重点实验室。
*
* 当前版本: 0.1.0
* 作 者: 马燕
* 完成日期: 2004年5月17日
**********************************************************************/
#include "Deinterleave_MY.h"
/*******************************************************************
函数说明:
函数名:dtable
函数功能:产生解交织表
输入:一个114×8的解交织表
输出:生成解交织地址表,以B,j为地址,其对应k为表中的内容
********************************************************************/
void dtable(int *K)
{
int i;
int burst; //解交织表中的列
for(burst=0;burst<=3;burst++) //偶数行的前4列存放其相应的k值,后四列为零
{
K[burst]=57*burst; //观察参考文献Table1的k与B,j的规律生成偶数行
for(i=1;i<=56;i++)
{
K[2*i*8+burst]=(K[burst]+64*i) % 456;
}
}
for(burst=4;burst<=7;burst++) //奇数行的后四列存放其相应的k值,前四列为零
{
K[burst+8]=57*burst; //观察参考文献Table1的k与B,j的规律生成奇数行
for(i=1;i<=56;i++)
{
K[(2*i+1)*8+burst]=(K[burst+8]+64*i) % 456;
}
}
}
/***********************************
函数说明:
函数名:deinterleaving
函数功能:解交织
输入:N*2
输出:N
************************************/
void deinterleaving(int *in,int *out,int *K)
{
int i,j,b;
for(i=0;i<456*2;i++)
{
b=i/114; //由k计算B,j的值
j=i % 114;
if(b<4)
{
if((j % 2)==0) //按照dTable将输入的2×456个(8个整burst)数据进行解交织
{
out[K[b+j*8]]=in[i];
}
}
else if(b>=4)
{
if((j % 2)==1)
{
out[K[b+j*8]]=in[i];
}
}
}
}
//主函数
/*void main()
{
int K[114*8];
int a;
int m;
int k;
int i[(I+1)*N]; //输入序列
int out[N*I]; //输出序列
int tempin[N*2]; //每组输入数据解交织前存放的数组
int tempout[N]; //每组数据解交织完存放的数组
for (a=0;a<I*N;a++) //初始化输入序列
{
i[a]=a % N;
}
for(m=0;m<114*8;m++) //生成dtable
K[m]=0;
dtable(K);
for(k=0;k<I;k++) //将输入数据分组进行解交织处理
{
for(m=0;m<N*2;m++)
{
tempin[m]=i[k*N+m];
}
deinterleaving(tempin,tempout,K);
for(m=0;m<N;m++)
{
out[k*N+m]=tempout[m]; //将解交织完的数据放到输出数组中,如果需要即时处理,可直接将tempout数据输出,不造成较大延时
}
}
}
*/
/***********************************
函数说明:
函数名:mapping_3
函数功能:由帧结构,输出给解交织模块
输入:148*(Iinterleave+1)*4
输出:Ninterleave*(Iinterleave+1)
************************************/
void mapping_3(int e[],int i[])
{
int B=0;
int j=0;
for (B=0;B<4*(Iinterleave+1);B++)
{
for (j=0;j<57;j++) //Message bits
{
i[B*114+j]=e[B*148+j+3];
i[B*114+57+j]=e[B*148+88+j];
}
}
}
int splitblock1to3(int blockafterinter[Iinterleave*Ninterleave],
int block4[Ninterleave],int block5[Ninterleave],int block6[Ninterleave])
{
int i;
for (i = 0;i<Ninterleave;i++)
{
block4[i] = blockafterinter[0*Ninterleave+i];
block5[i] = blockafterinter[1*Ninterleave+i];
block6[i] = blockafterinter[2*Ninterleave+i];
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -