1. Fix broken sync.

2. Change FST240-15 to use nsps=720
This commit is contained in:
Steven Franke 2020-06-29 15:06:11 -05:00
parent ae6ca148bd
commit 355b060454
3 changed files with 37 additions and 30 deletions

View File

@ -47,7 +47,7 @@ program fst240sim
fs=12000.0 !Sample rate (Hz)
dt=1.0/fs !Sample interval (s)
nsps=0
if(nsec.eq.15) nsps=800
if(nsec.eq.15) nsps=720
if(nsec.eq.30) nsps=1680
if(nsec.eq.60) nsps=3888
if(nsec.eq.120) nsps=8200
@ -99,7 +99,8 @@ program fst240sim
icmplx=1
f0=f00+1.5*hmod*baud
call gen_fst240wave(itone,NN,nsps,nmax,fsample,hmod,f0,icmplx,c0,wave)
k=nint(xdt/dt)
k=nint((xdt+1.0)/dt)
if(nsec.eq.15) k=nint((xdt+0.5)/dt)
c0=cshift(c0,-k)
if(k.gt.0) c0(0:k-1)=0.0
if(k.lt.0) c0(nmax+k:nmax-1)=0.0

View File

@ -71,19 +71,19 @@ subroutine gen_fst240wave(itone,nsym,nsps,nwave,fsample,hmod,f0, &
wave(1:nsps)=0.0
wave(nsps+1:nsps+nsps/4)=wave(nsps+1:nsps+nsps/4) * &
(1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
k1=nsym*nsps+3*nsps/4
k1=nsym*nsps+3*nsps/4+1
wave((nsym+1)*nsps+1:)=0.0
wave(k1:k1+nsps/4-1)=wave(k1:k1+nsps/4-1) * &
(1.0+cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
wave(k1:k1+nsps/4)=wave(k1:k1+nsps/4) * &
(1.0+cos(twopi*(/(i,i=0,nsps/4)/)/real(nsps/2)))/2.0
wave=cshift(wave,kshift)
else
cwave(1:nsps)=0.0
cwave(nsps+1:nsps+nsps/4)=cwave(nsps+1:nsps+nsps/4) * &
(1.0-cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
k1=nsym*nsps+3*nsps/4
k1=nsym*nsps+3*nsps/4+1
cwave((nsym+1)*nsps+1:)=0.0
cwave(k1:k1+nsps/4-1)=cwave(k1:k1+nsps/4-1) * &
(1.0+cos(twopi*(/(i,i=0,nsps/4-1)/)/real(nsps/2)))/2.0
cwave(k1:k1+nsps/4)=cwave(k1:k1+nsps/4) * &
(1.0+cos(twopi*(/(i,i=0,nsps/4)/)/real(nsps/2)))/2.0
cwave=cshift(cwave,kshift)
endif

View File

@ -69,9 +69,10 @@ contains
nmax=15*12000
single_decode=iand(nexp_decode,32).eq.32
if(ntrperiod.eq.15) then
nsps=800
nsps=720
nmax=15*12000
ndown=20/hmod !nss=40,80,160,400
ndown=18/hmod !nss=40,80,160,400
if(hmod.eq.4) ndown=4
if(hmod.eq.8) ndown=2
nfft1=int(nmax/ndown)*ndown
else if(ntrperiod.eq.30) then
@ -87,7 +88,6 @@ contains
ndown=5
nfft1=nmax
endif
nfft1=int(nmax/ndown)*ndown
else if(ntrperiod.eq.60) then
nsps=3888
nmax=60*12000
@ -276,7 +276,7 @@ contains
if(ijitter.eq.2) ioffset=-1
is0=isbest+ioffset
if(is0.lt.0) cycle
cframe=c2(is0:is0+164*nss-1)
cframe=c2(is0:is0+160*nss-1)
bitmetrics=0
call get_fst240_bitmetrics(cframe,nss,hmod,ntmax,bitmetrics,s4,badsync)
if(badsync) cycle
@ -392,31 +392,36 @@ contains
include 'fst240/fst240_params.f90'
complex cd0(0:np-1)
complex, allocatable, save :: csync(:)
complex, allocatable, save :: csynct(:)
complex, allocatable, save :: csync1(:),csync2(:)
complex, allocatable, save :: csynct1(:),csynct2(:)
complex ctwk(8*nss)
complex z1,z2,z3,z4,z5
logical first
integer hmod,isyncword(0:7)
integer hmod,isyncword1(0:7),isyncword2(0:7)
real f0save
data isyncword/0,1,3,2,1,0,2,3/
data isyncword1/0,1,3,2,1,0,2,3/
data isyncword2/2,3,1,0,3,2,0,1/
data first/.true./,f0save/-99.9/,nss0/-1/
save first,twopi,dt,fac,f0save,nss0
p(z1)=(real(z1*fac)**2 + aimag(z1*fac)**2)**0.5 !Compute power
if(nss.ne.nss0 .and. allocated(csync)) deallocate(csync,csynct)
if(nss.ne.nss0 .and. allocated(csync1)) deallocate(csync1,csync2,csynct1,csynct2)
if(first .or. nss.ne.nss0) then
allocate( csync(8*nss) )
allocate( csynct(8*nss) )
allocate( csync1(8*nss), csync2(8*nss) )
allocate( csynct1(8*nss), csynct2(8*nss) )
twopi=8.0*atan(1.0)
dt=1/fs
k=1
phi=0.0
phi1=0.0
phi2=0.0
do i=0,7
dphi=twopi*hmod*(isyncword(i)-1.5)/real(nss)
dphi1=twopi*hmod*(isyncword1(i)-1.5)/real(nss)
dphi2=twopi*hmod*(isyncword2(i)-1.5)/real(nss)
do j=1,nss
csync(k)=cmplx(cos(phi),sin(phi))
phi=mod(phi+dphi,twopi)
csync1(k)=cmplx(cos(phi1),sin(phi1))
csync2(k)=cmplx(cos(phi2),sin(phi2))
phi1=mod(phi1+dphi1,twopi)
phi2=mod(phi2+dphi2,twopi)
k=k+1
enddo
enddo
@ -432,7 +437,8 @@ contains
ctwk(i)=cmplx(cos(phi),sin(phi))
phi=mod(phi+dphi,twopi)
enddo
csynct=ctwk*csync
csynct1=ctwk*csync1
csynct2=ctwk*csync2
f0save=f0
endif
@ -453,14 +459,14 @@ contains
is=(i-1)*ncoh*nss
z1=0
if(i1+is.ge.1) then
z1=sum(cd0(i1+is:i1+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
z1=sum(cd0(i1+is:i1+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
endif
z2=sum(cd0(i2+is:i2+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
z3=sum(cd0(i3+is:i3+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
z4=sum(cd0(i4+is:i4+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
z2=sum(cd0(i2+is:i2+is+ncoh*nss-1)*conjg(csynct2(is+1:is+ncoh*nss)))
z3=sum(cd0(i3+is:i3+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
z4=sum(cd0(i4+is:i4+is+ncoh*nss-1)*conjg(csynct2(is+1:is+ncoh*nss)))
z5=0
if(i5+is+ncoh*nss-1.le.np) then
z5=sum(cd0(i5+is:i5+is+ncoh*nss-1)*conjg(csynct(is+1:is+ncoh*nss)))
z5=sum(cd0(i5+is:i5+is+ncoh*nss-1)*conjg(csynct1(is+1:is+ncoh*nss)))
endif
s1=s1+abs(z1)/(8*nss)
s2=s2+abs(z2)/(8*nss)
@ -482,7 +488,7 @@ contains
df=12000.0/nfft1
i0=nint(f0/df)
ih=nint( ( f0 + 1.2*sigbw/2.0 )/df)
ih=nint( ( f0 + 1.3*sigbw/2.0 )/df)
nbw=ih-i0+1
c1=0.
c1(0)=c_bigfft(i0)