WIP on sfoxtest.

This commit is contained in:
Joe Taylor 2024-02-07 14:24:05 -05:00
parent 8c61d303bf
commit ca5bc0e86b
3 changed files with 26 additions and 40 deletions

View File

@ -28,7 +28,7 @@ subroutine hard_symbols(crcvd,f,t,jdat)
jdat(n)=ipk(1)+256-64 jdat(n)=ipk(1)+256-64
endif endif
enddo enddo
jdat(NN-1:nn)=0 ! jdat(NN-1:nn)=0
return return
end subroutine hard_symbols end subroutine hard_symbols

View File

@ -21,20 +21,10 @@ void rs_init_sf_(int *mm, int *nq, int *nn0, int *kk0, int *nfz)
first=0; first=0;
} }
void rs_encode_sf_(int *dgen, int *sent) void rs_encode_sf_(int *msg, int *parsym)
// Encode the information symbols dgen[KK], producing channel symbols sent[NN]. // Encode information symbols msg[KK], producing parity symbols parsym[nroots].
{ {
int b[256]; //These are the parity symbols encode_rs_sf(rs_sf,msg,parsym); //Compute the parity symbols
encode_rs_sf(rs_sf,dgen,b); //Compute the parity symbols
// Copy parity symbols into sent[] array, followed by information symbols
for (int i=0; i< nn; i++) {
if(i<nroots) {
sent[i]=b[i];
} else {
sent[i]=dgen[i-nroots];
}
}
} }
void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *nerr) void rs_decode_sf_(int *recd, int *era_pos, int *numera, int *nerr)

View File

@ -12,13 +12,15 @@ program sfoxtest
complex clo(NMAX) !Complex Local Oscillator complex clo(NMAX) !Complex Local Oscillator
complex cnoise(NMAX) !Complex noise complex cnoise(NMAX) !Complex noise
complex crcvd(NMAX) !Signal as received complex crcvd(NMAX) !Signal as received
integer imsg(KK) !Information symbols integer msg0(KK) !Information symbols
integer jmsg(KK) !Decoded information ! integer msg(KK) !Decoded information
integer*1 imsg1(7*KK) !Copy of imsg in 1-bit i*1 format integer parsym(NN-KK) !Parity symbols
integer idat(NN) !Encoded data, 7-bit integers ! integer*1 msg1(MM*KK) !Copy of msg0 in 1-bit i*1 format
integer jdat(NN) !Recovered hard-decision symbols integer chansym0(NN) !Encoded data, 7-bit integers
integer chansym(NN) !Recovered hard-decision symbols
integer iera(NN)
character fname*17,arg*12 character fname*17,arg*12
character c357*357,c14*14 !,chkmsg*15 ! character c357*357,c14*14 !,chkmsg*15
nargs=iargc() nargs=iargc()
if(nargs.ne.8) then if(nargs.ne.8) then
@ -51,23 +53,19 @@ program sfoxtest
bandwidth_ratio=2500.0/6000.0 bandwidth_ratio=2500.0/6000.0
! Generate a message ! Generate a message
msg0=0
do i=1,KK-2 do i=1,KK-2
imsg(i)=i msg0(i)=i
enddo enddo
! Append a CRC here ...
! Append a 14-bit CRC
imsg(KK-1:KK)=0
write(c357,'(51b7.7)') imsg(1:KK)
read(c357,'(357i1)') imsg1
call get_crc14(imsg1,7*KK,ncrc0)
write(c14,'(b14.14)') ncrc0
read(c14,'(2b7.7)') imsg(KK-1:KK)
call rs_init_sf(MM,NQ,NN,KK,NFZ) !Initialize the Karn codec call rs_init_sf(MM,NQ,NN,KK,NFZ) !Initialize the Karn codec
call rs_encode_sf(imsg,idat) !Encode imsg into idat call rs_encode_sf(msg0,parsym) !Compute parity symbols
chansym0(1:kk)=msg0(1:kk)
chansym0(kk+1:nn)=parsym(1:nn-kk)
! Generate cdat (SuperFox waveform) and clo (LO for sync detection) ! Generate cdat (SuperFox waveform) and clo (LO for sync detection)
call gen_sfox(idat,f0,fsample,syncwidth,cdat,clo) call gen_sfox(chansym0,f0,fsample,syncwidth,cdat,clo)
do isnr=0,-30,-1 do isnr=0,-30,-1
snr=isnr snr=isnr
@ -95,7 +93,7 @@ program sfoxtest
if(f0.eq.0.0) then if(f0.eq.0.0) then
f1=1500.0 + 200.0*(ran1(idummy)-0.5) f1=1500.0 + 200.0*(ran1(idummy)-0.5)
xdt=2.0*(ran1(idummy)-0.5) xdt=2.0*(ran1(idummy)-0.5)
call gen_sfox(idat,f1,fsample,syncwidth,cdat,clo) call gen_sfox(chansym0,f1,fsample,syncwidth,cdat,clo)
endif endif
crcvd=0. crcvd=0.
@ -115,16 +113,13 @@ program sfoxtest
terr=t-xdt terr=t-xdt
if(abs(ferr).lt.5.0 .and. abs(terr).lt.0.01) ngoodsync=ngoodsync+1 if(abs(ferr).lt.5.0 .and. abs(terr).lt.0.01) ngoodsync=ngoodsync+1
call hard_symbols(crcvd,f,t,jdat) !Get hard symbol values call hard_symbols(crcvd,f,t,chansym) !Get hard symbol values
nera=0 nera=0
call rs_decode_sf(idat,iera,nera,jmsg,nfixed) !Call the decoder chansym=mod(chansym,nq) !Enforce 0 to nq-1
write(c357,'(51b7.7)') jmsg(1:KK) nharderr=count(chansym.ne.chansym0) !Count hard errors
read(c357,'(357i1)') imsg11
call get_crc14(imsg1,7*KK,ncrc)
nharderr=count(jdat.ne.idat) !Count hard errors
ntot=ntot+nharderr ntot=ntot+nharderr
nworst=max(nworst,nharderr) nworst=max(nworst,nharderr)
call rs_decode_sf(chansym,iera,nera,nfixed) !Call the decoder
if(snrdb.ne.0) then if(snrdb.ne.0) then
fname='000000_000001.wav' fname='000000_000001.wav'
@ -146,6 +141,7 @@ program sfoxtest
! write(13,1200) ifile,snr,ferr,terr,nharderr ! write(13,1200) ifile,snr,ferr,terr,nharderr
!1200 format(i5,3f10.3,i5) !1200 format(i5,3f10.3,i5)
enddo ! ifile enddo ! ifile
! print*,'D'
fgoodsync=float(ngoodsync)/nfiles fgoodsync=float(ngoodsync)/nfiles
fgood=float(ngood)/nfiles fgood=float(ngood)/nfiles
if(isnr.eq.0) write(*,1300) if(isnr.eq.0) write(*,1300)