📄 tx_ldpc_enc.cpp
字号:
/************************************/
/*函数说明:
/*功能:LDPC编码
/*输出参数:
/*tx_ldpced_bit:经过LDPC编码后的bit流,要初始化为0
/*输入参数:
/*tx_rsed_bit:经过RS编码,字节交织后的输出bit流;
/*tx_rsed_bit_len:经过RS编码,字节交织后的输出bit流的长度;
/*ldpc_rate:LDPC码率;
/*备注:输入信息位 乘以 生成矩阵 得到编码后的码字
/************************************/
#include <stdlib.h>
#include <stdio.h>
#include "tx_ldpc_enc.h"
void tx_ldpc_enc(char * tx_rsed_bit, long int tx_rsed_bit_len, double ldpc_rate, char * tx_ldpced_bit)
{
int code_num,i,j,t;
char **G;
int N=9216,M,K;
FILE *fp;
K = (int)(N*ldpc_rate);
M = N-K;
if(tx_rsed_bit_len%K != 0)
{
printf("LDPC ENCODED DATA LEN ERROR 1");
return ;
}
code_num = tx_rsed_bit_len /K; /*得到此时隙ldpc帧的数目*/
G = (char **)malloc(N*sizeof(char *)); /*为生成矩阵G分配空间*/
for(i=0 ; i<N ; i++)
{
G[i] = (char *)calloc(K,sizeof(char));
}
switch (M)
{
case 4608:
fp = fopen("GG12.dat","r");
if(fp==NULL)
{
printf("GG12.dat can not open the file!\n");
return ;
}
for(j=0;j<N;j++)
fread(G[j],sizeof(char),K,fp);
fclose(fp);
/*编码过程*/
for(i=0;i<code_num;i++)
{
for(j=0;j<N;j++)
{
for(t=0;t<K;t++)
tx_ldpced_bit[i*N+j] ^= (tx_rsed_bit[t+i*K]&&G[j][t]);
}
}
/*释放空间*/
for( j=0 ; j<N ; j++)
free(G[j]);
free(G);
break;
case 2304:
fp = fopen("GG34.dat","r");
if(fp==NULL)
{
printf("GG34.dat can not open the file!\n");
return ;
}
for(j=0;j<N;j++)
fread(G[j],sizeof(char),K,fp);
fclose(fp);
for(i=0;i<code_num;i++)
{
for(j=0;j<N;j++)
{
for(t=0;t<K;t++)
tx_ldpced_bit[i*N+j] ^= (tx_rsed_bit[t+i*K]&&G[j][t]);
}
}
for( j=0 ; j<N ; j++)
{
free(G[j]);
}
free(G);
break;
default:
printf("LDPC_RATE PARAMETER ERROR!");
for( j=0 ; j<N ; j++)
{
free(G[j]);
}
free(G);
return ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -