mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-09-03 21:57:48 -04:00
More work on Q65 message averaging.
This commit is contained in:
parent
844930fe75
commit
171e466389
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user