亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gf2_ldpc.c

?? LDPC編解碼器程序
?? C
字號:
// GF(2) LDPC encoding/decoding simulator,
// (c) 2005-2006 by Seishi Takamura @ Stanford University / NTT (Nippon Telegraph and Telephone)
// Absolutely no warranty.
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

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<<DECI)       // multiplier
#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)
{
  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[])
{
  int i, num = 0, modified = 0;
  int *err = malloc(sizeof(int) * n);
  memset(err, 0, sizeof(int) * n);
  modified = n * p + 0.5;
  p = modified / (double)n; // correct error probability
  printf("m/n=%g, ", (double)m/n);
  printf("BSC channel entropy(rate) = %g (bits)\n",
         (-p*log(p)-(1-p)*log(1-p)) / log(2.0));
  while (num < modified) {
    i = Rand() % n;
    if (err[i] == 1) continue;
    err[i] = 1;
    num++;
  }
  for (i = 0; i < n; i++) {
    y[i] = x[i] ^ err[i];
  }
  free(err);

  for (i = 0; i < n; i++) {
    double d = (1 - 2 * y[i]) * log((1.0 - p) / p);
    q0[i] = float2fix(d);
  }
  return modified;
}

void enc(int y[], int s[])
{
  int i, j;
  for (j = 0; j < m; j++) {
    register int k = 0;
    for (i = 0; i < row_weight[j]; i++)
      k ^= y[row_col[j][i]];

    s[j] = k;
  }
}

int **malloc2Dint(int a, int b) // allocates array[a][b]
{
  int i;
  int **pp = malloc(sizeof(int *) * a);
  int *p = malloc(sizeof(int) * a * b);
  if (pp == NULL || p == NULL) exit(-1);
  for (i = 0; i < a; i++) {
    pp[i] = p + b*i;
  }
  return pp;
}
int ***malloc2Dintp(int a, int b) // allocates array[a][b]
{
  int i;
  int ***pp = malloc(sizeof(int **) * a);
  int **p = malloc(sizeof(int*) * a * b);
  if (pp == NULL || p == NULL) exit(-1);
  for (i = 0; i < a; i++) {
    pp[i] = p + b*i;
  }
  return pp;
}

int **qin, ***qin_row;
int **LogTanhtin, ***LogTanhtin_row;
int **Sgntin, ***Sgntin_row;
int *tmp_bit;
int *tmp_s;

int dec(int q0[], int s[], int loop_max, int x[])
{
  int i, j, k, loop;
  int iir, prev = 999999, nodecr = 0;

  memset(*qin, 0, n * cmax * sizeof(int));

  for (loop = 0; loop < loop_max; loop++) {
    for (i = 0; i < n; i++) {
      int sum = q0[i];
      for (j = 0; j < col_weight[i]; j++)
        sum += qin[i][j];
      for (j = 0; j < col_weight[i]; j++) {
        int qout = sum - qin[i][j];
        if (qout < 0) {
          *LogTanhtin_row[i][j] = Flogtanh(-qout);
          *Sgntin_row[i][j] = 1;
        } else {
          *LogTanhtin_row[i][j] = Flogtanh(qout);
          *Sgntin_row[i][j] = 0;
        }
      }
    }

    for (j = 0; j < m; j++) {
      int sgnprod = s[j];
      int logprod = 0;
      for (k = 0; k < row_weight[j]; k++) {
        logprod += LogTanhtin[j][k];
        sgnprod ^= Sgntin[j][k];
      }

      for (k = 0; k < row_weight[j]; k++) {
        int tout = Fgallag(logprod - LogTanhtin[j][k]);
        if (sgnprod != Sgntin[j][k])
          *qin_row[j][k] = -tout;
        else
          *qin_row[j][k] = tout;
      }
    }

    for (i = 0; i < n; i++) {
      int sum = q0[i];
      for (j = 0; j < col_weight[i]; j++) {
        sum += qin[i][j];
      }

      tmp_bit[i] = (sum < 0) ? 1 : 0;
    }
    printf("%2d:HamDist(x)=%d ", loop+1, HamDist(x, tmp_bit, n));

    enc(tmp_bit, tmp_s);
    i = HamDist(s, tmp_s, m);
    printf("HamDist(s,synd(x^))=%d\n", i);
    if (i == 0)           // nothing more can be done
      return 0;

    // nonconvergence detection
    if (loop == 0) iir = i;
    else iir = (int)(iir * 0.85 + i * 0.15 + 0.5);

    if (prev <= i) nodecr++;
    else nodecr = 0;
    if (i > iir * 1.1 || nodecr > 10) break; // no conversion
    prev = i;
  }

  return -1;
}

void initdec(char *s)
{
  int **row_N;
  int **col_row, **col_N;
  int i, j, *count;
  FILE *fp = fopen(s, "rt");
  if (fp == NULL) {
    fprintf(stderr, "cannot open %s\n", s);
    exit(-2);
  }
  fscanf(fp, "%d%d", &n, &m);
  fscanf(fp, "%d%d", &cmax, &rmax);
  col_weight = malloc(sizeof(int) * n);
  for (i = 0; i < n; i++) {
    fscanf(fp, "%d", &col_weight[i]);
  }
  row_weight = malloc(sizeof(int) * m);
  for (j = 0; j < m; j++)
    fscanf(fp, "%d", &row_weight[j]);

  {//skip n lines
    for (i = 0; i < n; i++) {
      for (j = 0; j < cmax; j++)
        fscanf(fp, "%*d");
    }
  }

  count = malloc(sizeof(int) * n);
  memset(count, 0, sizeof(int) * n);
  qin = malloc2Dint(n, cmax);
  qin_row = malloc2Dintp(m, rmax);
  LogTanhtin     = malloc2Dint(m, rmax);
  LogTanhtin_row = malloc2Dintp(n, cmax);
  Sgntin     = malloc2Dint(m, rmax);
  Sgntin_row = malloc2Dintp(n, cmax);
  tmp_bit = malloc(sizeof(int) * n);
  tmp_s = malloc(sizeof(int) * m);

  row_col = malloc2Dint(m, rmax);
  row_N   = malloc2Dint(m, rmax);
  col_row = malloc2Dint(n, cmax);
  col_N   = malloc2Dint(n, cmax);
  for (j = 0; j < m; j++) {
    for (i = 0; i < row_weight[j]; i++) {
      int v;
      fscanf(fp, "%d", &v);
      v--;
      row_col[j][i] = v;	// col address
      row_N[j][i] = count[v];	// vertical count of non-zero coef
      col_row[v][count[v]] = j;	// row address
      col_N[v][count[v]] = i;	// horizontal count of non-zero coef
      count[v]++;
      qin_row[j][i] = &qin[row_col[j][i]][row_N[j][i]];
    }
    // following block added on 02/05/2008 according to Mr. David Elkouss' comment
    for ( ; i < rmax; i++) {
      fscanf(fp, "%*d"); // skip the 0s (fillers)
    }
  }
  fclose(fp);

  for (i = 0; i < n; i++) {
    for (j = 0; j < col_weight[i]; j++) {
      LogTanhtin_row[i][j] = &LogTanhtin[col_row[i][j]][col_N[i][j]];
      Sgntin_row[i][j] =     &Sgntin    [col_row[i][j]][col_N[i][j]];
    }
  }

  free(count);
  free(*row_N);
  free( row_N);
  free(*col_row);
  free( col_row);
  free(*col_N);
  free( col_N);
}

int main(int argc, char **argv)
{
  int i, *s, *x, *y, *q0;
  int iteration = 1000;

  if (argc == 5 && strcmp(argv[1], "-iter") == 0) {
    iteration = atoi(argv[2]);
    argc -= 2;
    argv += 2;
  }
  if (argc != 3) {
    fprintf(stderr, "GF2_LDPC - binary LDPC simulator\n");
    fprintf(stderr, "usage: GF2_LDPC [-iter num] BSC_crossover_prob ParityMatrix(alist format)\n");
    fprintf(stderr, "e.g.: GF2_LDPC 0.082 20000.10000.3.631.alist\n");
    fprintf(stderr, "e.g.: GF2_LDPC 0.085 4986.93xb.329.alist\n");
    return -1;
  }
  inittab();

  initdec(argv[2]);
  q0= malloc(sizeof(int) * n);
  s = malloc(sizeof(int) * m);  // syndrome
  x = malloc(sizeof(int) * n);  // source
  y = malloc(sizeof(int) * n);  // side information
  for (i = 0; i < n; i++) {
    x[i] = Rand() & 1;
  }
  enc(x, s);

  for (i = 1; i <= 3; i++) {
    printf("\nBinary LDPC experiment %d:\n", i);
    SRand(i);
    bsc(x, y, atof(argv[1]), q0);
    printf("HamDist(x,y)=%3d \n", HamDist(x,y,n));
    puts(
      dec(q0, s, iteration, x) ? // sum-product decode (3rd arg: max iteration)
      "failed." : "converged."
      );
  }

  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区在线播放 | 欧美一区二区免费视频| 91麻豆精品久久久久蜜臀| 国产丝袜在线精品| 日韩精品乱码免费| av中文字幕一区| 久久女同精品一区二区| 亚洲第一福利视频在线| 成人小视频免费观看| 日韩三级在线观看| 午夜国产精品一区| 欧美亚洲综合色| 亚洲黄色尤物视频| 不卡的av中国片| 欧美激情一二三区| 激情久久五月天| 欧美一级淫片007| 天堂资源在线中文精品| 色妞www精品视频| 国产精品女同互慰在线看| 国产美女在线观看一区| 日韩精品自拍偷拍| 日韩中文字幕亚洲一区二区va在线 | 国产精品白丝jk白祙喷水网站| 91精品国产91久久久久久最新毛片| 亚洲一区在线视频| 在线观看av一区| 一区二区国产视频| 色婷婷精品久久二区二区蜜臂av | 日日摸夜夜添夜夜添精品视频 | 不卡一二三区首页| 中文字幕av资源一区| 成人免费福利片| 欧美激情在线一区二区| 成人黄色在线看| 亚洲视频狠狠干| 在线视频一区二区三区| 亚洲自拍与偷拍| 欧美另类videos死尸| 日本中文字幕一区二区有限公司| 欧美一区二区三区白人| 男人操女人的视频在线观看欧美| 欧美一级片免费看| 国产剧情一区二区| 亚洲欧美怡红院| 色婷婷一区二区三区四区| 亚洲成人自拍偷拍| 日韩一本二本av| 国产精品18久久久久久久久| 国产日韩欧美一区二区三区综合| 成人网在线播放| 亚洲一区免费在线观看| 日韩一区二区免费在线电影| 激情另类小说区图片区视频区| 中文幕一区二区三区久久蜜桃| 91美女片黄在线观看91美女| 日韩国产欧美三级| 久久久av毛片精品| 91福利国产成人精品照片| 日韩av一区二区在线影视| 国产亚洲自拍一区| 在线观看日产精品| 激情小说亚洲一区| 亚洲欧美日韩国产成人精品影院| 337p亚洲精品色噜噜| 丁香亚洲综合激情啪啪综合| 欧美国产日韩a欧美在线观看| 欧美私人免费视频| 国产精品99久久久久久久vr| 亚洲免费视频成人| 久久亚洲私人国产精品va媚药| 91在线播放网址| 久久精品国产99久久6| 国产精品乱人伦| 日韩一级二级三级精品视频| 99精品1区2区| 激情国产一区二区| 午夜精品久久久久久不卡8050| ww久久中文字幕| 在线免费不卡电影| 国产剧情一区在线| 免费高清不卡av| 亚洲男人天堂av| 久久久久久免费毛片精品| 欧美日韩高清一区二区三区| 99精品在线观看视频| 激情深爱一区二区| 日韩激情视频在线观看| 亚洲欧美激情一区二区| 亚洲国产精品黑人久久久| 久久久久久久久岛国免费| 国产成人自拍网| 视频一区国产视频| 亚洲欧美一区二区视频| 久久综合久久综合亚洲| 69久久夜色精品国产69蝌蚪网| 96av麻豆蜜桃一区二区| 国产久卡久卡久卡久卡视频精品| 日韩国产欧美三级| 樱桃视频在线观看一区| 国产精品免费久久久久| 精品88久久久久88久久久| 欧美精品一二三| 欧美精品丝袜中出| 欧美网站一区二区| 欧美性猛交一区二区三区精品| av影院午夜一区| 成人高清视频在线| 国产v日产∨综合v精品视频| 激情六月婷婷久久| 国内精品视频666| 精品一区二区三区免费毛片爱| 蜜臀av在线播放一区二区三区| 懂色av一区二区三区免费观看| 亚洲国产综合色| 亚洲精品亚洲人成人网在线播放| 日本一区二区三区久久久久久久久不 | 日韩免费高清av| 欧美一区二区三区色| 欧美人妖巨大在线| 91麻豆精品国产91久久久久久久久| 在线观看视频欧美| 欧美日韩精品系列| 欧美日韩国产天堂| 欧美一区二区三区日韩视频| 日韩视频免费观看高清完整版 | 欧美激情一区二区三区在线| 国产成人自拍网| 久久精品夜色噜噜亚洲aⅴ| 日韩一二三区视频| 日韩免费视频线观看| 精品国产91久久久久久久妲己 | 国产精品久久久久久妇女6080 | 亚洲国产精品国自产拍av| 欧美激情资源网| 一区二区三区四区视频精品免费| 一区二区三国产精华液| 日韩制服丝袜av| 国产一区二区三区免费播放| 从欧美一区二区三区| 日本高清成人免费播放| 日韩一二在线观看| 国产精品久久午夜夜伦鲁鲁| 亚洲午夜av在线| 久久99精品久久久久久久久久久久| 国产精品小仙女| 欧美色综合网站| 日韩精品中文字幕在线不卡尤物 | 亚洲超碰精品一区二区| 韩国精品一区二区| 色国产综合视频| 久久奇米777| 一区二区三区精密机械公司| 日韩高清在线电影| 国产99久久久精品| 在线观看av一区| 国产午夜精品久久| 亚洲123区在线观看| 粉嫩蜜臀av国产精品网站| 欧美久久久久久蜜桃| 国产清纯在线一区二区www| 亚洲自拍另类综合| 国产成人亚洲综合色影视| 欧美日韩一卡二卡| 欧美国产激情一区二区三区蜜月| 五月婷婷色综合| 欧美日韩高清一区二区| 久久av老司机精品网站导航| 处破女av一区二区| 在线综合视频播放| 亚洲精品国产a| 国产精品一区二区不卡| 欧美日韩大陆在线| 综合电影一区二区三区 | 国产在线视频精品一区| 欧美中文字幕不卡| 1区2区3区欧美| 国产一区二区三区精品视频| 欧美一区二区三区在线看| 亚洲最新在线观看| 99久久99久久免费精品蜜臀| 久久精品一区二区三区不卡| 免费xxxx性欧美18vr| 欧美在线一二三| 亚洲精品日韩专区silk| av一区二区三区四区| 久久久久久9999| 青青草精品视频| 在线观看成人小视频| 日韩毛片精品高清免费| 成人爽a毛片一区二区免费| 久久免费午夜影院| 精品一区二区三区在线观看 | 一本一道综合狠狠老| 国产精品久久久一本精品 | 91美女在线看| 亚洲人成网站色在线观看| 99国产精品久| 亚洲人xxxx| 欧美日韩中文一区|