mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-03-31 16:38:35 -04:00
Fix a wrong number in User Guide. Add qratest.f90 and a private makefile.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7366 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
86780684a0
commit
77a4d19676
@ -249,7 +249,7 @@ many times as will fit into a Tx sequence.
|
|||||||
|
|
||||||
==== JT9
|
==== JT9
|
||||||
|
|
||||||
The JT9 slow modes all use keying rate 4.375 baud. By contrast, with
|
The JT9 slow modes all use keying rate 12000/6912 = 1.736 baud. By contrast, with
|
||||||
the *Fast* setting submodes JT9E-H adjust the keying rate to match the
|
the *Fast* setting submodes JT9E-H adjust the keying rate to match the
|
||||||
increased tone spacings. Message durations are therefore much
|
increased tone spacings. Message durations are therefore much
|
||||||
shorter, and they are sent repeatedly throughout each Tx sequence.
|
shorter, and they are sent repeatedly throughout each Tx sequence.
|
||||||
|
123
lib/Makefile
123
lib/Makefile
@ -1,54 +1,69 @@
|
|||||||
CC = gcc
|
# Set paths
|
||||||
CXX = g++
|
EXE_DIR = ..\\..\\wsjtx_install
|
||||||
FC = gfortran
|
QT_DIR = C:/wsjt-env/Qt5/5.2.1/mingw48_32
|
||||||
AR = ar cr
|
FFTW3_DIR = ..
|
||||||
MKDIR = mkdir -p
|
|
||||||
CP = cp
|
INCPATH = -I${QT_DIR}/include/QtCore -I${QT_DIR}/include
|
||||||
RANLIB = ranlib
|
|
||||||
RM = rm -f
|
# Compilers
|
||||||
|
CC = gcc
|
||||||
FFLAGS = -O3 -funroll-loops -Wall -Wno-conversion -fno-second-underscore -DUNIX
|
CXX = g++
|
||||||
CFLAGS = -I. -fPIE
|
FC = gfortran
|
||||||
|
AR = ar cr
|
||||||
# Default rules
|
RANLIB = ranlib
|
||||||
%.o: %.c
|
MKDIR = mkdir -p
|
||||||
${CC} ${CFLAGS} -c $<
|
CP = cp
|
||||||
%.o: %.f
|
RM = rm -f
|
||||||
${FC} ${FFLAGS} -c $<
|
|
||||||
%.o: %.F
|
FFLAGS = -O2 -fbounds-check -Wall -Wno-conversion
|
||||||
${FC} ${FFLAGS} -c $<
|
CFLAGS = -O2 -I.
|
||||||
%.o: %.f90
|
|
||||||
${FC} ${FFLAGS} -c $<
|
# Default rules
|
||||||
%.o: %.F90
|
%.o: %.c
|
||||||
${FC} ${FFLAGS} -c $<
|
${CC} ${CFLAGS} -c $<
|
||||||
%.mod: %.f90
|
%.o: %.f
|
||||||
${FC} ${FFLAGS} -c $<
|
${FC} ${FFLAGS} -c $<
|
||||||
|
%.o: %.F
|
||||||
#all: jt4.mod testjt4 testfast9
|
${FC} ${FFLAGS} -c $<
|
||||||
all: testjt65
|
%.o: %.f90
|
||||||
|
${FC} ${FFLAGS} -c $<
|
||||||
OBJS1 = testjt4.o jt4.o sync4.o ps4.o four2a.o flat1a.o smo.o xcor4.o \
|
%.o: %.F90
|
||||||
slope.o peakup.o db.o pctile.o sort.o timer.o image.o zplt.o
|
${FC} ${FFLAGS} -c $<
|
||||||
|
|
||||||
testjt4: $(OBJS1)
|
all: qratest.exe
|
||||||
$(FC) -o testjt4 $(OBJS1) -L. -lfftw3f_threads -lfftw3f
|
|
||||||
|
OBJS1 = qratest.o qra64a.o sync64.o four2a.o smo.o smo121.o averms.o \
|
||||||
OBJS2 = t2.o image.o
|
timer_module.o packjt.o twkfreq.o spec64.o fmtmsg.o pctile.o \
|
||||||
t2: $(OBJS2)
|
grid2deg.o deg2grid.o shell.o badmsg.o qra64_subs.o \
|
||||||
$(FC) -o t2 $(OBJS2)
|
qracodes.o npfwht.o pdmath.o qra12_63_64_irr_b.o \
|
||||||
|
qra13_64_64_irr_e.o qra64.o
|
||||||
OBJS3 = testfast9.o fast9.o four2a.o pctile.o db.o interleave9.o jt9fano.o \
|
|
||||||
sort.o fano232.o packjt.o deg2grid.o grid2deg.o fmtmsg.o \
|
qra64_subs.o: qra/qra64/qra64_subs.c
|
||||||
spec9f.o foldspec9f.o sync9f.o softsym9f.o
|
gcc -c -O2 -o qra64_subs.o qra/qra64/qra64_subs.c
|
||||||
testfast9: $(OBJS3)
|
|
||||||
$(FC) -o testfast9 $(OBJS3) C:\JTSDK\fftw3f\libfftw3f-3.dll
|
qracodes.o: qra/qracodes/qracodes.c
|
||||||
|
gcc -c -O2 -o qracodes.o qra/qracodes/qracodes.c
|
||||||
OBJS4 = testjt65.o symspec65.o four2a.o db.o flat65.o pctile.o shell.o \
|
|
||||||
xcor.o setup65.o slope.o peakup.o sync65.o
|
qra64.o: qra/qra64/qra64.c
|
||||||
testjt65: $(OBJS4)
|
gcc -c -O2 -o qra64.o qra/qra64/qra64.c
|
||||||
$(FC) -o testjt65 $(OBJS4) C:\JTSDK\fftw3f\libfftw3f-3.dll
|
|
||||||
|
npfwht.o: qra/qracodes/npfwht.c
|
||||||
.PHONY : clean
|
gcc -c -O2 -o npfwht.o qra/qracodes/npfwht.c
|
||||||
|
|
||||||
clean:
|
pdmath.o: qra/qracodes/pdmath.c
|
||||||
$(RM) *.o libjt9.a testjt4
|
gcc -c -O2 -o pdmath.o qra/qracodes/pdmath.c
|
||||||
|
|
||||||
|
qra12_63_64_irr_b.o: qra/qracodes/qra12_63_64_irr_b.c
|
||||||
|
gcc -c -O2 -o qra12_63_64_irr_b.o qra/qracodes/qra12_63_64_irr_b.c
|
||||||
|
|
||||||
|
qra13_64_64_irr_e.o: qra/qracodes/qra13_64_64_irr_e.c
|
||||||
|
gcc -c -O2 -o qra13_64_64_irr_e.o qra/qracodes/qra13_64_64_irr_e.c
|
||||||
|
|
||||||
|
|
||||||
|
qratest.exe: $(OBJS1)
|
||||||
|
$(FC) -o qratest.exe $(OBJS1) C:\JTSDK\fftw3f\libfftw3f-3.dll
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o qratest.exe
|
||||||
|
171
lib/qratest.f90
171
lib/qratest.f90
@ -2,9 +2,10 @@ program qratest
|
|||||||
|
|
||||||
parameter (NMAX=60*12000)
|
parameter (NMAX=60*12000)
|
||||||
real dd(NMAX)
|
real dd(NMAX)
|
||||||
real t(5)
|
|
||||||
integer*8 count0,count1,clkfreq
|
|
||||||
character*8 arg
|
character*8 arg
|
||||||
|
character*12 mycall,hiscall
|
||||||
|
character*6 hisgrid
|
||||||
|
character*22 decoded
|
||||||
|
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.3) then
|
if(nargs.ne.3) then
|
||||||
@ -17,164 +18,16 @@ program qratest
|
|||||||
read(arg,*) maxf1
|
read(arg,*) maxf1
|
||||||
call getarg(3,arg)
|
call getarg(3,arg)
|
||||||
read(arg,*) ntol
|
read(arg,*) ntol
|
||||||
nf1=nf0-ntol
|
ndepth=3
|
||||||
nf2=nf0+ntol
|
|
||||||
|
|
||||||
! do iskip=1,13
|
! do n=1,999
|
||||||
! read(60)
|
do n=1,1
|
||||||
! enddo
|
read(60,end=999) dd,npts,nutc,nf1,nf2,nfqso,ntol,mode64,minsync,mycall, &
|
||||||
|
hiscall,hisgrid
|
||||||
do n=1,999
|
call qra64a(dd,npts,nutc,nf1,nf2,nfqso,ntol,mode64,minsync,ndepth, &
|
||||||
read(60,end=999) dd
|
mycall,hiscall,hisgrid,sync,nsnr,dtx,nfreq,decoded,nft)
|
||||||
call system_clock(count0,clkfreq)
|
write(*,1000) nutc,nsnr,dtx,nfreq,decoded,nft-100
|
||||||
call sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snr,t)
|
1000 format(i4.4,i4,f6.2,i5,1x,a22,i3)
|
||||||
call system_clock(count1,clkfreq)
|
|
||||||
tsec=float(count1-count0)/float(clkfreq)
|
|
||||||
! nf0=200*nint(f0/200.)
|
|
||||||
dfreq0=f0-nf0
|
|
||||||
write(*,1000) dtx,f0,dfreq0,kpk,snr,tsec
|
|
||||||
1000 format(f8.3,f8.2,f7.2,i4,f8.1,f7.3)
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
999 end program qratest
|
999 end program qratest
|
||||||
|
|
||||||
subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snr,t)
|
|
||||||
parameter (NMAX=60*12000) !Max size of raw data at 12000 Hz
|
|
||||||
parameter (NSPS=2304) !Samples per symbol at 4000 Hz
|
|
||||||
parameter (NSPC=7*NSPS) !Samples per Costas array
|
|
||||||
real dd(NMAX) !Raw data
|
|
||||||
real x(672000) !Up to 56 s at 12000 Hz
|
|
||||||
real t(5)
|
|
||||||
|
|
||||||
real s0(0:NSPC-1)
|
|
||||||
real s1(0:NSPC-1)
|
|
||||||
real s2(0:NSPC-1)
|
|
||||||
real s3(0:NSPC-1)
|
|
||||||
|
|
||||||
real s0a(0:NSPC-1)
|
|
||||||
|
|
||||||
integer*8 count0,count1,clkfreq
|
|
||||||
integer icos7(0:6)
|
|
||||||
integer ipk0(1)
|
|
||||||
|
|
||||||
complex cc(0:NSPC-1)
|
|
||||||
complex c0(0:336000)
|
|
||||||
complex c1(0:NSPC-1)
|
|
||||||
complex c2(0:NSPC-1)
|
|
||||||
complex c3(0:NSPC-1)
|
|
||||||
equivalence (x,c0)
|
|
||||||
data icos7/2,5,6,0,4,1,3/ !Costas 7x7 pattern
|
|
||||||
|
|
||||||
twopi=8.0*atan(1.0)
|
|
||||||
dfgen=12000.0/6912.0
|
|
||||||
k=-1
|
|
||||||
phi=0.
|
|
||||||
do j=0,6
|
|
||||||
dphi=twopi*icos7(j)*dfgen/4000.0
|
|
||||||
do i=1,2304
|
|
||||||
phi=phi + dphi
|
|
||||||
if(phi.gt.twopi) phi=phi-twopi
|
|
||||||
k=k+1
|
|
||||||
cc(k)=cmplx(cos(phi),sin(phi))
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
npts0=54*12000
|
|
||||||
nfft1=672000
|
|
||||||
nfft2=nfft1/3
|
|
||||||
df1=12000.0/nfft1
|
|
||||||
fac=2.0/nfft1
|
|
||||||
x=fac*dd(1:nfft1)
|
|
||||||
call system_clock(count0,clkfreq)
|
|
||||||
call four2a(c0,nfft1,1,-1,0) !Forward r2c FFT
|
|
||||||
call four2a(c0,nfft2,1,1,1) !Inverse c2c FFT; c0 is analytic sig
|
|
||||||
call system_clock(count1,clkfreq)
|
|
||||||
t(1)=float(count1-count0)/float(clkfreq)
|
|
||||||
npts2=npts0/3 !Downsampled complex data length
|
|
||||||
nfft3=NSPC
|
|
||||||
nh3=nfft3/2
|
|
||||||
df3=4000.0/nfft3
|
|
||||||
ia=nint(nf1/df3)
|
|
||||||
ib=nint(nf2/df3)
|
|
||||||
iz=ib-ia+1
|
|
||||||
snr=0.
|
|
||||||
jpk=0
|
|
||||||
ja=0
|
|
||||||
jb=6*4000
|
|
||||||
jstep=200
|
|
||||||
ka=-maxf1
|
|
||||||
kb=maxf1
|
|
||||||
ipk=0
|
|
||||||
kpk=0
|
|
||||||
call system_clock(count0,clkfreq)
|
|
||||||
do iter=1,2
|
|
||||||
do j1=ja,jb,jstep
|
|
||||||
j2=j1 + 39*2304
|
|
||||||
j3=j1 + 77*2304
|
|
||||||
c1=1.e-4*c0(j1:j1+NSPC-1) * conjg(cc)
|
|
||||||
call four2a(c1,nfft3,1,-1,1)
|
|
||||||
c2=1.e-4*c0(j2:j2+NSPC-1) * conjg(cc)
|
|
||||||
call four2a(c2,nfft3,1,-1,1)
|
|
||||||
c3=1.e-4*c0(j3:j3+NSPC-1) * conjg(cc)
|
|
||||||
call four2a(c3,nfft3,1,-1,1)
|
|
||||||
s0=0.
|
|
||||||
s1=0.
|
|
||||||
s2=0.
|
|
||||||
s3=0.
|
|
||||||
do i=ia,ib
|
|
||||||
freq=i*df3
|
|
||||||
s1(i)=real(c1(i))**2 + aimag(c1(i))**2
|
|
||||||
s2(i)=real(c2(i))**2 + aimag(c2(i))**2
|
|
||||||
s3(i)=real(c3(i))**2 + aimag(c3(i))**2
|
|
||||||
enddo
|
|
||||||
do k=ka,kb
|
|
||||||
s0(ia:ib)=s1(ia-k:ib-k) + s2(ia:ib) + s3(ia+k:ib+k)
|
|
||||||
call smo121(s0(ia:ib),iz)
|
|
||||||
call averms(s0(ia:ib),iz,14,ave,rms)
|
|
||||||
s=(maxval(s0(ia:ib))-ave)/rms
|
|
||||||
if(s.gt.snr) then
|
|
||||||
jpk=j1
|
|
||||||
s0a=s0
|
|
||||||
snr=s
|
|
||||||
dtx=jpk/4000.0 - 1.0
|
|
||||||
ipk0=maxloc(s0(ia:ib))
|
|
||||||
ipk=ipk0(1)
|
|
||||||
f0=(ipk+ia-1)*df3
|
|
||||||
kpk=k
|
|
||||||
write(16,3101) jpk,ipk,kpk,dtx,f0,snr
|
|
||||||
3101 format(3i5,f8.3,f8.2,f10.1)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
ja=jpk-2*jstep
|
|
||||||
jb=jpk+2*jstep
|
|
||||||
jstep=10
|
|
||||||
! ka=kpk
|
|
||||||
! kb=kpk
|
|
||||||
enddo
|
|
||||||
call system_clock(count1,clkfreq)
|
|
||||||
t(2)=float(count1-count0)/float(clkfreq)
|
|
||||||
|
|
||||||
return
|
|
||||||
end subroutine sync64
|
|
||||||
|
|
||||||
subroutine averms(x,n,nskip,ave,rms)
|
|
||||||
real x(n)
|
|
||||||
integer ipk(1)
|
|
||||||
|
|
||||||
ns=0
|
|
||||||
s=0.
|
|
||||||
sq=0.
|
|
||||||
ipk=maxloc(x)
|
|
||||||
do i=1,n
|
|
||||||
if(abs(i-ipk(1)).gt.nskip) then
|
|
||||||
s=s + x(i)
|
|
||||||
sq=sq + x(i)**2
|
|
||||||
ns=ns+1
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
ave=s/ns
|
|
||||||
rms=sqrt(sq/ns - ave*ave)
|
|
||||||
|
|
||||||
return
|
|
||||||
end subroutine averms
|
|
||||||
|
Loading…
Reference in New Issue
Block a user