diff --git a/Modulator.cpp b/Modulator.cpp index e5587120b..63c4e1ff0 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -91,8 +91,8 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, if (synchronize && !m_tuning && !m_bFastMode) { m_silentFrames = m_ic + m_frameRate / (1000 / delay_ms) - (mstr * (m_frameRate / 1000)); } - if(symbolsLength==105 and framesPerSymbol==512 - and (toneSpacing==12000.0/512.0 or toneSpacing==-2.0)) { + if(symbolsLength==105 and framesPerSymbol==576 + and (toneSpacing==12000.0/576.0 or toneSpacing==-2.0)) { //### FT4 parameters m_ic=0; m_silentFrames=0; diff --git a/lib/ft4/ft4_downsample.f90 b/lib/ft4/ft4_downsample.f90 index d3760a506..ed55fb9a0 100644 --- a/lib/ft4/ft4_downsample.f90 +++ b/lib/ft4/ft4_downsample.f90 @@ -4,7 +4,7 @@ subroutine ft4_downsample(dd,newdata,f0,c) ! Output: Complex data in c(), sampled at 1200 Hz include 'ft4_params.f90' - parameter (NFFT2=NMAX/16) + parameter (NFFT2=NMAX/NDOWN) real dd(NMAX) complex c(0:NMAX/NDOWN-1) complex c1(0:NFFT2-1) diff --git a/lib/ft4/ft4_params.f90 b/lib/ft4/ft4_params.f90 index 46630cc25..2914260d8 100644 --- a/lib/ft4/ft4_params.f90 +++ b/lib/ft4/ft4_params.f90 @@ -6,11 +6,11 @@ parameter (ND=87) !Data symbols parameter (NS=16) !Sync symbols parameter (NN=NS+ND) !Sync and data symbols (103) parameter (NN2=NS+ND+2) !Total channel symbols (105) -parameter (NSPS=512) !Samples per symbol at 12000 S/s -parameter (NZ=NSPS*NN) !Sync and Data samples (52736) -parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (53760) -parameter (NMAX=18*3456) !Samples in iwave -parameter (NFFT1=2048, NH1=NFFT1/2) !Length of FFTs for symbol spectra +parameter (NSPS=576) !Samples per symbol at 12000 S/s +parameter (NZ=NSPS*NN) !Sync and Data samples (59328) +parameter (NZ2=NSPS*NN2) !Total samples in shaped waveform (60480) +parameter (NMAX=21*3456) !Samples in iwave (72576) +parameter (NFFT1=2304, NH1=NFFT1/2) !Length of FFTs for symbol spectra parameter (NSTEP=NSPS) !Coarse time-sync step size parameter (NHSYM=(NMAX-NFFT1)/NSTEP) !Number of symbol spectra (1/4-sym steps) -parameter (NDOWN=16) !Downsample factor +parameter (NDOWN=18) !Downsample factor diff --git a/lib/ft4/ft4sim.f90 b/lib/ft4/ft4sim.f90 index 94ab8218f..e35e5ad8a 100644 --- a/lib/ft4/ft4sim.f90 +++ b/lib/ft4/ft4sim.f90 @@ -6,7 +6,7 @@ program ft4sim use packjt77 include 'ft4_params.f90' !Set various constants parameter (NWAVE=NN*NSPS) - parameter (NZZ=18*3456) !62208 + parameter (NZZ=21*3456) !72576 type(hdr) h !Header for .wav file character arg*12,fname*17 character msg37*37,msgsent37*37 @@ -51,12 +51,11 @@ program ft4sim hmod=1.0 !Modulation index (0.5 is MSK, 1.0 is FSK) tt=NSPS*dt !Duration of symbols (s) baud=1.0/tt !Keying rate (baud) - txt=NZ*dt !Transmission length (s) + txt=NZ2*dt !Transmission length (s) bandwidth_ratio=2500.0/(fs/2.0) sig=sqrt(2*bandwidth_ratio) * 10.0**(0.05*snrdb) if(snrdb.gt.90.0) sig=1.0 - txt=NN*NSPS/12000.0 ! Source-encode, then get itone() i3=-1 diff --git a/lib/ft4/gen_ft4wave.f90 b/lib/ft4/gen_ft4wave.f90 index c4cd2eafb..823993612 100644 --- a/lib/ft4/gen_ft4wave.f90 +++ b/lib/ft4/gen_ft4wave.f90 @@ -2,8 +2,8 @@ subroutine gen_ft4wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) real wave(nwave) complex cwave(nwave) - real pulse(6144) !512*4*3 - real dphi(0:240000-1) + real pulse(6912) !576*4*3 + real dphi(0:250000-1) integer itone(nsym) logical first data first/.true./ diff --git a/lib/ft4/getcandidates4.f90 b/lib/ft4/getcandidates4.f90 index badbbcfb5..97aeb54bf 100644 --- a/lib/ft4/getcandidates4.f90 +++ b/lib/ft4/getcandidates4.f90 @@ -61,7 +61,7 @@ subroutine getcandidates4(dd,fa,fb,syncmin,nfqso,maxcand,savg,candidate, & ! call ft4_baseline(savg,nfa,nfb,sbase) ! savsm=savsm/sbase - f_offset = -1.5*12000/512 + f_offset = -1.5*12000.0/NSPS do i=nfa+1,nfb-1 if(savsm(i).ge.savsm(i-1) .and. savsm(i).ge.savsm(i+1) .and. & savsm(i).ge.syncmin) then diff --git a/lib/ft4/subtractft4.f90 b/lib/ft4/subtractft4.f90 index 83470d7ea..ae104ddb3 100644 --- a/lib/ft4/subtractft4.f90 +++ b/lib/ft4/subtractft4.f90 @@ -9,8 +9,8 @@ subroutine subtractft4(dd,itone,f0,dt) use timer_module, only: timer - parameter (NMAX=18*3456,NFRAME=(103+2)*512) - parameter (NFFT=NMAX,NFILT=1400) + parameter (NMAX=21*3456,NSPS=576,NFFT=NMAX,NFILT=1400) + parameter (NFRAME=(103+2)*NSPS) real*4 dd(NMAX), window(-NFILT/2:NFILT/2), xjunk complex cref,camp,cfilt,cw integer itone(103) @@ -19,13 +19,13 @@ subroutine subtractft4(dd,itone,f0,dt) common/heap8/cref(NFRAME),camp(NMAX),cfilt(NMAX),cw(NMAX),xjunk(NFRAME) save first - nstart=dt*12000+1-512 + nstart=dt*12000+1-NSPS nsym=103 - nsps=512 fs=12000.0 icmplx=1 bt=1.0 - call gen_ft4wave(itone,nsym,nsps,fs,f0,cref,xjunk,icmplx,NFRAME) + nss=NSPS + call gen_ft4wave(itone,nsym,nss,fs,f0,cref,xjunk,icmplx,NFRAME) camp=0. do i=1,nframe id=nstart-1+i diff --git a/lib/ft4_decode.f90 b/lib/ft4_decode.f90 index aa27387ce..cf4acaab7 100644 --- a/lib/ft4_decode.f90 +++ b/lib/ft4_decode.f90 @@ -249,14 +249,14 @@ contains if(dobigfft) dobigfft=.false. sum2=sum(cd2*conjg(cd2))/(real(NMAX)/real(NDOWN)) if(sum2.gt.0.0) cd2=cd2/sqrt(sum2) -! Sample rate is now 12000/16 = 750 samples/second +! Sample rate is now 12000/18 = 666.67 samples/second do isync=1,2 if(isync.eq.1) then idfmin=-12 idfmax=12 idfstp=3 - ibmin=-200 - ibmax=950 + ibmin=-333 + ibmax=1000 ibstp=4 else idfmin=idfbest-4 @@ -493,7 +493,7 @@ contains call unpack77(c77,1,message,unpk77_success) if(unpk77_success.and.dosubtract) then call get_ft4_tones_from_77bits(message77,i4tone) - dt=real(ibest)/750.0 + dt=real(ibest)/666.67 call timer('subtract',0) call subtractft4(dd,i4tone,f0,dt) call timer('subtract',1) @@ -506,12 +506,12 @@ contains ndecodes=ndecodes+1 decodes(ndecodes)=message if(snr.gt.0.0) then - xsnr=10*log10(snr)-14.0 + xsnr=10*log10(snr)-14.8 else xsnr=-20.0 endif nsnr=nint(max(-20.0,xsnr)) - xdt=ibest/750.0 - 0.5 + xdt=ibest/666.67 - 0.5 !write(21,'(i6.6,i5,2x,f4.1,i6,2x,a37,2x,f4.1,3i3)') nutc,nsnr,xdt,nint(f0),message,sync,iaptype,ipass,isp call this%callback(sync,nsnr,xdt,f0,message,iaptype,qual) exit diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index b7a600bd8..0676e89be 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -1466,7 +1466,7 @@ void MainWindow::dataSink(qint64 frames) } m_fileToSave.clear (); int samples=m_TRperiod*12000; - if(m_mode=="FT4") samples=18*3456; + if(m_mode=="FT4") samples=21*3456; // the following is potential a threading hazard - not a good // idea to pass pointer to be processed in another thread @@ -3428,7 +3428,7 @@ void MainWindow::guiUpdate() if(m_TRperiod==0) m_TRperiod=60.0; txDuration=0.0; - if(m_modeTx=="FT4") txDuration=0.35 + 105*512/12000.0; // FT4 + if(m_modeTx=="FT4") txDuration=1.0 + 105*576/12000.0; // FT4 if(m_modeTx=="FT8") txDuration=1.0 + 79*1920/12000.0; // FT8 if(m_modeTx=="JT4") txDuration=1.0 + 207.0*2520/11025.0; // JT4 if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9 @@ -3748,7 +3748,7 @@ void MainWindow::guiUpdate() genft4_(message, &ichk, msgsent, const_cast (ft4msgbits), const_cast(itone), 37, 37); int nsym=103; - int nsps=4*512; + int nsps=4*576; float fsample=48000.0; float f0=ui->TxFreqSpinBox->value() - m_XIT; int nwave=(nsym+2)*nsps; @@ -5652,7 +5652,7 @@ void MainWindow::on_actionFT4_triggered() Q_EMIT FFTSize (m_FFTSize); m_hsymStop=18; setup_status_bar (bVHF); - m_toneSpacing=12000.0/512.0; + m_toneSpacing=12000.0/576.0; ui->actionFT4->setChecked(true); m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); @@ -6949,7 +6949,7 @@ void MainWindow::transmit (double snr) m_dateTimeSentTx3=QDateTime::currentDateTimeUtc(); toneSpacing=-2.0; //Transmit a pre-computed, filtered waveform. Q_EMIT sendMessage (NUM_FT4_SYMBOLS, - 512.0, ui->TxFreqSpinBox->value() - m_XIT, + 576.0, ui->TxFreqSpinBox->value() - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel(), true, false, snr, m_TRperiod); } diff --git a/widgets/plotter.cpp b/widgets/plotter.cpp index 85c662a7a..badeff57b 100644 --- a/widgets/plotter.cpp +++ b/widgets/plotter.cpp @@ -411,7 +411,7 @@ void CPlotter::DrawOverlay() //DrawOverlay() } float bw=9.0*12000.0/m_nsps; //JT9 - if(m_mode=="FT4") bw=3*12000.0/512.0; //FT4 ### (3x, or 4x???) ### + if(m_mode=="FT4") bw=3*12000.0/576.0; //FT4 ### (3x, or 4x???) ### if(m_mode=="FT8") bw=7*12000.0/1920.0; //FT8 if(m_mode=="JT4") { //JT4