mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-23 18:02:29 -04:00
85 lines
2.3 KiB
Fortran
85 lines
2.3 KiB
Fortran
program rstest
|
|
|
|
character arg*8
|
|
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
|
|
print*,'Usage: rstest M N K nera nerr'
|
|
print*,'Examples: rstest 6 63 12 0 25'
|
|
print*,' rstest 7 127 51 0 38'
|
|
print*,' rstest 8 255 51 0 102'
|
|
print*,' rstest 8 255 223 0 16'
|
|
go to 999
|
|
endif
|
|
nkv=0
|
|
call getarg(1,arg)
|
|
read(arg,*) mm
|
|
call getarg(2,arg)
|
|
read(arg,*) nn
|
|
call getarg(3,arg)
|
|
read(arg,*) kk
|
|
call getarg(4,arg)
|
|
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 kk message symbols. (Values must be in range 0 to nq-1.)
|
|
do i=1,kk
|
|
dat0(i)=i
|
|
enddo
|
|
|
|
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(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) chansym0(1:nn)
|
|
|
|
chansym=chansym0
|
|
do i=1,nerr !Introduce errors
|
|
chansym(i)=mod(chansym(i)+1,nq)
|
|
enddo
|
|
write(*,1006) nera
|
|
1006 format(/'Recovered channel symbols, with',i4,' errors at the start:')
|
|
write(*,1002) chansym(1:nn)
|
|
|
|
do i=0,nera-1
|
|
iera(i)=i
|
|
enddo
|
|
|
|
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)
|
|
maxfix=(nn-kk)/2 + nera/2
|
|
write(*,1100) nerr,nera,nfixed,maxfix
|
|
1100 format(/'nerr:',i3,' nera:',i3,' nfixed:',i3,' maxfix:',i3)
|
|
|
|
999 end program rstest
|
|
|