mirror of https://github.com/saitohirga/WSJT-X.git
Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop
This commit is contained in:
commit
5a23edbbae
|
@ -11,34 +11,26 @@ subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat)
|
||||||
twopi=8.d0*atan(1.d0)
|
twopi=8.d0*atan(1.d0)
|
||||||
dphi=0.
|
dphi=0.
|
||||||
|
|
||||||
iters=1
|
f=ifreq
|
||||||
if(nsym.eq.79) iters=2 !FT8
|
phi=0.
|
||||||
if(nsym.eq.103) iters=5 !FT4
|
ntot=nsym*tsym/dt
|
||||||
|
k=12000 !Start audio at t = 1.0 s
|
||||||
do iter=1,iters
|
t=0.
|
||||||
f=ifreq
|
isym0=-1
|
||||||
phi=0.
|
do i=1,ntot
|
||||||
ntot=nsym*tsym/dt
|
t=t+dt
|
||||||
k=12000 !Start audio at t = 1.0 s
|
isym=nint(t/tsym) + 1
|
||||||
t=0.
|
if(isym.gt.nsym) exit
|
||||||
if(nsym.eq.79) k=12000 + (iter-1)*12000*30 !Special case for FT8
|
if(isym.ne.isym0) then
|
||||||
if(nsym.eq.103) k=12000 + (iter-1)*12000*10 !Special case for FT4
|
freq=f + itone(isym)*baud
|
||||||
isym0=-1
|
dphi=twopi*freq*dt
|
||||||
do i=1,ntot
|
isym0=isym
|
||||||
t=t+dt
|
endif
|
||||||
isym=nint(t/tsym) + 1
|
phi=phi + dphi
|
||||||
if(isym.gt.nsym) exit
|
if(phi.gt.twopi) phi=phi-twopi
|
||||||
if(isym.ne.isym0) then
|
xphi=phi
|
||||||
freq=f + itone(isym)*baud
|
k=k+1
|
||||||
dphi=twopi*freq*dt
|
dat(k)=dat(k) + sig*sin(xphi)
|
||||||
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
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
111
lib/allsim.f90
111
lib/allsim.f90
|
@ -2,83 +2,114 @@ program allsim
|
||||||
|
|
||||||
! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64,
|
! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64,
|
||||||
! and WSPR. Also unmodulated carrier and 20 WPM CW.
|
! and WSPR. Also unmodulated carrier and 20 WPM CW.
|
||||||
|
|
||||||
|
|
||||||
use wavhdr
|
use wavhdr
|
||||||
use packjt
|
use packjt
|
||||||
parameter (NMAX=60*12000)
|
parameter (NMAX=60*12000)
|
||||||
type(hdr) h
|
type(hdr) h !Header for the .wav file
|
||||||
integer*2 iwave(NMAX) !Generated waveform (no noise)
|
integer*2 iwave(NMAX) !Generated waveform (no noise)
|
||||||
integer itone(206) !Channel symbols (values 0-8)
|
integer itone(206) !Channel symbols (values 0-8)
|
||||||
integer icw(250)
|
integer icw(250) !Encoded CW message bits
|
||||||
integer*1 msgbits(87)
|
integer*1 msgbits(77) !Encoded message bits for FT8, FT4
|
||||||
logical*1 bcontest
|
real dat(NMAX) !Audio waveform
|
||||||
real*4 dat(NMAX)
|
complex cwave(NMAX)
|
||||||
character message*22,msgsent*22,arg*8,mygrid*6
|
real wave(NMAX)
|
||||||
|
character message*22,msgsent*22,arg*8
|
||||||
character*37 msg37,msgsent37
|
character*37 msg37,msgsent37
|
||||||
|
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.1) then
|
if(nargs.ne.1 .and. nargs.ne.2) then
|
||||||
print*,'Usage: allsim <snr>'
|
print*,'Usage: allsim snr [isig]'
|
||||||
|
print*,'Examples: allsim -10 #Include all signal types'
|
||||||
|
print*,' allsim -10 6 #Include FT8 only'
|
||||||
|
print*,'isig order: 1 2 3 4 5 6 7 8 9'
|
||||||
|
print*,' Carrier CW WSPR JT9 JT4 FT8 FT4 QRA64 JT65'
|
||||||
go to 999
|
go to 999
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call getarg(1,arg)
|
call getarg(1,arg)
|
||||||
read(arg,*) snrdb !S/N in dB (2500 hz reference BW)
|
read(arg,*) snrdb !S/N in dB (2500 hz reference BW)
|
||||||
|
isig=0
|
||||||
|
if(nargs.eq.2) then
|
||||||
|
call getarg(2,arg)
|
||||||
|
read(arg,*) isig
|
||||||
|
endif
|
||||||
|
|
||||||
message='CQ KA2ABC FN20'
|
message='CQ KA2ABC FN20'
|
||||||
mygrid='FN20 '
|
msg37=message//' '
|
||||||
bcontest=.false.
|
|
||||||
rmsdb=25.
|
rmsdb=25.
|
||||||
rms=10.0**(0.05*rmsdb)
|
rms=10.0**(0.05*rmsdb)
|
||||||
sig=10.0**(0.05*snrdb)
|
sig=10.0**(0.05*snrdb)
|
||||||
npts=NMAX
|
|
||||||
|
|
||||||
call init_random_seed() !Seed Fortran RANDOM_NUMBER generator
|
call init_random_seed() !Seed Fortran RANDOM_NUMBER generator
|
||||||
call sgran() !Seed C rand generator (used in gran)
|
call sgran() !Seed C rand generator (used in gran)
|
||||||
|
|
||||||
h=default_header(12000,npts)
|
h=default_header(12000,NMAX)
|
||||||
open(10,file='000000_0000.wav',access='stream',status='unknown')
|
open(10,file='000000_0000.wav',access='stream',status='unknown')
|
||||||
do i=1,npts !Generate gaussian noise
|
do i=1,NMAX !Generate gaussian noise
|
||||||
dat(i)=gran()
|
dat(i)=gran()
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
itone=0
|
itone=0
|
||||||
call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier
|
if(isig.eq.0 .or. isig.eq.1) then
|
||||||
|
call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier
|
||||||
|
endif
|
||||||
|
|
||||||
call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw)
|
if(isig.eq.0 .or. isig.eq.2) then
|
||||||
! print*,ncw
|
call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw)
|
||||||
! write(*,3001) icw(1:ncw)
|
call addcw(icw,ncw,600,sig,dat) !CW
|
||||||
!3001 format(50i1)
|
endif
|
||||||
call addcw(icw,ncw,600,sig,dat) !CW
|
|
||||||
|
|
||||||
call genwspr(message,msgsent,itone)
|
if(isig.eq.0 .or. isig.eq.3) then
|
||||||
call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data)
|
call genwspr(message,msgsent,itone)
|
||||||
|
call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data)
|
||||||
|
endif
|
||||||
|
|
||||||
call gen9(message,0,msgsent,itone,itype)
|
if(isig.eq.0 .or. isig.eq.4) then
|
||||||
call addit(itone,12000,85,6912,1000,sig,dat) !JT9
|
call gen9(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,12000,85,6912,1000,sig,dat) !JT9
|
||||||
|
endif
|
||||||
|
|
||||||
call gen4(message,0,msgsent,itone,itype)
|
if(isig.eq.0 .or. isig.eq.5) then
|
||||||
call addit(itone,11025,206,2520,1200,sig,dat) !JT4
|
call gen4(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,11025,206,2520,1200,sig,dat) !JT4
|
||||||
|
endif
|
||||||
|
|
||||||
i3=-1
|
if(isig.eq.0 .or. isig.eq.6) then
|
||||||
n3=-1
|
call genft8(msg37,i3,n3,msgsent37,msgbits,itone) !FT8
|
||||||
call genft8(message,i3,n3,msgsent,msgbits,itone)
|
nwave=79*1920
|
||||||
call addit(itone,12000,79,1920,1400,sig,dat) !FT8
|
call gen_ft8wave(itone,79,1920,2.0,12000.0,1400.0,cwave,wave,0,nwave)
|
||||||
|
dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave)
|
||||||
|
k=30*12000
|
||||||
|
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
|
||||||
|
endif
|
||||||
|
|
||||||
msg37=message//' '
|
if(isig.eq.0 .or. isig.eq.7) then
|
||||||
call genft4(msg37,0,msgsent37,itone)
|
call genft4(msg37,0,msgsent37,msgbits,itone) !FT4
|
||||||
call addit(itone,12000,103,512,1600,sig,dat) !FT4
|
nwave=105*576
|
||||||
|
call gen_ft4wave(itone,103,576,12000.0,1600.0,cwave,wave,0,nwave)
|
||||||
|
dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave)
|
||||||
|
k=15*12000
|
||||||
|
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
|
||||||
|
k=30*12000
|
||||||
|
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
|
||||||
|
k=45*12000
|
||||||
|
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
|
||||||
|
|
||||||
call genqra64(message,0,msgsent,itone,itype)
|
endif
|
||||||
call addit(itone,12000,84,6912,1800,sig,dat) !QRA64
|
|
||||||
|
|
||||||
call gen65(message,0,msgsent,itone,itype)
|
if(isig.eq.0 .or. isig.eq.8) then
|
||||||
call addit(itone,11025,126,4096,2000,sig,dat) !JT65
|
call genqra64(message,0,msgsent,itone,itype)
|
||||||
|
call addit(itone,12000,84,6912,1800,sig,dat) !QRA64
|
||||||
|
endif
|
||||||
|
|
||||||
iwave(1:npts)=nint(rms*dat(1:npts))
|
if(isig.eq.0 .or. isig.eq.9) then
|
||||||
|
call gen65(message,0,msgsent,itone,itype)
|
||||||
write(10) h,iwave(1:npts)
|
call addit(itone,11025,126,4096,2000,sig,dat) !JT65
|
||||||
|
endif
|
||||||
|
|
||||||
|
iwave=nint(rms*dat)
|
||||||
|
write(10) h,iwave
|
||||||
close(10)
|
close(10)
|
||||||
|
|
||||||
999 end program allsim
|
999 end program allsim
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
<tr><td><b>Ctrl+O </b></td><td>Open a .wav file</td></tr>
|
<tr><td><b>Ctrl+O </b></td><td>Open a .wav file</td></tr>
|
||||||
<tr><td><b>Alt+O </b></td><td>Change operator</td></tr>
|
<tr><td><b>Alt+O </b></td><td>Change operator</td></tr>
|
||||||
<tr><td><b>Alt+Q </b></td><td>Log QSO</td></tr>
|
<tr><td><b>Alt+Q </b></td><td>Log QSO</td></tr>
|
||||||
|
<tr><td><b>Ctrl+R </b></td><td>Set Tx4 message to RRR</td></tr>
|
||||||
|
<tr><td><b>Alt+R </b></td><td>Set Tx4 message to RR73</td></tr>
|
||||||
<tr><td><b>Alt+S </b></td><td>Stop monitoring</td></tr>
|
<tr><td><b>Alt+S </b></td><td>Stop monitoring</td></tr>
|
||||||
<tr><td><b>Alt+T </b></td><td>Tune</td></tr>
|
<tr><td><b>Alt+T </b></td><td>Tune</td></tr>
|
||||||
<tr><td><b>Alt+V </b></td><td>Save the most recently completed *.wav file</td></tr>
|
<tr><td><b>Alt+V </b></td><td>Save the most recently completed *.wav file</td></tr>
|
||||||
|
|
|
@ -2059,6 +2059,16 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Qt::Key_R:
|
||||||
|
if(e->modifiers() & Qt::AltModifier) {
|
||||||
|
if(!m_send_RR73) on_txrb4_doubleClicked();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(e->modifiers() & Qt::ControlModifier) {
|
||||||
|
if(m_send_RR73) on_txrb4_doubleClicked();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case Qt::Key_V:
|
case Qt::Key_V:
|
||||||
if(e->modifiers() & Qt::AltModifier) {
|
if(e->modifiers() & Qt::AltModifier) {
|
||||||
m_fileToSave = m_fnameWE;
|
m_fileToSave = m_fnameWE;
|
||||||
|
|
Loading…
Reference in New Issue