mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-09-28 16:16:48 -04:00
msk144 simulator is now called msk144sim.f90, command line msk144 decoder is msk144d.f90.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6716 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
ab8f641bb1
commit
1f37a6676f
@ -355,6 +355,7 @@ set (wsjt_FSRCS
|
|||||||
lib/gen9.f90
|
lib/gen9.f90
|
||||||
lib/geniscat.f90
|
lib/geniscat.f90
|
||||||
lib/genmsk.f90
|
lib/genmsk.f90
|
||||||
|
lib/genmsk144.f90
|
||||||
lib/genmsk_short.f90
|
lib/genmsk_short.f90
|
||||||
lib/genwspr.f90
|
lib/genwspr.f90
|
||||||
lib/geodist.f90
|
lib/geodist.f90
|
||||||
@ -384,6 +385,7 @@ set (wsjt_FSRCS
|
|||||||
lib/jt9_decode.f90
|
lib/jt9_decode.f90
|
||||||
lib/jt9fano.f90
|
lib/jt9fano.f90
|
||||||
lib/JTMSKsim.f90
|
lib/JTMSKsim.f90
|
||||||
|
lib/msk144sim.f90
|
||||||
lib/jtmsk_decode.f90
|
lib/jtmsk_decode.f90
|
||||||
lib/jtmsk_short.f90
|
lib/jtmsk_short.f90
|
||||||
lib/ldpcsim.f90
|
lib/ldpcsim.f90
|
||||||
@ -396,6 +398,8 @@ set (wsjt_FSRCS
|
|||||||
lib/morse.f90
|
lib/morse.f90
|
||||||
lib/move.f90
|
lib/move.f90
|
||||||
lib/mskdt.f90
|
lib/mskdt.f90
|
||||||
|
lib/msk144d.f90
|
||||||
|
lib/msk144_decode.f90
|
||||||
lib/options.f90
|
lib/options.f90
|
||||||
lib/packjt.f90
|
lib/packjt.f90
|
||||||
lib/pctile.f90
|
lib/pctile.f90
|
||||||
@ -435,6 +439,7 @@ set (wsjt_FSRCS
|
|||||||
lib/sync9w.f90
|
lib/sync9w.f90
|
||||||
lib/synciscat.f90
|
lib/synciscat.f90
|
||||||
lib/syncmsk.f90
|
lib/syncmsk.f90
|
||||||
|
lib/syncmsk144.f90
|
||||||
lib/timer_C_wrapper.f90
|
lib/timer_C_wrapper.f90
|
||||||
lib/timer_impl.f90
|
lib/timer_impl.f90
|
||||||
lib/timer_module.f90
|
lib/timer_module.f90
|
||||||
@ -1023,6 +1028,12 @@ target_link_libraries (ldpcsim wsjt_fort wsjt_cxx)
|
|||||||
add_executable (JTMSKsim lib/JTMSKsim.f90 wsjtx.rc)
|
add_executable (JTMSKsim lib/JTMSKsim.f90 wsjtx.rc)
|
||||||
target_link_libraries (JTMSKsim wsjt_fort wsjt_cxx)
|
target_link_libraries (JTMSKsim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (msk144sim lib/msk144sim.f90 wsjtx.rc)
|
||||||
|
target_link_libraries (msk144sim wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
|
add_executable (msk144d lib/msk144d.f90 wsjtx.rc)
|
||||||
|
target_link_libraries (msk144d wsjt_fort wsjt_cxx)
|
||||||
|
|
||||||
add_executable (jt9 ${jt9_FSRCS} ${jt9_CXXSRCS} wsjtx.rc)
|
add_executable (jt9 ${jt9_FSRCS} ${jt9_CXXSRCS} wsjtx.rc)
|
||||||
if (${OPENMP_FOUND} OR APPLE)
|
if (${OPENMP_FOUND} OR APPLE)
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
|
77
lib/msk144d.f90
Normal file
77
lib/msk144d.f90
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
program msk144d
|
||||||
|
|
||||||
|
! Test the msk144 decoder for WSJT-X
|
||||||
|
|
||||||
|
use options
|
||||||
|
use timer_module, only: timer
|
||||||
|
use timer_impl, only: init_timer
|
||||||
|
use readwav
|
||||||
|
|
||||||
|
character c,mode
|
||||||
|
character*80 line(100)
|
||||||
|
logical :: display_help=.false.
|
||||||
|
type(wav_header) :: wav
|
||||||
|
integer*2 id2(15*12000)
|
||||||
|
integer narg(0:14)
|
||||||
|
character*80 infile
|
||||||
|
character(len=500) optarg
|
||||||
|
|
||||||
|
type (option) :: long_options(2) = [ &
|
||||||
|
option ('help',.false.,'h','Display this help message',''), &
|
||||||
|
option ('ntrials',.true.,'n','number of trials, default TRIALS=10000','TRIALS') &
|
||||||
|
]
|
||||||
|
do
|
||||||
|
call getopt('hn:',long_options,c,optarg,narglen,nstat,noffset,nremain,.true.)
|
||||||
|
if( nstat .ne. 0 ) then
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
select case (c)
|
||||||
|
case ('h')
|
||||||
|
display_help = .true.
|
||||||
|
case ('n')
|
||||||
|
read (optarg(:narglen), *) ntrials
|
||||||
|
end select
|
||||||
|
end do
|
||||||
|
|
||||||
|
if(display_help .or. nstat.lt.0 .or. nremain.lt.1) then
|
||||||
|
print *, ''
|
||||||
|
print *, 'Usage: msk144d [OPTIONS] file1 [file2 ...]'
|
||||||
|
print *, ''
|
||||||
|
print *, ' msk144 decode pre-recorded .WAV file(s)'
|
||||||
|
print *, ''
|
||||||
|
print *, 'OPTIONS:'
|
||||||
|
print *, ''
|
||||||
|
do i = 1, size (long_options)
|
||||||
|
call long_options(i) % print (6)
|
||||||
|
end do
|
||||||
|
go to 999
|
||||||
|
endif
|
||||||
|
|
||||||
|
call init_timer ('timer.out')
|
||||||
|
call timer('jt65 ',0)
|
||||||
|
|
||||||
|
ndecoded=0
|
||||||
|
do ifile=noffset+1,noffset+nremain
|
||||||
|
call get_command_argument(ifile,optarg,narglen)
|
||||||
|
infile=optarg(:narglen)
|
||||||
|
call timer('read ',0)
|
||||||
|
call wav%read (infile)
|
||||||
|
i1=index(infile,'.wav')
|
||||||
|
if( i1 .eq. 0 ) i1=index(infile,'.WAV')
|
||||||
|
read(infile(i1-4:i1-1),*,err=998) nutc
|
||||||
|
npts=15*12000
|
||||||
|
read(unit=wav%lun) id2(1:npts)
|
||||||
|
close(unit=wav%lun)
|
||||||
|
call timer('read ',1)
|
||||||
|
call msk144_decode(id2,npts,nutc,line)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
call timer('msk144 ',1)
|
||||||
|
call timer('msk144 ',101)
|
||||||
|
go to 999
|
||||||
|
|
||||||
|
998 print*,'Cannot read from file:'
|
||||||
|
print*,infile
|
||||||
|
|
||||||
|
999 continue
|
||||||
|
end program msk144d
|
@ -1,4 +1,4 @@
|
|||||||
program JTMSKsim
|
program msk144sim
|
||||||
|
|
||||||
use wavhdr
|
use wavhdr
|
||||||
parameter (NMAX=15*12000)
|
parameter (NMAX=15*12000)
|
||||||
@ -17,10 +17,9 @@ program JTMSKsim
|
|||||||
|
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.5) then
|
if(nargs.ne.5) then
|
||||||
print*,'Usage: JTMSKsim message freq width snr nfiles'
|
print*,'Usage: msk144sim message freq width snr nfiles'
|
||||||
print*,' '
|
print*,' '
|
||||||
print*,'Examples: JTMSKsim "K1ABC W9XYZ EN37" 1500 0.12 2 1'
|
print*,'Example: msk144sim "K1ABC W9XYZ EN37" 1500 0.12 2 1'
|
||||||
print*,' JTMSKsim "<K1ABC W9XYZ> R26" 1500 0.01 1 3'
|
|
||||||
go to 999
|
go to 999
|
||||||
endif
|
endif
|
||||||
call getarg(1,msg)
|
call getarg(1,msg)
|
||||||
@ -86,4 +85,4 @@ program JTMSKsim
|
|||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
999 end program JTMSKsim
|
999 end program msk144sim
|
@ -1,7 +1,4 @@
|
|||||||
subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
subroutine syncmsk144(cdat,npts,metric,msgreceived,fest)
|
||||||
|
|
||||||
! Attempt synchronization, and if successful decode using Viterbi algorithm.
|
|
||||||
|
|
||||||
use iso_c_binding, only: c_loc,c_size_t
|
use iso_c_binding, only: c_loc,c_size_t
|
||||||
use packjt
|
use packjt
|
||||||
use hashing
|
use hashing
|
||||||
@ -43,13 +40,11 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
data s8/0,1,1,1,0,0,1,0/
|
data s8/0,1,1,1,0,0,1,0/
|
||||||
save first,cb,cd,pi,twopi,dt,f0,f1
|
save first,cb,cd,pi,twopi,dt,f0,f1
|
||||||
|
|
||||||
open(unit=78,file="/Users/sfranke/Builds/wsjtx_install/sfdebug.txt")
|
|
||||||
if(first) then
|
if(first) then
|
||||||
write(78,*) "Initializing ldpc."
|
! These files can be found in /lib/ldpc/jtmode_codes directory
|
||||||
pchk_file="/Users/sfranke/Builds/wsjtx_install/peg-128-80-reg3.pchk"
|
pchk_file="peg-128-80-reg3.pchk"
|
||||||
gen_file="/Users/sfranke/Builds/wsjtx_install/peg-128-80-reg3.gen"
|
gen_file="peg-128-80-reg3.gen"
|
||||||
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
call init_ldpc(trim(pchk_file)//char(0),trim(gen_file)//char(0))
|
||||||
write(78,*) "after init_ldpc"
|
|
||||||
! define half-sine pulse and raised-cosine edge window
|
! define half-sine pulse and raised-cosine edge window
|
||||||
pi=4d0*datan(1d0)
|
pi=4d0*datan(1d0)
|
||||||
twopi=8d0*datan(1d0)
|
twopi=8d0*datan(1d0)
|
||||||
@ -75,7 +70,6 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
first=.false.
|
first=.false.
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
! Coarse carrier frequency sync
|
! Coarse carrier frequency sync
|
||||||
! look for tones near 2k and 4k in the analytic signal spectrum
|
! look for tones near 2k and 4k in the analytic signal spectrum
|
||||||
! search range for coarse frequency error is +/- 100 Hz
|
! search range for coarse frequency error is +/- 100 Hz
|
||||||
@ -89,6 +83,7 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
ctmp(npts-11:npts)=ctmp(npts-11:npts)*rcw(12:1:-1)
|
ctmp(npts-11:npts)=ctmp(npts-11:npts)*rcw(12:1:-1)
|
||||||
call four2a(ctmp,nfft,1,-1,1)
|
call four2a(ctmp,nfft,1,-1,1)
|
||||||
tonespec=abs(ctmp)**2
|
tonespec=abs(ctmp)**2
|
||||||
|
|
||||||
ismask=.false.
|
ismask=.false.
|
||||||
ismask(1901:2101)=.true. ! high tone search window
|
ismask(1901:2101)=.true. ! high tone search window
|
||||||
iloc=maxloc(tonespec,ismask)
|
iloc=maxloc(tonespec,ismask)
|
||||||
@ -110,9 +105,9 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
endif
|
endif
|
||||||
fdiff=(ihpk-ilpk)*df
|
fdiff=(ihpk-ilpk)*df
|
||||||
|
|
||||||
! write(78,*) "Coarse frequency error: ",ferr
|
write(78,*) "Coarse frequency error: ",ferr
|
||||||
! write(78,*) "Tone / avg : ",q1
|
write(78,*) "Tone / avg : ",q1
|
||||||
! write(78,*) "Tone separation : ",fdiff
|
write(78,*) "Tone separation : ",fdiff
|
||||||
|
|
||||||
! remove coarse freq error - should now be within a few Hz
|
! remove coarse freq error - should now be within a few Hz
|
||||||
call tweak1(cdat,npts,-(1500+ferr),cdat)
|
call tweak1(cdat,npts,-(1500+ferr),cdat)
|
||||||
@ -133,7 +128,7 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
iloc=maxloc(dd)
|
iloc=maxloc(dd)
|
||||||
ic2=iloc(1)
|
ic2=iloc(1)
|
||||||
|
|
||||||
! write(78,*) "Syncs: ic1,ic2 ",ic1,ic2
|
write(78,*) "Syncs: ic1,ic2 ",ic1,ic2
|
||||||
ic=ic2
|
ic=ic2
|
||||||
|
|
||||||
! do i=1,npts-448-41
|
! do i=1,npts-448-41
|
||||||
@ -182,8 +177,12 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
hardbits(i)=1
|
hardbits(i)=1
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
! write(78,*) hardbits(1:8)
|
|
||||||
! write(78,*) hardbits(57:57+7)
|
! calculated the number of sync-word bits that are incorrect
|
||||||
|
nbadsync=sum(s8*(2*hardbits(1:8)-1))
|
||||||
|
nbadsync=nbadsync+sum(s8*(2*hardbits(57:57+7)-1))
|
||||||
|
nbadsync=16-nbadsync
|
||||||
|
write(78,*) nbadsync," bad sync bits"
|
||||||
|
|
||||||
hardword(1:48)=hardbits(9:9+47)
|
hardword(1:48)=hardbits(9:9+47)
|
||||||
hardword(49:128)=hardbits(65:65+80-1)
|
hardword(49:128)=hardbits(65:65+80-1)
|
||||||
@ -240,7 +239,6 @@ subroutine syncmsk144(cdat,npts,jpk,ipk,idf,rmax,snr,metric,msgreceived,fest)
|
|||||||
enddo
|
enddo
|
||||||
call unpackmsg(i4Dec6BitWords,msgreceived)
|
call unpackmsg(i4Dec6BitWords,msgreceived)
|
||||||
endif
|
endif
|
||||||
close(78)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
end subroutine syncmsk144
|
end subroutine syncmsk144
|
||||||
|
Loading…
Reference in New Issue
Block a user