mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	Computes theoretical probability of error for a bounded-distance decoder.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6302 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									ef49f6dbd6
								
							
						
					
					
						commit
						59806b11bd
					
				
							
								
								
									
										54
									
								
								lib/ftrsd/ftrsd_paper/bodide.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								lib/ftrsd/ftrsd_paper/bodide.f90
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					program bodide
 | 
				
			||||||
 | 
					! Compute probability of word error for a bounded distance decoder.
 | 
				
			||||||
 | 
					! Hardwired for non-coherent 64-FSK and the JT65 RS (63,12) code on GF(64).
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					! Let ps be symbol error probability. 
 | 
				
			||||||
 | 
					! The probability of getting an error pattern with e symbol errors is:
 | 
				
			||||||
 | 
					! ps^e * (1-ps)*(n-e)
 | 
				
			||||||
 | 
					! The number of error patterns with e errors is binomial(63,e)
 | 
				
			||||||
 | 
					! Overall probability of getting a word with e errors is:
 | 
				
			||||||
 | 
					! P(e)= binomial(63,e)* ps^e * (1-ps)*(n-e)
 | 
				
			||||||
 | 
					! Probability that word is correct is P(0 to 25 errors) = sum{e=0}^{25} P(e)
 | 
				
			||||||
 | 
					! Probability that word is wrong is 1-P(0 to 25 errors) 
 | 
				
			||||||
 | 
					! P_word_error=1-( sum_{e=0}^{t} P(e) )
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					  implicit real*16 (a-h,o-z)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  integer*8 binomial
 | 
				
			||||||
 | 
					  integer x,s,XX,NN,M
 | 
				
			||||||
 | 
					  character arg*8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nargs=iargc()
 | 
				
			||||||
 | 
					  if(nargs.ne.1) then
 | 
				
			||||||
 | 
					     print*,'Probability of word error for noncoherent 64-FSK with bounded distance decoding'
 | 
				
			||||||
 | 
					     print*,'Usage:    bounded_distance   D'
 | 
				
			||||||
 | 
					     print*,'Example:  bounded_distance  25'
 | 
				
			||||||
 | 
					     go to 999
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					  call getarg(1,arg)
 | 
				
			||||||
 | 
					  read(arg,*) nt 
 | 
				
			||||||
 | 
					  M=64
 | 
				
			||||||
 | 
					  write(*,1012) 
 | 
				
			||||||
 | 
					1012 format('Es/No  P(word error)'/  &
 | 
				
			||||||
 | 
					             '----------------------')
 | 
				
			||||||
 | 
					  do isnr=0,40
 | 
				
			||||||
 | 
					    esno=10**(isnr/2.0/10.0)
 | 
				
			||||||
 | 
					    hsum=0.d0
 | 
				
			||||||
 | 
					    do k=1,M-1
 | 
				
			||||||
 | 
					      h=binomial(M-1,k)
 | 
				
			||||||
 | 
					      h=h*((-1)**(k+1))/(k+1)
 | 
				
			||||||
 | 
					      h=h*exp(-esno*k/(k+1))
 | 
				
			||||||
 | 
					      hsum=hsum + h
 | 
				
			||||||
 | 
					    enddo
 | 
				
			||||||
 | 
					    ps=hsum
 | 
				
			||||||
 | 
					    hsum=0.d0
 | 
				
			||||||
 | 
					    do i=0,nt
 | 
				
			||||||
 | 
					      h=binomial(63,i)
 | 
				
			||||||
 | 
					      h=h*ps**i
 | 
				
			||||||
 | 
					      h=h*(1-ps)**(63-i)
 | 
				
			||||||
 | 
					      hsum=hsum+h
 | 
				
			||||||
 | 
					    enddo
 | 
				
			||||||
 | 
					    pw=1-hsum
 | 
				
			||||||
 | 
					    write(*,'(f4.1,4x,e10.4,4x,e10.4)') isnr/2.0, ps, pw
 | 
				
			||||||
 | 
					  enddo
 | 
				
			||||||
 | 
					999 end program bodide 
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user