mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-24 10:22:26 -04:00
Work in progress toward "Export .wav file".
This commit is contained in:
parent
4ec84087c7
commit
adc0345ef3
@ -39,7 +39,7 @@ subroutine getcand2(ss,savg0,nts_q65,nagain,nhsym,ntx30a,ntx30b, &
|
|||||||
nguard=5 !Guard range in bins
|
nguard=5 !Guard range in bins
|
||||||
i1=1
|
i1=1
|
||||||
i2=NFFT-nbw-nguard
|
i2=NFFT-nbw-nguard
|
||||||
if(nagain.eq.1) then
|
if(nagain.ge.1) then
|
||||||
i1=nint((1000.0*f0_selected-ntol)/df)
|
i1=nint((1000.0*f0_selected-ntol)/df)
|
||||||
i2=nint((1000.0*f0_selected+ntol)/df)
|
i2=nint((1000.0*f0_selected+ntol)/df)
|
||||||
endif
|
endif
|
||||||
|
@ -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.
|
! in common/cacb. Decoded messages are sent back to the GUI.
|
||||||
|
|
||||||
use q65_decode
|
use q65_decode
|
||||||
|
use wavhdr
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
|
|
||||||
parameter (MAXFFT1=5376000) !56*96000
|
parameter (MAXFFT1=5376000) !56*96000
|
||||||
parameter (MAXFFT2=336000) !56*6000 (downsampled by 1/16)
|
parameter (MAXFFT2=336000) !56*6000 (downsampled by 1/16)
|
||||||
parameter (NMAX=60*12000)
|
parameter (NMAX=60*12000)
|
||||||
parameter (RAD=57.2957795)
|
parameter (RAD=57.2957795)
|
||||||
|
type(hdr) h
|
||||||
integer*2 iwave(60*12000)
|
integer*2 iwave(60*12000)
|
||||||
integer offset
|
integer offset
|
||||||
complex ca(MAXFFT1) !FFT of raw I/Q data from Linrad
|
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*6 hisgrid
|
||||||
character*4 grid4
|
character*4 grid4
|
||||||
character*3 csubmode
|
character*3 csubmode
|
||||||
|
character*17 fname
|
||||||
character*64 result,ctmp
|
character*64 result,ctmp
|
||||||
character*20 datetime,datetime1
|
character*20 datetime,datetime1
|
||||||
common/decodes/ndecodes,ncand,nQDecoderDone,nWDecoderBusy, &
|
common/decodes/ndecodes,ncand,nQDecoderDone,nWDecoderBusy, &
|
||||||
nWTransmitting,result(50)
|
nWTransmitting,result(50)
|
||||||
common/cacb/ca
|
common/cacb/ca
|
||||||
|
data ifile/0/
|
||||||
save
|
save
|
||||||
|
|
||||||
if(mycall0(1:1).ne.' ') mycall=mycall0
|
if(mycall0(1:1).ne.' ') mycall=mycall0
|
||||||
@ -46,8 +50,6 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
|||||||
nh=nfft2/2
|
nh=nfft2/2
|
||||||
f_mouse=1000.0*(fqso+48.0) + mousedf
|
f_mouse=1000.0*(fqso+48.0) + mousedf
|
||||||
k0=nint((ipk*df3-1000.0)/df)
|
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
|
if(k0.lt.nh .or. k0.gt.MAXFFT1-nfft2+1) go to 900
|
||||||
fac=1.0/nfft2
|
fac=1.0/nfft2
|
||||||
cx(0:nfft2-1)=ca(k0:k0+nfft2-1)
|
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
|
nsubmode=mode_q65-1
|
||||||
nfa=990 !Tight limits around ipk for the wideband decode
|
nfa=990 !Tight limits around ipk for the wideband decode
|
||||||
nfb=1010
|
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)
|
nfa=max(100,1000-ntol)
|
||||||
nfb=min(2500,1000+ntol)
|
nfb=min(2500,1000+ntol)
|
||||||
endif
|
endif
|
||||||
@ -108,9 +110,23 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
|||||||
if(iseq.eq.1) datetime1(12:13)='30'
|
if(iseq.eq.1) datetime1(12:13)='30'
|
||||||
endif
|
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.
|
! NB: Frequency of ipk is now shifted to 1000 Hz.
|
||||||
|
nagain2=0
|
||||||
call map65_mmdec(nutc1,iwave,nqd,ntrperiod,nsubmode,nfa,nfb,1000,ntol, &
|
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
|
MHz=fcenter
|
||||||
freq0=MHz + 0.001d0*ikhz
|
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)
|
freq1=freq0 + 0.001d0*(ikhz1-ikhz)
|
||||||
frx=0.001*k0*df+nkhz_center-48.0+1.0 - 0.001*nfcal
|
frx=0.001*k0*df+nkhz_center-48.0+1.0 - 0.001*nfcal
|
||||||
fsked=frx - 0.001*ndop00/2.0 - 0.001*offset
|
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)
|
ctmp=csubmode//' '//trim(msg0)
|
||||||
ndecodes=min(ndecodes+1,50)
|
ndecodes=min(ndecodes+1,50)
|
||||||
write(result(ndecodes),1120) nhhmmss,frx,fsked,xdt0,nsnr0,trim(ctmp)
|
write(result(ndecodes),1120) nhhmmss,frx,fsked,xdt0,nsnr0,trim(ctmp)
|
||||||
|
@ -40,7 +40,7 @@ subroutine qmapa(dd,ss,savg,newdat,nutc,fcenter,ntol,nfa,nfb, &
|
|||||||
save
|
save
|
||||||
|
|
||||||
tsec0=sec_midn()
|
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)))
|
nkhz_center=nint(1000.0*(fcenter-int(fcenter)))
|
||||||
mfa=nfa-nkhz_center+48
|
mfa=nfa-nkhz_center+48
|
||||||
mfb=nfb-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
|
foffset=0.001*(1270 + nfcal) !Offset from sync tone, plus CAL
|
||||||
fqso=mousefqso + foffset - 0.5*(nfa+nfb) + nfshift !fqso at baseband (khz)
|
fqso=mousefqso + foffset - 0.5*(nfa+nfb) + nfshift !fqso at baseband (khz)
|
||||||
nqd=0
|
nqd=0
|
||||||
bClickDecode=(nagain.eq.1)
|
bClickDecode=(nagain.ge.1)
|
||||||
nagain2=0
|
|
||||||
|
|
||||||
call timer('fftbig ',0)
|
call timer('fftbig ',0)
|
||||||
call fftbig(dd,NSMAX) !Do the full-length FFT
|
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
|
ntrperiod=cand(icand)%ntrperiod
|
||||||
iseq=cand(icand)%iseq
|
iseq=cand(icand)%iseq
|
||||||
|
|
||||||
! Skip this candidate if we already decoded it.
|
if(nagain.eq.0) then
|
||||||
do j=1,ndecodes
|
! Skip this candidate if we already decoded it.
|
||||||
if(abs(f0-found(j)%f).lt.0.005 .and. &
|
do j=1,ndecodes
|
||||||
|
if(abs(f0-found(j)%f).lt.0.005 .and. &
|
||||||
ntrperiod.eq.found(j)%ntrperiod .and. &
|
ntrperiod.eq.found(j)%ntrperiod .and. &
|
||||||
iseq.eq.found(j)%iseq) go to 10
|
iseq.eq.found(j)%iseq) go to 10
|
||||||
enddo
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
mode_q65_tmp=mode_q65
|
mode_q65_tmp=mode_q65
|
||||||
if(ntrperiod.eq.30) mode_q65_tmp=max(1,mode_q65-1)
|
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 timer('q65b ',0)
|
||||||
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
||||||
ntrperiod,iseq,mycall,hiscall,hisgrid,mode_q65_tmp,f0,fqso, &
|
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)
|
ndepth,datetime,nCFOM,ndop00,nhsym,idec)
|
||||||
call timer('q65b ',1)
|
call timer('q65b ',1)
|
||||||
if(bClickDecode .and. idec.ge.0) exit
|
if(bClickDecode .and. idec.ge.0) exit
|
||||||
|
@ -192,7 +192,6 @@ MainWindow::~MainWindow()
|
|||||||
soundInThread.quit();
|
soundInThread.quit();
|
||||||
soundInThread.wait(3000);
|
soundInThread.wait(3000);
|
||||||
}
|
}
|
||||||
// fftwf_export_wisdom_to_filename (QDir {m_appDir}.absoluteFilePath ("qmap_wisdom.dat").toLocal8Bit ());
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,6 +950,7 @@ void MainWindow::decode() //decode()
|
|||||||
memcpy(savecom_.revision, m_revision.toLatin1(), len2);
|
memcpy(savecom_.revision, m_revision.toLatin1(), len2);
|
||||||
memcpy(savecom_.saveFileName, m_saveFileName.toLatin1(),len1);
|
memcpy(savecom_.saveFileName, m_saveFileName.toLatin1(),len1);
|
||||||
|
|
||||||
|
ui->actionExport_wav_file_at_fQSO->setEnabled(m_diskData);
|
||||||
watcher3.setFuture(QtConcurrent::run (q65c_));
|
watcher3.setFuture(QtConcurrent::run (q65c_));
|
||||||
decodeBusy(true);
|
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==5) ui->sbMaxDrift->setStyleSheet("QSpinBox { background-color: #ffff82; }");
|
||||||
if(n>=10) ui->sbMaxDrift->setStyleSheet("QSpinBox { background-color: #ffff00; }");
|
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();
|
||||||
|
}
|
||||||
|
@ -83,8 +83,8 @@ private slots:
|
|||||||
void on_actionQuick_Start_Guide_to_WSJT_X_2_7_and_QMAP_triggered();
|
void on_actionQuick_Start_Guide_to_WSJT_X_2_7_and_QMAP_triggered();
|
||||||
void on_actionAlso_Q65_30x_toggled(bool b);
|
void on_actionAlso_Q65_30x_toggled(bool b);
|
||||||
void on_sbMaxDrift_valueChanged(int arg1);
|
void on_sbMaxDrift_valueChanged(int arg1);
|
||||||
|
|
||||||
void on_actionSave_decoded_triggered();
|
void on_actionSave_decoded_triggered();
|
||||||
|
void on_actionExport_wav_file_at_fQSO_triggered();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
@ -434,6 +434,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionDelete_all_iq_files_in_SaveDir"/>
|
<addaction name="actionDelete_all_iq_files_in_SaveDir"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionExport_wav_file_at_fQSO"/>
|
||||||
<addaction name="actionSettings"/>
|
<addaction name="actionSettings"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExit"/>
|
<addaction name="actionExit"/>
|
||||||
@ -855,6 +856,11 @@ p, li { white-space: pre-wrap; }
|
|||||||
<string>Save decoded</string>
|
<string>Save decoded</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionExport_wav_file_at_fQSO">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export .wav file at fQSO</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
@ -873,8 +879,8 @@ p, li { white-space: pre-wrap; }
|
|||||||
<slot>update()</slot>
|
<slot>update()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>269</x>
|
<x>287</x>
|
||||||
<y>255</y>
|
<y>281</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>126</x>
|
<x>126</x>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user