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

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

?? dec.c

?? I have aatched C code for Dec.
?? C
字號:
/* DEC.C - Decoding procedures. */



/* NOTE:  See decoding.html for general documentation on the decoding methods */



#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "alloc.h"
#include "mod2sparse.h"
#include "mod2dense.h"
#include "mod2convert.h"
#include "rand.h"
#include "rcode.h"
#include "check.h"
#include "dec.h"
#include "enc.h"


/* GLOBAL VARIABLES.  Declared in dec.h. */

decoding_method dec_method;	/* Decoding method to use */

int table;	/* Trace option, 2 for a table of decoding details */
int block_no;	/* Number of current block, from zero */

int max_iter;	/* Maximum number of iteratons of decoding to do */
char *gen_file;	/* Generator file for Enum_block and Enum_bit */


/* DECODE BY EXHAUSTIVE ENUMERATION.  Decodes by trying all possible source
   messages (and hence all possible codewords, unless the parity check matrix
   was redundant).  If the last argument is 1, it sets dblk to the most likely
   entire block; if this argument is 0, each bit of dblk is set to the most
   likely value for that bit.  The marginal probabilities of each bit being 1
   are returned in bitpr.

   The function value returned is the total number of codewords tried (which 
   will be the same for all blocks).  The return valued is "unsigned" because
   it might conceivably be as big as 2^31.

   The parity check matrix and other data are taken from the global variables
   declared in rcode.h.

   The number of message bits should not be greater than 31 for this procedure.
   The setup procedure immediately below checks this, reads the generator file,
   and outputs headers for the detailed trace file, if required.
 */

void enum_decode_setup(void)
{
  read_gen(gen_file,0,0);

  if (N-M>31)
  { fprintf(stderr,
"Trying to decode messages with %d bits by exhaustive enumeration is absurd!\n",
      N-M);
    exit(1);  
  }

  if (table==2)
  { printf("  block   decoding  likelihood\n");
  }
}

unsigned enum_decode
( double *lratio,	/* Likelihood ratios for bits */
  char *dblk, 		/* Place to stored decoded message */
  double *bitpr,	/* Place to store marginal bit probabilities */
  int max_block		/* Maximize probability of whole block being correct? */
)
{
  mod2dense *u, *v;
  double lk, maxlk, tpr;
  double *bpr, *lk0, *lk1;
  char sblk[31];
  char *cblk;
  unsigned d;
  int i, j;

  if (N-M>31) abort();

  /* Allocate needed space. */

  bpr = bitpr;
  if (bpr==0 && max_block==0)
  { bpr = chk_alloc (N, sizeof *bpr);
  }

  cblk = chk_alloc (N, sizeof *cblk);

  if (type=='d')
  { u = mod2dense_allocate(N-M,1);
    v = mod2dense_allocate(M,1);
  }

  if (type=='m')
  { u = mod2dense_allocate(M,1);
    v = mod2dense_allocate(M,1);
  }

  lk0 = chk_alloc (N, sizeof *lk0);
  lk1 = chk_alloc (N, sizeof *lk1);

  /* Pre-compute likelihoods for bits. */

  for (j = 0; j<N; j++)
  { lk0[j] = 1/(1+lratio[j]);
    lk1[j] = 1 - lk0[j];
  }

  /* Initialize marginal bit probabilities. */

  if (bpr)
  { for (j = 0; j<N; j++) bpr[j] = 0.0;
  }

  /* Exhaustively try all possible decoded messages. */

  tpr = 0.0;

  for (d = 0; d<=(1<<(N-M))-1; d++)
  {
    /* Unpack message into source block. */

    for (i = N-M-1; i>=0; i--)
    { sblk[i] = (d>>i)&1;
    }

    /* Find full codeword for this message. */

    switch (type)
    { case 's':
      { sparse_encode (sblk, cblk);
        break;
      }
      case 'd':
      { dense_encode (sblk, cblk, u, v);
        break;
      }
      case 'm':
      { mixed_encode (sblk, cblk, u, v);
        break;
      }
    }

    /* Compute likelihood for this decoding. */

    lk = 1;
    for (j = 0; j<N; j++)
    { lk *= cblk[j]==0 ? lk0[j] : lk1[j];
    }

    /* Update maximum likelihood decoding. */

    if (max_block)
    { if (d==0 || lk>maxlk)
      { for (j = 0; j<N; j++)
        { dblk[j] = cblk[j];
        }
        maxlk = lk;
      }
    }

    /* Update bit probabilities. */
 
    if (bpr)
    { for (j = 0; j<N; j++) 
      { if (cblk[j]==1) 
        { bpr[j] += lk;
        }
      }
      tpr += lk;
    }

    /* Output data to trace file. */

    if (table==2)
    { printf("%7d %10x  %10.4e\n",block_no,d,lk);
    }
  }

  /* Normalize bit probabilities. */

  if (bpr)
  { for (j = 0; j<N; j++) bpr[j] /= tpr;
  }

  /* Decoding to maximize bit-by-bit success, if that's what's wanted. 
     In case of a tie, decode to a 1. */

  if (!max_block)
  { for (j = 0; j<N; j++) 
    { dblk[j] = bpr[j]>=0.5;
    }
  }

  /* Free space. */

  if (bpr!=0 && bpr!=bitpr) free(bpr);
  free(cblk);
  free(lk0);
  free(lk1);

  return 1<<(N-M);
}


/* DECODE USING PROBABILITY PROPAGATION.  Tries to find the most probable 
   values for the bits of the codeword, given a parity check matrix (H), and
   likelihood ratios (lratio) for each bit.  If max_iter is positive, up to 
   that many iterations of probability propagation are done, stopping before 
   then if the tentative decoding is a valid codeword.  If max_iter is 
   negative, abs(max_iter) iterations are done, regardless of whether a 
   codeword was found earlier.

   Returns the number of iterations done (as an "unsigned" for consistency
   with enum_decode).  Regardless of whether or not a valid codeword was 
   reached, the bit vector from thresholding the bit-by-bit probabilities is 
   stored in dblk, and the resulting parity checks are stored in pchk (all 
   will be zero if the codeword is valid).  The final probabilities for each 
   bit being a 1 are stored in bprb.

   The setup procedure immediately below outputs headers for the detailed trace
   file, if required.
*/

void prprp_decode_setup (void)
{
  if (table==2)
  { printf(
     "  block  iter  changed  perrs    loglik   Eperrs   Eloglik  entropy\n");
  }
}

unsigned prprp_decode
( mod2sparse *H,	/* Parity check matrix */
  double *lratio,	/* Likelihood ratios for bits */
  char *dblk,		/* Place to store decoding */
  char *pchk,		/* Place to store parity checks */
  double *bprb		/* Place to store bit probabilities */
)
{ 
  int N, n, c;

  N = mod2sparse_cols(H);

  /* Initialize probability and likelihood ratios, and find initial guess. */

  initprp(H,lratio,dblk,bprb);

  /* Do up to abs(max_iter) iterations of probability propagation, stopping
     early if a codeword is found, unless max_iter is negative. */

  for (n = 0; ; n++)
  { 
    c = check(H,dblk,pchk);

    if (table==2)
    { printf("%7d %5d %8.1f %6d %+9.2f %8.1f %+9.2f  %7.1f\n",
       block_no, n, changed(lratio,dblk,N), c, loglikelihood(lratio,dblk,N), 
       expected_parity_errors(H,bprb), expected_loglikelihood(lratio,bprb,N),
       entropy(bprb,N));
    }
   
    if (n==max_iter || n==-max_iter || (max_iter>0 && c==0))
    { break; 
    }

    iterprp(H,lratio,dblk,bprb);
  }

  return n;
}


/* INITIALIZE PROBABILITY PROPAGATION.  Stores initial ratios, probabilities,
   and guess at decoding. */

void initprp
( mod2sparse *H,	/* Parity check matrix */
  double *lratio,	/* Likelihood ratios for bits */
  char *dblk,		/* Place to store decoding */
  double *bprb		/* Place to store bit probabilities, 0 if not wanted */
)
{ 
  mod2entry *e;
  int N;
  int j;

  N = mod2sparse_cols(H);

  for (j = 0; j<N; j++)
  { for (e = mod2sparse_first_in_col(H,j);
         !mod2sparse_at_end(e);
         e = mod2sparse_next_in_col(e))
    { e->pr = lratio[j];
      e->lr = 1;
    }
    if (bprb) bprb[j] = 1 - 1/(1+lratio[j]);
    dblk[j] = lratio[j]>=1;
  }
}


/* DO ONE ITERATION OF PROBABILITY PROPAGATION. */

void iterprp
( mod2sparse *H,	/* Parity check matrix */
  double *lratio,	/* Likelihood ratios for bits */
  char *dblk,		/* Place to store decoding */
  double *bprb		/* Place to store bit probabilities, 0 if not wanted */
)
{
  double pr, dl, t;
  mod2entry *e;
  int N, M;
  int i, j;

  M = mod2sparse_rows(H);
  N = mod2sparse_cols(H);

  /* Recompute likelihood ratios. */

  for (i = 0; i<M; i++)
  { dl = 1;
    for (e = mod2sparse_first_in_row(H,i);
         !mod2sparse_at_end(e);
         e = mod2sparse_next_in_row(e))
    { e->lr = dl;
      dl *= 2/(1+e->pr) - 1;
    }
    dl = 1;
    for (e = mod2sparse_last_in_row(H,i);
         !mod2sparse_at_end(e);
         e = mod2sparse_prev_in_row(e))
    { t = e->lr * dl;
      e->lr = (1-t)/(1+t);
      dl *= 2/(1+e->pr) - 1;
    }
  }

  /* Recompute probability ratios.  Also find the next guess based on the
     individually most likely values. */

  for (j = 0; j<N; j++)
  { pr = lratio[j];
    for (e = mod2sparse_first_in_col(H,j);
         !mod2sparse_at_end(e);
         e = mod2sparse_next_in_col(e))
    { e->pr = pr;
      pr *= e->lr;
    }
    if (isnan(pr))
    { pr = 1;
    }
    if (bprb) bprb[j] = 1 - 1/(1+pr);
    dblk[j] = pr>=1;
    pr = 1;
    for (e = mod2sparse_last_in_col(H,j);
         !mod2sparse_at_end(e);
         e = mod2sparse_prev_in_col(e))
    { e->pr *= pr;
      if (isnan(e->pr)) 
      { e->pr = 1;
      }
      pr *= e->lr;
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区在线| 亚洲精品免费看| 欧美a一区二区| 日韩一区二区电影在线| 麻豆成人久久精品二区三区红| 久久综合九色综合97_久久久| 国产另类ts人妖一区二区| 国产色婷婷亚洲99精品小说| 99精品视频在线播放观看| 一二三四区精品视频| 日韩欧美一级精品久久| caoporen国产精品视频| 亚洲精品国产精品乱码不99| 国产精品不卡一区| 欧美日韩国产免费一区二区| 国产精品一区三区| 成人激情免费电影网址| 日本成人在线网站| 一区二区三区在线播| 亚洲高清免费观看高清完整版在线观看| 日韩你懂的在线播放| 久久久久久久久久久久电影| 欧美精品日韩综合在线| 99热这里都是精品| 欧美视频一区二区三区| av成人老司机| 欧美日韩免费一区二区三区| 日韩一二三区不卡| 国产亚洲成aⅴ人片在线观看| 中文字幕一区二区三| 久久综合色之久久综合| 国产精品久久久久影视| 亚洲午夜私人影院| 国产一区二区不卡在线| 日本aⅴ免费视频一区二区三区 | av在线不卡免费看| 欧美三级资源在线| 精品国免费一区二区三区| 欧美色视频在线| 久久综合九色综合欧美就去吻| 亚洲少妇屁股交4| 国产精品进线69影院| 日韩中文字幕91| 偷拍一区二区三区| 天天色 色综合| 成人激情开心网| 欧美zozozo| 26uuu色噜噜精品一区| 亚洲人精品一区| 亚洲综合色在线| 亚洲一区av在线| 国产福利一区二区三区视频在线 | 中文一区一区三区高中清不卡| 日韩免费视频线观看| 亚洲视频一区在线| 久久精品国产精品青草| 美腿丝袜一区二区三区| 91福利小视频| 欧美电影影音先锋| 亚洲人成人一区二区在线观看 | 色哟哟一区二区| 91亚洲男人天堂| 欧美日韩国产小视频| 亚洲色图欧美激情| 国产v综合v亚洲欧| 色婷婷综合久久久久中文| 国产精品色婷婷| 亚洲国产精品麻豆| 色av成人天堂桃色av| 中文字幕av一区二区三区| 国产麻豆精品视频| 久久综合色婷婷| 精品在线观看视频| 91美女精品福利| 亚洲日本va午夜在线影院| 成人深夜在线观看| 777色狠狠一区二区三区| 26uuu国产一区二区三区| 蜜桃av噜噜一区| 日韩女同互慰一区二区| 狠狠色丁香久久婷婷综合_中| 9l国产精品久久久久麻豆| 国产精品无码永久免费888| 国产ts人妖一区二区| 国产精品国产三级国产普通话蜜臀| 国产盗摄一区二区三区| 国产精品久久夜| 色综合久久久久综合99| 亚洲国产人成综合网站| 欧美卡1卡2卡| 久久99国内精品| 久久久91精品国产一区二区三区| 国产乱人伦精品一区二区在线观看 | 99久久免费视频.com| 亚洲欧美综合在线精品| 色94色欧美sute亚洲线路二| 亚洲午夜一区二区| 欧美一区二区三区影视| 国产精品久久毛片av大全日韩| 91在线观看美女| 婷婷国产在线综合| 久久久亚洲高清| 一本久久a久久免费精品不卡| 亚洲高清免费观看 | 国产精品99久久久久久久vr | 日韩综合小视频| 久久久亚洲高清| 欧美亚洲综合久久| 久久99国产精品麻豆| 成人欧美一区二区三区1314| 欧美日韩成人一区二区| 国产精品66部| 亚洲成人资源在线| 欧美日韩午夜影院| 国产综合一区二区| 一个色综合网站| 久久综合成人精品亚洲另类欧美 | 国内偷窥港台综合视频在线播放| 国产精品萝li| 日韩一级大片在线| 91欧美一区二区| 国产一区二区三区免费看| 亚洲精品欧美专区| 国产香蕉久久精品综合网| 欧美丰满美乳xxx高潮www| www.欧美.com| 黄色资源网久久资源365| 一区二区激情视频| 国产精品盗摄一区二区三区| 日韩一级大片在线| 欧美影视一区二区三区| 成人免费视频视频在线观看免费| 视频一区二区三区在线| 亚洲精品一卡二卡| 国产精品视频一二三| 精品国产精品一区二区夜夜嗨| 欧美午夜寂寞影院| 色拍拍在线精品视频8848| 成人永久免费视频| 国产乱色国产精品免费视频| 久久国产精品免费| 蜜桃视频一区二区三区在线观看| 亚洲国产一区二区三区| 亚洲激情欧美激情| 成人免费小视频| 国产精品久久久一本精品| 国产三级欧美三级| a级高清视频欧美日韩| 国产一区二区精品久久99| 精品一区二区在线看| 日本aⅴ免费视频一区二区三区 | 精品99久久久久久| 欧美一级在线免费| 欧美一级在线观看| 精品免费视频一区二区| 欧美videos大乳护士334| 日韩一级成人av| 91精品国产综合久久小美女| 欧美精品久久久久久久久老牛影院| 在线观看免费亚洲| 精品一区二区av| 国产美女在线精品| 成人sese在线| 一本高清dvd不卡在线观看| 欧美影院午夜播放| 制服丝袜日韩国产| 精品美女一区二区| 日本一区二区视频在线观看| 中文字幕第一区第二区| 亚洲欧美日韩在线不卡| 亚洲sss视频在线视频| 日韩电影免费在线看| 国产一区二区三区香蕉| 北条麻妃一区二区三区| 欧美日韩一级二级| 精品国产三级电影在线观看| 国产日韩视频一区二区三区| 一区二区在线观看视频在线观看| 五月天视频一区| 高清不卡在线观看av| 在线免费亚洲电影| 精品裸体舞一区二区三区| 国产精品视频一二| 日韩精品乱码免费| 国产成人免费视频网站 | 欧美三级中文字| 日韩欧美国产综合一区| 国产精品国模大尺度视频| 亚洲一二三四区| 国产久卡久卡久卡久卡视频精品| 色综合久久中文综合久久牛| 5858s免费视频成人| 国产精品人成在线观看免费 | 国产69精品久久久久777| 91九色最新地址| 精品成人佐山爱一区二区| 亚洲精品国产第一综合99久久| 久久精品国产亚洲高清剧情介绍| 99久久er热在这里只有精品15| 日韩视频在线你懂得|