资源简介
用c 语言实现的LDPC和积译码过程。。采用自定义的矩阵存储形式,降低了内存需求
代码片段和文件信息
// GF(2) LDPC encoding/decoding simulator
// (c) 2005-2006 by Seishi Takamura @ Stanford University / NTT (Nippon Telegraph and Telephone)
// Absolutely no warranty.
#include
#include
#include
#include
#include
#include
//N是指信息节点的个数,M是指校验节点的个数
//rmax cmax分别指最大列权重和行权重,即为一的个数
//这是几个全局都使用的变量记住。。。。。
int n m;
int rmax cmax;
int *row_weight *col_weight;
int **row_col;
static unsigned int rndm = 2815UL;
void SRand(int n) {
rndm = n;
}
unsigned int Rand(void) // simple pseudo rand
{
return rndm = (77UL * rndm + 1243UL) & 0x7fffffffUL; // 31bit
}
//下面这两个函数,,,,不懂不懂。。。。。
double atanh2(double x)
{
return log((1.0 + x) / (1.0 - x)); // returns 2*atanh(x)返回一个指定角度参数所对应的反双曲正切值。
}
double logtanh2(double x)
{
return log(tanh(fabs(x*0.5))); // returns log tanh |x|计算双曲正切值
}
#define INT 6/*8*/ // int part
#define DECI 14/*13*/ // fraction part
#define FMUL (1< #define PREC (1.0/FMUL) // precision
#define LEVELS (1<<(INT+DECI))
static int flogtanh[LEVELS];
static int fgallag[LEVELS];
int float2fix(double x)
{
if (x >= 0) {
return (int)(x * FMUL + 0.5);
} else {
return -(int)((-x) * FMUL + 0.5);
}
}
unsigned int float2fixu(double x)
{
return (unsigned int)(x * FMUL + 0.5);
}
#define fix2float(x) ((x)*PREC)
void inittab(void)
{//我感觉这个程序是初始化
int i = 1;
double right = logtanh2(fix2float(i) - 0.5*PREC);
flogtanh[0] = -FMUL*14;
for ( ; i < LEVELS; i++) {
double d = fix2float(i);
double left = logtanh2(d+0.5*PREC);
flogtanh[i] = float2fix((4*logtanh2(d)+right+left) / 6.0);
right = left;
}
i = 1;
fgallag[0] = FMUL*14;
right = atanh2(exp(fix2float(-i) - 0.5*PREC));
for ( ; i < LEVELS; i++) {
double d = fix2float(-i);
double expd = atanh2(exp(d));
double left = atanh2(exp(d+0.5*PREC));
fgallag[i] = float2fix((4*expd+right+left) / 6.0);
right = left;
}
}
#if 1
int Flogtanh(int x)//这里是每次迭代后,判决的过程可能。。。。。。
{//如果L(Qi)<0则xi=1
//否则为0;如果xHT=0成立则译码结束否则跳到
//第1步直至满足校验等式或超过最大迭代次数
//为止。
assert(x>=0);//if (x < 0) return 0;
if (x >= LEVELS)
return 0;
return flogtanh[x];
}
#else
#define Flogtanh(x) flogtanh[x]
#endif
#if 1
int Fgallag(int x)
{
assert(x <= 0);// if (x >= 0) return -FMUL*14; //-115000
if (x <= -LEVELS)
return 0;
return fgallag[-x];
}
#else
#define Fgallag(x) fgallag[-(x)]
#endif
int HamDist(int *x int *y int len)
{
int i sum = 0;
for (i = 0; i < len; i++) {
if (*x++ != *y++) sum++;
}
return sum;
}
int bsc(int x[] int y[] double p int q0[])
{
/*初始化:对接收到的i个信息计算初始信道信息:
L(ci)=L(qij)=logP0iP1i=2yi/σ2
式中yi为接收到的混有噪声的信息σ2为噪声平
均功率。*/
//lets y[] be noisy version of x[] with crossover probability of p
//and sets the values of q0[] (see description below)
//q0[0< 属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11947 2010-03-13 19:10 GF2_LDPC.c.cpp
----------- --------- ---------- ----- ----
11947 1
- 上一篇:c/c++中文帮助文档API
- 下一篇:基于Linux 下qt改版的聊天室
相关资源
- GD32通过规则组寄存器 DMA获取多组AD
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
川公网安备 51152502000135号
评论
共有 条评论