⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldpc encoder.cpp

📁 C++编写的瑞利信道下LDPC码的性能程序
💻 CPP
字号:
#include "iostream.h"
#include "time.h"
#include "stdlib.h"
#include "conio.h"
#include "stdio.h"
#include "math.h" 
#define N 500
#define M 250
#define dc 6
 


int Hc[M][dc]={             
302, 468, 151,    34, 384, 156,    75, 195, 264,    312, 254, 157,    262, 272, 429,    197, 24, 116,    436, 296, 353,    132, 332, 427,    126, 268, 45,    146, 53, 396,    351, 8, 418,    125, 97, 481,    183, 371, 87,    322, 59, 327,    70, 471, 178,    169, 201, 346,    165, 338, 136,    248, 359, 463,    472, 361, 316,    235, 3, 12,
306, 81, 2,    311, 435, 101,    373, 210, 161,    55, 211, 216,    147, 90, 399,    107, 294, 402,    9, 460, 93,    84, 160, 39,    203, 493, 430,    117, 490, 65,    43, 109, 259,    10, 446, 188,    431, 465, 82,    226, 71, 222,    249, 119, 378,    300, 411, 303,    204, 269, 238,    389, 121, 193,    31, 453, 423,    94, 79, 191,
344, 415, 52,    207, 206, 484,    33, 196, 154,    128, 78, 212,    225, 186, 383,    105, 285, 16,    164, 40, 233,    239, 25, 54,    14, 104, 397,    229, 480, 341,    278, 112, 375,    370, 51, 56,    426, 456, 205,    158, 486, 337,    149, 270, 335,    273, 143, 258,    123, 345, 179,    328, 22, 38,    137, 171, 266,    347, 339, 404,
412, 219, 21,    240, 244, 432,    113, 57, 221,    454, 252, 103,    405, 455, 334,    492, 135, 91,    80, 392, 74,    127, 62, 98,    469, 227, 367,    61, 41, 250,    253, 342, 307,    304, 202, 325,    247, 305, 184,    274, 319, 309,    20, 185, 452,    293, 213, 261,    218, 438, 447,    134, 73, 67,    260, 76, 496,    246, 308, 23,
215, 63, 64,    163, 1, 495,    115, 483, 17,    333, 194, 242,    372, 340, 66,    488, 256, 357,    124, 494, 352,    224, 37, 220,    263, 279, 114,    362, 234, 44,    138, 358, 313,    476, 50, 391,    315, 457, 470,    445, 474, 77,    11, 177, 236,    414, 277, 298,    394, 475, 410,    467, 245, 356,    106, 317, 386,    459, 199, 450,
30, 255, 208,    489, 4, 102,    491, 182, 13,    360, 130, 354,    257, 365, 131,    181, 60, 364,    96, 88, 85,    172, 275, 26,    409, 47, 29,    110, 230, 46,    133, 89, 99,    141, 289, 68,    377, 120, 122,    187, 388, 390,    326, 27, 162,    449, 434, 297,    478, 189, 295,    376, 369, 49,    69, 363, 336,    348, 380, 237,
290, 145, 440,    428, 419, 366,    36, 271, 401,    170, 425, 7,    35, 444, 58,    223, 281, 498,    42, 442, 228,    408, 437, 209,    314, 473, 83,    320, 100, 282,    200, 343, 48,    407, 395, 241,    331, 276, 166,    231, 466, 232,    417, 393, 441,    487, 72, 368,    190, 214, 280,    175, 451, 173,    148, 406, 192,    159, 198, 398,
448, 15, 403,    217, 287, 458,    142, 424, 421,    387, 485, 479,    355, 118, 286,    461, 139, 324,    155, 433, 174,    291, 140, 265,    462, 111, 0,    251, 299, 19,    422, 283, 310,    129, 32, 443,    6, 381, 477,    330, 243, 288,    267, 482, 86,    150, 413, 349,    92, 5, 144,    176, 153, 416,    108, 321, 464,    318, 18, 329,
180, 350, 292,    374, 379, 497,    301, 167, 420,    168, 284, 400,    28, 499, 385,    439, 382, 323,    95, 152,


341, 377, 145,    381, 87, 240,    156, 336, 295,    71, 479, 185,    284, 220, 91,    378, 160, 343,    137, 448, 267,    227, 202, 203,    323, 260, 326,    490, 298, 139,    192, 184, 225,    6, 25, 26,    431, 394, 204,    419, 172, 252,    81, 83, 136,    357, 289, 386,    398, 489, 314,    294, 279, 72,    111, 467, 492,    56, 468, 301,
92, 183, 389,    361, 49, 135,    214, 447, 400,    122, 273, 375,    253, 5, 459,    104, 456, 89,    440, 114, 451,    191, 113, 413,    149, 354, 18,    176, 245, 236,    308, 395, 103,    125, 181, 304,    420, 142, 8,    406, 170, 335,    411, 242, 331,    14, 74, 155,    90, 291, 141,    255, 442, 12,    146, 82, 399,    347, 1, 422,
363, 138, 368,    105, 73, 365,    268, 405, 27,    165, 94, 453,    397, 144, 123,    462, 63, 449,    119, 358, 157,    487, 473, 472,    45, 159, 315,    200, 250, 11,    410, 313, 488,    249, 495, 239,    283, 282, 248,    84, 126, 211,    257, 352, 338,    452, 484, 158,    272, 271, 425,    75, 189, 118,    219, 147, 274,    466, 235, 396,
428, 414, 115,    180, 163, 148,    88, 164, 140,    481, 168, 30,    360, 434, 166,    290, 70, 218,    277, 266, 232,    441, 78, 346,    445, 93, 50,    121, 499, 320,    408, 351, 100,    464, 244, 316,    306, 67, 256,    29, 482, 324,    275, 392, 321,    0, 373, 415,    383, 76, 128,    2, 222, 42,    198, 296, 329,    276, 258, 385,
367, 132, 288,    362, 4, 212,    241, 167, 162,    44, 437, 498,    457, 106, 38,    332, 384, 217,    478, 469, 216,    317, 99, 102,    446, 311, 179,    432, 433, 20,    182, 54, 430,    108, 95, 190,    175, 318, 15,    109, 17, 443,    24, 152, 238,    247, 35, 153,    215, 265, 40,    356, 262, 28,    173, 327, 208,    281, 427, 61,
243, 364, 465,    328, 305, 224,    312, 7, 455,    409, 476, 205,    37, 278, 349,    226, 435, 195,    494, 254, 348,    293, 65, 55,    229, 197, 292,    201, 350, 36,    177, 461, 52,    188, 391, 380,    107, 16, 300,    34, 390, 21,    330, 127, 97,    251, 246, 342,    143, 171, 416,    388, 269, 470,    39, 150, 196,    161, 496, 68,
393, 454, 355,    117, 302, 407,    120, 438, 112,    231, 325, 13,    423, 486, 169,    404, 345, 230,    9, 463, 199,    47, 426, 309,    372, 287, 43,    131, 402, 382,    310, 79, 101,    223, 174, 339,    259, 270, 303,    57, 53, 322,    98, 261, 421,    3, 340, 124,    387, 209, 417,    424, 80, 493,    33, 374, 474,    129, 187, 60,
371, 154, 210,    370, 207, 436,    264, 480, 379,    285, 228, 337,    116, 234, 344,    412, 477, 51,    77, 458, 64,    497, 334, 403,    439, 429, 280,    366, 58, 186,    297, 213, 19,    151, 319, 31,    66, 206, 359,    450, 134, 491,    96, 263, 62,    353, 69, 475,    471, 369, 485,    133, 286, 41,    130, 401, 221,    193, 237, 483,
460, 333, 86,    299, 46, 307,    85, 10, 233,    23, 22, 444,    178, 110, 418,    48, 194, 376,    59, 32,


367, 60, 487,    280, 300, 154,    288, 186, 316,    422, 296, 38,    287, 19, 21,    11, 96, 172,    282, 37, 2,    16, 283, 74,    426, 455, 378,    398, 39, 445,    328, 370, 6,    198, 472, 309,    258, 384, 53,    293, 352, 498,    347, 25, 197,    441, 350, 263,    3, 20, 451,    33, 292, 392,    249, 31, 150,    446, 86, 46,
307, 138, 247,    160, 490, 434,    474, 163, 139,    22, 124, 450,    383, 484, 421,    405, 306, 239,    360, 406, 81,    223, 234, 230,    196, 214, 40,    290, 291, 373,    331, 51, 204,    354, 376, 305,    191, 218, 45,    385, 47, 65,    187, 50, 68,    368, 125, 443,    476, 52, 26,    433, 458, 469,    264, 4, 241,    142, 423, 453,
155, 153, 284,    366, 492, 132,    23, 98, 85,    485, 131, 193,    372, 276, 121,    101, 333, 174,    195, 210, 15,    90, 151, 64,    42, 171, 215,    17, 397, 319,    245, 313, 136,    395, 489, 222,    104, 152, 389,    391, 447, 123,    92, 12, 56,    471, 480, 374,    71, 477, 308,    32, 299, 109,    461, 95, 452,    58, 213, 129,
361, 115, 217,    349, 84, 28,    318, 201, 387,    388, 97, 75,    497, 260, 105,    493, 325, 266,    248, 267, 202,    87, 304, 49,    61, 275, 277,    289, 394, 179,    456, 94, 137,    164, 468, 144,    343, 134, 358,    62, 168, 407,    415, 236, 442,    344, 146, 261,    166, 228, 103,    203, 286, 454,    295, 483, 167,    120, 227, 323,
113, 135, 41,    495, 403, 428,    256, 157, 156,    482, 175, 270,    357, 419, 211,    189, 200, 48,    465, 59, 246,    463, 410, 457,    57, 317, 470,    334, 27, 369,    449, 337, 404,    363, 281, 437,    244, 409, 364,    5, 324, 224,    257, 297, 380,    243, 173, 79,    250, 190, 116,    229, 375, 110,    382, 255, 77,    63, 390, 496,
169, 55, 272,    93, 412, 400,    254, 141, 310,    342, 425, 473,    176, 126, 107,    69, 117, 162,    294, 467, 460,    356, 82, 311,    78, 209, 436,    478, 252, 10,    335, 219, 424,    159, 29, 43,    140, 83, 340,    408, 88, 402,    119, 491, 112,    72, 122, 226,    18, 338, 7,    73, 479, 432,    396, 70, 148,    89, 212, 466,
145, 76, 359,    1, 188, 240,    414, 177, 355,    330, 181, 30,    411, 417, 362,    108, 238, 315,    158, 427, 475,    448, 127, 128,    14, 133, 273,    13, 371, 251,    320, 274, 285,    199, 259, 365,    321, 329, 341,    35, 298, 216,    262, 439, 225,    336, 147, 233,    242, 111, 237,    231, 99, 381,    91, 182, 312,    401, 118, 302,
348, 486, 377,    170, 431, 36,    34, 418, 54,    438, 326, 322,    205, 130, 268,    235, 499, 444,    220, 379, 459,    269, 481, 149,    430, 207, 488,    24, 178, 106,    303, 278, 185,    399, 180, 194,    332, 413, 114,    67, 345, 494,    161, 314, 346,    184, 462, 301,    416, 429, 9,    80, 100, 232,    66, 353, 44,    8, 165, 393,
102, 253, 208,    464, 327, 339,    206, 265, 420,    440, 386, 143,    351, 192, 183,    279, 221, 435,    0, 271,

};







 

 








 

 




 


void main()
{ 
  //srand((unsigned)time(NULL));	//initiate
  int i,k,s,t,j,l,n;
  int H[M][N],buff[N],s1[N],s2[N];
  unsigned code[N];
  FILE *fp;
  if((fp=fopen("code","wb"))==NULL)
  {printf("cannot open this file\n");
  exit(0);
  }
  printf("ok\n");

  for(i=0;i<M;i++)              // 构造一个400*1000的矩阵
  {	  for(j=0;j<N;j++)
		H[i][j]=0;
  }
  

  for(i=0;i<M;i++)             //400*1000矩阵赋初值 其中HC 是范围倒400*5;
  {	  for(j=0;j<dc;j++)             
	  H[i][Hc[i][j]]=1;
  }          



    j=N-1;                       //j=999;    

	for(i=M-1;i>0;i--)			   //i=399; 
{ 	  s=i-1;
skip:  k=s;
	  
  	  if(H[i][j]==0)
	 {	while(H[k][j]==0)           
		{	k--;
			if(k<0) 
			{	j--;
				if(j>=0) goto skip;              // 这边是为了防止该行的以上每一列都是0,使倒数几行每行的倒数几个数是1
				else goto next;
			}		
		}
	        for(t=0;t<N;t++)
		{ buff[t]=H[i][t];              
		  H[i][t]=H[k][t];
		  H[k][t]=buff[t];                //找出每一行的每一列从下到上的第一个1的列,然后两列交换顺序
		}
  	  }

	  do                          
	  { if(H[s][j]==1)                     //将每一行与最后一行或相对应的一行进行对消,这样就可以保证每列都会有个零或一个1
		{for(t=0;t<N;t++)
		H[s][t]=(H[s][t]+H[i][t])%2;
	  }  s--;                                ////////***///////原来这边有个大的错误s--;} 
	  }while(s>=0);
	  
	  j--;                                   //循环一遍以后,i--,j--
}



next:  for(s=0;s<M;s++)			//rank=M-s,但S也不是真正矩阵的秩
  {	k=0;
	  for(j=0;j<N;j++)
	  {	if(H[s][j]==1) k++;}     //测试第一行或者第S+1行才是有1的,即是非0行
	  if(k!=0) break;
  }
 // cout<<"\n"<<s<<"\n";
	  
  j=N-1;
  n=0;


 
  for(i=M-1;i>=s;i--)
{ 
  if(H[i][j]==0)
  {  for(t=j-1;t>=0;t--)
     if(H[i][t]==1) break;
  
	for(l=0;l<M;l++)                  //进行列交换,为了中线上都是1
	{     buff[l]=H[l][t];              
		  H[l][t]=H[l][j];
		  H[l][j]=buff[l];
		  s1[n]=t;                    //知道是哪两列相互交换的
		  s2[n]=j;
	
	}

	for(t=i-1;t>=0;t--)
	{
		if(H[t][j]==1)
		for(l=0;l<N;l++)
		H[t][l]=(H[t][l]+H[i][l])%2;
	}
	 
	      n++;
  }
	j--;
}




  for(j=0;j<N-M+s;j++)                //code 010101...000000000设置信息位
	   {
		   if(j%2==1)
			   code[j]=1;
		   else code[j]=0;
	     //code[j]=rand()%2;
	   }
  for(j=N-M+s;j<N;j++)               //设置校验位?
  {code[j]=0;}

  for(i=s;i<M;i++)           //calculate the check bits
  {	for(j=N-1;j>=N-M+s;j--)
	{if(H[i][j]==1) break;}
	for(k=0;k<j;k++)
	{	if(H[i][k]==1)
		code[j]=(code[k]+code[j])%2;
	}
  }

  for(i=n-1;i>=0;i--)           //位置的交换回来
  {	buff[i]=code[s1[i]];
    code[s1[i]]=code[s2[i]];
	code[s2[i]]=buff[i];
  }

  for(i=0;i<M;i++)	               //check code  //
		{
		 k=0;
		 for(j=0;j<dc;j++)
		 {k=(k+code[Hc[i][j]])%2;}

		 if(k==1) break;
		}


	if(k==1)
	cout<<"\n"<<i<<"the code is wrong!"<<"\n";
	else
	cout<<"\n"<<s<<"  "<<"the code is right!"<<"\n";
	for(i=0;i<N;i++)
    printf("%d, ",code[i]);
	printf("\n");

    for(i=0;i<N;i++)
  {  
     if(fwrite(code+i,4,1,fp)!=1)
     printf("file write error\n");
  }
    fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -