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

📄 rx_bitdeinterv.cpp

📁 模拟cmmb系统中ldpc译码的部分
💻 CPP
字号:
/************************************/
/*函数说明:
/*功能:比特解交织
/*输出参数:
/*rx_bitdeinterved_bit:经过比特解交织后的硬判决比特流;
/*rx_ldpc_llr:经过比特接交织后的初始化似然比;
/*输入参数:
/*rx_hard_demod_bit:经解映射后的硬判决比特流;
/*rx_ch_llr:经解映射计算出的初始化似然比;
/*rx_hard_demod_bit_len:经解映射后的硬判决比特流(似然比)的长度;
/*channel_rate:信道速率: 1:2M    2: 8M;
/*备注:8M时解交织深度为384×360,2M时解交织深度为192×144。数据按行存入矩阵,按列取出
/************************************/
		
		
		#include <stdio.h>
		#include <stdlib.h>
  	 	
  	#include "rx_bitdeinterv.h"
  	
  	void rx_bitdeinterv(char * rx_hard_demod_bit, double * rx_ch_llr, long int rx_hard_demod_bit_len, unsigned char channel_rate, char * rx_bitdeinterved_bit, double * rx_ldpc_llr)

		{
				int i,j,k,interlve_num;
				char **interlve_matrix;
				double **intlve_lratio_mat;
				int interlve_M,interlve_N;
								
				switch(channel_rate)
				{
					case(2):	//8M时交织深度为384×360,解交织相反
						
						interlve_M=360;
						interlve_N=384;
						
						if(rx_hard_demod_bit_len%(interlve_M*interlve_N)!=0)
						{
								printf("LDPC DATA LEN ERROR IN BIT_DEINTERLVE!");
								return;
						}
						interlve_num=rx_hard_demod_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));
						}
						
						intlve_lratio_mat=(double**)calloc(interlve_M,sizeof(double*));
						for(i=0;i<interlve_M;i++)
						{
							intlve_lratio_mat[i]=	(double*)calloc(interlve_N,sizeof(double));
						}
						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]=rx_hard_demod_bit[interlve_M*interlve_N*i+interlve_N*j+k];
									intlve_lratio_mat[j][k]=rx_ch_llr[interlve_M*interlve_N*i+interlve_N*j+k];
								}
							for	(j=0;j<interlve_N;j++)
							
								for(k=0;k<interlve_M;k++)
								{
								
									rx_bitdeinterved_bit[interlve_M*interlve_N*i+interlve_M*j+k]=interlve_matrix[k][j];
									rx_ldpc_llr[interlve_M*interlve_N*i+interlve_M*j+k]=intlve_lratio_mat[k][j];
								}
						}
						
						/** free the memory********/
						for(i=0 ; i<interlve_M ; i++)
							free(interlve_matrix[i] );
						free(interlve_matrix);
						
						for(i=0 ; i<interlve_M ; i++)
							free(intlve_lratio_mat[i] );
						free(intlve_lratio_mat);
						
						break;	
						
					case(1):		//2M时交织深度为192×144
						interlve_M=144;
						interlve_N=192;
						
						if(rx_hard_demod_bit_len%(interlve_M*interlve_N)!=0)
						{
								printf("LDPC DATA LEN ERROR IN BIT_DEINTERLVE!");
								return;
						}
						interlve_num=rx_hard_demod_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));
						}
						
						intlve_lratio_mat=(double**)calloc(interlve_M,sizeof(double*));
						for(i=0;i<interlve_M;i++)
						{
							intlve_lratio_mat[i]=	(double*)calloc(interlve_N,sizeof(double));
						}
						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]=rx_hard_demod_bit[interlve_M*interlve_N*i+interlve_N*j+k];
									intlve_lratio_mat[j][k]=rx_ch_llr[interlve_M*interlve_N*i+interlve_N*j+k];
								}
							for	(j=0;j<interlve_N;j++)
							
								for(k=0;k<interlve_M;k++)
								{
								
									rx_bitdeinterved_bit[interlve_M*interlve_N*i+interlve_M*j+k]=interlve_matrix[k][j];
									rx_ldpc_llr[interlve_M*interlve_N*i+interlve_M*j+k]=intlve_lratio_mat[k][j];
								}
						}
						
						/** free the memory********/
						for(i=0 ; i<interlve_M ; i++)
							free(interlve_matrix[i] );
						free(interlve_matrix);
						
						for(i=0 ; i<interlve_M ; i++)
							free(intlve_lratio_mat[i] );
						free(intlve_lratio_mat);
						
						break;
					default:
						printf("CHANNEL_RATE error in bit interlve.\n");
						return;
				}
		}
		

⌨️ 快捷键说明

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