From 8a436b63dd0470d40f868f1976faf5677729fd2a Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 19 Jan 2021 16:06:10 -0500 Subject: [PATCH] Separate message averaging for Odd and Even sequences. --- lib/decoder.f90 | 9 +++++---- lib/q65_decode.f90 | 8 ++++---- lib/qra/q65/q65.f90 | 9 +++++---- widgets/mainwindow.cpp | 8 ++++++-- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index db66fe4ac..4129cd481 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -367,8 +367,9 @@ subroutine multimode_decoder(ss,id2,params,nfsample) endif if(params%nmode.ne.8 .or. params%nzhsym.eq.50 .or. & .not.params%ndiskdat) then + write(*,1010) nsynced,ndecoded,navg0 -1010 format('',3i4) +1010 format('',2i4,i9) call flush(6) endif close(13) @@ -763,7 +764,7 @@ contains end subroutine fst4_decoded subroutine q65_decoded (this,nutc,snr1,nsnr,dt,freq,decoded,idec, & - navg,ntrperiod) + nused,ntrperiod) use q65_decode implicit none @@ -776,7 +777,7 @@ contains real, intent(in) :: freq character(len=37), intent(in) :: decoded integer, intent(in) :: idec - integer, intent(in) :: navg + integer, intent(in) :: nused integer, intent(in) :: ntrperiod character*3 cflags @@ -784,7 +785,7 @@ contains if(idec.ge.0) then cflags='q ' write(cflags(2:2),'(i1)') idec - if(navg.ge.2) write(cflags(3:3),'(i1)') navg + if(nused.ge.2) write(cflags(3:3),'(i1)') nused endif if(ntrperiod.lt.60) then diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index 2275b2bfd..86ecdb9d5 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -180,7 +180,7 @@ contains endif enddo ! ipass - if(iand(ndepth,16).eq.0 .or. navg.lt.2) go to 100 + if(iand(ndepth,16).eq.0 .or. navg(iseq).lt.2) go to 100 ! There was no single-transmission decode. Try for an average 'q3n' decode. call timer('list_avg',0) ! Call top-level routine in q65 module: establish sync and try for a q3 @@ -192,7 +192,7 @@ contains if(idec.ge.0) then dtdec=xdt !We have a list-decode result from averaged data f0dec=f0 - nused=navg + nused=navg(iseq) go to 100 endif @@ -208,7 +208,7 @@ contains if(idec.ge.0) then dtdec=xdt !We have a q[012]n result f0dec=f0 - nused=navg + nused=navg(iseq) endif 100 decoded=' ' @@ -237,7 +237,7 @@ contains call this%callback(nutc,snr1,nsnr,xdt,f0,decoded, & idec,0,ntrperiod) endif - navg0=navg + navg0=1000*navg(0) + navg(1) return end subroutine decode diff --git a/lib/qra/q65/q65.f90 b/lib/qra/q65/q65.f90 index e37ad852d..eb0e6bd16 100644 --- a/lib/qra/q65/q65.f90 +++ b/lib/qra/q65/q65.f90 @@ -10,9 +10,10 @@ module q65 integer,dimension(22) :: isync = (/1,9,12,13,15,22,23,26,27,33,35, & 38,46,50,55,60,62,66,69,74,76,85/) integer codewords(63,206) - integer navg,ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb + integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb integer istep,nsmo,lag1,lag2,npasses,nused,iseq integer i0,j0 + integer navg(0:1) real,allocatable,save :: s1a(:,:,:) !Cumulative symbol spectra real sync(85) !sync vector real df,dtstep,dtdec,f0dec @@ -222,8 +223,8 @@ subroutine q65_clravg ! Clear the averaging array to start a new average. - if(allocated(s1a)) s1a=0. - navg=0 + if(allocated(s1a)) s1a(:,:,iseq)=0. + navg(iseq)=0 return end subroutine q65_clravg @@ -260,7 +261,7 @@ subroutine q65_symspec(iwave,nmax,iz,jz,s1) enddo enddo s1a(:,:,iseq)=s1a(:,:,iseq) + s1 - navg=navg+1 + navg(iseq)=navg(iseq) + 1 return end subroutine q65_symspec diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index a087a2ef5..4a9c12831 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -3374,9 +3374,13 @@ void MainWindow::readFromStdout() //readFromStdout if(line_read.indexOf("") >= 0) { m_bDecoded = line_read.mid(20).trimmed().toInt() > 0; int n=line_read.trimmed().size(); - int navg=line_read.trimmed().mid(n-2).toInt(); + int n2=line_read.trimmed().mid(n-7).toInt(); + int n0=n2/1000; + int n1=n2%1000; if(m_mode=="Q65") { - ndecodes_label.setText(QString::number(navg)); + QString t; + t.sprintf("%d %d",n0,n1); + ndecodes_label.setText(t); } else { if(m_nDecodes==0) ndecodes_label.setText("0"); }