From 171e466389b84fd3e91dfe0915d2055b3fc7e080 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 24 Dec 2020 09:51:02 -0500 Subject: [PATCH] More work on Q65 message averaging. --- displayWidgets.txt | 2 +- lib/decoder.f90 | 7 +++---- lib/q65_decode.f90 | 9 +++++---- lib/q65_sync.f90 | 13 ++++++++----- widgets/mainwindow.cpp | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/displayWidgets.txt b/displayWidgets.txt index 2f176ae00..607f2daca 100644 --- a/displayWidgets.txt +++ b/displayWidgets.txt @@ -11,7 +11,7 @@ JT9+JT65 111010000001111000010000000000001000 JT65 111010000000111000010000000000001000 JT65/VHF 111110010000110110101100010000000000 QRA64 111110010110110110000000001000000000 -Q65 111111010110110100011000001100000000 +Q65 111111010110110100111000001100000000 ISCAT 100111000000000110000000000000000000 MSK144 101111110100000000010001000000000000 WSPR 000000000000000001010000000000000000 diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 67ed1ead0..5db45f5be 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -204,8 +204,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) call timer('dec_q65 ',0) call my_q65%decode(q65_decoded,id2,params%nutc,params%ntr, & params%nsubmode,params%nfqso,params%ntol,params%ndepth, & - params%emedelay,mycall,hiscall,hisgrid,params%nQSOProgress, & - ncontest,logical(params%lapcqonly)) + logical(params%nclearave),params%emedelay,mycall,hiscall, & + hisgrid,params%nQSOProgress,ncontest,logical(params%lapcqonly)) call timer('dec_q65 ',1) go to 800 endif @@ -523,8 +523,7 @@ contains write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift, & decoded,ft,nsum,nsmo 1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3) - -100 call flush(6) + call flush(6) !$omp end critical(decode_results) select type(this) diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index 17557cd39..9fefb8088 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -25,8 +25,9 @@ module q65_decode contains - subroutine decode(this,callback,iwave,nutc,ntrperiod,nsubmode,nfqso, & - ntol,ndepth,emedelay,mycall,hiscall,hisgrid,nQSOprogress,ncontest,lapcqonly) + subroutine decode(this,callback,iwave,nutc,ntrperiod,nsubmode,nfqso, & + ntol,ndepth,lclearave,emedelay,mycall,hiscall,hisgrid,nQSOprogress, & + ncontest,lapcqonly) ! Decodes Q65 signals ! Input: iwave Raw data, i*2 @@ -57,7 +58,7 @@ contains integer apmask(13),apsymbols(13) integer dgen(13) integer codewords(63,206) - logical lapcqonly,unpk77_success + logical lclearave,lapcqonly,unpk77_success complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s complex, allocatable :: c0(:) !Analytic signal, 6000 Sa/s @@ -94,7 +95,7 @@ contains call q65_enc(dgen,codewords) !Initialize Q65 call timer('sync_q65',0) call q65_sync(nutc,iwave,ntrperiod*12000,mode65,codewords,ncw,nsps, & - nfqso,ntol,emedelay,xdt,f0,snr1,width,dat4,snr2,id1) + nfqso,ntol,ndepth,lclearave,emedelay,xdt,f0,snr1,width,dat4,snr2,id1) call timer('sync_q65',1) if(id1.eq.1 .or. id1.ge.12) then xdt1=xdt diff --git a/lib/q65_sync.f90 b/lib/q65_sync.f90 index e0459edc5..89588852c 100644 --- a/lib/q65_sync.f90 +++ b/lib/q65_sync.f90 @@ -1,5 +1,5 @@ subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & - emedelay,xdt,f0,snr1,width,dat4,snr2,id1) + ndepth,lclearave,emedelay,xdt,f0,snr1,width,dat4,snr2,id1) ! Detect and align with the Q65 sync vector, returning time and frequency ! offsets and SNR estimate. @@ -24,7 +24,7 @@ subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & integer dat4(13) integer ijpk(2) logical unpk77_success - logical lavg + logical lavg,lclearave character*77 c77,decoded*37 real, allocatable :: s1(:,:) !Symbol spectra, 1/8-symbol steps real, allocatable :: s3(:,:) !Data-symbol energies s3(LL,63) @@ -66,13 +66,16 @@ subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & allocate(ccf(-ia2:ia2,-53:214)) allocate(ccf1(-ia2:ia2)) + if(lclearave) then + s3avg=0. + navg=0 + endif + if(sync(1).eq.99.0) then !Generate the sync vector sync=-22.0/63.0 !Sync tone OFF do k=1,22 sync(isync(k))=1.0 !Sync tone ON enddo - s3avg=0. - navg=0 endif fac=1/32767.0 @@ -270,7 +273,7 @@ subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & navg=0 s3avg=0. if(lavg) go to 900 - elseif(snr1.ge.0.0) then + elseif(iand(ndepth,16).eq.16) then s3avg=s3avg+s3 navg=navg+1 write(71,3071) nutc,navg,xdt,f0,snr1 diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 857123b12..dd94bf1e4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -6388,7 +6388,7 @@ void MainWindow::on_actionQ65_triggered() m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value()); switch_mode (Modes::Q65); // 012345678901234567890123456789012345 - displayWidgets(nWidgets("111111010110110100011000000100000000")); + displayWidgets(nWidgets("111111010110110100111000000100000000")); statusChanged(); }