mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-03 16:01:18 -05:00
3731d5a0c3
2. "/A" added to list of optional callsign suffixes. 3. Improved algorithm for measuring error in soundcard sample rates. 4. Optional 5-sec shift of input data, to catch some clock errors. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/trunk@274 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
81 lines
2.2 KiB
Fortran
81 lines
2.2 KiB
Fortran
subroutine gencw(msg,wpm,freqcw,samfac,TRPeriod,iwave,nwave)
|
|
|
|
parameter (NMAX=150*11025)
|
|
character msg*22,word12*22,word3*22
|
|
integer*2 iwave(NMAX)
|
|
integer TRPeriod
|
|
|
|
integer*1 idat(5000),idat1(460),idat2(200)
|
|
real*8 dt,t,twopi,pha,dpha,tdit,samfac
|
|
data twopi/6.283185307d0/
|
|
|
|
nwords=0
|
|
do i=2,22
|
|
if(msg(i-1:i).eq.' ') go to 10
|
|
if(msg(i:i).eq.' ') then
|
|
nwords=nwords+1
|
|
j=j0
|
|
j0=i+1
|
|
endif
|
|
enddo
|
|
10 ntype=1 !Call1+Call2, CQ+Call
|
|
word12=msg
|
|
if(nwords.eq.3) then
|
|
word3=msg(j:j0-1)
|
|
word12(j-1:)=' '
|
|
ntype=3 !BC+RO, BC+RRR, BC+73
|
|
if(word3.eq.'OOO') ntype=2 !BC+OOO
|
|
endif
|
|
|
|
tdit=1.2d0/wpm !Key-down dit time, seconds
|
|
call morse(word12,idat1,nmax1) !Encode part 1 of msg
|
|
t1=tdit*nmax1 !Time for part1, once
|
|
nrpt1=TRPeriod/t1 !Repetitions of part 1
|
|
if(ntype.eq.2) nrpt1=0.75*TRPeriod/t1
|
|
if(ntype.eq.3) nrpt1=1
|
|
t1=nrpt1*t1 !Total time for part 1
|
|
nrpt2=0
|
|
t2=0.
|
|
if(ntype.ge.2) then
|
|
call morse(word3,idat2,nmax2) !Encode part 2
|
|
t2=tdit*nmax2 !Time for part 2, once
|
|
nrpt2=(TRPeriod-t1)/t2 !Repetitions of part 2
|
|
t2=nrpt2*t2 !Total time for part 2
|
|
endif
|
|
|
|
j=0
|
|
do n=1,nrpt1
|
|
do i=1,nmax1
|
|
j=j+1
|
|
idat(j)=idat1(i)
|
|
enddo
|
|
enddo
|
|
do n=1,nrpt2
|
|
do i=1,nmax2
|
|
j=j+1
|
|
idat(j)=idat2(i)
|
|
enddo
|
|
enddo
|
|
|
|
dt=1.d0/(11025.d0*samfac)
|
|
nwave=j*tdit/dt
|
|
pha=0.
|
|
dpha=twopi*freqcw*dt
|
|
t=0.
|
|
s=0.
|
|
u=wpm/(11025*0.03)
|
|
do i=1,nwave
|
|
t=t+dt
|
|
pha=pha+dpha
|
|
j=t/tdit + 1
|
|
! iwave(i)=0
|
|
! if(idat(j).ne.0) iwave(i)=nint(32767.d0*sin(pha))
|
|
s=s + u*(idat(j)-s)
|
|
iwave(i)=nint(s*32767.d0*sin(pha))
|
|
enddo
|
|
|
|
return
|
|
end
|
|
|
|
include 'gencwid.f'
|