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