mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-09-02 13:17:49 -04:00
Add a utility "allsim" to generate a wave file containing all WSJT-X slow modes as well as an unmodulated carrier and 25 WPM CW signal.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7579 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
2131414791
commit
9a895361cf
@ -299,6 +299,7 @@ if (WIN32)
|
|||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
set (wsjt_FSRCS
|
set (wsjt_FSRCS
|
||||||
|
lib/addit.f90
|
||||||
lib/afc65b.f90
|
lib/afc65b.f90
|
||||||
lib/afc9.f90
|
lib/afc9.f90
|
||||||
lib/ana64.f90
|
lib/ana64.f90
|
||||||
@ -1048,6 +1049,9 @@ target_link_libraries (qra64sim wsjt_fort wsjt_cxx)
|
|||||||
add_executable (jt9sim lib/jt9sim.f90 wsjtx.rc)
|
add_executable (jt9sim lib/jt9sim.f90 wsjtx.rc)
|
||||||
target_link_libraries (jt9sim wsjt_fort wsjt_cxx)
|
target_link_libraries (jt9sim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (allsim lib/allsim.f90 wsjtx.rc)
|
||||||
|
target_link_libraries (allsim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
add_executable (jt65code lib/jt65code.f90 wsjtx.rc)
|
add_executable (jt65code lib/jt65code.f90 wsjtx.rc)
|
||||||
target_link_libraries (jt65code wsjt_fort wsjt_cxx)
|
target_link_libraries (jt65code wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
77
lib/addit.f90
Normal file
77
lib/addit.f90
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat)
|
||||||
|
|
||||||
|
integer itone(nsym)
|
||||||
|
real dat(60*12000)
|
||||||
|
real*8 f,dt,twopi,phi,dphi,baud,fsample,freq,tsym,t
|
||||||
|
|
||||||
|
tsym=nsps*1.d0/nfsample !Symbol duration
|
||||||
|
baud=1.d0/tsym
|
||||||
|
fsample=12000.d0 !Sample rate (Hz)
|
||||||
|
dt=1.d0/fsample !Sample interval (s)
|
||||||
|
twopi=8.d0*atan(1.d0)
|
||||||
|
|
||||||
|
f=ifreq
|
||||||
|
phi=0.
|
||||||
|
k=12000 !Start audio at t = 1.0 s
|
||||||
|
ntot=nsym*tsym/dt
|
||||||
|
t=0.
|
||||||
|
isym0=-1
|
||||||
|
do i=1,ntot
|
||||||
|
t=t+dt
|
||||||
|
isym=nint(t/tsym) + 1
|
||||||
|
if(isym.ne.isym0) then
|
||||||
|
freq=f + itone(isym)*baud
|
||||||
|
dphi=twopi*freq*dt
|
||||||
|
isym0=isym
|
||||||
|
endif
|
||||||
|
phi=phi + dphi
|
||||||
|
if(phi.gt.twopi) phi=phi-twopi
|
||||||
|
xphi=phi
|
||||||
|
k=k+1
|
||||||
|
dat(k)=dat(k) + sig*sin(xphi)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine addit
|
||||||
|
|
||||||
|
subroutine addcw(icw,ncw,ifreq,sig,dat)
|
||||||
|
|
||||||
|
integer icw(ncw)
|
||||||
|
real dat(60*12000)
|
||||||
|
real s(60*12000)
|
||||||
|
real x(60*12000)
|
||||||
|
real y(60*12000)
|
||||||
|
real*8 dt,twopi,phi,dphi,fsample,tdit,t
|
||||||
|
|
||||||
|
wpm=25.0
|
||||||
|
nspd=nint(1.2*12000.0/wpm)
|
||||||
|
fsample=12000.d0 !Sample rate (Hz)
|
||||||
|
dt=1.d0/fsample !Sample interval (s)
|
||||||
|
tdit=nspd*dt
|
||||||
|
twopi=8.d0*atan(1.d0)
|
||||||
|
dphi=twopi*ifreq*dt
|
||||||
|
phi=0.
|
||||||
|
k=12000 !Start audio at t = 1.0 s
|
||||||
|
t=0.
|
||||||
|
npts=60*12000
|
||||||
|
x=0.
|
||||||
|
do i=1,npts
|
||||||
|
t=t+dt
|
||||||
|
j=nint(t/tdit) + 1
|
||||||
|
j=mod(j-1,ncw) + 1
|
||||||
|
phi=phi + dphi
|
||||||
|
if(phi.gt.twopi) phi=phi-twopi
|
||||||
|
xphi=phi
|
||||||
|
k=k+1
|
||||||
|
x(k)=icw(j)
|
||||||
|
s(k)=sin(xphi)
|
||||||
|
if(t.ge.59.5) exit
|
||||||
|
enddo
|
||||||
|
|
||||||
|
nadd=0.004/dt
|
||||||
|
call smo(x,npts,y,nadd)
|
||||||
|
y=y/nadd
|
||||||
|
dat=dat + sig*y*s
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine addcw
|
70
lib/allsim.f90
Normal file
70
lib/allsim.f90
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
program allsim
|
||||||
|
|
||||||
|
! Generate simulated data for WSJT-X slow modes: JT4, JT9, JT65, QRA64,
|
||||||
|
! and WSPR. Also unmodulated carrier and 20 WPM CW.
|
||||||
|
|
||||||
|
|
||||||
|
use wavhdr
|
||||||
|
use packjt
|
||||||
|
parameter (NMAX=60*12000)
|
||||||
|
type(hdr) h
|
||||||
|
integer*2 iwave(NMAX) !Generated waveform (no noise)
|
||||||
|
integer itone(206) !Channel symbols (values 0-8)
|
||||||
|
integer icw(250)
|
||||||
|
real*4 dat(NMAX)
|
||||||
|
character message*22,msgsent*22,arg*8
|
||||||
|
|
||||||
|
nargs=iargc()
|
||||||
|
if(nargs.ne.1) then
|
||||||
|
print*,'Usage: allsim <snr>'
|
||||||
|
go to 999
|
||||||
|
endif
|
||||||
|
|
||||||
|
call getarg(1,arg)
|
||||||
|
read(arg,*) snrdb !S/N in dB (2500 hz reference BW)
|
||||||
|
|
||||||
|
message='CQ KA2ABC FN20'
|
||||||
|
rmsdb=25.
|
||||||
|
rms=10.0**(0.05*rmsdb)
|
||||||
|
sig=10.0**(0.05*snrdb)
|
||||||
|
npts=NMAX
|
||||||
|
|
||||||
|
call init_random_seed() !Seed Fortran RANDOM_NUMBER generator
|
||||||
|
call sgran() !Seed C rand generator (used in gran)
|
||||||
|
|
||||||
|
h=default_header(12000,npts)
|
||||||
|
open(10,file='000000_0000.wav',access='stream',status='unknown')
|
||||||
|
do i=1,npts !Generate gaussian noise
|
||||||
|
dat(i)=gran()
|
||||||
|
enddo
|
||||||
|
|
||||||
|
itone=0
|
||||||
|
call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier
|
||||||
|
|
||||||
|
call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw)
|
||||||
|
! print*,ncw
|
||||||
|
! write(*,3001) icw(1:ncw)
|
||||||
|
!3001 format(50i1)
|
||||||
|
call addcw(icw,ncw,600,sig,dat) !CW
|
||||||
|
|
||||||
|
call genwspr(message,msgsent,itone)
|
||||||
|
call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data)
|
||||||
|
|
||||||
|
call gen9(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,12000,85,6912,1000,sig,dat) !JT9
|
||||||
|
|
||||||
|
call gen4(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,11025,206,2520,1200,sig,dat) !JT4
|
||||||
|
|
||||||
|
call genqra64(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,12000,84,6912,1400,sig,dat) !QRA64
|
||||||
|
|
||||||
|
call gen65(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,11025,126,4096,1600,sig,dat) !JT65
|
||||||
|
|
||||||
|
iwave(1:npts)=nint(rms*dat(1:npts))
|
||||||
|
|
||||||
|
write(10) h,iwave(1:npts)
|
||||||
|
close(10)
|
||||||
|
|
||||||
|
999 end program allsim
|
Loading…
x
Reference in New Issue
Block a user