• 大小: 11KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: C/C++
  • 标签: Turbo  编译码  C  C++  

资源简介

Turbo编译码程序c、c++,包含编码、译码两个.cpp,可以在VS中Linux下加入工程中使用,也可以加在Matlab中使用

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “mex.h“

#define COLUMN_OF_G 4 /* 生成阵列数 */
#define N_ITERATION 8 /* 译码叠代次数 */
/* 定义数据结构 */

/* 生成阵结构 */
typedef struct
{
int N_num_row; /* 生成阵行数 */
int K_num_col; /* 生成阵列数 */
int *g_matrix; /* 生成阵首址 */
} TURBO_G;

/* Trellis结构 */
/*
mx_nextout(mx_lastout)为后(前)向输出数组首址:
行数:状态数 列数:4
每行第一列和第三列为后(前)向的输入(1或-1)第二列和第四列为与之对应的输出(1或-1).

mx_nextstat(mx_laststat)为后(前)向状态数组首址:
行数:状态数 列数:2
各列表示输入为1(0)时对应的后(前)向状态.
*/
typedef struct
{
int *mx_nextout; /* 后向输出矩阵 */
int *mx_nextstat; /* 后向状态矩阵 */
int *mx_lastout; /* 前向输出矩阵 */
int *mx_laststat; /* 前向状态矩阵 */

} TURBO_TRELLIS;



#define TERMINATED          1               /* 0不结尾;1结尾 */
#define G_ROW_1 13                  /* 反馈抽头 */  
#define G_ROW_2 15 /* 输出抽头 */
/* 无穷大 */
#ifndef INFTY
#define INFTY 1E10
#endif

int M_num_reg = COLUMN_OF_G-1; /* 寄存器数 */
int n_states = 8; /* 状态数:2的M_num_reg次幂 */
TURBO_G turbo_g; /* 生成阵 */
TURBO_TRELLIS turbo_trellis; /* Tellis结构 */

/* Log-MAP算法用到的查找表 */
const double lookup_index_Log_MAP[16] = {0.0 0.08824 0.19587 0.31026 0.43275 0.56508
0.70963 0.86972 1.0502 1.2587 1.5078 1.8212
2.2522 2.9706 3.6764 4.3758};
const double lookup_table_Log_MAP[16] = {0.69315 0.65 0.6 0.55 0.5 0.45 0.4 0.35
0.3 0.25 0.2 0.15 0.1 0.05 0.025 0.0125};

/*---------------------------------------------------------------
函数:
void int2bin(int intstat int *tempstat int length)
介绍:
十进制数转为二进制序列.
参数:
输入参数:
intstat - 十进制数.
length - 要得到的二进制序列长度.
输出参数:
bin_stat - 二进制序列首址.
返回值:

---------------------------------------------------------------*/
void int2bin(int intstat int *bin_stat int length)
{
int i temp;

temp = intstat;

/* 除以2求余数 */
for (i=length-1; i>=0; i--)
{
*(bin_stat+i) = temp%2;
temp = temp/2;
}
}

/*---------------------------------------------------------------
函数:
int bin2int(int *binseq int length)
介绍:
二进制序列转为十进制数.
参数:
输入参数:
binseq - 二进制序列首址.
length - 二进制序列长度.
输出参数:

返回值:
得到的十进制数.
---------------------------------------------------------------*/
int bin2int(int *binseq int length)
{
int i j temp;
int sum = 0;

for (i=0; i {
temp = 1;

/* 计算该位权值 */
for (j=1; j<=i; j++)
{
temp = temp * 2;
}
sum = sum + temp * (*(binseq+length-1-i));
}

return sum;
}

/*---------------------------------------------------------------
函数:
int encode_bit(int inbit int *stat)
介绍:
比特编码器.
参数:
输入参数:
inbit -输入比特.
stat - 当前寄存器状态首址.
输出参数:
stat - 编码后寄存器状态首址.
返回值:
输出比特.
---------------------------------------------------------------*/
int encode_bit(int inbit int *stat)
{
int j; /* 循环变量 */
int

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       28067  2014-03-05 20:39  TurboDeCoding.cpp
     文件       19274  2014-03-05 20:39  TurboEnCoding.cpp

评论

共有 条评论