Proper handling of multiple decodes from one call to ft4_decode.

This commit is contained in:
Joe Taylor 2019-01-31 13:55:21 -05:00
parent a80b955fe7
commit 04f085bb24
3 changed files with 39 additions and 20 deletions

View File

@ -1,4 +1,4 @@
subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, & subroutine ft4_decode(cdatetime0,tbuf,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
hiscall,nrx,line) hiscall,nrx,line)
use packjt77 use packjt77
@ -7,7 +7,7 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
character message*37 character message*37
character c77*77 character c77*77
character*61 line character*61 line,linex(100)
character*37 decodes(100) character*37 decodes(100)
character*120 data_dir character*120 data_dir
character*17 cdatetime0 character*17 cdatetime0
@ -22,13 +22,13 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
real s4(0:3,NN) real s4(0:3,NN)
real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN) real bmeta(2*NN),bmetb(2*NN),bmetc(2*NN)
real s(NH1,NHSYM)
real a(5) real a(5)
real llr(2*ND),llr2(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND) real llr(2*ND),llr2(2*ND),llra(2*ND),llrb(2*ND),llrc(2*ND)
real s2(0:255) real s2(0:255)
real candidate(3,100) real candidate(3,100)
real savg(NH1),sbase(NH1) real savg(NH1),sbase(NH1)
integer nrxx(100)
integer icos4(0:3) integer icos4(0:3)
integer*2 iwave(NMAX) !Generated full-length waveform integer*2 iwave(NMAX) !Generated full-length waveform
integer*1 message77(77),apmask(2*ND),cw(2*ND) integer*1 message77(77),apmask(2*ND),cw(2*ND)
@ -42,7 +42,7 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
data icos4/0,1,3,2/ data icos4/0,1,3,2/
data graymap/0,1,3,2/ data graymap/0,1,3,2/
data first/.true./ data first/.true./
save one,first save one,first,nrxx,linex
hhmmss=cdatetime0(8:13) hhmmss=cdatetime0(8:13)
fs=12000.0/NDOWN !Sample rate after downsampling fs=12000.0/NDOWN !Sample rate after downsampling
@ -250,17 +250,19 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
decodes(ndecodes)=message decodes(ndecodes)=message
nsnr=nint(xsnr) nsnr=nint(xsnr)
freq=f0 freq=f0
tsig=mod(tbuf + ibest/750.0,100.0)
write(line,1000) hhmmss,nsnr,ibest/750.0,nint(freq),message write(line,1000) hhmmss,nsnr,tsig,nint(freq),message
1000 format(a6,i4,f5.2,i5,' + ',1x,a37) 1000 format(a6,i4,f5.1,i5,' + ',1x,a37)
open(24,file='all_ft4.txt',status='unknown',position='append') open(24,file='all_ft4.txt',status='unknown',position='append')
write(24,1002) cdatetime0,nsnr,ibest/750.0,nint(freq),message, & write(24,1002) cdatetime0,nsnr,tsig,nint(freq),message, &
nharderror,nsync_qual,isd,niterations nharderror,nsync_qual,isd,niterations
if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, & if(hhmmss.eq.' ') write(*,1002) cdatetime0,nsnr, &
ibest/750.0,nint(freq),message,nharderror,nsync_qual,isd, & tsig,nint(freq),message,nharderror,nsync_qual,isd, &
niterations niterations
1002 format(a17,i4,f6.2,i5,' Rx ',a37,4i5) 1002 format(a17,i4,f5.1,i5,' Rx ',a37,4i5)
close(24) close(24)
linex(ndecodes)=line
!### Temporary: assume most recent decoded message conveys "hiscall". ### !### Temporary: assume most recent decoded message conveys "hiscall". ###
i0=index(message,' ') i0=index(message,' ')
@ -273,18 +275,24 @@ subroutine ft4_decode(cdatetime0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
if(index(message,'CQ ').eq.1) nrx=1 if(index(message,'CQ ').eq.1) nrx=1
if((index(message,trim(mycall)//' ').eq.1) .and. & if((index(message,trim(mycall)//' ').eq.1) .and. &
(index(message,' '//trim(hiscall)//' ').ge.4)) then (index(message,' '//trim(hiscall)//' ').ge.4)) then
if(index(message,' 559 ').gt.8) nrx=2 if(index(message,' 559 ').gt.8) nrx=2 !### Not right !
if(index(message,' R 559 ').gt.8) nrx=3 if(index(message,' R 559 ').gt.8) nrx=3 !### Not right !
if(index(message,' RR73 ').gt.8) nrx=4 if(index(message,' RR73 ').gt.8) nrx=4
endif endif
nrxx(ndecodes)=nrx
!### !###
exit exit
endif endif
enddo !Sequence estimation enddo !Sequence estimation
enddo !Candidate list enddo !Candidate list
return return
entry get_ft4msg(idecode,nrx,line)
line=linex(idecode)
nrx=nrxx(idecode)
return
end subroutine ft4_decode end subroutine ft4_decode
subroutine ft4_downsample(iwave,f0,c) subroutine ft4_downsample(iwave,f0,c)

View File

@ -56,9 +56,13 @@ program ft4d
cdatetime=' '//datetime cdatetime=' '//datetime
close(10) close(10)
call ft4_decode(cdatetime,nfa,nfb,nfqso,iwave,ndecodes,mycall, & call ft4_decode(cdatetime,0.0,nfa,nfb,nfqso,iwave,ndecodes,mycall, &
hiscall,nrx,line) hiscall,nrx,line)
if(ndecodes.ge.1) write(*,'(a61)') line
do idecode=1,ndecodes
call get_ft4msg(idecode,nrx,line)
write(*,'(a61)') line
enddo
enddo !files enddo !files
write(*,1120) write(*,1120)

View File

@ -163,9 +163,12 @@ extern "C" {
void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2); void chkcall_(char* w, char* basc_call, bool cok, int len1, int len2);
void ft4_decode_(char* cdatetime, int* nfa, int* nfb, int* nfqso, short int id[], void ft4_decode_(char* cdatetime, float* tbuf, int* nfa, int* nfb, int* nfqso,
int* ndecodes, char* mycall6, char* hiscall6, int* nrx, char* line, short int id[], int* ndecodes, char* mycall6, char* hiscall6,
int len1, int len2, int len3, int len4); int* nrx, char* line, int len1, int len2, int len3, int len4);
void get_ft4msg_(int* idecode, int* nrx, char* line, int len);
} }
int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols int volatile itone[NUM_ISCAT_SYMBOLS]; //Audio tones for all Tx symbols
@ -8621,6 +8624,7 @@ void MainWindow::ft4Data(int k)
int j=k/6000; int j=k/6000;
j=6000*j-60000; j=6000*j-60000;
if(j<0) j+=NRING; if(j<0) j+=NRING;
float tbuf=j/12000.0;
for(int i=0; i<60000; i++) { for(int i=0; i<60000; i++) {
id[i]=dec_data.d2[j]; id[i]=dec_data.d2[j];
j++; j++;
@ -8654,10 +8658,13 @@ void MainWindow::ft4Data(int k)
int nrx=-1; int nrx=-1;
int nfa=m_wideGraph->nStartFreq(); int nfa=m_wideGraph->nStartFreq();
int nfb=m_wideGraph->Fmax(); int nfb=m_wideGraph->Fmax();
ft4_decode_(cdatetime,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6, ft4_decode_(cdatetime,&tbuf,&nfa,&nfb,&nfqso,id,&ndecodes,mycall6,hiscall6,
&nrx,&line[0],17,6,6,61); &nrx,&line[0],17,6,6,61);
line[60]=0; line[60]=0;
if(ndecodes>0) { // if(ndecodes>0) {
for (int idecode=1; idecode<=ndecodes; idecode++) {
get_ft4msg_(&idecode,&nrx,&line[0],61);
line[60]=0;
QString sline{QString::fromLatin1(line)}; QString sline{QString::fromLatin1(line)};
DecodedText decodedtext {sline.replace(QChar::LineFeed,"")}; DecodedText decodedtext {sline.replace(QChar::LineFeed,"")};
ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode, ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode,