From 431ec5021221e644c0595d5547227565d1212b44 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 5 Mar 2020 15:37:31 -0500 Subject: [PATCH] Progress toward decoding at 41/47/50 buffers. Not yet complete! --- lib/decoder.f90 | 10 +++++----- lib/ft8/ft8b.f90 | 3 --- lib/ft8_decode.f90 | 6 ++++-- lib/jt9.f90 | 2 +- lib/jt9a.f90 | 7 ++++++- widgets/mainwindow.cpp | 12 +++++++++--- widgets/mainwindow.h | 1 + 7 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 545f8f51d..7bbc285e1 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -277,12 +277,12 @@ subroutine multimode_decoder(ss,id2,params,nfsample) ! JT65 is not yet producing info for nsynced, ndecoded. 800 ndecoded = my_jt4%decoded + my_jt65%decoded + my_jt9%decoded + & my_ft8%decoded + my_ft4%decoded - if(params%nmode.eq.8 .and. params%nzhsym.lt.48) ndec8=ndec8+ndecoded - if(params%nmode.eq.8 .and. params%nzhsym.ge.48) then - ndecoded=ndec8+ndecoded - ndec8=0 + if(params%nmode.eq.8 .and. params%nzhsym.eq.41) ndec41=ndecoded + if(params%nmode.eq.8 .and. params%nzhsym.eq.47) ndec47=ndecoded + if(params%nmode.eq.8 .and. params%nzhsym.eq.50) then + ndecoded=ndec41+ndec47+ndecoded endif - if(params%nmode.ne.8 .or. params%nzhsym.ge.48 .or. & + if(params%nmode.ne.8 .or. params%nzhsym.eq.50 .or. & .not.params%ndiskdat) then write(*,1010) nsynced,ndecoded 1010 format('',2i4) diff --git a/lib/ft8/ft8b.f90 b/lib/ft8/ft8b.f90 index 21ee14ce2..3586355ed 100644 --- a/lib/ft8/ft8b.f90 +++ b/lib/ft8/ft8b.f90 @@ -436,9 +436,6 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,nzhsym,lapon, & call subtractft8(dd0,itone,f1,xdt,.false.) call timer('sub_ft8b',1) endif -! write(21,3001) nzhsym,npasses,nqsoprogress,ipass,iaptype,lsubtract, & -! f1,xdt,msg37(1:22); flush(21) -!3001 format(5i3,L3,f7.1,f9.4,2x,a22) xsig=0.0 xnoi=0.0 do i=1,79 diff --git a/lib/ft8_decode.f90 b/lib/ft8_decode.f90 index 2a4fd1328..9d3bfd6e8 100644 --- a/lib/ft8_decode.f90 +++ b/lib/ft8_decode.f90 @@ -68,14 +68,15 @@ contains call ft8apset(mycall12,hiscall12,ncontest,apsym2,aph10) dd=iwave - if(nzhsym.lt.50) then + if(nzhsym.eq.41) then ndecodes=0 allmessages=' ' allsnrs=0 else ndecodes=ndec_early endif - if(nzhsym.eq.50 .and. ndec_early.ge.1) then + if(nzhsym.gt.41 .and. ndec_early.ge.1) then +! print*,'AAA',nzhsym,ndec_early call timer('sub_ft8a',0) do i=1,ndec_early call subtractft8(dd,itone_save(1,i),f1_save(i),xdt_save(i),.true.) @@ -156,6 +157,7 @@ contains enddo ndec_early=0 if(nzhsym.lt.50) ndec_early=ndecodes +! print*,'BBB',nzhsym,ndecodes return end subroutine decode diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 7fb4756b0..88bcdf836 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -303,7 +303,7 @@ program jt9 shared_data%params%datetime=transfer(datetime,shared_data%params%datetime) if(mode.eq.9 .and. fsplit.ne.2700) shared_data%params%nfa=fsplit if(mode.eq.8) then -! "Early" decoding pass, FT8 only +! "Early" decoding pass, FT8 only, when jt9 reads data from disk nearly=41 shared_data%params%nzhsym=nearly id2a(1:nearly*3456)=shared_data%id2(1:nearly*3456) diff --git a/lib/jt9a.f90 b/lib/jt9a.f90 index eb513f1d8..04e019a97 100644 --- a/lib/jt9a.f90 +++ b/lib/jt9a.f90 @@ -63,12 +63,17 @@ subroutine jt9a() call flush(6) call timer('decoder ',0) if(local_params%nmode.eq.8 .and. local_params%ndiskdat) then -! "Early" decoding pass for data read from disk: FT8 only +! Early decoding pass, FT8 only, when wsjtx reads from disk nearly=41 local_params%nzhsym=nearly id2a(1:nearly*3456)=shared_data%id2(1:nearly*3456) id2a(nearly*3456+1:)=0 call multimode_decoder(shared_data%ss,id2a,local_params,12000) + nearly=47 + local_params%nzhsym=nearly + id2a(1:nearly*3456)=shared_data%id2(1:nearly*3456) + id2a(nearly*3456+1:)=0 + call multimode_decoder(shared_data%ss,id2a,local_params,12000) local_params%nzhsym=50 endif ! Normal decoding pass diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index e0795d301..ca6aea531 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1411,7 +1411,8 @@ void MainWindow::dataSink(qint64 frames) m_dialFreqRxWSPR=m_freqNominal; } - if(m_ihsym==m_hsymStop or (m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData)) { + if(m_ihsym==m_hsymStop or (m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) or + (m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData)) { if(m_mode=="Echo") { float snr=0; int nfrit=0; @@ -1449,10 +1450,11 @@ void MainWindow::dataSink(qint64 frames) dec_data.params.nagain=0; dec_data.params.nzhsym=m_hsymStop; if(m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) dec_data.params.nzhsym=m_earlyDecode; + if(m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData) dec_data.params.nzhsym=m_earlyDecode2; QDateTime now {QDateTime::currentDateTimeUtc ()}; m_dateTime = now.toString ("yyyy-MMM-dd hh:mm"); if(!m_mode.startsWith ("WSPR")) decode(); //Start decoder - if(m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) return; + if(m_mode=="FT8" and !m_diskData and (m_ihsym==m_earlyDecode or m_ihsym==m_earlyDecode2)) return; if(!m_diskData) { //Always save; may delete later if(m_mode=="FT8" or m_mode=="FT4") { @@ -2845,6 +2847,7 @@ void MainWindow::decode() //decode() if(m_mode=="FT4") ms=1000.0*(2.0-m_TRperiod); //Adjust for FT8 early decode: if(m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) ms+=(m_hsymStop-m_earlyDecode)*288; + if(m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData) ms+=(m_hsymStop-m_earlyDecode2)*288; QDateTime t=QDateTime::currentDateTimeUtc().addMSecs(ms); ihr=t.toString("hh").toInt(); imin=t.toString("mm").toInt(); @@ -3045,14 +3048,16 @@ void MainWindow::decodeDone () m_RxLog=0; m_blankLine=true; if(m_mode=="FT8" and dec_data.params.nzhsym==m_earlyDecode) m_blankLine=false; + if(m_mode=="FT8" and dec_data.params.nzhsym==m_earlyDecode2) m_blankLine=false; if(SpecOp::FOX == m_config.special_op_id()) houndCallers(); + qDebug() << "cc" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz") << "decodeDone()"; } void MainWindow::readFromStdout() //readFromStdout { while(proc_jt9.canReadLine()) { auto line_read = proc_jt9.readLine (); -// qDebug() << "cc" << line_read; +// qDebug() << "aa" << line_read; if (auto p = std::strpbrk (line_read.constData (), "\n\r")) { // truncate before line ending chars @@ -3066,6 +3071,7 @@ void MainWindow::readFromStdout() //readFromStdout bool bAvgMsg=false; int navg=0; if(line_read.indexOf("") >= 0) { +// qDebug() << "bb" << QDateTime::currentDateTimeUtc().toString("hh:mm:ss.zzz") << line_read; if(m_mode=="QRA64") m_wideGraph->drawRed(0,0); m_bDecoded = line_read.mid(20).trimmed().toInt() > 0; int mswait=750.0*m_TRperiod; diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index fb16a3dcd..ec66a6a99 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -468,6 +468,7 @@ private: qint32 m_nSentFoxRrpt=0; //Serial number for next R+rpt Hound will send to Fox qint32 m_kin0=0; qint32 m_earlyDecode=41; + qint32 m_earlyDecode2=47; bool m_btxok; //True if OK to transmit bool m_diskData;