From 087dff2f88af662404c72b9a0b636ca54df39dab Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Sat, 2 Apr 2016 01:16:10 +0000 Subject: [PATCH] Rename msksim.f90 to ldpcsim.f90. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6570 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/ldpc/Makefile.msk_osx | 9 ++-- lib/ldpc/ldpcsim.f90 | 76 ++++++++++++++++++++++++++++++++++ lib/ldpc/peg/leftHandGirth.log | 1 - 3 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 lib/ldpc/ldpcsim.f90 delete mode 100644 lib/ldpc/peg/leftHandGirth.log diff --git a/lib/ldpc/Makefile.msk_osx b/lib/ldpc/Makefile.msk_osx index 509aed2d2..45aa36a47 100644 --- a/lib/ldpc/Makefile.msk_osx +++ b/lib/ldpc/Makefile.msk_osx @@ -1,5 +1,4 @@ # Compilers -# $(CC) -DRAND_FILE=\"`pwd`/randfile\" rand.c CC = gcc CXX = g++ FC = gfortran @@ -24,14 +23,14 @@ CFLAGS = -O2 -I. %.o: %.F90 ${FC} ${FFLAGS} -c $< -all: msksim +all: ldpcsim -OBJS = msksim.o alloc.o rcode.o dec.o enc.o \ +OBJS = ldpcsim.o alloc.o rcode.o dec.o enc.o \ intio.o blockio.o check.o open.o mod2dense.o \ mod2sparse.o mod2convert.o distrib.o rand.o gran.o -msksim: $(OBJS) - $(FC) -o msksim $(OBJS) +ldpcsim:$(OBJS) + $(FC) -o ldpcsim $(OBJS) rand.o: $(CC) $(CFLAGS) -DRAND_FILE=\"./randfile\" -c rand.c diff --git a/lib/ldpc/ldpcsim.f90 b/lib/ldpc/ldpcsim.f90 new file mode 100644 index 000000000..6b9e599be --- /dev/null +++ b/lib/ldpc/ldpcsim.f90 @@ -0,0 +1,76 @@ +program msksim + +use, intrinsic :: iso_c_binding + +! To change to a new code, edit the following line and the filenames +! that contain the parity check and generator matrices. +parameter (N=198, M=126, K=72) ! M and N are global variables on the C side. + +character(50) pchk_file,gen_file +integer(1) codeword(1:N), decoded(1:K), message(1:K) +real*8 lratio(N), rxdata(N) + +pchk_file="./jtmode_codes/peg-198-72-reg4.pchk" +gen_file="./jtmode_codes/peg-198-72-reg4.gen" + +rate=real(K)/real(N) + +call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0)) + +message(1:K/2)=1 +message((K/2+1):K)=0 +call ldpc_encode(message,codeword) + +max_iterations=50 +ntrials=1000000 + +write(*,*) "Eb/N0 ngood nundetected" +do idb = 0, 11 + db=idb/2.0-0.5 + sigma=1/sqrt( 2*rate*(10**(db/10.0)) ) + + ngood=0 + nue=0 + + do itrial=1, ntrials + + do i=1,N + rxdata(i) = 2.0*(codeword(i)-0.5) + sigma*gran() + enddo + +! correct signal normalization is important for this decoder. + rxav=sum(rxdata)/N + rx2av=sum(rxdata*rxdata)/N + rxsig=sqrt(rx2av-rxav*rxav) + rxdata=rxdata/rxsig + +! s can be tuned to trade a few tenth's dB of threshold +! for an order of magnitude in UER + do i=1,N + s=0.75 + lratio(i)=exp(2.0*rxdata(i)/(s*s)) + enddo + + call ldpc_decode(lratio, decoded, max_iterations, niterations) + + if( niterations .ge. 0 ) then + nueflag=0 + do i=1,K + if( message(i) .ne. decoded(i) ) then + nueflag=1 + endif + enddo + if( nueflag .eq. 1 ) then + nue=nue+1 + else + ngood=ngood+1; + endif + endif + + enddo + + write(*,"(f4.1,1x,i8,1x,i8)") db,ngood,nue + +enddo + +end program msksim diff --git a/lib/ldpc/peg/leftHandGirth.log b/lib/ldpc/peg/leftHandGirth.log deleted file mode 100644 index bcaf4e985..000000000 --- a/lib/ldpc/peg/leftHandGirth.log +++ /dev/null @@ -1 +0,0 @@ -inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf 20 12 12 12 12 12 12 12 12 10 10 10 10 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6