SVN r8748
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
<HTML><HEAD>
|
||||
|
||||
<TITLE> Examples of LDPC Program Usage </TITLE>
|
||||
|
||||
</HEAD><BODY>
|
||||
|
||||
|
||||
<H1> Examples of LDPC Program Usage </H1>
|
||||
|
||||
<P>Below, are some command files containing examples of the use of
|
||||
the <A HREF="progs.html">LDPC programs</A>, together with the output I
|
||||
obtained for these examples. Output on other machines might
|
||||
conceivably be slightly different, due to different round-off errors.
|
||||
The <A HREF="run-examples"><TT>run-examples</TT></A> script runs all the example
|
||||
scripts and compares their output with the outputs that I obtained (on
|
||||
a Pentium machine).
|
||||
|
||||
<P><A HREF="ex-ham7b">ex-ham7b</A>,
|
||||
output in <A HREF="ex-ham7b-out">ex-ham7b-out</A>
|
||||
<BLOCKQUOTE>
|
||||
A (7,4) Hamming code used with a BSC.
|
||||
Demonstrates encoding of random messages and decoding to minimize
|
||||
bit error rate by exhaustive enumeration.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-ham7a">ex-ham7a</A>,
|
||||
output in <A HREF="ex-ham7a-out">ex-ham7a-out</A>
|
||||
<BLOCKQUOTE>
|
||||
A (7,4) Hamming code used with an AWGN channel. Tested using zero messages.
|
||||
Decoded by exhaustive enumeration to minimize either block or bit error rate,
|
||||
and by probability propagation.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-dep">ex-dep</A>,
|
||||
output in <A HREF="ex-dep-out">ex-dep-out</A>
|
||||
<BLOCKQUOTE>
|
||||
Examples of how parity check matrices with linearly dependent rows (ie,
|
||||
redundant parity checks) are handled. This is probably not of
|
||||
great interest to most users.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-ldpc-encode">ex-ldpc-encode</A>,
|
||||
output in <A HREF="ex-ldpc-encode-out">ex-ldpc-encode-out</A>
|
||||
<BLOCKQUOTE>
|
||||
Encodes messages with an LDPC code using sparse, dense, and mixed
|
||||
representations of the generator matrix.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-ldpc36-1000a">ex-ldpc36-1000a</A>,
|
||||
output in <A HREF="ex-ldpc36-1000a-out">ex-ldpc36-1000a-out</A>
|
||||
<BLOCKQUOTE>
|
||||
A (2000,1000) LDPC code with 3 checks per bit and 6 bits per check.
|
||||
Three encoding methods are tried out, and the code is
|
||||
tested on an AWGN channel at various noise levels, using random messages.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-ldpc36-5000a">ex-ldpc36-5000a</A>,
|
||||
output in <A HREF="ex-ldpc36-5000a-out">ex-ldpc36-5000a-out</A>
|
||||
<BLOCKQUOTE>
|
||||
A (10000,5000) LDPC code with 3 checks per bit and 6 bits per check.
|
||||
Tested on an AWGN channel at various noise levels, using random messages.
|
||||
Pipes are used to avoid creating lots of files.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-ldpcvar-5000a">ex-ldpcvar-5000a</A>,
|
||||
output in <A HREF="ex-ldpcvar-5000a-out">ex-ldpcvar-5000a-out</A>
|
||||
<BLOCKQUOTE>
|
||||
A (10000,5000) LDPC code with the number of checks per bit varying from 2 to 7.
|
||||
Tested on an AWGN channel at various noise levels, using random messages.
|
||||
Pipes are used to avoid creating lots of files. Performance is better than
|
||||
for the code above in which the number of checks is the same for all bits.
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P><A HREF="ex-wrong-model">ex-wrong-model</A>,
|
||||
output in <A HREF="ex-wrong-model-out">ex-wrong-model-out</A>
|
||||
<BLOCKQUOTE>
|
||||
Tests what happens when messages are decoded using the wrong noise
|
||||
model, including using the right type of model but with the wrong
|
||||
noise level, and using the wrong type of model (ie, using an AWLN model
|
||||
for messages transmitted through an AWGN channel, or vice versa).
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<HR>
|
||||
|
||||
<A HREF="index.html">Back to index for LDPC software</A>
|
||||
|
||||
</BODY></HTML>
|
||||
@@ -0,0 +1,78 @@
|
||||
module jt65_test
|
||||
|
||||
! Test the JT65 decoder for WSJT-X
|
||||
|
||||
implicit none
|
||||
|
||||
public :: test
|
||||
integer, parameter, public :: NZMAX=60*12000
|
||||
integer, public :: nft
|
||||
|
||||
contains
|
||||
|
||||
subroutine test (dd,nutc,nflow,nfhigh,nfqso,ntol,nsubmode,n2pass,nrobust &
|
||||
,ntrials,naggressive,ndepth,mycall,hiscall,hisgrid,nexp_decode, &
|
||||
nQSOProgress,ljt65apon)
|
||||
use timer_module, only: timer
|
||||
use jt65_decode
|
||||
implicit none
|
||||
|
||||
include 'constants.f90'
|
||||
real, intent(in) :: dd(NZMAX)
|
||||
integer, intent(in) :: nutc, nflow, nfhigh, nfqso, ntol, nsubmode, n2pass &
|
||||
, ntrials, naggressive, ndepth, nexp_decode, nQSOProgress
|
||||
logical, intent(in) :: nrobust,ljt65apon
|
||||
character(len=12), intent(in) :: mycall, hiscall
|
||||
character(len=6), intent(in) :: hisgrid
|
||||
type(jt65_decoder) :: my_decoder
|
||||
logical nclearave !### Should be a dummy arg?
|
||||
nclearave=.false.
|
||||
|
||||
call timer('jt65a ',0)
|
||||
call my_decoder%decode(my_callback,dd,npts=52*12000,newdat=.true., &
|
||||
nutc=nutc,nf1=nflow,nf2=nfhigh,nfqso=nfqso,ntol=ntol, &
|
||||
nsubmode=nsubmode, minsync=-1,nagain=.false.,n2pass=n2pass, &
|
||||
nrobust=nrobust,ntrials=ntrials,naggressive=naggressive, &
|
||||
ndepth=ndepth,emedelay=0.0,clearave=nclearave,mycall=mycall, &
|
||||
hiscall=hiscall,hisgrid=hisgrid,nexp_decode=nexp_decode, &
|
||||
nQSOProgress=nQSOProgress,ljt65apon=ljt65apon)
|
||||
call timer('jt65a ',1)
|
||||
end subroutine test
|
||||
|
||||
subroutine my_callback (this,sync,snr,dt,freq,drift,nflip,width, &
|
||||
decoded,ft,qual,smo,sum,minsync)
|
||||
use jt65_decode
|
||||
implicit none
|
||||
|
||||
class(jt65_decoder), intent(inout) :: this
|
||||
real, intent(in) :: sync
|
||||
integer, intent(in) :: snr
|
||||
real, intent(in) :: dt
|
||||
integer, intent(in) :: freq
|
||||
integer, intent(in) :: drift
|
||||
integer, intent(in) :: nflip
|
||||
real, intent(in) :: width
|
||||
character(len=22), intent(in) :: decoded
|
||||
integer, intent(in) :: ft
|
||||
integer, intent(in) :: qual
|
||||
integer, intent(in) :: smo
|
||||
integer, intent(in) :: sum
|
||||
integer, intent(in) :: minsync
|
||||
|
||||
integer nwidth
|
||||
real t
|
||||
|
||||
if(minsync+nflip+qual.eq.-9999) stop !Silence compiler warning
|
||||
t=max(0.0,width*width-7.2)
|
||||
nwidth=max(nint(sqrt(t)),2)
|
||||
!### deal with nflip here! ###
|
||||
!### also single_decode, csync, etc... ###
|
||||
write(*,1012) nint(sync),snr,dt,freq,drift,nwidth, &
|
||||
decoded,ft,sum,smo
|
||||
1012 format(i4,i5,f6.2,i5,i4,i3,1x,a22,' JT65',3i3)
|
||||
nft=ft
|
||||
call flush(6)
|
||||
|
||||
end subroutine my_callback
|
||||
|
||||
end module jt65_test
|
||||
Reference in New Issue
Block a user