117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine encode120(message,codeword) | ||
|  | ! Encode an 60-bit message and return a 120-bit codeword.  | ||
|  | ! The generator matrix has dimensions (60,60).  | ||
|  | ! The code is a (120,60) regular ldpc code with column weight 3. | ||
|  | ! The code was generated using the PEG algorithm. | ||
|  | ! After creating the codeword, the columns are re-ordered according to  | ||
|  | ! "colorder" to make the codeword compatible with the parity-check matrix  | ||
|  | ! | ||
|  | character*15 g(60) | ||
|  | integer*1 codeword(120) | ||
|  | integer colorder(120) | ||
|  | integer*1 gen(60,60) | ||
|  | integer*1 itmp(120) | ||
|  | integer*1 message(60) | ||
|  | integer*1 pchecks(60) | ||
|  | logical first | ||
|  | data first/.true./ | ||
|  | data g/            & | ||
|  |  "65541ad98feab6e",& | ||
|  |  "27249940a5895a3",& | ||
|  |  "c80eac7506bf794",& | ||
|  |  "aa50393e3e18d3f",& | ||
|  |  "28527e87d47dced",& | ||
|  |  "5da0dcaf8db048c",& | ||
|  |  "d6509a43ca9b01a",& | ||
|  |  "9a7dadd9c94f1d4",& | ||
|  |  "bb673d3ba07cf29",& | ||
|  |  "65e190f2fbed447",& | ||
|  |  "bc2062a4e520969",& | ||
|  |  "9e357f3feed059b",& | ||
|  |  "aa6b59212036a57",& | ||
|  |  "f78a326722d6565",& | ||
|  |  "416754bc34c6405",& | ||
|  |  "f77000b3f04ff67",& | ||
|  |  "d48fbd7d48c5ab9",& | ||
|  |  "031ffb5db3a70cb",& | ||
|  |  "125964e358c4df5",& | ||
|  |  "bd02c32a5a241ea",& | ||
|  |  "4c15ecdd8561abd",& | ||
|  |  "7f0f1b352c7413e",& | ||
|  |  "26edb94dfd0ae79",& | ||
|  |  "ca1ba1ee0f8fb24",& | ||
|  |  "49878a58cb4544c",& | ||
|  |  "3dbcd0ff821b203",& | ||
|  |  "c1f4440160d5345",& | ||
|  |  "b5ea9dc7a5a70ab",& | ||
|  |  "cebcf7d94976be4",& | ||
|  |  "0968265f5977c88",& | ||
|  |  "c5a36937faa78c3",& | ||
|  |  "f0d4fef11e01c10",& | ||
|  |  "e35fc0c779bebfe",& | ||
|  |  "cf49c3eb41a31d5",& | ||
|  |  "3f0b19352c7013e",& | ||
|  |  "0e15eccd8521abd",& | ||
|  |  "dda8dcaf9d3048c",& | ||
|  |  "fee31438fba59ed",& | ||
|  |  "ad74a27e939189c",& | ||
|  |  "736ac01b439106e",& | ||
|  |  "ab5d2729b29bfa1",& | ||
|  |  "edf11fb02e5a426",& | ||
|  |  "5f38be1c93ecc83",& | ||
|  |  "1e4b3b8dc516b3e",& | ||
|  |  "84443d8bee614c6",& | ||
|  |  "d854d9f355ceac4",& | ||
|  |  "a476b5ece51f0ea",& | ||
|  |  "831c2b36c4c2f68",& | ||
|  |  "f485c97a91615ae",& | ||
|  |  "e9376d828ade9ba",& | ||
|  |  "cac586f089d3185",& | ||
|  |  "b8f8c67613dafe2",& | ||
|  |  "1a3142b401b315d",& | ||
|  |  "87dbedc43265d2e",& | ||
|  |  "bb64ec6e652e7da",& | ||
|  |  "e71bfd4c95dfd38",& | ||
|  |  "31209af07ad4f75",& | ||
|  |  "cff1a8ccc5f4978",& | ||
|  |  "742eded1e1dfefd",& | ||
|  |  "1cd7154a904dac4"/ | ||
|  | 
 | ||
|  | data colorder/     & | ||
|  |   0,1,2,21,3,4,5,6,7,8,20,10,9,11,12,23,13,28,14,31, & | ||
|  |   15,16,22,26,17,30,18,29,25,32,41,34,19,33,27,36,38,43,42,24, & | ||
|  |   37,39,45,40,35,44,47,46,50,51,53,48,52,56,54,57,55,49,58,61, & | ||
|  |   60,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, & | ||
|  |   80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, & | ||
|  |   100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119/ | ||
|  | 
 | ||
|  | save first,gen | ||
|  | 
 | ||
|  | if( first ) then ! fill the generator matrix | ||
|  |   gen=0 | ||
|  |   do i=1,60 | ||
|  |     do j=1,15 | ||
|  |       read(g(i)(j:j),"(Z1)") istr | ||
|  |         do jj=1, 4  | ||
|  |           icol=(j-1)*4+jj | ||
|  |           if( btest(istr,4-jj) ) gen(i,icol)=1 | ||
|  |         enddo | ||
|  |     enddo | ||
|  |   enddo | ||
|  | first=.false. | ||
|  | endif | ||
|  | 
 | ||
|  | do i=1, 60 | ||
|  |   nsum=0 | ||
|  |   do j=1, 60  | ||
|  |     nsum=nsum+message(j)*gen(i,j) | ||
|  |   enddo | ||
|  |   pchecks(i)=mod(nsum,2) | ||
|  | enddo | ||
|  | itmp(1:60)=pchecks | ||
|  | itmp(61:120)=message(1:60) | ||
|  | codeword(colorder+1)=itmp(1:120) | ||
|  | 
 | ||
|  | return | ||
|  | end subroutine encode120 |