mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-01 01:26:39 -04:00
Transmit FT8 using a gaussian-filtered waveform.
This commit is contained in:
parent
574ad38400
commit
25bfa3798a
@ -66,7 +66,7 @@ program ft8sim_gfsk
|
|||||||
n3=-1
|
n3=-1
|
||||||
call pack77(msg37,i3,n3,c77)
|
call pack77(msg37,i3,n3,c77)
|
||||||
call genft8(msg37,i3,n3,msgsent37,msgbits,itone)
|
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(*,*)
|
||||||
write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3
|
write(*,'(a23,a37,3x,a7,i1,a1,i1)') 'New Style FT8 Message: ',msgsent37,'i3.n3: ',i3,'.',n3
|
||||||
|
@ -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.
|
! 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)
|
parameter(MAX_SECONDS=20)
|
||||||
real wave(nwave)
|
real wave(nwave)
|
||||||
complex cwave(nwave)
|
complex cwave(nwave)
|
||||||
real pulse(5760)
|
real pulse(23040)
|
||||||
real dphi(0:(nsym+2)*nsps-1)
|
real dphi(0:(nsym+2)*nsps-1)
|
||||||
integer itone(nsym)
|
integer itone(nsym)
|
||||||
logical first
|
logical first
|
||||||
@ -43,17 +43,28 @@ subroutine gen_ft8wave(itone,nsym,nsps,fsample,f0,cwave,nwave)
|
|||||||
k=0
|
k=0
|
||||||
do j=0,nwave-1
|
do j=0,nwave-1
|
||||||
k=k+1
|
k=k+1
|
||||||
wave(k)=sin(phi)
|
if(icmplx.eq.0) then
|
||||||
cwave(k)=cmplx(cos(phi),sin(phi))
|
wave(k)=sin(phi)
|
||||||
|
else
|
||||||
|
cwave(k)=cmplx(cos(phi),sin(phi))
|
||||||
|
endif
|
||||||
phi=mod(phi+dphi(j),twopi)
|
phi=mod(phi+dphi(j),twopi)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! Compute the ramp-up and ramp-down symbols
|
! Compute the ramp-up and ramp-down symbols
|
||||||
cwave(1:nsps)=cwave(1:nsps) * &
|
if(icmplx.eq.0) then
|
||||||
(1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0
|
wave(1:nsps)=wave(1:nsps) * &
|
||||||
k1=(nsym+1)*nsps+1
|
(1.0-cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0
|
||||||
cwave(k1:k1+nsps-1)=cwave(k1:k1+nsps-1) * &
|
k1=(nsym+1)*nsps+1
|
||||||
(1.0+cos(twopi*(/(i,i=0,nsps-1)/)/(2.0*nsps)))/2.0
|
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
|
return
|
||||||
end subroutine gen_ft8wave
|
end subroutine gen_ft8wave
|
||||||
|
@ -102,6 +102,9 @@ extern "C" {
|
|||||||
void genft4_(char* msg, int* ichk, char* msgsent, int itone[],
|
void genft4_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
fortran_charlen_t, fortran_charlen_t);
|
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,
|
void gen_ft4wave_(int itone[], int* nsym, int* nsps, float* fsample, float* f0,
|
||||||
float wave[], int* nwave);
|
float wave[], int* nwave);
|
||||||
|
|
||||||
@ -6861,7 +6864,17 @@ void MainWindow::transmit (double snr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_modeTx == "FT8") {
|
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<int *>(itone),&nsym,&nsps,&fsample,&f0,foxcom_.wave,
|
||||||
|
foxcom_.wave,&icmplx,&nwave);
|
||||||
|
|
||||||
if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0;
|
if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0;
|
||||||
if(m_config.x4ToneSpacing()) toneSpacing=4*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;
|
if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1;
|
||||||
|
Loading…
Reference in New Issue
Block a user