mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-01 13:42:39 -04:00
First cut at program "mapsim". (Frequency stuff is not right, yet.)
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2531 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
6cbd5f9f04
commit
6bfe2ed709
@ -17,7 +17,7 @@ CFLAGS = -I. -fbounds-check
|
|||||||
%.o: %.F90
|
%.o: %.F90
|
||||||
${FC} ${FFLAGS} -c $<
|
${FC} ${FFLAGS} -c $<
|
||||||
|
|
||||||
all: libm65.a m65.exe JT65code.exe
|
all: libm65.a m65.exe JT65code.exe mapsim.exe
|
||||||
|
|
||||||
OBJS1 = trimlist.o display.o getdphi.o pctile.o ccf65.o \
|
OBJS1 = trimlist.o display.o getdphi.o pctile.o ccf65.o \
|
||||||
decode1a.o sort.o filbig.o fil6521.o afc65b.o \
|
decode1a.o sort.o filbig.o fil6521.o afc65b.o \
|
||||||
@ -50,6 +50,10 @@ OBJS2 = JT65code.o
|
|||||||
JT65code.exe: $(OBJS2) libm65.a
|
JT65code.exe: $(OBJS2) libm65.a
|
||||||
$(FC) -o JT65code.exe $(OBJS2) libm65.a
|
$(FC) -o JT65code.exe $(OBJS2) libm65.a
|
||||||
|
|
||||||
|
OBJS6 = mapsim.o cgen65.o noisegen.o gran.o
|
||||||
|
mapsim.exe: $(OBJS6) libm65.a
|
||||||
|
$(FC) -o mapsim.exe $(OBJS6) libm65.a
|
||||||
|
|
||||||
INCPATH = -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore' \
|
INCPATH = -I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore' \
|
||||||
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include' \
|
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include' \
|
||||||
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/ActiveQt' \
|
-I'c:/QtSDK/Desktop/Qt/4.7.4/mingw/include/ActiveQt' \
|
||||||
|
96
libm65/cgen65.f90
Normal file
96
libm65/cgen65.f90
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
subroutine cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave)
|
||||||
|
|
||||||
|
! Encodes a JT65 message into a wavefile.
|
||||||
|
! Executes in 17 ms on opti-745.
|
||||||
|
|
||||||
|
parameter (NMAX=60*96000) !Max length of wave file
|
||||||
|
character*22 message !Message to be generated
|
||||||
|
character*22 msgsent !Message as it will be received
|
||||||
|
character*3 cok !' ' or 'OOO'
|
||||||
|
real*8 dt,phi,f,f0,dfgen,dphi,twopi,samfac
|
||||||
|
complex cwave(NMAX) !Generated complex wave file
|
||||||
|
integer dgen(12)
|
||||||
|
integer sent(63)
|
||||||
|
logical first
|
||||||
|
integer nprc(126)
|
||||||
|
real pr(126)
|
||||||
|
data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, &
|
||||||
|
0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, &
|
||||||
|
0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, &
|
||||||
|
0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, &
|
||||||
|
1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, &
|
||||||
|
0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, &
|
||||||
|
1,1,1,1,1,1/
|
||||||
|
data twopi/6.283185307179586476d0/,first/.true./
|
||||||
|
save
|
||||||
|
|
||||||
|
if(first) then
|
||||||
|
do i=1,126
|
||||||
|
pr(i)=2*nprc(i)-1
|
||||||
|
enddo
|
||||||
|
first=.false.
|
||||||
|
endif
|
||||||
|
|
||||||
|
call chkmsg(message,cok,nspecial,flip)
|
||||||
|
if(nspecial.eq.0) then
|
||||||
|
call packmsg(message,dgen) !Pack message into 72 bits
|
||||||
|
nsendingsh=0
|
||||||
|
if(iand(dgen(10),8).ne.0) nsendingsh=-1 !Plain text flag
|
||||||
|
|
||||||
|
call rs_encode(dgen,sent)
|
||||||
|
call interleave63(sent,1) !Apply interleaving
|
||||||
|
call graycode(sent,63,1) !Apply Gray code
|
||||||
|
nsym=126 !Symbols per transmission
|
||||||
|
nsps=4096
|
||||||
|
else
|
||||||
|
nsym=32
|
||||||
|
nsps=16384
|
||||||
|
nsendingsh=1 !Flag for shorthand message
|
||||||
|
endif
|
||||||
|
if(mode65.eq.0) go to 900
|
||||||
|
|
||||||
|
nsps=nint(nsps*96000.d0/11025.d0)
|
||||||
|
|
||||||
|
! Set up necessary constants
|
||||||
|
dt=1.d0/(samfac*96000.d0)
|
||||||
|
f0=118*11025.d0/1024
|
||||||
|
dfgen=mode65*11025.d0/4096.d0
|
||||||
|
phi=0.d0
|
||||||
|
i=0
|
||||||
|
k=0
|
||||||
|
do j=1,nsym
|
||||||
|
f=f0
|
||||||
|
if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen
|
||||||
|
if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then
|
||||||
|
k=k+1
|
||||||
|
f=f0+(sent(k)+2)*dfgen
|
||||||
|
endif
|
||||||
|
dphi=twopi*dt*f
|
||||||
|
do ii=1,nsps
|
||||||
|
phi=phi+dphi
|
||||||
|
if(phi.gt.twopi) phi=phi-twopi
|
||||||
|
xphi=phi
|
||||||
|
i=i+1
|
||||||
|
! iwave(i)=32767.0*sin(xphi)
|
||||||
|
cwave(i)=cmplx(cos(xphi),-sin(xphi))
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
cwave(nsym*nsps+1:)=0
|
||||||
|
nwave=nsym*nsps + 5512
|
||||||
|
call unpackmsg(dgen,msgsent)
|
||||||
|
if(flip.lt.0.0) then
|
||||||
|
do i=22,1,-1
|
||||||
|
if(msgsent(i:i).ne.' ') goto 10
|
||||||
|
enddo
|
||||||
|
10 msgsent=msgsent(1:i)//' OOO'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if(nsendingsh.eq.1) then
|
||||||
|
if(nspecial.eq.2) msgsent='RO'
|
||||||
|
if(nspecial.eq.3) msgsent='RRR'
|
||||||
|
if(nspecial.eq.4) msgsent='73'
|
||||||
|
endif
|
||||||
|
|
||||||
|
900 return
|
||||||
|
end subroutine cgen65
|
77
libm65/mapsim.f90
Normal file
77
libm65/mapsim.f90
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
program mapsim
|
||||||
|
|
||||||
|
parameter (NMAX=96000*60)
|
||||||
|
integer*2 id2(2,NMAX)
|
||||||
|
integer*2 id4(4,NMAX)
|
||||||
|
real*4 d4(4,NMAX)
|
||||||
|
complex cwave(NMAX)
|
||||||
|
complex z,zx,zy
|
||||||
|
real*8 fcenter,fsample,samfac,f,dt,twopi,phi,dphi
|
||||||
|
character message*22,msgsent*22,arg*8
|
||||||
|
|
||||||
|
nargs=iargc()
|
||||||
|
if(nargs.ne.2) then
|
||||||
|
print*,'Usage: mapsim "message" pol'
|
||||||
|
go to 999
|
||||||
|
endif
|
||||||
|
call getarg(1,message)
|
||||||
|
call getarg(2,arg)
|
||||||
|
read(arg,*) pol
|
||||||
|
|
||||||
|
open(10,file='000000_0000.iq',access='stream',status='unknown')
|
||||||
|
open(11,file='000000_0000.tf2',access='stream',status='unknown')
|
||||||
|
|
||||||
|
call noisegen(d4,NMAX)
|
||||||
|
mode65=2
|
||||||
|
samfac=1.d0
|
||||||
|
call cgen65(message,mode65,samfac,nsendingsh,msgsent,cwave,nwave)
|
||||||
|
|
||||||
|
fcenter=144.125d0
|
||||||
|
fsample=96000.d0
|
||||||
|
twopi=8.d0*atan(1.d0)
|
||||||
|
rad=360.0/twopi
|
||||||
|
a=cos(pol/rad)
|
||||||
|
b=sin(pol/rad)
|
||||||
|
dt=1.d0/fsample
|
||||||
|
|
||||||
|
do isig=10,10
|
||||||
|
f=-23 + 3*isig
|
||||||
|
dt=0.05d0*(isig-1)
|
||||||
|
! snrdb=-(19.0 + (isig-1)/2.0)
|
||||||
|
snrdb=-20.0
|
||||||
|
sig=sqrt(2500.0/96000.0) * 10.0**(0.05*snrdb)
|
||||||
|
sig=1.6*sig
|
||||||
|
dphi=twopi*f*dt
|
||||||
|
phi=0.
|
||||||
|
i0=fsample*(3.5d0+dt)
|
||||||
|
print*,f,dt,dphi,i0,sig
|
||||||
|
|
||||||
|
do i=1,nwave
|
||||||
|
phi=phi + dphi
|
||||||
|
! if(phi.gt.twopi) phi=phi-twopi
|
||||||
|
! xphi=phi
|
||||||
|
z=sig*cwave(i)*cmplx(cos(phi),sin(phi))
|
||||||
|
zx=a*z
|
||||||
|
zy=b*z
|
||||||
|
j=i+i0
|
||||||
|
d4(1,j)=d4(1,j) + real(zx)
|
||||||
|
d4(2,j)=d4(2,j) + aimag(zx)
|
||||||
|
d4(3,j)=d4(3,j) + real(zy)
|
||||||
|
d4(4,j)=d4(4,j) + aimag(zy)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
s=31.6
|
||||||
|
do i=1,NMAX
|
||||||
|
id4(1,i)=nint(s*d4(1,i))
|
||||||
|
id4(2,i)=nint(s*d4(2,i))
|
||||||
|
id4(3,i)=nint(s*d4(3,i))
|
||||||
|
id4(4,i)=nint(s*d4(4,i))
|
||||||
|
id2(1,i)=id4(1,i)
|
||||||
|
id2(2,i)=id4(2,i)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
write(10) fcenter,id2
|
||||||
|
write(11) fcenter,id4
|
||||||
|
|
||||||
|
999 end program mapsim
|
13
libm65/noisegen.f90
Normal file
13
libm65/noisegen.f90
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
subroutine noisegen(d4,nmax)
|
||||||
|
|
||||||
|
real*4 d4(4,nmax)
|
||||||
|
|
||||||
|
do i=1,nmax
|
||||||
|
d4(1,i)=gran()
|
||||||
|
d4(2,i)=gran()
|
||||||
|
d4(3,i)=gran()
|
||||||
|
d4(4,i)=gran()
|
||||||
|
enddo
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine noisegen
|
Loading…
x
Reference in New Issue
Block a user