More work on Q65 message averaging.

This commit is contained in:
Joe Taylor 2020-12-24 09:51:02 -05:00
parent 844930fe75
commit 171e466389
5 changed files with 18 additions and 15 deletions

View File

@ -11,7 +11,7 @@ JT9+JT65 111010000001111000010000000000001000
JT65 111010000000111000010000000000001000 JT65 111010000000111000010000000000001000
JT65/VHF 111110010000110110101100010000000000 JT65/VHF 111110010000110110101100010000000000
QRA64 111110010110110110000000001000000000 QRA64 111110010110110110000000001000000000
Q65 111111010110110100011000001100000000 Q65 111111010110110100111000001100000000
ISCAT 100111000000000110000000000000000000 ISCAT 100111000000000110000000000000000000
MSK144 101111110100000000010001000000000000 MSK144 101111110100000000010001000000000000
WSPR 000000000000000001010000000000000000 WSPR 000000000000000001010000000000000000

View File

@ -204,8 +204,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
call timer('dec_q65 ',0) call timer('dec_q65 ',0)
call my_q65%decode(q65_decoded,id2,params%nutc,params%ntr, & call my_q65%decode(q65_decoded,id2,params%nutc,params%ntr, &
params%nsubmode,params%nfqso,params%ntol,params%ndepth, & params%nsubmode,params%nfqso,params%ntol,params%ndepth, &
params%emedelay,mycall,hiscall,hisgrid,params%nQSOProgress, & logical(params%nclearave),params%emedelay,mycall,hiscall, &
ncontest,logical(params%lapcqonly)) hisgrid,params%nQSOProgress,ncontest,logical(params%lapcqonly))
call timer('dec_q65 ',1) call timer('dec_q65 ',1)
go to 800 go to 800
endif endif
@ -523,8 +523,7 @@ contains
write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift, & write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift, &
decoded,ft,nsum,nsmo decoded,ft,nsum,nsmo
1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3) 1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3)
call flush(6)
100 call flush(6)
!$omp end critical(decode_results) !$omp end critical(decode_results)
select type(this) select type(this)

View File

@ -25,8 +25,9 @@ module q65_decode
contains contains
subroutine decode(this,callback,iwave,nutc,ntrperiod,nsubmode,nfqso, & subroutine decode(this,callback,iwave,nutc,ntrperiod,nsubmode,nfqso, &
ntol,ndepth,emedelay,mycall,hiscall,hisgrid,nQSOprogress,ncontest,lapcqonly) ntol,ndepth,lclearave,emedelay,mycall,hiscall,hisgrid,nQSOprogress, &
ncontest,lapcqonly)
! Decodes Q65 signals ! Decodes Q65 signals
! Input: iwave Raw data, i*2 ! Input: iwave Raw data, i*2
@ -57,7 +58,7 @@ contains
integer apmask(13),apsymbols(13) integer apmask(13),apsymbols(13)
integer dgen(13) integer dgen(13)
integer codewords(63,206) integer codewords(63,206)
logical lapcqonly,unpk77_success logical lclearave,lapcqonly,unpk77_success
complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s
complex, allocatable :: c0(:) !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 q65_enc(dgen,codewords) !Initialize Q65
call timer('sync_q65',0) call timer('sync_q65',0)
call q65_sync(nutc,iwave,ntrperiod*12000,mode65,codewords,ncw,nsps, & 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) call timer('sync_q65',1)
if(id1.eq.1 .or. id1.ge.12) then if(id1.eq.1 .or. id1.ge.12) then
xdt1=xdt xdt1=xdt

View File

@ -1,5 +1,5 @@
subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & 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 ! Detect and align with the Q65 sync vector, returning time and frequency
! offsets and SNR estimate. ! 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 dat4(13)
integer ijpk(2) integer ijpk(2)
logical unpk77_success logical unpk77_success
logical lavg logical lavg,lclearave
character*77 c77,decoded*37 character*77 c77,decoded*37
real, allocatable :: s1(:,:) !Symbol spectra, 1/8-symbol steps real, allocatable :: s1(:,:) !Symbol spectra, 1/8-symbol steps
real, allocatable :: s3(:,:) !Data-symbol energies s3(LL,63) 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(ccf(-ia2:ia2,-53:214))
allocate(ccf1(-ia2:ia2)) allocate(ccf1(-ia2:ia2))
if(lclearave) then
s3avg=0.
navg=0
endif
if(sync(1).eq.99.0) then !Generate the sync vector if(sync(1).eq.99.0) then !Generate the sync vector
sync=-22.0/63.0 !Sync tone OFF sync=-22.0/63.0 !Sync tone OFF
do k=1,22 do k=1,22
sync(isync(k))=1.0 !Sync tone ON sync(isync(k))=1.0 !Sync tone ON
enddo enddo
s3avg=0.
navg=0
endif endif
fac=1/32767.0 fac=1/32767.0
@ -270,7 +273,7 @@ subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, &
navg=0 navg=0
s3avg=0. s3avg=0.
if(lavg) go to 900 if(lavg) go to 900
elseif(snr1.ge.0.0) then elseif(iand(ndepth,16).eq.16) then
s3avg=s3avg+s3 s3avg=s3avg+s3
navg=navg+1 navg=navg+1
write(71,3071) nutc,navg,xdt,f0,snr1 write(71,3071) nutc,navg,xdt,f0,snr1

View File

@ -6388,7 +6388,7 @@ void MainWindow::on_actionQ65_triggered()
m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value()); m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value());
switch_mode (Modes::Q65); switch_mode (Modes::Q65);
// 012345678901234567890123456789012345 // 012345678901234567890123456789012345
displayWidgets(nWidgets("111111010110110100011000000100000000")); displayWidgets(nWidgets("111111010110110100111000000100000000"));
statusChanged(); statusChanged();
} }