From c051168a6b19a387202f1d0c653ae4bbe3a5179b Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 8 Feb 2024 10:45:43 -0500 Subject: [PATCH] WIP: sfoxtest now running with parameters set in sfox_mod. --- CMakeLists.txt | 1 + lib/superfox/Makefile | 4 ---- lib/superfox/gen_sfox.f90 | 3 ++- lib/superfox/hard_symbols.f90 | 3 ++- lib/superfox/sfoxtest.f90 | 35 ++++++++++++++++++++++++----------- lib/superfox/sync_sf.f90 | 3 ++- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69e844245..4e25ba34c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -342,6 +342,7 @@ set (wsjt_FSRCS lib/wavhdr.f90 lib/qra/q65/q65_encoding_modules.f90 lib/ft8/ft8_a7.f90 + lib/superfox/sfox_mod.f90 # remaining non-module sources lib/addit.f90 diff --git a/lib/superfox/Makefile b/lib/superfox/Makefile index a6064d381..9a25fcda1 100644 --- a/lib/superfox/Makefile +++ b/lib/superfox/Makefile @@ -25,10 +25,6 @@ OBJS2 = rs_125_49.o ran1.o get_crc14.o rs_sf.a rs_125_49: $(OBJS2) $(FC) -o rs_125_49 $(OBJS2) rs_sf.a -#OBJS3 = rst8.o encode_rs_8.o decode_rs_8.o wrap_rs_8.o -rst8: rst8.o wrap_rs_8.o - $(FC) -o rst8 rst8.o wrap_rs_8.o librs.a - rs_sf.a: init_rs_sf.o encode_rs_sf.o decode_rs_sf.o rs_sf.o ar -crs rs_sf.a init_rs_sf.o encode_rs_sf.o decode_rs_sf.o rs_sf.o diff --git a/lib/superfox/gen_sfox.f90 b/lib/superfox/gen_sfox.f90 index ae979ecbc..5b2fa3a21 100644 --- a/lib/superfox/gen_sfox.f90 +++ b/lib/superfox/gen_sfox.f90 @@ -1,6 +1,7 @@ subroutine gen_sfox(idat,f0,fsample,syncwidth,cdat,clo) - include "sfox_params.f90" + use sfox_mod +! include "sfox_params.f90" complex cdat(NMAX) !Generated complex waveform complex clo(NMAX) !Complex Local Oscillator complex w,wstep diff --git a/lib/superfox/hard_symbols.f90 b/lib/superfox/hard_symbols.f90 index ad800866f..730bb7c5e 100644 --- a/lib/superfox/hard_symbols.f90 +++ b/lib/superfox/hard_symbols.f90 @@ -1,6 +1,7 @@ subroutine hard_symbols(crcvd,f,t,jdat) - include "sfox_params.f90" + use sfox_mod +! include "sfox_params.f90" complex crcvd(NMAX) !Signal as received complex c(0:NSPS-1) !Work array, one symbol long real s(0:NSPS-1) !Power spectrum diff --git a/lib/superfox/sfoxtest.f90 b/lib/superfox/sfoxtest.f90 index 4af90c36b..a8629c39b 100644 --- a/lib/superfox/sfoxtest.f90 +++ b/lib/superfox/sfoxtest.f90 @@ -3,7 +3,8 @@ program sfoxtest ! Generate and test sync waveforms for possible use in SuperFox signal. use wavhdr - include "sfox_params.f90" + use sfox_mod +! include "sfox_params.f90" type(hdr) h !Header for .wav file integer*2 iwave(NMAX) !Generated i*2 waveform real*4 xnoise(NMAX) !Random noise @@ -12,15 +13,13 @@ program sfoxtest complex clo(NMAX) !Complex Local Oscillator complex cnoise(NMAX) !Complex noise complex crcvd(NMAX) !Signal as received - integer msg0(KK) !Information symbols -! integer msg(KK) !Decoded information - integer parsym(NN-KK) !Parity symbols -! integer*1 msg1(MM*KK) !Copy of msg0 in 1-bit i*1 format - integer chansym0(NN) !Encoded data, 7-bit integers - integer chansym(NN) !Recovered hard-decision symbols - integer iera(NN) + + integer, allocatable :: msg0(:) !Information symbols + integer, allocatable :: parsym(:) !Parity symbols + integer, allocatable :: chansym0(:) !Encoded data, 7-bit integers + integer, allocatable :: chansym(:) !Recovered hard-decision symbols + integer, allocatable :: iera(:) !Positions of erasures character fname*17,arg*12 -! character c357*357,c14*14 !,chkmsg*15 nargs=iargc() if(nargs.ne.8) then @@ -45,6 +44,20 @@ program sfoxtest call getarg(8,arg) read(arg,*) snrdb + call sfox_init + baud=12000.0/NSPS + bw=NQ*baud + + write(*,1000) MM,NN,KK,NSPS,baud,bw +1000 format('M:',i2,' Base code: (',i3,',',i3,') NSPS:',i5, & + ' Symbol Rate:',f7.3,' BW:',f6.0) + + allocate(msg0(1:KK)) + allocate(parsym(1:NN-KK)) + allocate(chansym0(1:NN)) + allocate(chansym(1:NN)) + allocate(iera(1:NN)) + rms=100. fsample=12000.0 !Sample rate (Hz) baud=12000.0/nsps !Keying rate, 11.719 baud for nsps=1024 @@ -67,7 +80,7 @@ program sfoxtest ! Generate cdat (SuperFox waveform) and clo (LO for sync detection) call gen_sfox(chansym0,f0,fsample,syncwidth,cdat,clo) - do isnr=0,-30,-1 + do isnr=0,-20,-1 snr=isnr if(snrdb.ne.0.0) snr=snrdb sig=sqrt(2*bandwidth_ratio)*10.0**(0.05*snr) @@ -147,7 +160,7 @@ program sfoxtest fgoodsync=float(ngoodsync)/nfiles fgood=float(ngood)/nfiles if(isnr.eq.0) write(*,1300) -1300 format(' SNR N fsync fgood averr worst'/ & +1300 format(' SNR N fsync fgood averr worst'/ & '-----------------------------------------') ave_harderr=float(ntot)/nfiles write(*,1310) snr,nfiles,fgoodsync,fgood,ave_harderr,nworst diff --git a/lib/superfox/sync_sf.f90 b/lib/superfox/sync_sf.f90 index 5ba11a63d..3b91781c3 100644 --- a/lib/superfox/sync_sf.f90 +++ b/lib/superfox/sync_sf.f90 @@ -1,6 +1,7 @@ subroutine sync_sf(crcvd,clo,snrdb,f,t) - include "sfox_params.f90" + use sfox_mod +! include "sfox_params.f90" parameter (MMAX=150,JMAX=300) real ccf(-MMAX:MMAX,-JMAX:JMAX) !2D CCF: DT, dFreq offsets complex clo(NMAX) !Complex Local Oscillator