63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | program code426 | ||
|  | 
 | ||
|  |   parameter (MZ=26)                !Number of 4-FSK symbols | ||
|  |   parameter (JZMAX=64)             !Desired number of codewords | ||
|  |   integer ic(MZ,JZMAX),icsave(MZ) | ||
|  |   real c(MZ) | ||
|  |   character*12 arg | ||
|  | 
 | ||
|  |   nargs=iargc() | ||
|  |   if(nargs.ne.2) then | ||
|  |      print*,'Usage:   code426 <nmsgs> <iters>' | ||
|  |      print*,'Example: code426   64   10000000' | ||
|  |      go to 999 | ||
|  |   endif | ||
|  |   call getarg(1,arg) | ||
|  |   read(arg,*) nmsgs | ||
|  |   call getarg(2,arg) | ||
|  |   read(arg,*) iters | ||
|  | 
 | ||
|  |   call init_random_seed() | ||
|  | 
 | ||
|  |   open(13,file='code426.out',status='unknown') | ||
|  | 
 | ||
|  |   write(*,1002) nmsgs,iters | ||
|  |   write(13,1002) nmsgs,iters | ||
|  | 1002 format('Nmsgs:',i4,'   Iters:',i10/(66('-'))) | ||
|  |    | ||
|  |   do i=1,MZ                     !Create 4 mutually orthogonal codewords | ||
|  |      ic(i,1)=mod(i-1,4) | ||
|  |      ic(i,2)=mod(i,4) | ||
|  |      ic(i,3)=mod(i+1,4) | ||
|  |      ic(i,4)=mod(i+2,4) | ||
|  |   enddo | ||
|  | 
 | ||
|  |   do j=1,4                      !Write them out | ||
|  |      write(*,1000) j,MZ,ic(1:MZ,j) | ||
|  |      write(13,1000) j,MZ,ic(1:MZ,j) | ||
|  | 1000 format(2i5,3x,26i2) | ||
|  |   enddo | ||
|  |   | ||
|  |   do j=5,nmsgs                  !Find codewords up to j=nmsgs with maximum | ||
|  |      npk=0                      !distance from all the rest | ||
|  |      do i=1,iters | ||
|  |         call random_number(c)   !Generate a random codeword candidate | ||
|  |         ic(1:MZ,j)=int(4*c)     !Convert real to integer | ||
|  | !        nd=MZ | ||
|  | !        do k=1,j-1              !Test candidate against all others in list | ||
|  | !           n=count(ic(1:MZ,j).ne.ic(1:MZ,k)) | ||
|  | !           nd=min(n,nd) | ||
|  | !        enddo | ||
|  |         call dist426(ic,j,mind) | ||
|  |         if(mind.gt.npk) then | ||
|  |            npk=mind | ||
|  |            icsave=ic(1:MZ,j)    !Best candidate so far, save it | ||
|  | !           if(npk.ge.19) exit   !It won't get any better... | ||
|  |         endif | ||
|  |      enddo | ||
|  |      write(*,1000) j,npk,ic(1:MZ,j) | ||
|  |      write(13,1000) j,npk,ic(1:MZ,j) | ||
|  |   enddo | ||
|  | 
 | ||
|  | 999 end program code426 |