mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-23 20:58:55 -05:00
f5b9756a9a
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/jtms3@2479 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
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
|