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

📄 tx_bit_interlve.cpp

📁 模拟cmmb系统中ldpc译码的部分
💻 CPP
字号:
/************************************/
/*函数说明:
/*功能:比特交织
/*输出参数:
/*tx_bitinterved_bit:经过比特交织后的输出码流;
/*输入参数:
/*tx_ldpced_bit:经ldpc编码后的比特流;
/*tx_ldpced_bit_len:经ldpc编码后比特流的长度;
/*channel_rate:信道速率: 1:2M    2: 8M;
/*备注:8M时交织深度为384×360,2M时交织深度为192×144。数据按行存入矩阵,按列取出
/************************************/



		#include <stdio.h>
		#include <stdlib.h>

  	#include "tx_bit_interlve.h"	

  	void tx_bit_interlve(char * tx_ldpced_bit, long int tx_ldpced_bit_len, unsigned char channel_rate, char * tx_bitinterved_bit)
		
		//ldpc_encoded_data为Data型,长度为N,输入输出型
		//输入为LDPC编码后的bit流,输出为交织后的bit流
		//CHANNEL_RATE 信道速率,2M或8M 0--8M,1--2M

		{
				int i,j,k,interlve_num;
				char **interlve_matrix;
				int interlve_M,interlve_N;
				
				
				
					
				switch(channel_rate)
				{
					case(2):	//8M时交织深度为384×360
						
						interlve_M=384;
						interlve_N=360;
						
						if(tx_ldpced_bit_len%(interlve_M*interlve_N)!=0)
						{
								printf("LDPC ENCODED DATA LEN ERROR IN BIT_INTERLVE!");
								return;
						}
						interlve_num=tx_ldpced_bit_len/(interlve_M*interlve_N);
						interlve_matrix=(char**)calloc(interlve_M,sizeof(char*));
						for(i=0;i<interlve_M;i++)
						{
							interlve_matrix[i]=	(char*)calloc(interlve_N,sizeof(char));
						}
						for(i=0;i<interlve_num;i++)
						{
							for	(j=0;j<interlve_M;j++)
							
								for(k=0;k<interlve_N;k++)
								
									interlve_matrix[j][k]=tx_ldpced_bit[interlve_M*interlve_N*i+interlve_N*j+k];
								
							
							for	(j=0;j<interlve_N;j++)
							
								for(k=0;k<interlve_M;k++)
								
									tx_bitinterved_bit[interlve_M*interlve_N*i+interlve_M*j+k]=interlve_matrix[k][j];
								
							
						}
						
						/** free the memory********/
						for(i=0 ; i<interlve_M ; i++)
							free(interlve_matrix[i] );

						free(interlve_matrix);
						break;	
						
					case(1):		//2M时交织深度为192×144
						interlve_M=192;
						interlve_N=144;
						
						if(tx_ldpced_bit_len%(interlve_M*interlve_N)!=0)
						{
								printf("LDPC ENCODED DATA LEN ERROR IN BIT_INTERLVE!");
								return;
						}
						interlve_num=tx_ldpced_bit_len/(interlve_M*interlve_N);
						interlve_matrix=(char**)calloc(interlve_M,sizeof(char*));
						for(i=0;i<interlve_M;i++)
						{
							interlve_matrix[i]=	(char*)calloc(interlve_N,sizeof(char));
						}
						for(i=0;i<interlve_num;i++)
						{
							for	(j=0;j<interlve_M;j++)
							
								for(k=0;k<interlve_N;k++)
								
									interlve_matrix[j][k]=tx_ldpced_bit[interlve_M*interlve_N*i+interlve_N*j+k];
								
							
							for	(j=0;j<interlve_N;j++)
							
								for(k=0;k<interlve_M;k++)
								
									tx_bitinterved_bit[interlve_M*interlve_N*i+interlve_M*j+k]=interlve_matrix[k][j];
								
							
						}
						
						/** free the memory********/
						for(i=0 ; i<interlve_M ; i++)
							free(interlve_matrix[i] );

						free(interlve_matrix);
						break;
					default:
						printf("CHANNEL_RATE error in bit interlve.\n");
						return;
				}
		}
		

⌨️ 快捷键说明

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