mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-07-05 03:15:16 -04:00
ft8sim can now generate old (174,87) or new (174,91) frames. Frame type is selected using the itype command line parameter.
This commit is contained in:
parent
86a5ae6596
commit
772b1bd5fa
@ -462,6 +462,7 @@ set (wsjt_FSRCS
|
|||||||
lib/geniscat.f90
|
lib/geniscat.f90
|
||||||
lib/fsk4hf/genfsk4hf.f90
|
lib/fsk4hf/genfsk4hf.f90
|
||||||
lib/ft8/genft8.f90
|
lib/ft8/genft8.f90
|
||||||
|
lib/ft8/genft8_174_91.f90
|
||||||
lib/genmsk144.f90
|
lib/genmsk144.f90
|
||||||
lib/genmsk40.f90
|
lib/genmsk40.f90
|
||||||
lib/fsk4hf/genmskhf.f90
|
lib/fsk4hf/genmskhf.f90
|
||||||
|
@ -15,18 +15,18 @@ program ft8sim
|
|||||||
complex c(0:NMAX-1)
|
complex c(0:NMAX-1)
|
||||||
real wave(NMAX)
|
real wave(NMAX)
|
||||||
integer itone(NN)
|
integer itone(NN)
|
||||||
integer*1 msgbits(KK)
|
integer*1 msgbits(91)
|
||||||
integer*2 iwave(NMAX) !Generated full-length waveform
|
integer*2 iwave(NMAX) !Generated full-length waveform
|
||||||
data mygrid6/'EM48 '/
|
data mygrid6/'EM48 '/
|
||||||
|
|
||||||
! Get command-line argument(s)
|
! Get command-line argument(s)
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.8) then
|
if(nargs.ne.9) then
|
||||||
print*,'Usage: ft8sim "message" nsig|f0 DT fdop del width nfiles snr'
|
print*,'Usage: ft8sim "message" nsig|f0 DT fdop del width nfiles snr type'
|
||||||
print*,'Examples: ft8sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18'
|
print*,'Examples: ft8sim "K1ABC W9XYZ EN37" 1500.0 0.0 0.1 1.0 0 10 -18 1'
|
||||||
print*,' ft8sim "K1ABC W9XYZ EN37" 10 0.0 0.1 1.0 25 10 -18'
|
print*,' ft8sim "K1ABC W9XYZ EN37" 10 0.0 0.1 1.0 25 10 -18 1'
|
||||||
print*,' ft8sim "K1ABC W9XYZ EN37" 25 0.0 0.1 1.0 25 10 -18'
|
print*,' ft8sim "K1ABC W9XYZ EN37" 25 0.0 0.1 1.0 25 10 -18 1'
|
||||||
print*,' ft8sim "K1ABC RR73; W9XYZ <KH1/KH7Z> -11" 300 0 0 0 25 1 -10'
|
print*,' ft8sim "K1ABC RR73; W9XYZ <KH1/KH7Z> -11" 300 0 0 0 25 1 -10 1'
|
||||||
print*,'Make nfiles negative to invoke 72-bit contest mode.'
|
print*,'Make nfiles negative to invoke 72-bit contest mode.'
|
||||||
go to 999
|
go to 999
|
||||||
endif
|
endif
|
||||||
@ -45,6 +45,9 @@ program ft8sim
|
|||||||
read(arg,*) nfiles !Number of files
|
read(arg,*) nfiles !Number of files
|
||||||
call getarg(8,arg)
|
call getarg(8,arg)
|
||||||
read(arg,*) snrdb !SNR_2500
|
read(arg,*) snrdb !SNR_2500
|
||||||
|
call getarg(9,arg)
|
||||||
|
read(arg,*) itype !itype=1 for (174,87), itype=2 for (174,91)
|
||||||
|
|
||||||
nsig=1
|
nsig=1
|
||||||
if(f0.lt.100.0) then
|
if(f0.lt.100.0) then
|
||||||
nsig=f0
|
nsig=f0
|
||||||
@ -69,7 +72,11 @@ program ft8sim
|
|||||||
if(index(msg40,';').le.0) then
|
if(index(msg40,';').le.0) then
|
||||||
i3bit=0
|
i3bit=0
|
||||||
msg=msg40(1:22)
|
msg=msg40(1:22)
|
||||||
|
if(itype.eq.1) then
|
||||||
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
elseif(itype.eq.2) then
|
||||||
|
call genft8_174_91(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
endif
|
||||||
write(*,1000) f0,xdt,txt,snrdb,bw,msgsent
|
write(*,1000) f0,xdt,txt,snrdb,bw,msgsent
|
||||||
1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, &
|
1000 format('f0:',f9.3,' DT:',f6.2,' TxT:',f6.1,' SNR:',f6.1, &
|
||||||
' BW:',f4.1,2x,a22)
|
' BW:',f4.1,2x,a22)
|
||||||
@ -82,8 +89,13 @@ program ft8sim
|
|||||||
|
|
||||||
write(*,1030) msgbits(1:56)
|
write(*,1030) msgbits(1:56)
|
||||||
1030 format(/'Call1: ',28i1,' Call2: ',28i1)
|
1030 format(/'Call1: ',28i1,' Call2: ',28i1)
|
||||||
|
if(itype.eq.1) then
|
||||||
write(*,1032) msgbits(57:72),msgbits(73:75),msgbits(76:87)
|
write(*,1032) msgbits(57:72),msgbits(73:75),msgbits(76:87)
|
||||||
1032 format('Grid: ',16i1,' 3Bit: ',3i1,' CRC12: ',12i1)
|
1032 format('Grid: ',16i1,' 3Bit: ',3i1,' CRC12: ',12i1)
|
||||||
|
elseif(itype.eq.2) then
|
||||||
|
write(*,1033) msgbits(57:72),msgbits(73:77),msgbits(78:91)
|
||||||
|
1033 format('Grid: ',16i1,' 5Bit: ',5i1,' CRC14: ',14i1)
|
||||||
|
endif
|
||||||
write(*,1034) itone
|
write(*,1034) itone
|
||||||
1034 format(/'Channel symbols:'/79i1/)
|
1034 format(/'Channel symbols:'/79i1/)
|
||||||
|
|
||||||
@ -99,7 +111,11 @@ program ft8sim
|
|||||||
if(isig.eq.2) then
|
if(isig.eq.2) then
|
||||||
f0=f0+100
|
f0=f0+100
|
||||||
endif
|
endif
|
||||||
|
if(itype.eq.1) then
|
||||||
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
elseif(itype.eq.2) then
|
||||||
|
call genft8_174_91(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
if(nsig.eq.25) then
|
if(nsig.eq.25) then
|
||||||
f0=(isig+2)*100.0
|
f0=(isig+2)*100.0
|
||||||
@ -118,7 +134,11 @@ program ft8sim
|
|||||||
1002 format('R',i3.2)
|
1002 format('R',i3.2)
|
||||||
f0=600.0 + mod(isig-1,5)*60.0
|
f0=600.0 + mod(isig-1,5)*60.0
|
||||||
endif
|
endif
|
||||||
|
if(itype.eq.1) then
|
||||||
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
call genft8(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
elseif(itype.eq.2) then
|
||||||
|
call genft8_174_91(msg,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
k=-1 + nint((xdt+0.5+0.01*gran())/dt)
|
k=-1 + nint((xdt+0.5+0.01*gran())/dt)
|
||||||
! k=-1 + nint((xdt+0.5)/dt)
|
! k=-1 + nint((xdt+0.5)/dt)
|
||||||
|
53
lib/ft8/genft8_174_91.f90
Normal file
53
lib/ft8/genft8_174_91.f90
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
subroutine genft8_174_91(msg,mygrid,bcontest,i5bit,msgsent,msgbits,itone)
|
||||||
|
|
||||||
|
! Encode an FT8 message, producing array itone().
|
||||||
|
|
||||||
|
use crc
|
||||||
|
use packjt
|
||||||
|
include 'ft8_params.f90'
|
||||||
|
character*22 msg,msgsent
|
||||||
|
character*6 mygrid
|
||||||
|
character*91 cbits
|
||||||
|
logical bcontest,checksumok
|
||||||
|
integer*4 i4Msg6BitWords(12) !72-bit message as 6-bit words
|
||||||
|
integer*1 msgbits(91),codeword(174)
|
||||||
|
integer*1, target:: i1Msg8BitBytes(12)
|
||||||
|
integer itone(79)
|
||||||
|
integer icos7(0:6)
|
||||||
|
# data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern
|
||||||
|
data icos7/3,1,4,0,6,5,2/ !Costas 7x7 tone pattern
|
||||||
|
|
||||||
|
call packmsg(msg,i4Msg6BitWords,itype,bcontest) !Pack into 12 6-bit bytes
|
||||||
|
call unpackmsg(i4Msg6BitWords,msgsent,bcontest,mygrid) !Unpack to get msgsent
|
||||||
|
|
||||||
|
write(cbits,1000) i4Msg6BitWords,8*i5bit
|
||||||
|
1000 format(12b6.6,b8.8)
|
||||||
|
read(cbits,1001) i1Msg8BitBytes(1:10)
|
||||||
|
1001 format(10b8)
|
||||||
|
i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),128+64+32+16+8)
|
||||||
|
i1Msg8BitBytes(11:12)=0
|
||||||
|
icrc14=crc14(c_loc(i1Msg8BitBytes),12)
|
||||||
|
i1Msg8BitBytes(11)=icrc14/256
|
||||||
|
i1Msg8BitBytes(12)=iand (icrc14,255)
|
||||||
|
|
||||||
|
write(cbits,1003) i4Msg6BitWords,i5bit,icrc14
|
||||||
|
1003 format(12b6.6,b5.5,b14.14)
|
||||||
|
read(cbits,1004) msgbits
|
||||||
|
1004 format(91i1)
|
||||||
|
|
||||||
|
call encode174_91(msgbits,codeword) !Encode the test message
|
||||||
|
|
||||||
|
! Message structure: S7 D29 S7 D29 S7
|
||||||
|
itone(1:7)=icos7
|
||||||
|
itone(36+1:36+7)=icos7
|
||||||
|
itone(NN-6:NN)=icos7
|
||||||
|
k=7
|
||||||
|
do j=1,ND
|
||||||
|
i=3*j -2
|
||||||
|
k=k+1
|
||||||
|
if(j.eq.30) k=k+7
|
||||||
|
itone(k)=codeword(i)*4 + codeword(i+1)*2 + codeword(i+2)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine genft8_174_91
|
Loading…
x
Reference in New Issue
Block a user