⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deinterleave_my.c

📁 基于MATLAB的GSM仿真系统 并附有直接画出性能曲线的简化程序。
💻 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 + -