mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 21:58:38 -05:00
71 lines
1.3 KiB
Fortran
71 lines
1.3 KiB
Fortran
|
subroutine genjtms3a(chansym,nsym,iwave,nwave)
|
||
|
|
||
|
integer*1 chansym(nsym)
|
||
|
integer*2 iwave(30*48000)
|
||
|
real x(0:6191),x2(0:6191)
|
||
|
complex c(0:3096),c2(0:6191) !Could be 0:3096 ???
|
||
|
equivalence (x,c),(x2,c2)
|
||
|
|
||
|
do j=1,nsym !Define the baseband signal
|
||
|
i0=24*(j-1) !24 samples per symbol
|
||
|
x(i0:i0+23)=2*chansym(j)-1
|
||
|
enddo
|
||
|
|
||
|
nfft=24*nsym
|
||
|
fac=1.0/nfft
|
||
|
x(0:nfft-1)=fac*x(0:nfft-1)
|
||
|
call four2a(x,nfft,1,-1,0) !Forward r2c FFT
|
||
|
|
||
|
! Apply lowpass filter
|
||
|
fc=1200.0
|
||
|
bw=200.0
|
||
|
df=48000.0/nfft
|
||
|
nh=nfft/2
|
||
|
c2=0.
|
||
|
ib=2000.0/df
|
||
|
|
||
|
do i=0,ib
|
||
|
f=i*df
|
||
|
g=1.0
|
||
|
if(f.gt.fc) then
|
||
|
xx=(f-fc)/bw
|
||
|
g=exp(-xx*xx)
|
||
|
endif
|
||
|
c2(i)=g*c(i)
|
||
|
enddo
|
||
|
|
||
|
call four2a(c2,nfft,1,1,-1) !Inverse c2r FFT
|
||
|
|
||
|
nf0=nint(1500.0/df)
|
||
|
f0=nf0*df
|
||
|
twopi=8.0*atan(1.0)
|
||
|
dphi=twopi*f0/48000.0
|
||
|
phi=0.
|
||
|
peak=0.
|
||
|
sq=0.
|
||
|
do i=0,nfft-1
|
||
|
phi=phi+dphi
|
||
|
if(phi.gt.twopi) phi=phi-twopi
|
||
|
y=cos(phi)
|
||
|
x2(i)=y*x2(i)
|
||
|
sq=sq + x2(i)**2
|
||
|
if(abs(x2(i)).gt.peak) peak=abs(x2(i))
|
||
|
enddo
|
||
|
rms=sqrt(sq/nfft)
|
||
|
! print*,rms,peak,peak/rms
|
||
|
|
||
|
fac=32767.0/peak
|
||
|
do i=0,nfft-1
|
||
|
iwave(i+1)=fac*x2(i)
|
||
|
enddo
|
||
|
nwave=30*48000
|
||
|
nrpt=nwave/nfft
|
||
|
do n=2,nrpt
|
||
|
ib=n*nfft
|
||
|
ia=ib-nfft+1
|
||
|
iwave(ia:ib)=iwave(1:nfft)
|
||
|
enddo
|
||
|
|
||
|
return
|
||
|
end subroutine genjtms3a
|