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

📄 convinterlv.h

📁 信道编码中的交织技术的C语言源代码
💻 H
字号:
#define Nrs 228
#define Nb 12
#define Nm 19
#define CVDelay Nb*(Nb-1)*Nm/2

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 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++)
	{
		//Write data to the register array
		for (i=0;i<B;i++)
		{
			*(pMemreg+CIntlvWrite[i])=*(in+k*B+i);
		}

		//Shift the Write index
		for (i=1;i<B;i++)
		{
			CIntlvWrite[i] = CIntlvWrite[i] -1 ;
			if (CIntlvWrite[i]<CIntlvStart[i])
			{
				CIntlvWrite[i] = CIntlvWrite[i] + memcnt[i];
			}
		}
		
		//Read data from register array
		for (i=0;i<B;i++)
		{
			*(out+k*B+i)=*(pMemreg+CIntlvRead[i]);
		}

		//Shift the Read index
		for (i=1;i<B;i++)
		{
			CIntlvRead[i] = CIntlvRead[i] -1 ;
			if (CIntlvRead[i]<CIntlvStart[i])
			{
				CIntlvRead[i] = CIntlvRead[i] + memcnt[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++)
	{
		//Write data to the register array
		for (i=0;i<B;i++)
		{
			*(pMemreg+DeCIntlvWrite[i])=*(in+k*B+i);
		}

		//Shift the Write index
		for (i=0;i<B-1;i++)
		{
			DeCIntlvWrite[i] = DeCIntlvWrite[i] -1 ;
			if(DeCIntlvWrite[i]<DeCIntlvStart[i])
			{
				DeCIntlvWrite[i] = DeCIntlvWrite[i] + dememcnt[i];
			}
		}

		//Read data from register array
		for (i=0;i<B;i++)
		{
			*(out+k*B+i)=*(pMemreg+DeCIntlvRead[i]);
		}
		
		//Shift the Read index
		for (i=0;i<B-1;i++)
		{
			DeCIntlvRead[i] = DeCIntlvRead[i] -1 ;
			if(DeCIntlvRead[i]<DeCIntlvStart[i])
			{
				DeCIntlvRead[i] = DeCIntlvRead[i] + dememcnt[i];
			}
		}
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -