2017-04-20 15:21:54 -04:00
|
|
|
subroutine getfc2(c,csync,fc1,fc2,fc3)
|
2017-04-19 15:55:11 -04:00
|
|
|
|
|
|
|
parameter (KK=84) !Information bits (72 + CRC12)
|
|
|
|
parameter (ND=168) !Data symbols: LDPC (168,84), r=1/2
|
|
|
|
parameter (NS=65) !Sync symbols (2 x 26 + Barker 13)
|
|
|
|
parameter (NR=3) !Ramp up/down
|
|
|
|
parameter (NN=NR+NS+ND) !Total symbols (236)
|
|
|
|
parameter (NSPS=16) !Samples per MSK symbol (16)
|
|
|
|
parameter (N2=2*NSPS) !Samples per OQPSK symbol (32)
|
|
|
|
parameter (N13=13*N2) !Samples in central sync vector (416)
|
|
|
|
parameter (NZ=NSPS*NN) !Samples in baseband waveform (3760)
|
|
|
|
parameter (NFFT1=4*NSPS,NH1=NFFT1/2)
|
|
|
|
|
|
|
|
complex c(0:NZ-1) !Complex waveform
|
|
|
|
complex cs(0:NZ-1) !For computing spectrum
|
2017-04-20 15:21:54 -04:00
|
|
|
complex csync(0:NZ-1) !Sync symbols only, from cbb
|
2017-04-19 15:55:11 -04:00
|
|
|
real a(5)
|
|
|
|
|
|
|
|
fs=12000.0/72.0
|
2017-04-20 15:21:54 -04:00
|
|
|
df=fs/NZ
|
2017-04-19 15:55:11 -04:00
|
|
|
baud=fs/NSPS
|
|
|
|
a(1)=-fc1
|
|
|
|
a(2:5)=0.
|
|
|
|
call twkfreq1(c,NZ,fs,a,cs) !Mix down by fc1
|
|
|
|
|
|
|
|
! Filter, square, then FFT to get refined carrier frequency fc2.
|
|
|
|
call four2a(cs,NZ,1,-1,1) !To freq domain
|
|
|
|
ia=nint(0.75*baud/df)
|
|
|
|
cs(ia:NZ-1-ia)=0. !Save only freqs around fc1
|
|
|
|
call four2a(cs,NZ,1,1,1) !Back to time domain
|
|
|
|
cs=cs/NZ
|
|
|
|
cs=cs*cs !Square the data
|
|
|
|
call four2a(cs,NZ,1,-1,1) !Compute squared spectrum
|
|
|
|
|
|
|
|
! Find two peaks separated by baud
|
|
|
|
pmax=0.
|
|
|
|
fc2=0.
|
|
|
|
ic=nint(baud/df)
|
|
|
|
ja=nint(0.5*baud/df)
|
|
|
|
do j=-ja,ja
|
|
|
|
f2=j*df
|
|
|
|
ia=nint((f2-0.5*baud)/df)
|
|
|
|
if(ia.lt.0) ia=ia+NZ
|
|
|
|
ib=nint((f2+0.5*baud)/df)
|
|
|
|
p=real(cs(ia))**2 + aimag(cs(ia))**2 + &
|
|
|
|
real(cs(ib))**2 + aimag(cs(ib))**2
|
|
|
|
if(p.gt.pmax) then
|
|
|
|
pmax=p
|
|
|
|
fc2=0.5*f2
|
|
|
|
endif
|
|
|
|
! write(52,1200) f2,p,db(p)
|
|
|
|
!1200 format(f10.3,2f15.3)
|
|
|
|
enddo
|
|
|
|
|
2017-04-20 15:21:54 -04:00
|
|
|
a(1)=-fc1
|
|
|
|
a(2:5)=0.
|
|
|
|
call twkfreq1(c,NZ,fs,a,cs) !Mix down by fc1
|
|
|
|
cs=cs*conjg(csync)
|
|
|
|
call four2a(cs,NZ,1,-1,1) !To freq domain
|
|
|
|
pmax=0.
|
|
|
|
do i=0,NZ-1
|
|
|
|
f=i*df
|
|
|
|
if(i.gt.NZ/2) f=(i-NZ)*df
|
|
|
|
p=real(cs(i))**2 + aimag(cs(i))**2
|
|
|
|
! write(51,3001) f,p,db(p)
|
|
|
|
!3001 format(f10.3,e12.3,f10.3)
|
|
|
|
if(p.gt.pmax) then
|
|
|
|
pmax=p
|
|
|
|
fc3=f
|
|
|
|
endif
|
|
|
|
enddo
|
|
|
|
|
2017-04-19 15:55:11 -04:00
|
|
|
return
|
|
|
|
end subroutine getfc2
|