mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-07-31 13:12:30 -04:00
WIP on SuperFox synctest.
This commit is contained in:
parent
e43e81f73f
commit
0c3174f9e3
@ -14,6 +14,7 @@ subroutine hard_symbols(crcvd,f,t,jdat)
|
|||||||
ib=n*NSPS + i0
|
ib=n*NSPS + i0
|
||||||
if(n.gt.ND1) ib=(NS+n)*NSPS + i0
|
if(n.gt.ND1) ib=(NS+n)*NSPS + i0
|
||||||
ia=ib-NSPS+1
|
ia=ib-NSPS+1
|
||||||
|
if(ia.lt.1 .or. ib.gt.NMAX) cycle
|
||||||
c=crcvd(ia:ib)
|
c=crcvd(ia:ib)
|
||||||
call four2a(c,NSPS,1,-1,1) !Compute symbol spectrum
|
call four2a(c,NSPS,1,-1,1) !Compute symbol spectrum
|
||||||
do i=0,NSPS-1
|
do i=0,NSPS-1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine sync_sf(crcvd,clo,f,t)
|
subroutine sync_sf(crcvd,clo,snrdb,f,t)
|
||||||
|
|
||||||
include "sfox_params.f90"
|
include "sfox_params.f90"
|
||||||
parameter (MMAX=150,JMAX=300)
|
parameter (MMAX=150,JMAX=300)
|
||||||
@ -29,9 +29,10 @@ subroutine sync_sf(crcvd,clo,f,t)
|
|||||||
|
|
||||||
ccf=ccf/maxval(ccf)
|
ccf=ccf/maxval(ccf)
|
||||||
ipk=maxloc(ccf)
|
ipk=maxloc(ccf)
|
||||||
print*,i0,ipk(1)
|
! print*,i0,ipk(1)
|
||||||
ipk(1)=ipk(1)-MMAX-1
|
ipk(1)=ipk(1)-MMAX-1
|
||||||
ipk(2)=ipk(2)-JMAX-1
|
ipk(2)=ipk(2)-JMAX-1
|
||||||
|
if(snrdb.ne.0.0) then
|
||||||
ma=max(-MMAX,ipk(1)-10)
|
ma=max(-MMAX,ipk(1)-10)
|
||||||
mb=min(MMAX,ipk(1)+10)
|
mb=min(MMAX,ipk(1)+10)
|
||||||
ja=max(-JMAX,ipk(2)-30)
|
ja=max(-JMAX,ipk(2)-30)
|
||||||
@ -44,6 +45,7 @@ subroutine sync_sf(crcvd,clo,f,t)
|
|||||||
write(*,1300) m/120.0,line
|
write(*,1300) m/120.0,line
|
||||||
1300 format(f6.3,2x,61a1)
|
1300 format(f6.3,2x,61a1)
|
||||||
enddo
|
enddo
|
||||||
|
endif
|
||||||
t=ipk(1)/120.0
|
t=ipk(1)/120.0
|
||||||
dfreq=ipk(2)*df
|
dfreq=ipk(2)*df
|
||||||
f=1500.0+dfreq
|
f=1500.0+dfreq
|
||||||
|
@ -46,8 +46,13 @@ program synctest
|
|||||||
h=default_header(12000,NMAX)
|
h=default_header(12000,NMAX)
|
||||||
idummy=0
|
idummy=0
|
||||||
bandwidth_ratio=2500.0/6000.0
|
bandwidth_ratio=2500.0/6000.0
|
||||||
sig=sqrt(2*bandwidth_ratio)*10.0**(0.05*snrdb)
|
|
||||||
if(snrdb.gt.90.0) sig=1.0
|
do isnr=0,-30,-1
|
||||||
|
snr=isnr
|
||||||
|
if(snrdb.ne.0.0) snr=snrdb
|
||||||
|
sig=sqrt(2*bandwidth_ratio)*10.0**(0.05*snr)
|
||||||
|
if(snr.gt.90.0) sig=1.0
|
||||||
|
ngoodsync=0
|
||||||
ngood=0
|
ngood=0
|
||||||
|
|
||||||
do ifile=1,nfiles
|
do ifile=1,nfiles
|
||||||
@ -57,13 +62,9 @@ program synctest
|
|||||||
idat(i)=128*r
|
idat(i)=128*r
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
fname='000000_000001.wav'
|
|
||||||
write(fname(8:13),'(i6.6)') ifile
|
|
||||||
open(10,file=trim(fname),access='stream',status='unknown')
|
|
||||||
|
|
||||||
xnoise=0.
|
xnoise=0.
|
||||||
cnoise=0.
|
cnoise=0.
|
||||||
if(snrdb.lt.90) then
|
if(snr.lt.90) then
|
||||||
do i=1,NMAX !Generate Gaussian noise
|
do i=1,NMAX !Generate Gaussian noise
|
||||||
x=gran()
|
x=gran()
|
||||||
y=gran()
|
y=gran()
|
||||||
@ -80,24 +81,28 @@ program synctest
|
|||||||
|
|
||||||
dat=aimag(sig*cdat(1:NMAX)) + xnoise !Add generated AWGN noise
|
dat=aimag(sig*cdat(1:NMAX)) + xnoise !Add generated AWGN noise
|
||||||
fac=32767.0
|
fac=32767.0
|
||||||
if(snrdb.ge.90.0) iwave(1:NMAX)=nint(fac*dat(1:NMAX))
|
if(snr.ge.90.0) iwave(1:NMAX)=nint(fac*dat(1:NMAX))
|
||||||
if(snrdb.lt.90.0) iwave(1:NMAX)=nint(rms*dat(1:NMAX))
|
if(snr.lt.90.0) iwave(1:NMAX)=nint(rms*dat(1:NMAX))
|
||||||
write(10) h,iwave(1:NMAX) !Save the .wav file
|
|
||||||
close(10)
|
|
||||||
|
|
||||||
if(fspread.ne.0 .or. delay.ne.0) call watterson(crcvd,NMAX,NZ,fsample, &
|
if(fspread.ne.0 .or. delay.ne.0) call watterson(crcvd,NMAX,NZ,fsample,&
|
||||||
delay,fspread)
|
delay,fspread)
|
||||||
|
|
||||||
! Find signal freq and DT
|
! Find signal freq and DT
|
||||||
|
|
||||||
call sync_sf(crcvd,clo,f,t)
|
call sync_sf(crcvd,clo,snrdb,f,t)
|
||||||
ferr=f-f0
|
ferr=f-f0
|
||||||
terr=t-xdt
|
terr=t-xdt
|
||||||
if(abs(ferr).gt.10.0 .or. abs(terr).gt.0.04) cycle
|
if(abs(ferr).lt.10.0 .or. abs(terr).lt.0.02) ngoodsync=ngoodsync+1
|
||||||
|
|
||||||
call hard_symbols(crcvd,f,t,jdat)
|
call hard_symbols(crcvd,f,t,jdat)
|
||||||
nharderr=count(jdat.ne.idat)
|
nharderr=count(jdat.ne.idat)
|
||||||
|
|
||||||
|
if(snrdb.ne.0) then
|
||||||
|
fname='000000_000001.wav'
|
||||||
|
write(fname(8:13),'(i6.6)') ifile
|
||||||
|
open(10,file=trim(fname),access='stream',status='unknown')
|
||||||
|
write(10) h,iwave(1:NMAX) !Save the .wav file
|
||||||
|
close(10)
|
||||||
write(*,1100) f0,xdt
|
write(*,1100) f0,xdt
|
||||||
1100 format(/'f0:',f7.1,' xdt:',f6.2)
|
1100 format(/'f0:',f7.1,' xdt:',f6.2)
|
||||||
write(*,1112) f,t
|
write(*,1112) f,t
|
||||||
@ -106,11 +111,21 @@ program synctest
|
|||||||
1110 format('err:',f6.1,f12.2)
|
1110 format('err:',f6.1,f12.2)
|
||||||
write(*,1120) nharderr
|
write(*,1120) nharderr
|
||||||
1120 format('Hard errors:',i4)
|
1120 format('Hard errors:',i4)
|
||||||
|
endif
|
||||||
if(nharderr.le.38) ngood=ngood+1
|
if(nharderr.le.38) ngood=ngood+1
|
||||||
write(13,1200) ifile,snrdb,ferr,terr,nharderr
|
write(13,1200) ifile,snr,ferr,terr,nharderr
|
||||||
1200 format(i5,3f10.3,i5)
|
1200 format(i5,3f10.3,i5)
|
||||||
enddo
|
enddo ! ifile
|
||||||
write(*,1300) snrdb,nfiles,ngood,float(ngood)/nfiles
|
fgoodsync=float(ngoodsync)/nfiles
|
||||||
1300 format(f7.2,2i5,f7.2)
|
fgood=float(ngood)/nfiles
|
||||||
|
if(isnr.eq.0) write(*,1300)
|
||||||
|
1300 format(' SNR N fsync fgood'/ &
|
||||||
|
'----------------------------')
|
||||||
|
write(*,1310) snr,nfiles,fgoodsync,fgood
|
||||||
|
1310 format(f7.2,i6,2f7.2)
|
||||||
|
if(snrdb.ne.0.0) exit
|
||||||
|
if(fgoodsync.lt.0.5) exit
|
||||||
|
! if(fgood.eq.0.0) exit
|
||||||
|
enddo ! isnr
|
||||||
|
|
||||||
999 end program synctest
|
999 end program synctest
|
||||||
|
Loading…
x
Reference in New Issue
Block a user