diff --git a/lib/fsk4hf/genwspr5.f90 b/lib/fsk4hf/genwspr5.f90 index 1788e07bd..c052fa2ce 100644 --- a/lib/fsk4hf/genwspr5.f90 +++ b/lib/fsk4hf/genwspr5.f90 @@ -1,6 +1,6 @@ subroutine genwspr5(msg,ichk,msgsent,itone,itype) -!Encode a WSPR-LF message, produce itone() array. +! Encode a WSPR-LF message, producing array itone(). use crc include 'wsprlf_params.f90' diff --git a/lib/fsk4hf/wspr5_downsample.f90 b/lib/fsk4hf/wspr5_downsample.f90 index 8c8d4f59a..6fdb9021d 100644 --- a/lib/fsk4hf/wspr5_downsample.f90 +++ b/lib/fsk4hf/wspr5_downsample.f90 @@ -1,5 +1,8 @@ subroutine wspr5_downsample(iwave,c) +! Input: i*2 data in iwave() at sample rate 12000 Hz +! Output: Complex data in c(), sampled at 400 Hz + include 'wsprlf_params.f90' parameter (NMAX=300*12000,NFFT2=NMAX/30) integer*2 iwave(NMAX) diff --git a/lib/fsk4hf/wspr5_wav.f90 b/lib/fsk4hf/wspr5_wav.f90 index 32e4f90a6..0b09ccde2 100644 --- a/lib/fsk4hf/wspr5_wav.f90 +++ b/lib/fsk4hf/wspr5_wav.f90 @@ -1,5 +1,7 @@ subroutine wspr5_wav(baud,xdt,f0,itone,snrdb,iwave) +! Generate iwave() from itone(). + include 'wsprlf_params.f90' parameter (NMAX=300*12000) integer itone(NN) diff --git a/lib/fsk4hf/wspr5d.f90 b/lib/fsk4hf/wspr5d.f90 index dc73d7170..7059140d0 100644 --- a/lib/fsk4hf/wspr5d.f90 +++ b/lib/fsk4hf/wspr5d.f90 @@ -1,9 +1,9 @@ program wspr5d -! Simulate characteristics of a potential "WSPR-LF" mode using LDPC (300,60) -! code, OQPSK modulation, and 5 minute T/R sequences. +! Decode WSPR-LF data read from *.c5 or *.wav files. -! Q: Would it be better for central Sync array to use both I and Q channels? +! WSPR-LF is a potential WSPR-like mode intended for use at LF and MF. +! It uses an LDPC (300,60) code, OQPSK modulation, and 5 minute T/R sequences. ! Reception and Demodulation algorithm: ! 1. Compute coarse spectrum; find fc1 = approx carrier freq @@ -14,6 +14,8 @@ program wspr5d ! 6. Fit complex ploynomial for channel equalization ! 7. Get soft bits from equalized data +! Still to do: find and decode more than one signal in the specified passband. + include 'wsprlf_params.f90' parameter (NMAX=300*12000) character arg*8,message*22,cbits*50,infile*80,fname*16 @@ -111,8 +113,7 @@ program wspr5d a(2:5)=0. call twkfreq1(c,NZ,fs,a,c) !Mix c down by fc1+fc2 -!---------------------------------------------------------------- DT -! Not presently used: +! Find time offset xdt amax=0. jpk=0 iaa=0 diff --git a/lib/fsk4hf/wspr5sim.f90 b/lib/fsk4hf/wspr5sim.f90 index 5a3b78c9e..c7326a2dc 100644 --- a/lib/fsk4hf/wspr5sim.f90 +++ b/lib/fsk4hf/wspr5sim.f90 @@ -1,6 +1,7 @@ program wspr5sim -! Generate simulated data for the 5-minute "WSPR-LF" mode. +! Generate simulated data for a 5-minute "WSPR-LF" mode. Output is saved +! to a *.c5 or *.wav file. use wavhdr include 'wsprlf_params.f90' !Set various constants @@ -12,7 +13,7 @@ program wspr5sim complex c(0:NZ-1) real*8 fMHz integer itone(NN) - integer*2 iwave(NMAX) !Generated full-length waveform + integer*2 iwave(NMAX) !Generated full-length waveform ! Get command-line argument(s) nargs=iargc() @@ -45,7 +46,7 @@ program wspr5sim if(snrdb.gt.90.0) sig=1.0 txt=NN*NSPS0/12000.0 - call genwspr5(msg,ichk,msgsent,itone,itype) !Encode the message, get itone() + call genwspr5(msg,ichk,msgsent,itone,itype) !Encode the message, get itone write(*,1000) f0,xdt,txt,snrdb,nfiles,msgsent 1000 format('f0:',f9.3,' DT:',f6.2,' txt:',f6.1,' SNR:',f6.1, & ' nfiles:',i3,2x,a22) @@ -55,7 +56,7 @@ program wspr5sim phi=0.0 c0=0. k=-1 + nint(xdt/dt) - do j=1,NN + do j=1,NN !Generate OQPSK waveform from itone dphi=dphi0 if(itone(j).eq.1) dphi=dphi1 if(k.eq.0) phi=-dphi @@ -67,7 +68,7 @@ program wspr5sim if(k.ge.0 .and. k.lt.NZ) c0(k)=cmplx(cos(xphi),sin(xphi)) enddo enddo - c0=sig*c0 !Scale to requested sig level + c0=sig*c0 !Scale to requested sig level do ifile=1,nfiles if(nwav.eq.0) then @@ -83,7 +84,7 @@ program wspr5sim open(10,file=fname,status='unknown',access='stream') fMHz=10.1387d0 nmin=5 - write(10) fname,nmin,fMHz,c + write(10) fname,nmin,fMHz,c !Save to *.c5 file close(10) else call wspr5_wav(baud,xdt,f0,itone,snrdb,iwave) @@ -91,7 +92,7 @@ program wspr5sim write(fname,1102) ifile 1102 format('000000_',i4.4,'.wav') open(10,file=fname,status='unknown',access='stream') - write(10) h,iwave !Save the .wav file + write(10) h,iwave !Save to *.wav file close(10) endif write(*,1110) ifile,xdt,f0,snrdb,fname