From 8c61d303bfbb1a9594e3dabbacf23e348a6f22ef Mon Sep 17 00:00:00 2001 From: Joe Taylor <joe@princeton.edu> Date: Wed, 7 Feb 2024 11:40:25 -0500 Subject: [PATCH] WIP on superfox test progs. --- lib/superfox/Makefile | 2 +- lib/superfox/librs.a | Bin 99342 -> 0 bytes lib/superfox/rs_sf.c | 12 +--------- lib/superfox/rst8.f90 | 15 +++++++------ lib/superfox/rstest.f90 | 45 ++++++++++++++++++++++++-------------- lib/superfox/sfoxtest.f90 | 2 +- lib/superfox/wrap_rs_8.c | 4 ++++ 7 files changed, 43 insertions(+), 37 deletions(-) delete mode 100644 lib/superfox/librs.a diff --git a/lib/superfox/Makefile b/lib/superfox/Makefile index a9bf9b593..a6064d381 100644 --- a/lib/superfox/Makefile +++ b/lib/superfox/Makefile @@ -15,7 +15,7 @@ CFLAGS= -O9 -Wall %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: rs_sf.a rstest rs_125_49 rst8 +all: rs_sf.a rstest OBJS1 = rstest.o ran1.o rs_sf.a rstest: $(OBJS1) diff --git a/lib/superfox/librs.a b/lib/superfox/librs.a deleted file mode 100644 index 7acb1d5d037c86352355b7c3786561740b80c4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99342 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 diff --git a/lib/superfox/rs_sf.c b/lib/superfox/rs_sf.c index 6b3154d11..7634f62e4 100644 --- a/lib/superfox/rs_sf.c +++ b/lib/superfox/rs_sf.c @@ -37,17 +37,7 @@ void rs_encode_sf_(int *dgen, int *sent) } } -void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *decoded, - int *nerr) -/* -Decode received data recd[NN], producing decoded[KK]. Positiions of -erased symbols are specified in array era_pos[numera]. The number of -corrected errors is *nerr; if the data are uncorrectable, *nerr=-1 -is returned. -*/ +void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *nerr) { *nerr=decode_rs_sf(rs_sf,recd,era_pos,*numera); - for(int i=0; i<kk; i++) { - decoded[i]=recd[nroots+i]; - } } diff --git a/lib/superfox/rst8.f90 b/lib/superfox/rst8.f90 index 1d2de863e..d686c61ec 100644 --- a/lib/superfox/rst8.f90 +++ b/lib/superfox/rst8.f90 @@ -2,10 +2,11 @@ program rst8 character arg*8 integer*1 dat0(223) !Generated data - integer*1 parity(32) !Parity symbols + integer*1 parsym(32) !Parity symbols integer*1 cword0(255) !Generated codeword integer*1 cword(255) !Rcvd codeword with errors; will be corrected in place integer iera(0:200) !Positions of additional erasures + integer decode_rs_8 nargs=iargc() if(nargs.ne.3) then @@ -37,12 +38,12 @@ program rst8 write(*,1004) dat0(1:kk) 1004 format(20i4) - call encode_rs_8(dat0,parity) !Get parity symbols + call encode_rs_8(dat0,parsym,npad) !Get parity symbols cword0(1:kk)=dat0(1:kk) !Genetated codeword - cword0(kk+1:nn)=parity(1:nn-kk) + cword0(kk+1:nn)=parsym(1:nn-kk) write(*,1006) 1006 format(/'Encoded channel symbols') - write(*,1002) cword0(1:nn) + write(*,1004) cword0(1:nn) cword=cword0 do i=1,nerr !Introduce errors @@ -51,18 +52,18 @@ program rst8 enddo write(*,1008) nera 1008 format(/'Received channel symbols, with',i4,' errors at the end:') - write(*,1002) cword(1:nn) + write(*,1004) cword(1:nn) do i=0,nera-1 iera(i)=i enddo - call decode_rs_8(cword,iera,nera,npad) + nfixed=decode_rs_8(cword,iera,nera,npad) ibad=count(cword(1:kk).ne.cword0(1:kk)) write(*,1010) 1010 format(/'Decoded result:') - write(*,1002) cword(1:kk) + write(*,1004) cword(1:kk) maxfix=(nn-kk)/2 + nera/2 write(*,1100) nerr,nera,nfixed,maxfix 1100 format(/'nerr:',i3,' nera:',i3,' nfixed:',i3,' maxfix:',i3) diff --git a/lib/superfox/rstest.f90 b/lib/superfox/rstest.f90 index bf044c79f..5a2d98d96 100644 --- a/lib/superfox/rstest.f90 +++ b/lib/superfox/rstest.f90 @@ -1,11 +1,17 @@ program rstest - + character arg*8 - integer dgen(235) !Generated data, i*4 - integer gsym0(255) !Encoded data, Karn - integer gsym(255) !Encoded data with errors + integer dat0(255) !Message symbols + integer parsym(255) !Parity symbols + integer chansym0(255) !Encoded data, Karn + integer chansym(255) !Encoded data with errors integer dat(235) !Decoded data, i*4 +! integer, target :: parsym(255) integer iera(0:200) !Positions of erasures + integer gfpoly +! type(c_ptr) :: rs + + data gfpoly/z'11d'/ nargs=iargc() if(nargs.ne.5) then @@ -27,41 +33,46 @@ program rstest read(arg,*) nera call getarg(5,arg) read(arg,*) nerr - + ! Initialize the Karn codec nq=2**mm nfz=3 call rs_init_sf(mm,nq,nn,kk,nfz) !Initialize the Karn RS codec -! Generate random message, kk symbols with values 0 to nq-1 +! Generate kk message symbols. (Values must be in range 0 to nq-1.) do i=1,kk - dgen(i)=i + dat0(i)=i enddo - write(*,1000) -1000 format('Generated data symbols, values 0-127:') - write(*,1002) dgen(1:kk) + write(*,1000) mm,nn,kk,nera,nerr +1000 format('M:',i2,' N:',i4,' K:',i4,' nera:',i4,' nerr:',i4/ & + 'Generated data symbols') + write(*,1002) dat0(1:kk) 1002 format(20i4) - call rs_encode_sf(dgen,gsym0) !Encode dgen into gsym0 + call rs_encode_sf(dat0,parsym) !Compute parity symbols + chansym0(1:kk)=dat0(1:kk) + chansym0(kk+1:nn)=parsym(1:nn-kk) + write(*,1004) 1004 format(/'Encoded channel symbols') - write(*,1002) gsym0(1:nn) + write(*,1002) chansym0(1:nn) - gsym=gsym0 + chansym=chansym0 do i=1,nerr !Introduce errors - gsym(i)=mod(gsym(i)+1,nq) + chansym(i)=mod(chansym(i)+1,nq) enddo write(*,1006) nera 1006 format(/'Recovered channel symbols, with',i4,' errors at the start:') - write(*,1002) gsym(1:nn) + write(*,1002) chansym(1:nn) do i=0,nera-1 iera(i)=i enddo - call rs_decode_sf(gsym,iera,nera,dat,nfixed) - ibad=count(dat(1:kk).ne.dgen(1:kk)) + call rs_decode_sf(chansym,iera,nera,nfixed) + dat(1:kk)=chansym(1:kk) + ibad=count(dat(1:kk).ne.dat0(1:kk)) write(*,1008) 1008 format(/'Decoded result:') write(*,1002) dat(1:kk) diff --git a/lib/superfox/sfoxtest.f90 b/lib/superfox/sfoxtest.f90 index 648bb08f3..64a8294aa 100644 --- a/lib/superfox/sfoxtest.f90 +++ b/lib/superfox/sfoxtest.f90 @@ -13,7 +13,7 @@ program sfoxtest complex cnoise(NMAX) !Complex noise complex crcvd(NMAX) !Signal as received integer imsg(KK) !Information symbols - integer jmsg(KK) !Decoded information + integer jmsg(KK) !Decoded information integer*1 imsg1(7*KK) !Copy of imsg in 1-bit i*1 format integer idat(NN) !Encoded data, 7-bit integers integer jdat(NN) !Recovered hard-decision symbols diff --git a/lib/superfox/wrap_rs_8.c b/lib/superfox/wrap_rs_8.c index 9cd8f0a1f..ebe13c919 100644 --- a/lib/superfox/wrap_rs_8.c +++ b/lib/superfox/wrap_rs_8.c @@ -1,5 +1,9 @@ #include <stdio.h> +void encode_rs_8(unsigned char *data, unsigned char *parity, int pad); + +int decode_rs_8(unsigned char *data, int *eras_pos, int no_eras, int pad); + void encode_rs_8_(unsigned char data[], unsigned char parity[], int *npad) { encode_rs_8(data,parity,*npad); //Compute the parity symbols