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

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

?? encode.cpp

?? 低密度奇偶校驗碼硬判決譯碼算法的c語言實現
?? CPP
字號:
// encode.cpp : Defines the entry point for the console application.

//根據hb矩陣和信息位來產生碼子
//編碼main程序
//參考請見E:\En_Decode\LDPC\TDMP\C_ldpc\我的修改\combined_ldpc_mod2\我的修改

/*
編碼步驟:
1.讀入h矩陣的信息;
2.由隨機數函數,生成信息位序列;
3.根據以上信息進行子矩陣的乘積和求和,由此得出校驗位序列;
4.把信息位和校驗位連接即可得到碼字序列;
*/



#include "head.h"

/**********************文件矩陣的讀入,16*32的H矩陣****************************/

int read_file_h(int* &h,char *filename,int &row,int &col, int &num)//引用作為函數形參
{
	int i,j;

	FILE *inputH;
    
	if((inputH=fopen(filename,"r"))==NULL)
	{   
		printf("can not open the input symbol degree distribution file!\n");
	    return 0;
	}

    fscanf(inputH,"%d",&row);//從磁盤文件上讀入數據行數,列數
    fscanf(inputH,"%d",&col);
    fscanf(inputH,"%d",&num);//num 是移位數

	h=new int[row*col];//開辟一個存放整型數組的空間,該組有row*col個元素,返回一個指向整型數據的指針,h為指針
    
	for(i=0;i<row;i++)
		for(j=0;j<col;j++)
		{
	        fscanf(inputH,"%d",&h[i*col+j]);//讀取矩陣各元素
		}	
	fclose(inputH);	

	return 1;
}


/**********************用來生成信息序列****************************/
//這兩種方法都可以

/*
void inf_bit_generater(int *inf_bit,int inf_length)//隨機生成
{
	int i;
	srand((unsigned)time(NULL));//???
	for (i=0;i<inf_length;i++)
	{
		inf_bit[i]=rand()%2;//rand()用來產生-90到32767之間的隨機整數,%2后產生0,1之間的一個數
	}

}
*/

void inf_bit_generater(int *inf_bit,int inf_length)//人為輸入
{
   int i;
   //srand((unsigned)time(NULL));//???
   //for (i=0;i<inf_length;i++)
  // {
	  //inf_bit[i]=(i%4==0); //rand()%2
   //}
   for(i=0;i<inf_length/4;i++)
   {
	 inf_bit[i*4]=1;
     inf_bit[i*4+1]=1;
     inf_bit[i*4+2]=1;   
     inf_bit[i*4+3]=1;
   }
}

/**********************用來生成校驗序列****************************/

//由移位數num得到對應的子矩陣
void conver(int num,int *matrix,int length)//matrix[length*length]128*128
{
    int i,j,one_position;
	if(num==-1)
	{
		for(i=0;i<length;i++)
			for(j=0;j<length;j++)
				matrix[i*length+j]=0;//移位數-1代表子矩陣是0陣,移位數0代表子矩陣是單位陣
	}
	else
	{
        for(i=0;i<length;i++)//由右移位數num來恢復出對應的子矩陣
		{
			one_position=(i+num)%length;//子矩陣第一行的j等于右移位數num

		    for(j=0;j<length;j++)
			{
                if(one_position==j)
				    matrix[i*length+j]=1;
                else
					matrix[i*length+j]=0;
			}
		}
	}
}

//實現兩個矩陣的求和
void matrix_and(int* matrix_1,int* matrix_2,int length)//matrix1[length*length],matrix2[length*length]
{
	int i,j;
    for(i=0;i<length;i++)
		for(j=0;j<length;j++)//把兩個矩陣的對應元素相加
			matrix_1[i*length+j]=matrix_1[i*length+j]+matrix_2[i*length+j];
}



//先移位個數轉化為對應的子矩陣,再相加,并且把生成的結果保存在matrix1中
void num_marker_matrix_and(int* matrix1,int length,int num)//matrix1,matrix2都是子矩陣
{
    int * matrix2;
	matrix2=new int[length*length];
    conver(num,matrix2,length);//在哪?第一個,
	matrix_and(matrix1,matrix2,length);//兩個矩陣的求和
	delete []matrix2;//撤消空間
}


//實現對所要求的列的矩陣進行求和,所要求的行以下進行求和運算
void col_matrix_and(int* h,int* matrix,int length,int row,int col,int col_position,int row_position)
{
    int i,j,num;
	for(i=0;i<length;i++)
		for(j=0;j<length;j++)
			matrix[i*length+j]=0;//matrix[]=128*128
	for(i=row_position;i<row;i++)//h[]:16*32
    {
        num=h[i*col+col_position];
		if(num!=-1)//-1代表0單位陣
		    num_marker_matrix_and(matrix,length,num);//求h矩陣中row_position到row行,某一列col_position的p之和。
	}
}


//這里的code是長度為length的矢量,初始值為0
void matrix_muti_inf(int* matrix,int* inf_bit,int* code,int col_position,int length,int row,int* check_bit)
{
    int i,j;
	for(i=0;i<length;i++)
		for(j=0;j<length;j++)
		{
			if(col_position<row)
			    code[i]=(code[i]+matrix[i*length+j]*inf_bit[col_position*length+j])%2;//P*U(i)
			else
				code[i]=(code[i]+matrix[i*length+j]*check_bit[j])%2;//P*V(0)
		}
}

void encode(int* h,int* inf_bit,int row,int col,int length,int* code,int check_bit_pisition,int* check_bit)
{
     int i,j,temp_row;
	 int* temp_matrix;
     temp_matrix=new int[length*length];

	 for(i=0;i<length;i++)
		 code[i]=0;
     
	 //若從0行開始,通過循環求所有的P*U(i),P*V(0)的加和
	 //若從非0的row positon行開始,通過循環求從row positon行開始的所有的P*U(i)
	 if(check_bit_pisition!=0)//??//and函數的row positon
		 temp_row=row+1;//???
	 else
		 temp_row=row;

	 for(j=0;j<temp_row;j++)//j為上面的col position
	 {   
	     // col_matrix_and,matrix_muti_inf這兩個函數不能交換位置,在所有的P相加之后,才能乘U(i)
         col_matrix_and(h,temp_matrix,length,row,col,j,check_bit_pisition);//通過循環,求所有的P*U(i),P*V(i)的加和,即(P-)*V(0)的值
         matrix_muti_inf(temp_matrix,inf_bit,code,j,length,row,check_bit);//求P*U(i)和P*V(0)
		 
	 }
	 
	 delete []temp_matrix;
}

/*
//把校驗位,信息位寫入到文件中
int putin_file(int* inf_bit,int* check_code,int length,int row,char* filename)
{
    int i,j;
	FILE *inputH;
    
	if((inputH=fopen(filename,"w"))==NULL)
	{   
		printf("can not open the input symbol degree distribution file!\n");
	    return 0;
	}
    
    fprintf(inputH,"%s","信息位是:\n");

	for(i=0;i<row;i++)//輸出信息位
	{
		for(j=0;j<length;j++)
           fprintf(inputH,"%d\t",inf_bit[i*length+j]);//\t為水平制表符
        fprintf(inputH,"\n");
	}

    fprintf(inputH,"%s","校驗位是:\n");

	for(i=0;i<row;i++)//輸出校驗位
	{
		for(j=0;j<length;j++)
           fprintf(inputH,"%d\t",check_code[i*length+j]);//輸出校驗位
        fprintf(inputH,"\n");
	}

    fclose(inputH);
	return 1;
}


void num_to_position(int * store_h,int num,int num_i,int num_j,int length,int col_sum,int store_h_col)
{
	int i;
	for(i=0;i<length;i++)
	{
		store_h[(num_i*length+i)*store_h_col+col_sum]=(num++)%length+num_j*length;
	}
}


void fill_negative_one(int *store_h,int length,int i_position,int col_sum,int store_h_col)
{
	int i;
    for(i=0;i<length;i++)
	{
		store_h[(i_position*length+i)*store_h_col+col_sum]=-1;
	}
}
  

void h_conver_to_compress(int *h, int *store_h,int length,int row,int col,int store_h_row,int store_h_col)
{
    int i,j;
	int temp,col_sum;

    for(i=0;i<row;i++)
	{
		col_sum=0;
		for(j=0;j<col;j++)
		{
			temp=h[i*col+j];
            if(temp!=-1)
			{
				num_to_position(store_h,temp,i,j,length,col_sum,store_h_col);
			    col_sum++;
			}
		}
		while(col_sum<store_h_col)
		{
            fill_negative_one(store_h,length,i,col_sum,store_h_col);
			col_sum++;
		}
	}
}


int put_h_into_file(int *h,char *filename,int length,int row,int col)
{
	int i,j;
	int store_h_row,store_h_col;
	int *store_h;
    FILE *inputH;
    
	store_h_row=row*length;
	store_h_col=7;//7????

	store_h=new int[store_h_row*store_h_col];

    h_conver_to_compress(h,store_h,length,row,col,store_h_row,store_h_col);

	if((inputH=fopen(filename,"w"))==NULL)
	{   
		printf("can not open the input symbol degree distribution file!\n");
	    return 0;
	}

	for(i=0;i<store_h_row;i++)
	{
		for(j=0;j<store_h_col;j++)
            fprintf(inputH,"%d\t",store_h[i*store_h_col+j]);
		fprintf(inputH,"\n");
	}

	delete []store_h;

    fclose(inputH);

	return 1;
}

/*
/**********************生成編碼碼字,main中調用這個****************************/

void main()
{
	int *matrix,*inf_bit,*h, *check_code,*check_code_one;
    int length;
    int i, j;
	int row,col;
    int check_num;
	char filename[20];

	int encode_sq[70000];
    int encode_length;


	FILE *fp;
	
    //scanf("%s",filename);
	sprintf(filename,"Hb.txt");//?????
	read_file_h(h,filename,row,col,length);//文件矩陣h的讀入
	encode_length=col*length;

	matrix=new int[length*length];//給各個矩陣開辟存儲空間
    inf_bit=new int[row*length];
    check_code_one=new int[length];
    check_code=new int[length*row];

    inf_bit_generater(inf_bit,row*length);//信息位的隨機生成
    
	for(i=1;i<row-1;i++)//在第2行-15行之間的v(0)對應的那一列,搜索其中不為-1的那個num,即P-1
	{
		if(h[i*col+row]!=-1) 
			check_num=h[i*col+row];//check_num??//
	}

	for(i=0;i<row;i++)//P109=P19,//校驗位的生成
	{
        encode(h,inf_bit,row,col,length,check_code_one,i,check_code);//i即上面的check_bit_pisition,即row position
		if(i==0)//v(0)
			for(j=0;j<length;j++)
				check_code[i*length+j]=check_code_one[(length-check_num+j)%length];//encode里面的code
		else//v(i)
		    for(j=0;j<length;j++)
                check_code[i*length+j]=check_code_one[j];
	}	
        
    //  sprintf(filename,"h_compress_store.txt");
    //	put_h_into_file(h,filename,length,row,col);
	
	//把碼字寫入到文件code.txt中
    if ((fp=fopen("code.txt","w"))==NULL)
	{
		printf("can't open file code.txt \n");
		exit(1);
	}

	for(i=0;i<encode_length;i++)//encode_sq為碼字序列
	{
		if(i<encode_length/2)//encode_length/2=2048
			encode_sq[i]=inf_bit[i];//把信息位的0-2047賦給碼字的0-2047
		else
			encode_sq[i]=check_code[i-encode_length/2];//把校驗位的0-2047賦給碼字的2048-4095       	
     	if(i%128==0)
		{
        	fprintf(fp,"\n");
	    	printf("\n");
		}
    	fprintf(fp,"%d",encode_sq[i]); 
    	printf("%d",encode_sq[i]);    	
	}	
  
	fclose (fp); 
	
	delete []check_code_one;//撤消空間
	delete []check_code;
	delete []h;
	delete []inf_bit;
	delete []matrix;
    printf("\n\n\n");
}

    /*

    int main(int argc, char* argv[])
    {
	int encode_sq[4096];
	int encode_length=4096;
    generate_code(encode_sq,encode_length);
	return 0;
    }
    */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品99久久久**| 国产精品美日韩| 国产精品国产三级国产aⅴ无密码| 亚洲色欲色欲www| 久久精品国产免费| 欧美性xxxxx极品少妇| 欧美韩国日本不卡| 精品一二线国产| 欧美日韩国产一级二级| 国产精品毛片久久久久久| 日韩av电影免费观看高清完整版在线观看| eeuss鲁一区二区三区| 欧美videos大乳护士334| 午夜精品123| 日本高清无吗v一区| 亚洲欧美综合网| 国产成人一区二区精品非洲| 欧美成人精品二区三区99精品| 亚洲一线二线三线久久久| 欧美无人高清视频在线观看| 中文久久乱码一区二区| 国产在线播精品第三| 精品福利一区二区三区免费视频| 亚洲成av人在线观看| 欧美午夜电影网| 午夜精品成人在线| 欧美日本在线看| 三级不卡在线观看| 欧美日韩国产综合视频在线观看| 伊人夜夜躁av伊人久久| 欧美亚洲一区二区在线| 性做久久久久久免费观看| 精品视频在线视频| 性久久久久久久| 91精品国产福利在线观看 | 欧美性猛交xxxx乱大交退制版| 亚洲图片另类小说| 91网站在线观看视频| 亚洲欧美精品午睡沙发| 欧美午夜视频网站| 五月婷婷另类国产| 日韩一区二区三免费高清| 久久99精品久久久久久动态图| 久久午夜电影网| 丁香婷婷综合网| 亚洲日本va在线观看| 欧美亚日韩国产aⅴ精品中极品| 午夜激情综合网| 精品国产区一区| 成人免费视频app| 亚洲免费成人av| 在线成人高清不卡| 国内精品自线一区二区三区视频| 欧美激情一区二区三区全黄 | 美女性感视频久久| 久久天堂av综合合色蜜桃网| eeuss鲁一区二区三区| 亚洲国产精品久久久久秋霞影院 | 亚洲欧美成人一区二区三区| 欧美性色黄大片| 国产做a爰片久久毛片| 中文字幕一区二区三| 欧美日韩国产色站一区二区三区| 蜜臀av一区二区| 国产精品久久久久影院色老大| 欧美日韩国产高清一区二区 | 精品一区二区三区在线播放 | 精品国产伦一区二区三区观看体验| 国内精品久久久久影院色| 亚洲免费伊人电影| 精品久久五月天| 91丝袜呻吟高潮美腿白嫩在线观看| 三级一区在线视频先锋| 国产精品色噜噜| 日韩精品一区在线观看| 91网站在线观看视频| 久久精品国产网站| 亚洲亚洲精品在线观看| 日本一区二区视频在线观看| 欧美高清激情brazzers| 成人av一区二区三区| 毛片不卡一区二区| 亚洲线精品一区二区三区| 国产亚洲一区二区三区在线观看| 精品婷婷伊人一区三区三| 成人高清视频免费观看| 看片的网站亚洲| 日日嗨av一区二区三区四区| 国产精品久99| 久久精品亚洲乱码伦伦中文| 69精品人人人人| 欧美亚洲免费在线一区| 不卡的av中国片| 国产精品1区2区3区在线观看| 日韩1区2区3区| 亚洲成人激情av| 综合婷婷亚洲小说| 欧美激情一区二区三区四区| 精品不卡在线视频| 日韩欧美专区在线| 欧美亚洲日本一区| 欧美性大战久久久久久久蜜臀 | 欧美日韩免费在线视频| 91麻豆精品在线观看| 福利一区福利二区| 国产精品123区| 国产91精品露脸国语对白| 国产精品夜夜爽| 国产精品一区在线观看乱码| 国精产品一区一区三区mba桃花 | 亚洲女厕所小便bbb| 最新中文字幕一区二区三区| 国产欧美日韩激情| 国产无人区一区二区三区| 2017欧美狠狠色| 久久久激情视频| 国产欧美日韩三级| 中文字幕第一区第二区| 欧美国产成人精品| 国产亚洲成av人在线观看导航| 久久网这里都是精品| 国产免费久久精品| 一区二区三区在线视频免费| 一区二区三区四区视频精品免费 | 91老司机福利 在线| 色欧美88888久久久久久影院| 91麻豆swag| 欧美日韩国产影片| 欧美tk—视频vk| 中文字幕一区二区三区不卡 | 欧美变态口味重另类| 2020国产精品| 亚洲欧美影音先锋| 亚洲国产人成综合网站| 视频一区欧美精品| 国产尤物一区二区在线| www.av亚洲| 欧美日韩激情一区二区| 欧美sm美女调教| 国产精品日韩精品欧美在线| 亚洲一区在线看| 久久国产精品99久久人人澡| 成人黄色电影在线| 欧美日韩在线亚洲一区蜜芽| 欧美大片在线观看一区| 中文字幕一区视频| 午夜久久久久久| 成人在线综合网站| 欧美日韩情趣电影| 欧美激情一区二区三区蜜桃视频| 一卡二卡欧美日韩| 国产乱对白刺激视频不卡| 在线这里只有精品| 精品国产91亚洲一区二区三区婷婷 | 1000部国产精品成人观看| 肉肉av福利一精品导航| 成人av手机在线观看| 91精品国产麻豆国产自产在线| 国产精品久久久久久一区二区三区 | 久久视频一区二区| 亚洲电影第三页| 国产精品影视网| 欧美一级日韩一级| 亚洲人精品午夜| 国产成人精品网址| 欧美一区二区精品在线| 亚洲三级在线观看| 国产成人免费视频网站| 欧美日韩aaaaaa| 亚洲欧美另类小说| 福利一区二区在线观看| 日韩欧美在线123| 偷拍自拍另类欧美| 日本精品一区二区三区高清| 国产女人18水真多18精品一级做| 男女男精品网站| 欧美人动与zoxxxx乱| 夜夜精品视频一区二区| 99久久精品国产网站| 久久久久久日产精品| 理论片日本一区| 日韩欧美一区二区视频| 亚洲国产日韩综合久久精品| www.av亚洲| 亚洲欧洲精品成人久久奇米网| 国产1区2区3区精品美女| 久久一留热品黄| 国产一区二区三区不卡在线观看 | 久久精品国产999大香线蕉| 欧美私模裸体表演在线观看| 亚洲免费电影在线| 91久久线看在观草草青青| 国产精品福利在线播放| 成人三级伦理片| 中文字幕日本不卡| 99re66热这里只有精品3直播| 中文字幕av一区二区三区高| 国产精品小仙女| 国产精品久久久久久亚洲毛片| 成人小视频在线|