diff --git a/lib/ft8/ft8sim_gfsk.f90 b/lib/ft8/ft8sim_gfsk.f90 index 335e63f6b..85f85910f 100644 --- a/lib/ft8/ft8sim_gfsk.f90 +++ b/lib/ft8/ft8sim_gfsk.f90 @@ -66,7 +66,7 @@ program ft8sim_gfsk n3=-1 call pack77(msg37,i3,n3,c77) call genft8(msg37,i3,n3,msgsent37,msgbits,itone) - call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,NWAVE) + call gen_ft8wave(itone,NN,NSPS,fs,f0,cwave,xjunk,1,NWAVE) !Generate complex cwave write(*,*) write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3 diff --git a/lib/ft8/gen_ft8wave.f90 b/lib/ft8/gen_ft8wave.f90 index 13abd0b3f..755b3bac1 100644 --- a/lib/ft8/gen_ft8wave.f90 +++ b/lib/ft8/gen_ft8wave.f90 @@ -1,4 +1,4 @@ -subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) +subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,wave,icmplx,nwave) ! ! generate ft8 waveform using Gaussian-filtered frequency pulses. ! @@ -6,7 +6,7 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) parameter(MAX_SECONDS=20) real wave(nwave) complex cwave(nwave) - real pulse(5760) + real pulse(23040) real dphi(0:(nsym+2)*nsps-1) integer itone(nsym) logical first @@ -43,17 +43,28 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave) k=0 do j=0,nwave-1 k=k+1 - wave(k)=sin(phi) - cwave(k)=cmplx(cos(phi),sin(phi)) + if(icmplx.eq.0) then + wave(k)=sin(phi) + else + cwave(k)=cmplx(cos(phi),sin(phi)) + endif phi=mod(phi+dphi(j),twopi) enddo ! Compute the ramp-up and ramp-down symbols - cwave(1:nsps)=cwave(1:nsps) * & - (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 - k1=(nsym+1)*nsps+1 - cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & - (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + if(icmplx.eq.0) then + wave(1:nsps)=wave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + wave(k1:k1+nsps-1)=wave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + else + cwave(1:nsps)=cwave(1:nsps) * & + (1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + k1=(nsym+1)*nsps+1 + cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * & + (1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0 + endif return end subroutine gen_ft8wave diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 616c8d257..78b70229a 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -102,6 +102,9 @@ extern "C" { void genft4_(char* msg, int* ichk, char* msgsent, int itone[], fortran_charlen_t, fortran_charlen_t); + void gen_ft8wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, + float xjunk[], float wave[], int* icmplx, int* nwave); + void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0, float wave[], int* nwave); @@ -6861,7 +6864,17 @@ void MainWindow::transmit (double snr) } if (m_modeTx == "FT8") { - toneSpacing=12000.0/1920.0; +// toneSpacing=12000.0/1920.0; + toneSpacing=-3; + int nsym=79; + int nsps=4*1920; + float fsample=48000.0; + float f0=ui->TxFreqSpinBox->value() - m_XIT; + int icmplx=0; + int nwave=(nsym+2)*nsps; + gen_ft8wave_(const_cast(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave, + foxcom_.wave,&icmplx,&nwave); + if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0; if(m_config.x4ToneSpacing()) toneSpacing=4*12000.0/1920.0; if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1;