diff --git a/CMakeLists.txt b/CMakeLists.txt index 2efeea807..b1bb81118 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -602,7 +602,7 @@ set (wsjt_FSRCS lib/fsk4hf/osd204.f90 lib/fsk4hf/genwsprcpm.f90 lib/fsk4hf/encode204.f90 -# lib/ft8/decode174_91.f90 + lib/fsk4hf/decode174_74.f90 lib/fsk4hf/ldpcsim174_91.f90 lib/fsk4hf/ldpcsim174_74.f90 lib/fsk4hf/ldpcsim174_101.f90 diff --git a/lib/fsk4hf/ldpcsim174_74.f90 b/lib/fsk4hf/ldpcsim174_74.f90 index 27e59838c..1db5f066e 100644 --- a/lib/fsk4hf/ldpcsim174_74.f90 +++ b/lib/fsk4hf/ldpcsim174_74.f90 @@ -98,10 +98,6 @@ program ldpcsim174_74 rx2av=sum(rxdata*rxdata)/N rxsig=sqrt(rx2av-rxav*rxav) rxdata=rxdata/rxsig -! To match the metric to the channel, s should be set to the noise standard deviation. -! For now, set s to the value that optimizes decode probability near threshold. -! The s parameter can be tuned to trade a few tenth's dB of threshold for an order of -! magnitude in UER if( s .lt. 0 ) then ss=sigma else @@ -114,7 +110,8 @@ program ldpcsim174_74 call bpdecode174_74(llr,apmask,max_iterations,message,cw,nharderror,niterations) dmin=0.0 if( (nharderror .lt. 0) .and. (ndeep .ge. 0) ) then - call osd174_74(llr, Keff, apmask, ndeep, message, cw, nharderror, dmin) +! call osd174_74(llr, Keff, apmask, ndeep, message, cw, nharderror, dmin) +call decode174_74(llr,Keff,ndeep,apmask,max_iterations,message,cw,nharderror,niterations,ncheck,dmin,isuper) endif if(nharderror.ge.0) then diff --git a/lib/fsk4hf/osd174_74.f90 b/lib/fsk4hf/osd174_74.f90 index 8417e7864..e954f4eff 100644 --- a/lib/fsk4hf/osd174_74.f90 +++ b/lib/fsk4hf/osd174_74.f90 @@ -22,7 +22,7 @@ subroutine osd174_74(llr,k,apmask,ndeep,message74,cw,nhardmin,dmin) integer indices(N),nxor(N) integer*1 cw(N),ce(N),c0(N),hdec(N) integer*1, allocatable :: decoded(:) - integer*1 message50(50),message74(74) + integer*1 message74(74) integer indx(N) real llr(N),rx(N),absrx(N) diff --git a/lib/fsk4hf/wspr4d.f90 b/lib/fsk4hf/wspr4d.f90 index 131fff0c3..78d66b7fa 100644 --- a/lib/fsk4hf/wspr4d.f90 +++ b/lib/fsk4hf/wspr4d.f90 @@ -119,13 +119,13 @@ program wspr4d enddo if(smax .lt. 100.0 ) cycle + idecoded=0 - do ijitter=0,4 + do ijitter=0,2 if(idecoded.eq.1) exit - if(ijitter.eq.1) ioffset=20 - if(ijitter.eq.2) ioffset=-20 - if(ijitter.eq.3) ioffset=40 - if(ijitter.eq.4) ioffset=-40 + if(ijitter.eq.0) ioffset=0 + if(ijitter.eq.1) ioffset=50 + if(ijitter.eq.2) ioffset=-50 is0=isbest+ioffset if(is0.lt.0) cycle cframe=c2(is0:is0+103*416-1) @@ -168,7 +168,13 @@ program wspr4d dmin=0.0 call bpdecode174_74(llr,apmask,max_iterations,message,cw,nhardbp,niterations) Keff=64 - if(nhardbp.lt.0) call osd174_74(llr,Keff,apmask,5,message,cw,nhardosd,dmin) +! if(nhardbp.lt.0) call osd174_74(llr,Keff,apmask,5,message,cw,nhardosd,dmin) + maxsuperits=2 + ndeep=4 + if(nhardbp.lt.0) then + call decode174_74(llr,Keff,ndeep,apmask,maxsuperits,message,cw,nhardosd,iter,ncheck,dmin,isuper) + endif + if(nhardbp.ge.0 .or. nhardosd.ge.0) then write(c77,'(50i1)') message c77(51:77)='000000000000000000000110000'