Fix an error in SNR_2500 scaling and add calculation of probability of decode vs number of hard errors.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7610 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Steven Franke 2017-03-17 18:47:57 +00:00
parent 506cfbf4ff
commit c5dfd9c9b7

View File

@ -14,6 +14,7 @@ integer*1 i1hash(4)
integer*1 msgbits(80) integer*1 msgbits(80)
integer*4 i4Msg6BitWords(13) integer*4 i4Msg6BitWords(13)
integer ihash integer ihash
integer nerrtot(128),nerrdec(128)
real*8, allocatable :: lratio(:), rxdata(:), rxavgd(:) real*8, allocatable :: lratio(:), rxdata(:), rxavgd(:)
real, allocatable :: yy(:), llr(:) real, allocatable :: yy(:), llr(:)
equivalence(ihash,i1hash) equivalence(ihash,i1hash)
@ -21,6 +22,8 @@ equivalence(ihash,i1hash)
do i=1,NRECENT do i=1,NRECENT
recent_calls(i)=' ' recent_calls(i)=' '
enddo enddo
nerrtot=0
nerrdec=0
nargs=iargc() nargs=iargc()
if(nargs.ne.4) then if(nargs.ne.4) then
@ -105,6 +108,11 @@ do idb = -6, 14
rxavgd=rxavgd+rxdata rxavgd=rxavgd+rxdata
enddo enddo
rxdata=rxavgd rxdata=rxavgd
nerr=0
do i=1,N
if( rxdata(i)*(2*codeword(i)-1.0) .lt. 0 ) nerr=nerr+1
enddo
nerrtot(nerr)=nerrtot(nerr)+1
! Correct signal normalization is important for this decoder. ! Correct signal normalization is important for this decoder.
rxav=sum(rxdata)/N rxav=sum(rxdata)/N
@ -147,14 +155,21 @@ do idb = -6, 14
enddo enddo
if( nhashflag .eq. 1 .and. nueflag .eq. 0 ) then if( nhashflag .eq. 1 .and. nueflag .eq. 0 ) then
ngood=ngood+1 ngood=ngood+1
nerrdec(nerr)=nerrdec(nerr)+1
else if( nhashflag .eq. 1 .and. nueflag .eq. 1 ) then else if( nhashflag .eq. 1 .and. nueflag .eq. 1 ) then
nue=nue+1; nue=nue+1;
endif endif
endif endif
enddo enddo
snr2500=db-4.0 snr2500=db-3.5
write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,1x,i8,8x,f5.2)") db,snr2500,ngood,nue,nbadhash,ss write(*,"(f4.1,4x,f5.1,1x,i8,1x,i8,1x,i8,8x,f5.2)") db,snr2500,ngood,nue,nbadhash,ss
enddo enddo
open(unit=23,file='nerrhisto.dat',status='unknown')
do i=1,128
write(23,'(i4,2x,i10,i10,f10.2)') i,nerrdec(i),nerrtot(i),real(nerrdec(i))/real(nerrtot(i)+1e-10)
enddo
close(23)
end program ldpcsim end program ldpcsim