📄 tx_bit_interlve.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 + -