资源简介
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
- 上一篇:多边形边缘填充算法实现
- 下一篇:使用VS2008MFC读取Excel里的数据
相关资源
- 使用VS2008MFC读取Excel里的数据
- 多边形边缘填充算法实现
- Cantor集算法实现
- 双三次B样条曲面算法
- 矩阵求逆c程序
- C语言模拟文件系统
- linux ext2 文件系统模拟 c语言实现
- 抛物线法—二次插值法C++编程
- 语音信号端点检测(VC++6.0)
- 利用MFC ODBC操作Access数据库实现显示、
- 猫抓老鼠 C++源程序代码
- 数据结构习题集与答案(C语言版严蔚
- 64位libstdc++.so.6.0.10
- waterProcess.zip
- QT C++检测计算机软硬件信息
- c++语言程序设计教程习题解答与实验
- compat-libstdc++-33-3.2.3-47.3.i386.rpm Centos
- vc++6.0 基于mfc音乐播放器
- 用c++编写的某公司工资管理系统
- C语言解码JPG图片源代码
- 防火墙源码用C++编写
- c++学籍管理系统代码
- 利用VC++编写的直线圆弧插补的实现
- 利用αβ剪枝和king-queen-move估值实现的
- WebPage.h和WebPage.cpp
- Bresenham直线算法的C++实现
- 日历记事本C++语言面向对象思想
- 使用光电传感器的测速小车C语言程序
- C++ Primer Plus(第6版).pdf 中文版高清
- C++编写简单计算器
评论
共有 条评论