mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-03 06:32:26 -04:00
Add erasure capability to rs_125_49.
This commit is contained in:
parent
c8f8356c28
commit
5d07f86334
@ -2,33 +2,32 @@ program rs_125_49
|
|||||||
|
|
||||||
include 'sfox_params.f90'
|
include 'sfox_params.f90'
|
||||||
character arg*8
|
character arg*8
|
||||||
! integer dgen(KK) !Generated data, i*4
|
|
||||||
integer dgen(256) !Generated data, i*4
|
integer dgen(256) !Generated data, i*4
|
||||||
integer*1 dgen1(7*KK) !Copy of dgen in 1-bit i*1 format
|
integer*1 dgen1(7*KK) !Copy of dgen in 1-bit i*1 format
|
||||||
integer gsym0(NN) !Encoded data, Karn
|
integer gsym0(NN) !Encoded data, Karn
|
||||||
integer gsym(NN) !Encoded data with errors
|
integer gsym(NN) !Encoded data with errors
|
||||||
! integer dat(KK) !Decoded data, i*4
|
|
||||||
integer dat(256) !Decoded data, i*4
|
integer dat(256) !Decoded data, i*4
|
||||||
integer era(NN)
|
integer iera(0:100) !Positions of erasures
|
||||||
character c357*357,c14*14,chkmsg*15
|
character c357*357,c14*14,chkmsg*15
|
||||||
|
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.1) then
|
if(nargs.ne.2) then
|
||||||
print*,'Usage: rs_125_49 nerr'
|
print*,'Usage: rs_125_49 nera nerr'
|
||||||
print*,'Example: rs_125_49 38'
|
print*,'Example: rs_125_49 0 38'
|
||||||
go to 999
|
go to 999
|
||||||
endif
|
endif
|
||||||
call getarg(1,arg)
|
call getarg(1,arg)
|
||||||
|
read(arg,*) nera
|
||||||
|
call getarg(2,arg)
|
||||||
read(arg,*) nerr
|
read(arg,*) nerr
|
||||||
|
|
||||||
! Initialize the Karn codec
|
! Initialize the Karn codec
|
||||||
|
call rs_init_sf(MM,NQ,NN,KK,NFZ)
|
||||||
|
|
||||||
call rs_init_sf(MM,NQ,NN,KK,NFZ) !Initialize RS(127,51)
|
! Generate a message with sequential values in the range 0 to NQ-1
|
||||||
|
|
||||||
! Generate random message with values 0 to NQ-1
|
|
||||||
dgen=0
|
dgen=0
|
||||||
do i=1,KK-2
|
do i=1,KK-2
|
||||||
dgen(i)=int(NQ*ran1(idum))
|
dgen(i)=i
|
||||||
enddo
|
enddo
|
||||||
write(c357,'(51b7.7)') dgen(1:KK)
|
write(c357,'(51b7.7)') dgen(1:KK)
|
||||||
read(c357,'(357i1)') dgen1
|
read(c357,'(357i1)') dgen1
|
||||||
@ -48,18 +47,18 @@ program rs_125_49
|
|||||||
|
|
||||||
gsym0(KK-1:KK)=0 !Puncture by removing the CRC
|
gsym0(KK-1:KK)=0 !Puncture by removing the CRC
|
||||||
gsym=gsym0
|
gsym=gsym0
|
||||||
do i=1,nerr !Introduce errors
|
do i=1,nerr !Introduce errors in the first nerr positions
|
||||||
gsym(i)=mod(gsym(i)+1,NQ)
|
gsym(i)=mod(gsym(i)+1,NQ)
|
||||||
enddo
|
enddo
|
||||||
write(*,1006)
|
write(*,1006)
|
||||||
1006 format(/'Recovered channel symbols, punctured and with additional errors:')
|
1006 format(/'Recovered channel symbols, punctured and with additional errors:')
|
||||||
write(*,1002) gsym(1:NN)
|
write(*,1002) gsym(1:NN)
|
||||||
|
|
||||||
! era(1)=KK-1
|
do i=0,nera-1 !Specify locations of symbols to be erased
|
||||||
! era(2)=KK
|
iera(i)=i
|
||||||
nera=0
|
enddo
|
||||||
|
|
||||||
call rs_decode_sf(gsym,era,nera,dat,nfixed)
|
call rs_decode_sf(gsym,iera,nera,dat,nfixed) !Call the decoder
|
||||||
write(c357,'(51b7.7)') dat(1:KK)
|
write(c357,'(51b7.7)') dat(1:KK)
|
||||||
read(c357,'(357i1)') dgen1
|
read(c357,'(357i1)') dgen1
|
||||||
call get_crc14(dgen1,7*KK,ncrc)
|
call get_crc14(dgen1,7*KK,ncrc)
|
||||||
@ -67,9 +66,11 @@ program rs_125_49
|
|||||||
write(*,1008)
|
write(*,1008)
|
||||||
1008 format(/'Decoded result:')
|
1008 format(/'Decoded result:')
|
||||||
chkmsg='Decode failed'
|
chkmsg='Decode failed'
|
||||||
if(nfixed.ge.0 .and. ncrc.eq.0) chkmsg='CRC check OK'
|
if(nfixed.ge.0 .and. ncrc.eq.0) chkmsg='CRC OK'
|
||||||
write(*,1002) dat(1:KK)
|
write(*,1002) dat(1:KK)
|
||||||
write(*,1100) nerr,nfixed,trim(chkmsg)
|
maxfix=(nn-kk)/2 + nera/2
|
||||||
1100 format(/'nerr:',i3,' nfixed:',i3,', ',a)
|
write(*,1100) nerr,nera,nfixed,maxfix,trim(chkmsg)
|
||||||
|
1100 format(/'punctured: 2',' nerr:',i3,' nera:',i3,' nfixed:',i3, &
|
||||||
|
' maxfix:',i3,3x,a)
|
||||||
|
|
||||||
999 end program rs_125_49
|
999 end program rs_125_49
|
||||||
|
Loading…
x
Reference in New Issue
Block a user