?? tx_bit_interlve.cpp
字號(hào):
/************************************/
/*函數(shù)說(shuō)明:
/*功能:比特交織
/*輸出參數(shù):
/*tx_bitinterved_bit:經(jīng)過(guò)比特交織后的輸出碼流;
/*輸入?yún)?shù):
/*tx_ldpced_bit:經(jīng)ldpc編碼后的比特流;
/*tx_ldpced_bit_len:經(jīng)ldpc編碼后比特流的長(zhǎng)度;
/*channel_rate:信道速率: 1:2M 2: 8M;
/*備注:8M時(shí)交織深度為384×360,2M時(shí)交織深度為192×144。數(shù)據(jù)按行存入矩陣,按列取出
/************************************/
#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型,長(zhǎng)度為N,輸入輸出型
//輸入為L(zhǎng)DPC編碼后的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時(shí)交織深度為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時(shí)交織深度為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;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -