WSJT-X/gen6m.f

50 lines
1.6 KiB
Fortran

subroutine gen6m(msg,samfac,iwave,nwave)
C Encodes a message into a wavefile for transmitting JT6M signals.
parameter (NMAX=21504) !NMAX=28*512*3/2: number of waveform samples
character*28 msg !Message to be generated
real*8 samfac
real*4 x(NMAX) !Data for wavefile
integer*2 iwave(NMAX) !Generated wave file
integer*4 imsg(28)
do i=27,1,-1 !Get message length
if(msg(i:i).ne.' ') go to 10
enddo
i=1
10 nmsg=i+1
if(mod(nmsg,2).eq.1) nmsg=nmsg+1 !Make it even
nwave=nmsg*512*3/2
do m=1,nmsg !Get character code numbers
ic=m
n=ichar(msg(ic:ic))
C Calculate i in range 0-42:
if(n.ge.ichar('0') .and. n.le.ichar('9')) i=n-ichar('0')
if(msg(ic:ic).eq.'.') i=10
if(msg(ic:ic).eq.',') i=11
if(msg(ic:ic).eq.' ') i=12
if(msg(ic:ic).eq.'/') i=13
if(msg(ic:ic).eq.'#') i=14
if(msg(ic:ic).eq.'?') i=15
if(msg(ic:ic).eq.'$') i=16
if(n.ge.ichar('a') .and. n.le.ichar('z')) i=n-ichar('a')+17
if(n.ge.ichar('A') .and. n.le.ichar('Z')) i=n-ichar('A')+17
imsg(m)=i
enddo
k=1
do i=1,nmsg,2
call gentone(x(k),-1,k) !Generate a sync tone
call gentone(x(k),imsg(i),k) !First character
call gentone(x(k),imsg(i+1),k) !Second character
enddo
do i=1,nwave
iwave(i)=nint(32767.0*x(i))
enddo
return
end