From 12d5ec89028ba800428f549cf0ac01192223ff9f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 7 Dec 2015 13:44:00 +0000 Subject: [PATCH] Morphing sfrsd toward ftrsd... git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6241 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- CMakeLists.txt | 8 ++++---- lib/Makefile.jt65 | 2 +- lib/extract.f90 | 6 +++--- lib/{sfrsd2 => ftrsd}/Makefile | 18 +++++++++--------- lib/{sfrsd2 => ftrsd}/Makefile.sfrsd | 0 lib/{sfrsd2 => ftrsd}/Makefile.sfrsd3 | 0 lib/{sfrsd2 => ftrsd}/decode_rs.c | 0 lib/{sfrsd2 => ftrsd}/encode_rs.c | 0 lib/{sfrsd2 => ftrsd}/extract2.f90 | 2 +- lib/{sfrsd2/sfrsd2.c => ftrsd/ftrsd2.c} | 8 ++++---- .../ftrsd_paper}/Makefile | 0 .../ftrsd_paper}/binomial.c | 0 .../ftrsd_paper}/binomial_subs.c | 0 .../ftrsd_paper}/bmdata-2.dat | 0 .../ftrsd_paper}/bmdata.dat | 0 .../ftrsd_paper}/fig_ntrials_vs_nhard.gnuplot | 0 .../ftrsd_paper}/fig_psuccess.gnuplot | 0 lib/ftrsd/ftrsd_paper/fig_psuccess.pdf | Bin 0 -> 15283 bytes .../ftrsd_paper}/fig_wer.gnuplot | 0 .../ftrsd_paper}/fig_wer2.gnuplot | 0 .../ftrsd_paper}/ftdata-10000-tight.dat | 0 .../ftrsd_paper}/ftdata-100000-loose.dat | 0 .../ftrsd_paper}/ftdata-2.dat | 0 .../sfrsd.lyx => ftrsd/ftrsd_paper/ftrsd.lyx} | 0 .../ftrsd_paper}/mfsk.f90 | 0 .../ftrsd_paper}/prob.f90 | 0 .../ftrsd_paper}/stats-100000-24db-3.dat | 0 lib/{sfrsd2 => ftrsd}/init_rs.c | 0 lib/{sfrsd2 => ftrsd}/int.h | 0 lib/{sfrsd2 => ftrsd}/rs2.h | 0 lib/{sfrsd2 => ftrsd}/rsdtest.f90 | 0 lib/{sfrsd2 => ftrsd}/sfrsd.c | 0 lib/{sfrsd2 => ftrsd}/sfrsd2.h | 2 +- lib/{sfrsd2 => ftrsd}/sfrsd3.c | 0 34 files changed, 23 insertions(+), 23 deletions(-) rename lib/{sfrsd2 => ftrsd}/Makefile (72%) rename lib/{sfrsd2 => ftrsd}/Makefile.sfrsd (100%) rename lib/{sfrsd2 => ftrsd}/Makefile.sfrsd3 (100%) rename lib/{sfrsd2 => ftrsd}/decode_rs.c (100%) rename lib/{sfrsd2 => ftrsd}/encode_rs.c (100%) rename lib/{sfrsd2 => ftrsd}/extract2.f90 (98%) rename lib/{sfrsd2/sfrsd2.c => ftrsd/ftrsd2.c} (98%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/Makefile (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/binomial.c (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/binomial_subs.c (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/bmdata-2.dat (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/bmdata.dat (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/fig_ntrials_vs_nhard.gnuplot (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/fig_psuccess.gnuplot (100%) create mode 100644 lib/ftrsd/ftrsd_paper/fig_psuccess.pdf rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/fig_wer.gnuplot (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/fig_wer2.gnuplot (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/ftdata-10000-tight.dat (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/ftdata-100000-loose.dat (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/ftdata-2.dat (100%) rename lib/{sfrsd2/sfrsd_paper/sfrsd.lyx => ftrsd/ftrsd_paper/ftrsd.lyx} (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/mfsk.f90 (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/prob.f90 (100%) rename lib/{sfrsd2/sfrsd_paper => ftrsd/ftrsd_paper}/stats-100000-24db-3.dat (100%) rename lib/{sfrsd2 => ftrsd}/init_rs.c (100%) rename lib/{sfrsd2 => ftrsd}/int.h (100%) rename lib/{sfrsd2 => ftrsd}/rs2.h (100%) rename lib/{sfrsd2 => ftrsd}/rsdtest.f90 (100%) rename lib/{sfrsd2 => ftrsd}/sfrsd.c (100%) rename lib/{sfrsd2 => ftrsd}/sfrsd2.h (64%) rename lib/{sfrsd2 => ftrsd}/sfrsd3.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index aecf690ff..6147a5376 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -406,15 +406,15 @@ set (wsjt_FSRCS ) set (ka9q_CSRCS - lib/sfrsd2/decode_rs.c - lib/sfrsd2/encode_rs.c - lib/sfrsd2/init_rs.c + lib/ftrsd/decode_rs.c + lib/ftrsd/encode_rs.c + lib/ftrsd/init_rs.c ) set_source_files_properties (${ka9q_CSRCS} PROPERTIES COMPILE_FLAGS -Wno-sign-compare) set (wsjt_CSRCS ${ka9q_CSRCS} - lib/sfrsd2/sfrsd2.c + lib/ftrsd/ftrsd2.c lib/gran.c lib/igray.c lib/wsprd/nhash.c diff --git a/lib/Makefile.jt65 b/lib/Makefile.jt65 index 961230f68..1cbf9d001 100644 --- a/lib/Makefile.jt65 +++ b/lib/Makefile.jt65 @@ -37,7 +37,7 @@ OBJS1 = astrosub.o astro0.o astro.o sun.o coord.o tmoonsub.o \ symspec.o analytic.o db.o \ encode232.o interleave9.o\ entail.o fano232.o gran.o sync9.o decjt9.o \ - fil3.o decoder.o timer.o \ + fil3.o decoder.o timer.o exp_decode65.o fqso_first.o \ twkfreq.o symspec2.o shell.o sync65.o peakup.o slope.o xcor.o\ fillcom.o chkss2.o zplot9.o flat1.o flat2.o \ jt65a.o symspec65.o flat65.o ccf65.o decode65a.o \ diff --git a/lib/extract.f90 b/lib/extract.f90 index 46b60b6bb..28881e5ee 100644 --- a/lib/extract.f90 +++ b/lib/extract.f90 @@ -64,10 +64,10 @@ subroutine extract(s3,nadd,nqd,ntrials,naggressive,ndepth,nexp_decode, & ntry=0 nverbose=0 - call timer('sfrsd ',0) - call sfrsd2(mrsym,mrprob,mr2sym,mr2prob,ntrials,nverbose,correct, & + call timer('ftrsd ',0) + call ftrsd2(mrsym,mrprob,mr2sym,mr2prob,ntrials,nverbose,correct, & param,indx,tt,ntry) - call timer('sfrsd ',1) + call timer('ftrsd ',1) ncandidates=param(0) nhard=param(1) nsoft=param(2) diff --git a/lib/sfrsd2/Makefile b/lib/ftrsd/Makefile similarity index 72% rename from lib/sfrsd2/Makefile rename to lib/ftrsd/Makefile index f3302dd2b..61b1357ec 100644 --- a/lib/sfrsd2/Makefile +++ b/lib/ftrsd/Makefile @@ -22,20 +22,20 @@ CFLAGS = -I. -DWIN32 -DWin32 -DBIGSYM -DHAVE_STRUCT_TIMESPEC %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: libsfrsd.a +all: libftrsd.a -OBJS1 = extract2.o sfrsd2.o init_rs_int.o encode_rs_int.o decode_rs_int.o -libsfrsd.a: $(OBJS1) - ar cr libsfrsd.a $(OBJS1) - ranlib libsfrsd.a - cp libsfrsd.a .. +OBJS1 = extract2.o ftrsd2.o init_rs_int.o encode_rs_int.o decode_rs_int.o +libftrsd.a: $(OBJS1) + ar cr libftrsd.a $(OBJS1) + ranlib libftrsd.a + cp libftrsd.a .. # Build rsdtest OBJS2 = rsdtest.o rsdtest: $(OBJS2) ../libjt.a - $(FC) -o rsdtest $(OBJS2) libsfrsd.a ../libjt.a ../libpthreadGC2.a + $(FC) -o rsdtest $(OBJS2) libftrsd.a ../libjt.a ../libpthreadGC2.a -sfrsd: sfrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o +ftrsd: ftrsd.o encode_rs_int.o decode_rs_int.o init_rs_int.o gcc -g -o $@ $^ encode_rs_int.o: encode_rs.c @@ -50,4 +50,4 @@ init_rs_int.o: init_rs.c .PHONY : clean clean: - rm -rf *.o libjt.a rsdtest sfrsd + rm -rf *.o libjt.a rsdtest ftrsd diff --git a/lib/sfrsd2/Makefile.sfrsd b/lib/ftrsd/Makefile.sfrsd similarity index 100% rename from lib/sfrsd2/Makefile.sfrsd rename to lib/ftrsd/Makefile.sfrsd diff --git a/lib/sfrsd2/Makefile.sfrsd3 b/lib/ftrsd/Makefile.sfrsd3 similarity index 100% rename from lib/sfrsd2/Makefile.sfrsd3 rename to lib/ftrsd/Makefile.sfrsd3 diff --git a/lib/sfrsd2/decode_rs.c b/lib/ftrsd/decode_rs.c similarity index 100% rename from lib/sfrsd2/decode_rs.c rename to lib/ftrsd/decode_rs.c diff --git a/lib/sfrsd2/encode_rs.c b/lib/ftrsd/encode_rs.c similarity index 100% rename from lib/sfrsd2/encode_rs.c rename to lib/ftrsd/encode_rs.c diff --git a/lib/sfrsd2/extract2.f90 b/lib/ftrsd/extract2.f90 similarity index 98% rename from lib/sfrsd2/extract2.f90 rename to lib/ftrsd/extract2.f90 index c79571cf7..e878e09eb 100644 --- a/lib/sfrsd2/extract2.f90 +++ b/lib/ftrsd/extract2.f90 @@ -52,7 +52,7 @@ subroutine extract2(s3,nadd,ntrials,param,msg) call interleave63(mr2prob,-1) nverbose=0 - call sfrsd2(mrsym,mrprob,mr2sym,mr2prob,ntrials,nverbose,correct, & + call ftrsd2(mrsym,mrprob,mr2sym,mr2prob,ntrials,nverbose,correct, & param,indx,tt,ntry) ncandidates=param(0) nhard=param(1) diff --git a/lib/sfrsd2/sfrsd2.c b/lib/ftrsd/ftrsd2.c similarity index 98% rename from lib/sfrsd2/sfrsd2.c rename to lib/ftrsd/ftrsd2.c index 397c53b8b..c222f9ea2 100644 --- a/lib/sfrsd2/sfrsd2.c +++ b/lib/ftrsd/ftrsd2.c @@ -1,5 +1,5 @@ /* - sfrsd2.c + ftrsd2.c A soft-decision decoder for the JT65 (63,12) Reed-Solomon code. @@ -23,7 +23,7 @@ static void *rs; -void sfrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], +void ftrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], int* ntrials0, int* verbose0, int correct[], int param[], int indexes[], double tt[], int ntry[]) { @@ -101,9 +101,9 @@ void sfrsd2_(int mrsym[], int mrprob[], int mr2sym[], int mr2prob[], */ if(verbose) { - logfile=fopen("/tmp/sfrsd.log","a"); + logfile=fopen("/tmp/ftrsd.log","a"); if( !logfile ) { - printf("Unable to open sfrsd.log\n"); + printf("Unable to open ftrsd.log\n"); exit(1); } } diff --git a/lib/sfrsd2/sfrsd_paper/Makefile b/lib/ftrsd/ftrsd_paper/Makefile similarity index 100% rename from lib/sfrsd2/sfrsd_paper/Makefile rename to lib/ftrsd/ftrsd_paper/Makefile diff --git a/lib/sfrsd2/sfrsd_paper/binomial.c b/lib/ftrsd/ftrsd_paper/binomial.c similarity index 100% rename from lib/sfrsd2/sfrsd_paper/binomial.c rename to lib/ftrsd/ftrsd_paper/binomial.c diff --git a/lib/sfrsd2/sfrsd_paper/binomial_subs.c b/lib/ftrsd/ftrsd_paper/binomial_subs.c similarity index 100% rename from lib/sfrsd2/sfrsd_paper/binomial_subs.c rename to lib/ftrsd/ftrsd_paper/binomial_subs.c diff --git a/lib/sfrsd2/sfrsd_paper/bmdata-2.dat b/lib/ftrsd/ftrsd_paper/bmdata-2.dat similarity index 100% rename from lib/sfrsd2/sfrsd_paper/bmdata-2.dat rename to lib/ftrsd/ftrsd_paper/bmdata-2.dat diff --git a/lib/sfrsd2/sfrsd_paper/bmdata.dat b/lib/ftrsd/ftrsd_paper/bmdata.dat similarity index 100% rename from lib/sfrsd2/sfrsd_paper/bmdata.dat rename to lib/ftrsd/ftrsd_paper/bmdata.dat diff --git a/lib/sfrsd2/sfrsd_paper/fig_ntrials_vs_nhard.gnuplot b/lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot similarity index 100% rename from lib/sfrsd2/sfrsd_paper/fig_ntrials_vs_nhard.gnuplot rename to lib/ftrsd/ftrsd_paper/fig_ntrials_vs_nhard.gnuplot diff --git a/lib/sfrsd2/sfrsd_paper/fig_psuccess.gnuplot b/lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot similarity index 100% rename from lib/sfrsd2/sfrsd_paper/fig_psuccess.gnuplot rename to lib/ftrsd/ftrsd_paper/fig_psuccess.gnuplot diff --git a/lib/ftrsd/ftrsd_paper/fig_psuccess.pdf b/lib/ftrsd/ftrsd_paper/fig_psuccess.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9539d07c58d5226616292af11ae763b9d3118f58 GIT binary patch literal 15283 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