2015-11-17 20:28:12 -05:00
|
|
|
subroutine demod64a(s3,nadd,afac1,mrsym,mrprob,mr2sym,mr2prob,ntest,nlow)
|
|
|
|
|
|
|
|
! Demodulate the 64-bin spectra for each of 63 symbols in a frame.
|
|
|
|
|
|
|
|
! Parameters
|
|
|
|
! nadd number of spectra already summed
|
|
|
|
! mrsym most reliable symbol value
|
|
|
|
! mr2sym second most likely symbol value
|
|
|
|
! mrprob probability that mrsym was the transmitted value
|
|
|
|
! mr2prob probability that mr2sym was the transmitted value
|
|
|
|
|
|
|
|
implicit real*8 (a-h,o-z)
|
|
|
|
real*4 s3(64,63),afac1
|
|
|
|
integer mrsym(63),mrprob(63),mr2sym(63),mr2prob(63)
|
|
|
|
|
|
|
|
if(nadd.eq.-999) return
|
|
|
|
afac=afac1 * float(nadd)**0.64
|
|
|
|
scale=255.999
|
|
|
|
|
|
|
|
! Compute average spectral value
|
|
|
|
ave=sum(s3)/(64.*63.)
|
|
|
|
i1=1 !Silence warning
|
|
|
|
i2=1
|
|
|
|
|
|
|
|
! Compute probabilities for most reliable symbol values
|
|
|
|
do j=1,63
|
|
|
|
s1=-1.e30
|
2016-03-12 23:22:31 -05:00
|
|
|
psum=0.
|
2015-11-17 20:28:12 -05:00
|
|
|
do i=1,64
|
|
|
|
x=min(afac*s3(i,j)/ave,50.d0)
|
|
|
|
psum=psum+s3(i,j)
|
|
|
|
if(s3(i,j).gt.s1) then
|
|
|
|
s1=s3(i,j)
|
|
|
|
i1=i !Most reliable
|
|
|
|
endif
|
|
|
|
enddo
|
2015-12-09 16:02:37 -05:00
|
|
|
if(psum.eq.0.0) psum=1.e-6
|
2015-11-17 20:28:12 -05:00
|
|
|
|
|
|
|
s2=-1.e30
|
|
|
|
do i=1,64
|
|
|
|
if(i.ne.i1 .and. s3(i,j).gt.s2) then
|
|
|
|
s2=s3(i,j)
|
|
|
|
i2=i !Second most reliable
|
|
|
|
endif
|
|
|
|
enddo
|
2016-03-12 23:22:31 -05:00
|
|
|
p1=s1/psum !Symbol metrics for ftrsd
|
|
|
|
p2=s2/psum
|
2015-11-17 20:28:12 -05:00
|
|
|
mrsym(j)=i1-1
|
|
|
|
mr2sym(j)=i2-1
|
|
|
|
mrprob(j)=scale*p1
|
|
|
|
mr2prob(j)=scale*p2
|
|
|
|
enddo
|
|
|
|
|
|
|
|
nlow=0
|
|
|
|
do j=1,63
|
|
|
|
if(mrprob(j).le.5) nlow=nlow+1
|
|
|
|
enddo
|
|
|
|
ntest=sum(mrprob)
|
|
|
|
|
|
|
|
return
|
|
|
|
end subroutine demod64a
|