Initial Commit
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
program wsprlf
|
||||
|
||||
parameter (NN=121) !Total symbols
|
||||
parameter (NSPS=28800) !Samples per symbol @ fs=12000 Hz
|
||||
parameter (NZ=NSPS*NN) !Samples in waveform
|
||||
|
||||
character*8 arg
|
||||
complex c(0:NZ-1)
|
||||
real*8 twopi,fs,f0,dt,phi,dphi
|
||||
real x(0:NZ-1)
|
||||
real p(0:NZ/2)
|
||||
real h0(0:NSPS/2) !Pulse shape, rising edge
|
||||
real h1(0:NSPS/2) !Pulse shape, trailing edge
|
||||
real tmp(NN)
|
||||
integer id(NN) !Generated data
|
||||
integer ie(NN) !Differentially encoded data
|
||||
data fs/12000.d0/
|
||||
|
||||
nargs=iargc()
|
||||
if(nargs.ne.3) then
|
||||
print*,'Usage: wsprlf f0 t1 snr'
|
||||
goto 999
|
||||
endif
|
||||
call getarg(1,arg)
|
||||
read(arg,*) f0
|
||||
call getarg(2,arg)
|
||||
read(arg,*) t1
|
||||
call getarg(3,arg)
|
||||
read(arg,*) snrdb
|
||||
|
||||
call random_number(tmp) !Generate random bipolar data
|
||||
id=1
|
||||
where(tmp.lt.0.5) id=-1
|
||||
ie(1)=1
|
||||
do i=2,NN !Differentially encode
|
||||
ie(i)=id(i)*ie(i-1)
|
||||
enddo
|
||||
|
||||
n1=nint(t1*NSPS)
|
||||
twopi=8.d0*atan(1.d0)
|
||||
|
||||
do i=0,2*n1-1 !Define the shape functions
|
||||
if(i.le.n1-1) then
|
||||
h0(i)=0.5*(1.0-cos(0.5*i*twopi/n1))
|
||||
else
|
||||
h1(i-n1)=0.5*(1.0-cos(0.5*i*twopi/n1))
|
||||
endif
|
||||
enddo
|
||||
if(t1.eq.0.0) h0=1
|
||||
if(t1.eq.0.0) h1=1
|
||||
|
||||
! Shape the channel pulses
|
||||
x=1.
|
||||
x(0:n1-1)=h0(0:n1-1) !Leading edge of 1st pulse
|
||||
do j=2,NN !Leading edges
|
||||
if(ie(j).ne.ie(j-1)) then
|
||||
ia=(j-1)*NSPS + 1
|
||||
ib=ia+n1-1
|
||||
x(ia:ib)=h0(0:n1-1)
|
||||
endif
|
||||
enddo
|
||||
do j=1,NN-1 !Trailing edges
|
||||
if(ie(j+1).ne.ie(j)) then
|
||||
ib=j*NSPS
|
||||
ia=ib-n1+1
|
||||
x(ia:ib)=h1(0:n1-1)
|
||||
endif
|
||||
enddo
|
||||
ib=NN*NSPS-1
|
||||
ia=ib-n1+1
|
||||
x(ia:ib)=h1(0:n1-1) !Trailing edge of last pulse
|
||||
|
||||
dt=1.d0/fs
|
||||
ts=dt*NSPS
|
||||
baud=fs/NSPS
|
||||
write(*,1000) baud,ts
|
||||
1000 format('Baud:',f6.3,' Tsym:',f6.3)
|
||||
|
||||
dphi=twopi*f0*dt
|
||||
phi=0.d0
|
||||
i=-1
|
||||
do j=1,NN !Generate the baseband waveform
|
||||
a=ie(j)
|
||||
do k=1,NSPS
|
||||
i=i+1
|
||||
x(i)=a*x(i)
|
||||
phi=phi+dphi
|
||||
if(phi.gt.twopi) phi=phi-twopi
|
||||
xphi=phi
|
||||
c(i)=x(i)*cmplx(cos(xphi),sin(xphi))
|
||||
sym=i*dt/ts
|
||||
if(j.le.20) write(13,1010) sym,x(i),c(i)
|
||||
1010 format(4f12.6)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
call four2a(c,NZ,1,-1,1) !To freq domain
|
||||
df=fs/NZ
|
||||
nh=NZ/2
|
||||
do i=0,nh
|
||||
f=i*df
|
||||
p(i)=real(c(i))**2 + aimag(c(i))**2
|
||||
enddo
|
||||
p=p/maxval(p)
|
||||
do i=0,nh !Save spectrum for plotting
|
||||
write(14,1020) i*df,p(i),10.0*log10(p(i)+1.e-8)
|
||||
1020 format(f10.3,2e12.3)
|
||||
enddo
|
||||
|
||||
999 end program wsprlf
|
||||
Reference in New Issue
Block a user