diff --git a/qmap/libqmap/getcand2.f90 b/qmap/libqmap/getcand2.f90
index 212b97e39..ac1e6f0e8 100644
--- a/qmap/libqmap/getcand2.f90
+++ b/qmap/libqmap/getcand2.f90
@@ -39,7 +39,7 @@ subroutine getcand2(ss,savg0,nts_q65,nagain,nhsym,ntx30a,ntx30b, &
nguard=5 !Guard range in bins
i1=1
i2=NFFT-nbw-nguard
- if(nagain.eq.1) then
+ if(nagain.ge.1) then
i1=nint((1000.0*f0_selected-ntol)/df)
i2=nint((1000.0*f0_selected+ntol)/df)
endif
diff --git a/qmap/libqmap/q65b.f90 b/qmap/libqmap/q65b.f90
index 5ef96b5c6..fb2a07c15 100644
--- a/qmap/libqmap/q65b.f90
+++ b/qmap/libqmap/q65b.f90
@@ -9,12 +9,14 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
! in common/cacb. Decoded messages are sent back to the GUI.
use q65_decode
+ use wavhdr
use timer_module, only: timer
parameter (MAXFFT1=5376000) !56*96000
parameter (MAXFFT2=336000) !56*6000 (downsampled by 1/16)
parameter (NMAX=60*12000)
parameter (RAD=57.2957795)
+ type(hdr) h
integer*2 iwave(60*12000)
integer offset
complex ca(MAXFFT1) !FFT of raw I/Q data from Linrad
@@ -26,11 +28,13 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
character*6 hisgrid
character*4 grid4
character*3 csubmode
+ character*17 fname
character*64 result,ctmp
character*20 datetime,datetime1
common/decodes/ndecodes,ncand,nQDecoderDone,nWDecoderBusy, &
nWTransmitting,result(50)
common/cacb/ca
+ data ifile/0/
save
if(mycall0(1:1).ne.' ') mycall=mycall0
@@ -46,8 +50,6 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
nh=nfft2/2
f_mouse=1000.0*(fqso+48.0) + mousedf
k0=nint((ipk*df3-1000.0)/df)
- if(nagain.eq.1) k0=nint((f_mouse-1000.0)/df)
-
if(k0.lt.nh .or. k0.gt.MAXFFT1-nfft2+1) go to 900
fac=1.0/nfft2
cx(0:nfft2-1)=ca(k0:k0+nfft2-1)
@@ -87,7 +89,7 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
nsubmode=mode_q65-1
nfa=990 !Tight limits around ipk for the wideband decode
nfb=1010
- if(nagain.eq.1) then !For nagain=1, use limits of +/- ntol
+ if(nagain.ge.1) then !For nagain>=1, use limits of +/- ntol
nfa=max(100,1000-ntol)
nfb=min(2500,1000+ntol)
endif
@@ -108,9 +110,23 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
if(iseq.eq.1) datetime1(12:13)='30'
endif
+! if(nagain.eq.2) then
+! h=default_header(12000,30*12000)
+! ifile=ifile+1
+! write(fname,1000) ifile
+!1000 format('000000_',i6.6,'.wav')
+! open(27,file=fname,status='unknown',access='stream')
+! ia=ifile*30*12000 + 1
+! ib=ia + 30*12000 - 1
+! write(27) h,iwave(ia:ib)
+! close(27)
+! endif
+! print*,'A',nagain,ifile,fname
+
! NB: Frequency of ipk is now shifted to 1000 Hz.
+ nagain2=0
call map65_mmdec(nutc1,iwave,nqd,ntrperiod,nsubmode,nfa,nfb,1000,ntol, &
- newdat,nagain,max_drift,ndepth,mycall,hiscall,hisgrid)
+ newdat,nagain2,max_drift,ndepth,mycall,hiscall,hisgrid)
MHz=fcenter
freq0=MHz + 0.001d0*ikhz
@@ -132,8 +148,6 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
freq1=freq0 + 0.001d0*(ikhz1-ikhz)
frx=0.001*k0*df+nkhz_center-48.0+1.0 - 0.001*nfcal
fsked=frx - 0.001*ndop00/2.0 - 0.001*offset
-! if(iand(nCFOM,2).eq.2) write(*,3001) nCFOM,ndop00,frx,fsked
-!3001 format('A',i5,i8,f10.3,f10.1)
ctmp=csubmode//' '//trim(msg0)
ndecodes=min(ndecodes+1,50)
write(result(ndecodes),1120) nhhmmss,frx,fsked,xdt0,nsnr0,trim(ctmp)
diff --git a/qmap/libqmap/qmapa.f90 b/qmap/libqmap/qmapa.f90
index 679ccf898..dfb675c3c 100644
--- a/qmap/libqmap/qmapa.f90
+++ b/qmap/libqmap/qmapa.f90
@@ -40,7 +40,7 @@ subroutine qmapa(dd,ss,savg,newdat,nutc,fcenter,ntol,nfa,nfb, &
save
tsec0=sec_midn()
- if(nagain.eq.1) ndepth=3 !Use full depth for click-to-decode
+ if(nagain.ge.1) ndepth=3 !Use full depth for click-to-decode
nkhz_center=nint(1000.0*(fcenter-int(fcenter)))
mfa=nfa-nkhz_center+48
mfb=nfb-nkhz_center+48
@@ -60,8 +60,7 @@ subroutine qmapa(dd,ss,savg,newdat,nutc,fcenter,ntol,nfa,nfb, &
foffset=0.001*(1270 + nfcal) !Offset from sync tone, plus CAL
fqso=mousefqso + foffset - 0.5*(nfa+nfb) + nfshift !fqso at baseband (khz)
nqd=0
- bClickDecode=(nagain.eq.1)
- nagain2=0
+ bClickDecode=(nagain.ge.1)
call timer('fftbig ',0)
call fftbig(dd,NSMAX) !Do the full-length FFT
@@ -80,12 +79,14 @@ subroutine qmapa(dd,ss,savg,newdat,nutc,fcenter,ntol,nfa,nfb, &
ntrperiod=cand(icand)%ntrperiod
iseq=cand(icand)%iseq
-! Skip this candidate if we already decoded it.
- do j=1,ndecodes
- if(abs(f0-found(j)%f).lt.0.005 .and. &
+ if(nagain.eq.0) then
+ ! Skip this candidate if we already decoded it.
+ do j=1,ndecodes
+ if(abs(f0-found(j)%f).lt.0.005 .and. &
ntrperiod.eq.found(j)%ntrperiod .and. &
iseq.eq.found(j)%iseq) go to 10
- enddo
+ enddo
+ endif
mode_q65_tmp=mode_q65
if(ntrperiod.eq.30) mode_q65_tmp=max(1,mode_q65-1)
@@ -95,7 +96,7 @@ subroutine qmapa(dd,ss,savg,newdat,nutc,fcenter,ntol,nfa,nfb, &
call timer('q65b ',0)
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
ntrperiod,iseq,mycall,hiscall,hisgrid,mode_q65_tmp,f0,fqso, &
- nkhz_center,newdat,nagain2,bClickDecode,max_drift,offset, &
+ nkhz_center,newdat,nagain,bClickDecode,max_drift,offset, &
ndepth,datetime,nCFOM,ndop00,nhsym,idec)
call timer('q65b ',1)
if(bClickDecode .and. idec.ge.0) exit
diff --git a/qmap/mainwindow.cpp b/qmap/mainwindow.cpp
index 540ce0540..cf1f6259d 100644
--- a/qmap/mainwindow.cpp
+++ b/qmap/mainwindow.cpp
@@ -192,7 +192,6 @@ MainWindow::~MainWindow()
soundInThread.quit();
soundInThread.wait(3000);
}
-// fftwf_export_wisdom_to_filename (QDir {m_appDir}.absoluteFilePath ("qmap_wisdom.dat").toLocal8Bit ());
delete ui;
}
@@ -951,6 +950,7 @@ void MainWindow::decode() //decode()
memcpy(savecom_.revision, m_revision.toLatin1(), len2);
memcpy(savecom_.saveFileName, m_saveFileName.toLatin1(),len1);
+ ui->actionExport_wav_file_at_fQSO->setEnabled(m_diskData);
watcher3.setFuture(QtConcurrent::run (q65c_));
decodeBusy(true);
}
@@ -1184,3 +1184,11 @@ void MainWindow::on_sbMaxDrift_valueChanged(int n)
if(n==5) ui->sbMaxDrift->setStyleSheet("QSpinBox { background-color: #ffff82; }");
if(n>=10) ui->sbMaxDrift->setStyleSheet("QSpinBox { background-color: #ffff00; }");
}
+
+void MainWindow::on_actionExport_wav_file_at_fQSO_triggered()
+{
+ qDebug() << "Export .wav file" << m_path;
+ datcom_.newdat=0;
+ datcom_.nagain=2;
+ decode();
+}
diff --git a/qmap/mainwindow.h b/qmap/mainwindow.h
index 3c2fb75b0..534f9e853 100644
--- a/qmap/mainwindow.h
+++ b/qmap/mainwindow.h
@@ -83,8 +83,8 @@ private slots:
void on_actionQuick_Start_Guide_to_WSJT_X_2_7_and_QMAP_triggered();
void on_actionAlso_Q65_30x_toggled(bool b);
void on_sbMaxDrift_valueChanged(int arg1);
-
void on_actionSave_decoded_triggered();
+ void on_actionExport_wav_file_at_fQSO_triggered();
private:
Ui::MainWindow *ui;
diff --git a/qmap/mainwindow.ui b/qmap/mainwindow.ui
index 548990813..74d7cea9e 100644
--- a/qmap/mainwindow.ui
+++ b/qmap/mainwindow.ui
@@ -434,6 +434,7 @@ p, li { white-space: pre-wrap; }
+
@@ -855,6 +856,11 @@ p, li { white-space: pre-wrap; }
Save decoded
+
+
+ Export .wav file at fQSO
+
+
@@ -873,8 +879,8 @@ p, li { white-space: pre-wrap; }
update()
- 269
- 255
+ 287
+ 281
126