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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rx_ldpc_dec.cpp

?? 模擬cmmb系統(tǒng)中l(wèi)dpc譯碼的部分
?? CPP
字號:

/************************************/
/*函數(shù)說明:
/*功能:LDPC編碼
/*輸出參數(shù):
/*rx_ldpcdecoded_bit:經(jīng)過LDPC解碼后的bit流
/*輸入?yún)?shù):
/*rx_ldpc_llr:bit解交織后的初始化似然比;
/*rx_bitdeinterved_bit_len:經(jīng)過bit解交織后的初始化似然比的長度;
/*ldpc_rate:LDPC碼率;
/*備注:采用bp算法
/************************************/

/*檢驗譯碼是否正確,c為0則正確*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "rx_ldpc_dec.h"
#include "alloc.h"
#include "mod2sparse.h"

int check
( mod2sparse *H,	/* Parity check matrix */
  char *dblk,		/* Guess for codeword */
  char *pchk		/* Place to store parity checks */
)
{
	int m, i, c;
	m = mod2sparse_rows(H);  
	mod2sparse_mulvec (H, dblk, pchk);		/*    pchk=H x dblk   */
	c = 0;
	for (i = 0; i<m; i++) 
	{ 
		c += pchk[i];
	}
	return c;
}



char *initprp
( mod2sparse *H,	/* Parity check matrix */
  double *lratio,	/* Likelihood ratios for bits */
  char *dblk		/* Place to store decoding */
)
{ 
	mod2entry *e;
	int n;
	int j;

	n = mod2sparse_cols(H);

	for (j = 0; j<n; j++)
	{ 
		for (e = mod2sparse_first_in_col(H,j);   /* Returns the first entry in column j of H */
			!mod2sparse_at_end(e);   			 /* Returns 1 if e is a special entry obtained 
                                						by moving past the end, returns 0 otherwise */
			e = mod2sparse_next_in_col(e))
		{
			e->pr = lratio[j];                                    /*probabilities*/
			e->lr = 0;							/*Likelihood ratios*/
		}
    dblk[j] = lratio[j]<0;
	}
	return dblk;
}

  
char *iterprp
( mod2sparse *H,
  double *lratio,	
  char *dblk
)
{
  double pr, temp;
  double min[2];  
  mod2entry *e;
  int N, M;
  int i, j,neg_num;
  double alpha=0.8;

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

  for (i = 0; i<M; i++)
  {
		neg_num=0;
		e = mod2sparse_first_in_row(H,i);
		if(e->pr<0){
    		neg_num++;	
    	}
    min[0]=fabs(e->pr);
    e = mod2sparse_next_in_row(e);
		if(e->pr<0){
    		neg_num++;	
    	}
    min[1]=fabs(e->pr);
    if(min[0]<min[1])   //最小值存在min[1],次小值存在min[0]
    	{
    		temp=min[0];
    		min[0]=min[1];
    		min[1]=temp;
    	}
    for (e = mod2sparse_next_in_row(e);
         !mod2sparse_at_end(e);
         e = mod2sparse_next_in_row(e))
    { 
    	if(e->pr<0){
    		neg_num++;	
    	}	
    	if(fabs(e->pr)<min[0]){
    			min[0]=fabs(e->pr);
    			if(min[0]<min[1])   //最小值存在min[1],次小值存在min[0]
    				{
    					temp=min[0];
    					min[0]=min[1];
    					min[1]=temp;
    					}
    		
    		}
    	
    }
    for (e = mod2sparse_last_in_row(H,i);
         !mod2sparse_at_end(e);
         e = mod2sparse_prev_in_row(e))
    { 
    	if(neg_num%2==0){
    		if(e->pr>=0){
    			if(e->pr!=min[1])
    				e->lr=min[1]*alpha;
    			else
    				e->lr=min[0]*alpha;
    			}
    		else{
    			if(fabs(e->pr)!=min[1])
    				e->lr=-min[1]*alpha;
    			else
    				e->lr=-min[0]*alpha;
    			}
    	}
    	else{
    		if(e->pr>=0){
    			if(e->pr!=min[1])
    				e->lr=-min[1]*alpha;
    			else
    				e->lr=-min[0]*alpha;
    			}
    		else{
    			if(fabs(e->pr)!=min[1])
    				e->lr=min[1]*alpha;
    			else
    				e->lr=min[0]*alpha;
    			}
    	}
    				
    }
  }

  /* 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))
    { 
      pr += e->lr;
    }
    dblk[j] = pr<0;    
    for (e = mod2sparse_last_in_col(H,j);
         !mod2sparse_at_end(e);
         e = mod2sparse_prev_in_col(e))
    { 
		e->pr = pr-e->lr;
    }
  }
  return dblk;  
}   


/*char *iterprp
( mod2sparse *H,	
  double *lratio,	
  char *dblk	
)
{
	double pr, dl, t;
	mod2entry *e;
	int n, m;
	int i, j;

	m = mod2sparse_rows(H);
	n = mod2sparse_cols(H);

	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;
		}

	    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;
			pr *= e->lr;
		}
	} 
	return dblk;  
}  */ 


/*sr3里存似然比,sr2里存碼字, irs1里存行坐標,jc里存列坐標, dblk里返回譯碼結(jié)果*/
void dec( mod2sparse *H,double *lratio,char* dblk,int M)								
{ 
	char *pchk;
	int c,n;  
	int max_iter = 100; 
	int Num_OUT,Suc_OUT;   
	pchk = (char *)calloc(M,sizeof(char));/*檢查譯碼是否退出時存儲*/

	/*------------decode---------------*/    
	
	initprp(H,lratio,dblk);          /*初始化*/ 
	
	for (n = 0; ; n++)
	{	 
		c = check(H,dblk,pchk);		   
		if (n<max_iter && c==0)
		{		 		 	 			  		 	
			Suc_OUT=1;		   	 		
			Num_OUT=n+1;
			printf("%d,sucess\n",n);
			break; 				   	 		
		}
		   	 
		if (n==max_iter )
		{				   	 
	  		Suc_OUT=0;	  	  	
	   		Num_OUT=n;	   		 	
	   		break; 			   		 	
		}
		
		iterprp(H,lratio,dblk);/*譯碼*/	
	}
		  		
//	printf("success = %d,inum = %d\n",Suc_OUT,Num_OUT);/*輸出譯碼信息,這個地方可能要改進*/

/* free the memory */	
	
	free(pchk);
	return;
}


void rx_ldpc_dec(double * rx_ldpc_llr, double ldpc_rate, char * rx_ldpcdecoded_bit) 
{	
	int i,j,k,M,K,iii;
	
	int *jcs1,*irs1;     //注意溢出,要動態(tài)分布

	char dblk[LDPC_CHECK_MATRIX_N];
	
	char temp[LDPC_CHECK_MATRIX_N];
	
	int order[LDPC_CHECK_MATRIX_N];
  
	mod2sparse *H;
	
	FILE *fp;			     
 	
	K = (int)(LDPC_CHECK_MATRIX_N*ldpc_rate);
	M = LDPC_CHECK_MATRIX_N-K;
	H = mod2sparse_allocate(M,LDPC_CHECK_MATRIX_N);    
	k=0;
	
	irs1 = (int *)calloc(LDPC_CHECK_MATRIX_nz ,sizeof(int));
	
	jcs1 = (int *)malloc(LDPC_CHECK_MATRIX_nz *sizeof(int *));
	
	/*對兩種模式進行判斷*/
	switch (M)
	{	
    case 4608:
    
    		/*讀稀疏矩陣H*/    
    		
    fp=fopen("jcs1.dat","rb");	// H given by std
    	if(fp==NULL)
		{
			printf("jcs1 can not open the file!\n");
			return;
		}				
		fread(jcs1,sizeof(int),LDPC_CHECK_MATRIX_nz,fp);	
		fclose(fp);	
    		
				
		fp=fopen("irs1.dat","rb");    		
    	if(fp==NULL)
		{
			printf("irs1 can not open the file!\n");
			return;
		}				
		fread(irs1,sizeof(int),LDPC_CHECK_MATRIX_nz ,fp);				
		fclose(fp);
		
		fp = fopen("order12.dat","rb");  //讀碼字重排順序
    			
		if(fp==NULL)
		{
			printf("can not open order12!\n");					
			return ;
		}									
		fread(order,sizeof(int),LDPC_CHECK_MATRIX_N,fp);					 	
		fclose(fp);

		for(i=0;i<LDPC_CHECK_MATRIX_nz ;i++)   
    		mod2sparse_insert(H,irs1[i],jcs1[i]);   /*矩陣的非零位置插入entry*/   
		
		/*-------對每一幀譯碼------*/   		

    dec(H,rx_ldpc_llr,dblk,M);  
		for(iii=0;iii<LDPC_CHECK_MATRIX_N;iii++)
			temp[iii] = dblk[order[iii]];
		for(j=0;j<K;j++)	
			rx_ldpcdecoded_bit[j]=temp[j+M]; /*譯碼結(jié)果存在rs_encoded->data中,用來輸出*/

    break;
        
    case 2304: 		
    		
    	fp=fopen("jcs2.dat","rb");	// H given by std
    	if(fp==NULL)
		{
			printf("jcs2 can not open the file!\n");
			return;
		}				
		fread(jcs1,sizeof(int),LDPC_CHECK_MATRIX_nz,fp);	
		fclose(fp);	
    		
				
		fp=fopen("irs2.dat","rb");    		
    	if(fp==NULL)
		{
			printf("irs2 can not open the file!\n");
			return;
		}				
		fread(irs1,sizeof(int),LDPC_CHECK_MATRIX_nz ,fp);				
		fclose(fp);
		
		fp = fopen("order34.dat","rb");
    		
		if(fp==NULL)
		{
			printf("can not open order34!\n");					
			return ;
		}									
		fread(order,sizeof(int),LDPC_CHECK_MATRIX_N,fp);					 	
		fclose(fp);

		
		for(i=0;i<LDPC_CHECK_MATRIX_nz ;i++)   
    		mod2sparse_insert(H,irs1[i],jcs1[i]);   /*矩陣的非零位置插入entry*/ 


		/*對每一幀譯碼*/
    		
    		dec(H,rx_ldpc_llr,dblk,M);   			
    		for(iii=0;iii<LDPC_CHECK_MATRIX_N;iii++)
					temp[iii] = dblk[order[iii]];
    		for(j=0;j<K;j++)	
    			rx_ldpcdecoded_bit[j]=temp[j+M]; /*譯碼結(jié)果存在rs_encoded->data中,用來輸出*/
		
        break;
        
    default:
        printf("LDPC_RATE PARAMETER ERROR IN LDPC_DEC");
        return;    
	}
	
	mod2sparse_free(H);
	free(irs1);
	free(jcs1);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女一区二区三区| 午夜免费久久看| 亚洲精品久久7777| 激情综合网av| 欧美日韩一区二区三区在线| 中文无字幕一区二区三区| 亚洲一区二区av电影| www.亚洲色图.com| 久久精品视频网| 日本亚洲欧美天堂免费| 91高清在线观看| 中文字幕日韩一区二区| 福利电影一区二区| 精品国产亚洲在线| 九九久久精品视频| 欧美一区欧美二区| 日本一不卡视频| 欧美另类z0zxhd电影| 亚洲一区在线看| 色婷婷久久一区二区三区麻豆| 中文字幕av一区二区三区高| 国产精品456露脸| 久久精品亚洲麻豆av一区二区 | 亚洲精品国产第一综合99久久 | 欧美国产精品久久| 国产乱一区二区| 久久―日本道色综合久久| 美女脱光内衣内裤视频久久网站| 欧美日韩激情在线| 日韩va亚洲va欧美va久久| 欧美卡1卡2卡| 美女视频一区二区| 久久麻豆一区二区| 成人美女视频在线观看18| 久久女同性恋中文字幕| 国产成人精品www牛牛影视| 国产午夜精品理论片a级大结局| 国内精品视频666| 国产欧美日韩在线观看| 成人午夜视频在线观看| 亚洲色图清纯唯美| 欧美日韩国产一级| 日本不卡一区二区三区高清视频| 91精品国产品国语在线不卡| 久久精品国产成人一区二区三区 | 欧美成人精品1314www| 久久电影网电视剧免费观看| 久久精品视频免费观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 香蕉成人伊视频在线观看| 91精品一区二区三区久久久久久 | 国产成人免费在线观看| 国产欧美精品国产国产专区| 99久久国产免费看| 亚洲午夜在线观看视频在线| 日韩午夜激情av| 不卡影院免费观看| 午夜精品久久久久久久蜜桃app| 日韩一区二区在线播放| 盗摄精品av一区二区三区| 一区二区三区影院| 欧美一区二区精品在线| 成人福利视频网站| 亚洲va天堂va国产va久| 国产欧美一区二区三区鸳鸯浴 | 亚洲一区二区三区三| 欧美一级理论片| 成人av影院在线| 亚洲一级二级在线| 久久婷婷国产综合国色天香| 一本色道a无线码一区v| 国模套图日韩精品一区二区| 亚洲品质自拍视频网站| 日韩一二三区不卡| 91日韩精品一区| 久久99精品视频| 亚洲伊人色欲综合网| 亚洲国产精品精华液网站| 日韩欧美电影在线| 色偷偷一区二区三区| 国产高清在线观看免费不卡| 丝袜a∨在线一区二区三区不卡| 久久精品欧美日韩| 日韩视频永久免费| 欧美日韩精品欧美日韩精品| av一二三不卡影片| 国产一区二区免费看| 亚洲第一电影网| 一区二区三区四区在线播放| 国产欧美日韩亚州综合 | 777欧美精品| 色激情天天射综合网| 东方aⅴ免费观看久久av| 免费成人在线网站| 日韩精品电影一区亚洲| 亚洲伊人色欲综合网| 亚洲视频中文字幕| **欧美大码日韩| 国产精品人成在线观看免费| 久久综合一区二区| 欧美电影免费观看高清完整版 | 欧美视频一区二区三区在线观看 | 亚洲码国产岛国毛片在线| 久久久亚洲精品一区二区三区| 91精品国产综合久久精品性色| 在线免费观看一区| 91网上在线视频| 99国产精品99久久久久久| 成人午夜在线视频| 福利电影一区二区三区| 成人午夜视频网站| 丁香一区二区三区| 不卡的av在线| 99久久精品情趣| 色欲综合视频天天天| 99视频精品免费视频| 色综合色狠狠综合色| 91免费观看视频| 在线视频你懂得一区二区三区| av网站一区二区三区| 成人av在线电影| 91麻豆国产福利精品| 色悠悠久久综合| 欧洲精品中文字幕| 制服丝袜中文字幕一区| 91麻豆精品国产91久久久使用方法 | 99精品国产一区二区三区不卡| 97aⅴ精品视频一二三区| 欧美综合一区二区三区| 欧美剧情片在线观看| 欧美成人性福生活免费看| 久久久久久久久免费| ...xxx性欧美| 日本va欧美va瓶| 国产精品自拍在线| 91蜜桃在线观看| 7777精品久久久大香线蕉| 久久伊人中文字幕| 亚洲图片欧美激情| 石原莉奈在线亚洲三区| 久久精品国产久精国产| 福利一区福利二区| 欧日韩精品视频| 久久综合丝袜日本网| 自拍偷在线精品自拍偷无码专区| 亚洲高清视频在线| 国模娜娜一区二区三区| 91色综合久久久久婷婷| 日韩精品在线网站| 亚洲人成网站影音先锋播放| 男女性色大片免费观看一区二区 | 欧美综合色免费| 精品国产第一区二区三区观看体验 | 91网站最新地址| 日韩一级完整毛片| 中文字幕中文乱码欧美一区二区| 日韩精品欧美精品| 99久久精品国产毛片| 精品伦理精品一区| 亚洲国产欧美日韩另类综合| 国产精品一区二区黑丝| 欧美日韩精品专区| 亚洲欧洲精品一区二区精品久久久| 日韩福利电影在线观看| 色综合网色综合| 久久精品视频在线免费观看| 日韩高清不卡一区二区三区| 99精品一区二区三区| 亚洲精品在线网站| 日本特黄久久久高潮| 日本高清不卡视频| 国产精品视频一二| 激情成人综合网| 欧美片网站yy| 亚洲人成人一区二区在线观看 | 国产成人av电影| 日韩免费成人网| 午夜精品123| 欧美午夜精品理论片a级按摩| 国产精品日韩精品欧美在线 | 午夜精品久久久久久久久久久| 成人国产在线观看| 久久蜜臀精品av| 国产在线视视频有精品| 欧美一区二区三区四区五区| 亚洲综合小说图片| 91免费看视频| 1区2区3区精品视频| 成人不卡免费av| 国产精品美女久久久久久| 国产精品一区二区男女羞羞无遮挡| 日韩精品一区二区三区在线播放| 亚洲午夜久久久久| 欧美亚洲另类激情小说| 亚洲一区二区三区视频在线播放 | 日韩电影免费在线看| 欧美日韩免费电影| 午夜在线电影亚洲一区| 欧美日韩久久一区| 蜜桃精品视频在线观看|