diff --git a/Announce.txt b/Announce.txt deleted file mode 100644 index f75553a79..000000000 --- a/Announce.txt +++ /dev/null @@ -1,91 +0,0 @@ -To: Users of WSJT -From: Joe Taylor, K1JT -Subject: WSJT 5.9.0 -Date: November 14, 2005 - -I am pleased to announce that WSJT 5.9.0 is available for free -download from the WSJT Home Page, -http://pulsar.princeton.edu/~joe/K1JT. It should appear soon -on the European mirror site, http://www.dk5ya.de, as well. - -I believe that all reported bugs found in beta-release version 5.8.6 -have been fixed. In addition, new enhancements have taken the program -well beyond the capabilities of the baseline comparison versions, -4.9.8 and 5.8.6. - -The new WSJT 5.9.0 is faster and better than previous versions in a -number of ways. A brief description of the enhancements since version -5.8.6 can be found at -http://pulsar.princeton.edu/~joe/K1JT/UpdateHistory.txt. There are -many program changes, so be sure to read this information carefully -before trying to use WSJT 5.9.0! - -Of course there may be some new bugs, and perhaps I have overlooked an -existing problem that you already know about. Please let me know if -you find shortcomings in version 5.9.0, or if you have suggestions for -further improvements. - -Sorry, I have not yet found time to implement EME Echo mode. When -that is done, and when I have finished some further enhancements to -the decoders, WSJT 6.0 will be born. With some luck, there may also -be a new User's Guide at about that time. - -With best wishes, - -- 73, Joe, K1JT - - -Additional Information for Programmers ------------------------------------------------------------------------ - -WSJT versions 5.8+ are the result of a complete re-write of the user -interface, timing control, and audio I/O portions of WSJT 4.9.8. My -principal motivation was to make the program multi-threaded, both for -real-time operational convenience and for performance reasons. -Another strong motivation was a desire to move the program away from -its dependence on a proprietary compiler (Microsoft Visual Basic) and -a single computer platform (Windows). - -The user interface of WSJT 5.8+ is written in Python -- an elegant, -open, cross-platform language that has been a pleasure for me to -learn. The remainder of the program is written mostly in Fortran, -with some routines coded in C; much of that code has been carried over -directly from WSJT 4.9.8. - -I hope soon to release the source code for WSJT under the GNU General -Public License (GPL). To this end, I have separated out the one piece -of proprietary code formerly in the program -- the soft-decision Reed -Solomon decoder licensed from CodeVector Technologies (CVT). A driver -for this decoder, optimized for JT65, has been compiled into a -stand-alone executable that is now distributed as part of the WSJT -installation package, but not part of the program itself. With this -approach I can honor all provisions of the CVT license, and at the -same time release everything else as an open source program under the -GPL. - -WSJT 5.9.0 now includes an open source hard-decision Reed Solomon -decoder based on code written by Phil Karn, KA9Q . WSJT uses this -decoder automatically if the proprietary CVT decoder is unavailable. -In such instances the "deep search" decodes retain their full -sensitivity, but fully general decoding independent of the callsign -database will be less sensitive by 2 or more dB, depending on signal -fading characteristics. Separation of the program into two executable -units is transparent to the user. - -WSJT 5.9.0 uses the following open source libraries, which are also -available under the GPL: - - 1. FFTW, by Matteo Frigo and Steven Johnson, for computing Fourier - transforms - - 2. "Secret Rabbit Code" or "libsamplerate", by Erik de Castro, for - accomplishing band-limited resampling of data - - 3. RS, by Phil Karn, KA9Q, for Reed Solomon encoding and - hard-decision decoding. - -I hope that the open release of WSJT source code will encourage others -to read and understand the code, get involved in improving WSJT, and -perhaps porting it to other platforms. Versions of the CVT -soft-decision decoder for Linux or Macintosh will be easy to compile -and distribute, if there is demand for them. - diff --git a/HowtoWSJT-SuSE.html b/HowtoWSJT-SuSE.html deleted file mode 100644 index f08a42438..000000000 --- a/HowtoWSJT-SuSE.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - - - -
HowTo for Linux SuSE 10.0 ( DL3LST)
-
-Use Yast  to install the following packages  from the Linux  Distribution DVD
-
-Compiler
-      cpp
-      gcc
-      gcc-c++
-      liggcc
-
-Tcl/tk
-      tcl-devel
-      tk-devel
-      alsa-devel
-
-Python
-        python
-        python-devel
-        python-imaging
-        python-numeric
-        python-tk
-
---------------------------------------------------------------------------------------------------
-
-// Fortran compiler
-Page:                    http://www.g95.org/
-Downloadpage:    http://ftp.g95.org/
-Page:                    http://ftp.g95.org/g95-x86-linux.tgz
-
-install: g95
-
-follow instruction File:  Install 
- 
-How to install g95:     
-
-File Install: 
-1) Unpack the downloaded tarball (e.g. g95-x86-linux.tgz) in a directory
-of your choice:
-
-   tar -zxvf g95-x86-linux.tgz
-
-2) For your convenience, you can create another symbolic link from a
-directory in your $PATH (e.g. ~/bin) to the executable
-
-   ln -s $PWD/g95-install/bin/*g95* ~/bin/g95
-
-
-You should now be able to run g95 and create executables.
-To get a list of environment variables that control the library, run a
-compiled binary with the --help option, ie:
-
-  ./a.out �help
-
-From console try the g95 command .
-The system should answer
-g95:  no input files 
- 
-
-I changed the SymLink to /usr/bin where i installed the g77 packages too
-ln -s $PWD/g95-install/bin/*g95* /usr/bin/g95
-
-
-
-gcc-g77 compiler
-Page:               http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82721&release_id=15880
-Download:       http://prdownloads.sourceforge.net/mingw/gcc-g77-3.4.2-20040916-1.tar.gz?download
-
-From  gcc-g77-3.4.2-20040916-1.tar.gz  we need the /libexec folder  for l2g 
-copy from the archive  the folder
-/libexec        to      /usr/libexec
- 
-------------------------------------------------------------------------------
-other packages
-------------------------------------------------------------------------------
-Install: PortaudioV1.19 
-
-Page:                http://www.portaudio.com/usingsvn.html
-Download:        http://www.portaudio.com/archives/pa_previous_snapshot_v19.tar.gz
-./configure
-make  all
-make  install
-------------------------------------------------------------------------------
-FFT3
-Page    :            http://www.fftw.org/  
-Download :       http://www.fftw.org/fftw-3.1.1.tar.gz
-./configure
-./make  all
-./ make install
-
-------------------------------------------------------------------------------
-libsamplerate
-libsamplerate-0.1.2.
-Download:         http://www.mega-nerd.com/SRC/download.html
-./configure
-./make  all
-./ make install
-------------------------------------------------------------------------------
-reed-solomon-4.0
-.Page:  http://www.ka9q.net/code/fec/
-Download:       http://www.ka9q.net/code/fec/reed-solomon-4.0.tar.gz
-/configure
-./make 
-./ make install
-
-
-------------------------------------------------------------------------------
-F2PY  ( Fortran to Python )
-Download:       http://cens.ioc.ee/projects/f2py2e/2.x/F2PY-2-latest.tar.gz
-python setup.py install
-
-
-Scipy_Distutils
-Page:                                     http://cens.ioc.ee/projects/f2py2e/2.x/
-Download:                             http://cens.ioc.ee/projects/f2py2e/2.x/scipy_distutils-latest.tar.gz
-python setup.py install
-
-
-WSJT source code
-K1JT Page:                           http://pulsar.princeton.edu/~joe/K1JT/
-Download page:                    http://developer.berlios.de/projects/wsjt/
-
-
-./configure
-make
-python wsjt.py
-
-that�s all  - have fun 
-
-------------------------------------------------------------------------------
-If you need the packages for other Linux distributions  see linkpages below
-------------------------------------------------------------------------------
-
-Python:
-Page.                                    http://www.python.org/download/releases/2.4.3
-Download:                            http://www.python.org/ftp/python/2.4.3/Python-2.4.3.tgz   
-/configure
-./make  
-./ make install
-than run
-python setup.py install
-
-
-Numeric 
-Page:                         http://numeric.scipy.org/
-Download:                 http://prdownloads.sourceforge.net/numpy/Numeric-24.2.tar.gz?download
-install
-
-Iimaging  (be sure  Tcl/Ck  Lib was installed before)
-Page:                         http://www.pythonware.com/products/pil/
-Download:                 http://effbot.org/downloads/Imaging-1.1.5.tar.gz
-python setup.py install
-
-------------------------------------------------------------------------------
-other sites 
-------------------------------------------------------------------------------
-for gcc compiler try
-http://gcc.gnu.org/mirrors.html
-
-Example German server
-ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-4.1.0/
-ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.1.1/
-
-the full program  ( !!! filesize is 21 MB  )
-ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-4.1.0/gcc-core-4.1.0.tar.gz
-./configure
-make
-make install
-
- - \ No newline at end of file diff --git a/JT65code.f b/JT65code.f deleted file mode 100644 index 10fd90d7f..000000000 --- a/JT65code.f +++ /dev/null @@ -1,46 +0,0 @@ - program JT65karn - -C Provides examples of message packing, bit and symbol ordering, -C Reed Solomon encoding, and other necessary details of the JT65 -C protocol. - - character*22 msg0,msg,decoded,cok*3 - integer dgen(12),sent(63),recd(12),era(51) - - nargs=iargc() - if(nargs.ne.1) then - print*,'Usage: JT65code "message"' - go to 999 - endif - - call getarg(1,msg0) !Get message from command line - msg=msg0 - - call chkmsg(msg,cok,nspecial,flip) !See if it includes "OOO" report - if(nspecial.gt.0) then !or is a shorthand message - write(*,1010) - 1010 format('Shorthand message.') - go to 999 - endif - - call packmsg(msg,dgen) !Pack message into 72 bits - write(*,1020) msg0 - 1020 format('Message: ',a22) !Echo input message - if(iand(dgen(10),8).ne.0) write(*,1030) !Is the plain text bit set? - 1030 format('Plain text.') - write(*,1040) dgen - 1040 format('Packed message, 6-bit symbols: ',12i3) !Display packed symbols - - call rs_encode(dgen,sent) !RS encode - call interleave63(sent,1) !Interleave channel symbols - call graycode(sent,63,1) !Apply Gray code - write(*,1050) sent - 1050 format('Channel symbols, including FEC:'/(i5,20i3)) - - call graycode(sent,63,-1) - call interleave63(sent,-1) - call rs_decode(sent,era,0,recd,nerr) - call unpackmsg(recd,decoded) !Unpack the user message - write(*,1060) decoded,cok - 1060 format('Decoded message: ',a22,2x,a3) - 999 end diff --git a/JT65code_all.f b/JT65code_all.f deleted file mode 100644 index 3d81c18a4..000000000 --- a/JT65code_all.f +++ /dev/null @@ -1,20 +0,0 @@ - include 'JT65code.f' - include 'nchar.f' - include 'grid2deg.f' - include 'packmsg.f' - include 'packtext.f' - include 'packcall.f' - include 'packgrid.f' - include 'unpackmsg.f' - include 'unpacktext.f' - include 'unpackcall.f' - include 'unpackgrid.f' - include 'deg2grid.f' - include 'chkmsg.f' - include 'getpfx1.f' - include 'getpfx2.f' - include 'k2grid.f' - include 'grid2k.f' - include 'interleave63.f' - include 'graycode.f' - include 'set.f' diff --git a/Makefile.in.joe b/Makefile.in.joe deleted file mode 100644 index b67622399..000000000 --- a/Makefile.in.joe +++ /dev/null @@ -1,126 +0,0 @@ -CC ?= @CC@ -FFLAGS = @FFLAGS@ -LDFLAGS = @LDFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CFLAGS = @CFLAGS@ -CFLAGS += -DBIGSYM - -# WSJT specific Fortran flags -#FFLAGS += -Wall -fbounds-check -cpp -fno-second-underscore -FFLAGS = -O2 -cpp -w -fno-second-underscore - -OS=@OS@ -G95=@G95@ -COMPILER=@G95_LIB_PATH@ -FC=@G95@ - -LDFLAGS += -L${COMPILER} -LDFLAGS += -lg2c - -PYTHON ?= @PYTHON@ -RM ?= @RM@ -F2PY = @F2PY@ -F2PY_PY = "f2py.py" - -%.o : %.f90 - $(FC) -c $(FFLAGS) $< -o $@ - -OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \ - packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \ - unpackgrid.o deg2grid.o packdxcc.o chkmsg.o getpfx1.o \ - getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \ - igray.o init_rs.o encode_rs.o decode_rs.o \ - wrapkarn.o - -F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 - -SRCS2F90 = a2d.f90 abc441.f90 astro0.f90 audio_init.f90 azdist0.f90 \ - blanker.f90 decode1.f90 decode2.f90 decode3.f90 ftn_init.f90 \ - ftn_quit.f90 get_fname.f90 getfile.f90 horizspec.f90 hscroll.f90 \ - i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.f90 spec.f90 \ - wsjtgen.f90 runqqq.f90 fivehz.f90 - -OBJS2F90 = a2d.o abc441.o astro0.o audio_init.o azdist0.o \ - blanker.o decode1.o decode2.o decode3.o ftn_init.o \ - ftn_quit.o get_fname.o getfile.o horizspec.o hscroll.o \ - i1tor4.o pix2d.o pix2d65.o rfile.o savedata.o spec.o \ - wsjtgen.o runqqq.o fivehz.o - -SRCS2F77 = wsjt1.f astro.f astropak.f \ - avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \ - indexx.f s2shape.f flat2.f gen65.f chkmsg.f gen6m.f gentone.f \ - syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \ - set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \ - ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \ - demod64a.f encode65.f extract.f flat1.f four2.f rfile2.f \ - gencw.f getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \ - interleave63.f k2grid.f limit.f lpf1.f deep65.f morse.f \ - nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \ - short65.f slope.f spec2d65.f sync65.f unpackcall.f \ - unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f wsjt65.f - -OBJS2F77 = wsjt1.o astro.o astropak.o \ - avesp2.o bzap.o spec441.o spec2d.o mtdecode.o stdecode.o \ - indexx.o s2shape.o flat2.o gen65.o chkmsg.o gen6m.o gentone.o \ - syncf0.o syncf1.o synct.o decode6m.o avemsg6m.o \ - set.o flatten.o db.o pctile.o sort.o ssort.o ps.o smooth.o \ - ping.o longx.o peakup.o sync.o detect.o avemsg65.o decode65.o \ - demod64a.o encode65.o extract.o flat1.o four2.o rfile2.o \ - gencw.o getpfx1.o getpfx2.o getsnr.o graycode.o grid2k.o \ - interleave63.o k2grid.o limit.o lpf1.o deep65.o morse.o \ - nchar.o packcall.o packgrid.o packmsg.o packtext.o setup65.o \ - short65.o slope.o spec2d65.o sync65.o unpackcall.o \ - unpackgrid.o unpackmsg.o unpacktext.o xcor.o xfft.o wsjt65.o - -#OBJS2F90 = a2d.o abc441.o astro0.o audio_init.o azdist0.o \ -# blanker.o decode1.o decode2.o decode3.o ftn_init.o \ -# ftn_quit.o get_fname.o getfile.o horizspec.o hscroll.o \ -# i1tor4.o pix2d.o pix2d65.o rfile.o savedata.o spec.o \ -# wsjtgen.o runqqq.o fivehz.o - -# -# ok, so far for now -# Windows @AUDIO@ will be jtaudio.c since it uses portaudio -# for *nix @AUDIO@ will also be jtaudio.c and start_threads.c -# for portaudio -# for *nix @AUDIO@ will be start_threads.c for alsa -# for *nix @AUDIO@ will be ?? for oss -# -# ptt_unix.c vs. ptt.c I'll sort out later. -# ditto for cutil.c (only used on *nix) -# --db -# jtaudio.c/start_threads.c mess will have to be sorted out later -# to minimise #ifdef's -# --db -# -OBJS2C = init_rs.o encode_rs.o decode_rs.o -SRCS3C = ptt_unix.c igray.c wrapkarn.c cutil.c -SRCS3C += @AUDIO@ - -all: JT65code wsjt6 - -JT65code: $(OBJS1) - $(FC) -o JT65code $(OBJS1) - -wsjt6: Audio.so #wsjt.spec -# ${PYTHON} c:\python23\installer\Build.py wsjt.spec -# ${RM} wsjt6 - -Audio.so: $(OBJS2C) $(OBJS2F77) $(SRCS2F90) ${SRCS3C} - ${PYTHON} ${F2PY_PY} -c --quiet --opt="-O -cpp -D${CFLAGS} \ - -fno-second-underscore" $(OBJS2C) $(OBJS2F77) -m Audio \ - --f77exec=${G95} --f90exec=${G95} ${CPPFLAGS} ${LDFLAGS} \ - only: $(F2PYONLY) : \ - $(SRCS2F90) \ - ${SRCS3C} - -wsjt.spec: wsjt.py astro.py g.py options.py palettes.py smeter.py specjt.py -# ${PYTHON} c:\python23\installer\makespec.py --icon wsjt.ico \ -# --tk --onefile wsjt.py - -four2.o: four2.f - $(FC) -c -O2 four2.f - -.PHONY : clean -clean: - ${RM} -f *.o *.so JT65code wsjt6 diff --git a/UpdateHistory.txt b/UpdateHistory.txt deleted file mode 100644 index 78dfd4450..000000000 --- a/UpdateHistory.txt +++ /dev/null @@ -1,2662 +0,0 @@ -Changes in WSJT 5.9.6 (r309): September 22, 2006 -------------------------------------------------- - -WSJT v5.9.6 r309 provides the following new features: - -1. In earlier versions the vertically-scrolling JT65 waterfall always - displayed the frequency range 500-2500 Hz. The range has now been - optionally expanded and made more flexible. By toggling a button - labeled "BW" at the top of the SpecJT window you can change the - displayed bandwidth to 4 kHz. In addition, you can offset the - displayed region in 100 Hz steps by using buttons labeled "<" and - ">", and you can return the range to its default alignment with a - button labeled "|". - - This new feature provides two significant advantages. If your - receiver provides a bandwidth greater than 2 kHz in USB mode, you - can now display up to 4 kHz instantaneously (and with offsets, a - total range of 5 kHz). The Kenwood TS-2000, for example, provides - a 5 kHz bandwidth. The expanded range will make it easier to find - other stations to work -- e.g. in contests, and at 1296 MHz where - Doppler shifts are relatively large. In addition, extending the - displayed spectrum to frequencies below 500 Hz is useful if you are - using WSJT as a display tool when operating on CW. - -2. When attempting to establish proper synchronization with a received - signal, the JT65 decoder searches values of DT from -2 to +10 s. - Toggling a new control labeled "Shift" (to the right of "Dsec") - will offset the received data by +5 s, thereby providing an - effective search range of -7 to +5 s. In normal operation you - should leave this option turned OFF (i.e., "Shift 0.0"). - Occasionally, however, using "Shift 5.0" may allow you to decode - transmissions from a station whose computer clock has a large - error. - -3. "Alt-G" is a keyboard shortcut equivalent to clicking "GenStdMsgs". - A new shortcut "Ctrl-G" now has a similar effect, but it generates - an alternate set of JT65 messages with callsigns included in the - "RO" and "RRR" messages. These message forms can be useful in - pile-up situations. - -4. I have been told that the use of "/A" is a required callsign suffix - in some circumstances. Therefore, the list of optional callsign - suffixes has been expanded to include "/A". For this feature to - work properly it is necessary for both transmitting and receiving - stations to use WSJT v5.9.6 (or later). - -5. An improved algorithm is now used to measure the error in soundcard - sampling frequencies. One effect is that the resulting numbers in - the status bar will restabilize correctly after your computer clock - has been reset. - -6. The default font used to display astronomical data has been changed - to a monospace font. In addition, more flexibility is provided - for selecting suitable and attractive fonts when running WSJT under - Linux or FreeBSD. - -7. Switching from JT6M to JT65 mode now turns Freeze off. - -8. Appearance of the F1 help screen has been cleaned up. - -9. Shortcut reminders have been added to menu items. - -10. Cut-and-paste now works properly when running WSJT in Linux. - - -Changes in WSJT 5.9.5 (r236): August 3, 2006 ---------------------------------------------- - -WSJT v5.9.5 r236 contains some major improvements for JT65 and a -number of smaller enhancements affecting other modes. - -1. Changes to the JT65 Deep Search decoder have made it slightly more - sensitive, on average. More importantly, the number of false - decodes has been dramatically reduced. JT65 decoding can be as - much as 3 times faster than before. For these reasons alone, you - should be sure to upgrade if you use JT65. - -2. A more useful menu of JT65 decoding options is provided. You may - now select "No Deep Search", "Normal Deep Search", "Aggressive Deep - Search", or "Include Average in Aggressive Deep Search". - -3. The two end-of-line numbers (formerly displayed only if Aggressive - was checked) are now always displayed in JT65 mode. The first - number is 1 if the Koetter-Vardy decoder succeeded, 0 otherwise. - The second number is the confidence level of the Deep Search - decoding (if enabled) on a 0 to 10 scale. - -4. The JT65 AFC function has been rewritten. Drifting signals - (including Doppler-induced drifts at 1296 MHz) will usually decode - better with AFC turned on. - -5. Mode JT65C, which is used primarily at 1296 MHz, has been improved - in several ways. Synchronizing is better by about 1 "sync" unit, - and signal strengths are measured more reliably. Decoding of - shorthand messages is improved. - -6. When compiled for Linux and FreeBSD (see note below), WSJT now - allows use of parallel as well as serial ports for T/R control. - -7. Wave files are now saved correctly in Linux and FreeBSD versions. - -8. Support has been added for extra-long callsigns such as - VU4AN/VU3RYF. The full augmented callsign must be no longer than - 12 characters. Enter the special add-on DXCC prefix or callsign - (in this case, VU4AN) on the Setup | Options page. - -9. If the "Grid" box on main WSJT window is blank, displayed values of - Doppler and df/dt will be those of your own echoes. - -10. If the ToRadio box is blank, "Mon_" (rather than "_" is now used - as the naming prefix for recorded wave files. - -11. The birdie-killing "Zap" feature has been changed so that if - Freeze is ON, nothing is zapped within Tol of the Freeze DF. In - addition, the Zap behavior no longer depends on previous decoding - history. - -12. Bug fix: previously, if Freeze had been checked while operating in - another mode, Zap no longer worked correctly in FSK441 mode. This - has been fixed. - -13. The selection of data for mouse-picked decodes in JT6M mode has - been corrected. (In recent versions it was necessary to click a - few seconds to the right of a signal enhancement.) - -14. The logic that limits search for JT6M synchronization to a range - of frequencies (+/- Tol around FreezeDF) has been corrected. A - small green tick at the left edge of the main graphical area - indicates the FreezeDF frequency. The FreezeDF value is also - displayed digitally in the status bar. You can change FreezeDF - with the left/right keyboard arrows. Default settings for JT6M are - now Tol=200, Freeze On, MouseDF=0. - -15. If mouse-picked decoding was invoked, all wave files were - previously saved even if "Save none" was selected on the menu. - This has been fixed. - -16. On your first start-up with version 5.9.5, be sure to re-enter - your correct PTT port number on the Setup | Options page. Under - Linux or FreeBSD, enter the appropriate device name, for example - /dev/ttyS0. - -Special note to Linux and FreeBSD users ---------------------------------------- - -WSJT is now being used by a number of people on Linux or FreeBSD -systems. Appearance and operational behavior is essentially identical -to the Windows version. At present you must compile the yourself for -Linix or FreeBSD. Instructions are available, and others who have -succeeded will help you if help is needed. This is not necessarily a -trivial task, however. - -Packaged versions of WSJT for specific *nix distributions may be -provided if there is sufficient demand. - -For more information on WSJT for Linux and FreeBSD, or if you want to -try compiling the program for Mac OS/X, contact the WSJT development -team at wsjt-devel@lists.berlios.de. - -WSJT is Open Source software. The source code and related materials -can be found at http://developer.berlios.de/projects/wsjt/. - - -Changes in WSJT 5.9.4 (r159): April 11, 2006 ---------------------------------------------- - -This is a maintenance release. - -1. Problems exhibited on some computers with dual or "hyperthreading" -CPUs have been fixed (or at least reduced, see below). - -2. Problems with reading previously recorded files (such as the sample -files in the WSJT tutorial) have been fixed. - -3. Bad data could cause an error message "Error in KV decoder, or no -KV decoder present" in the console window. Fixed. - -4. The delay between PTT assertion and start of Tx Audio, and the -delay between end of Tx Audio and release of PTT, have been increased -by 0.2 s. In addition, a bug in the T/R timing logic was fixed. - -5. There was a minor bug in computing the position of the moon. (The -displayed Az and El of the "home station" were correct for a time 100 -seconds earlier than the actual time.) This has been fixed. In -addition, refraction adjustments are no longer made in the Sun and -Moon elevations. - -6. A minor bug when displaying large negative Doppler shifts in the -file azel.dat has been fixed. - -7. As an aid to future development of WSJT, the program is now capable -of transmitting "test files" with arbitrary audio content. - -NOTE: If you have a computer with multiple CPUs or a CPU with -hyperthreading, and if WSJT 5.9.4 does not run properly for you, -please reboot your machine, enter the BIOS Setup screen, disable -hyperthreading, and see if WSJT then runs properly. Then let me know -the results of this test. Note: you will probably notice very little -(if any) degradation in performance by leaving hyperthreading turned -off. For now, this is the recommended procedure if you have problems -with it turned on. - - -Changes in WSJT 5.9.3: January 26, 2006 ---------------------------------------- -This is a minor maintenance release. - -1. New Help screen provides a list of available suffixes and add-on - DXCC prefixes. - -2. The occasional error message about "images do not match" has been - trapped and should no longer occur. - -3. It is no longer necessary to enter one's own grid locator with the - first two letters in upper case and the last two in lower case. - -4. Initialization of the PTT line to the "OFF" state has been fixed. - - -Changes in WSJT 5.9.2: January 16, 2006 ---------------------------------------- - -Enhancements ------------- - -1. Thread priorities have been adjusted for smoother operation. - -2. The JT65 decoder has been given improved immunity to garbage data - (birdies, QRM, etc). It exhibits better performance on strong - signals and provides more accurate estimates of their S/N. - -3. The FSK441 decoder produces less on-screen gibberish when - processing mouse-picked decodes. - -4. The JT6M decoder now makes better use of Freeze and Tol. You can - set the value of "Freeze DF" by using the Right/Left arrow keys. - (This feature is also useful in JT65 mode.) - -5. On-screen font sizes can be set by using Windows Notepad to edit - the file wsjtrc.win. If your screen has resolution greater than - 1024 x 768, or if you have old eyes like mine, you may want to - increase the font sizes from 8 and 9 points (first three lines of - the file) to, say, 9 and 10 points. - -6. A simulator mode is now built into WSJT for testing purposes. It - is presently most useful in JT65 mode. By entering, say, "#-22" - in the text box for Tx6, you signify that the program should - generate its Tx audio files with the signal embedded in white - gaussian noise, 22 dB below the noise power in a 2.5 kHz - bandwidth. You can direct this signal into a second computer - running WSJT, for example to test the decoder or to practice - operating in JT65 mode. You can even have the two computers "work - each other" in a simulated QSO, although changing messages of - course requires operator action. - -7. Dividing lines are now provided on the waterfall display between - spectra corresponding to wave files read from disk. - -8. The PTT line is explicitly set low on program startup. - -9. The F10 key brings up the SpecJT screen (if it was hidden) and - toggles foreground and focus status between the WSJT and SpecJT - screens. - -10. You can use the Alt-F and Alt-Z keyboard shortcuts to toggle - "Freeze" and "Zap" on and off. - -11. "Accelerated decoding" has been removed from the Setup menu. In - effect, this option is now always ON. - -12. Text windows are now cleared when switching between modes. - -13. Linux and FreeBSD versions (see below) offer PTT control via - parallel port, as well as serial port. They offer sound support - via ALSA and OSS. - - -Bug Fixes: ----------- -1. The use of non-threadsafe code for FFTs could cause occasional and - unpredictable program crashes. Fixed. - -2. A bug in the JT65 decoder could (rarely) cause large errors in the - reported level of strong signals. Fixed. - -3. The program could be made to crash by trying to read a very short - wave file. Fixed. - -4. "Save None" now works as it should. - - -Please note: ------------- -When entering your grid locator on the Setup->Options page, use upper -case for the first two letters and lower case for the last two. For -example, for K1JT the locator is FN20qi. - - -For Curious Users, and Especially for Programmers -------------------------------------------------- - -WSJT is no longer a one-person effort, and the program no longer runs -only under Microsoft Windows. WSJT is now a full-fledged Open Source -project, with an active working group making contributions to future -development. Source code is now stored in a public repository under -control of a version control system called "Subversion," or SVN. You -can learn more at http://developer.berlios.de/projects/wsjt/. - -The first significant result of the group effort has been to create -versions of WSJT that run under the Linux and FreeBSD operating -systems. Porting WSJT to the Macintosh platform should be -straightforward, but has not yet been done. - -If you are interested in testing and using WSJT on your own Linux or -FreeBSD system, we'd like to hear from you. Please note that the -present Linux and FreeBSD versions are intended mainly for -programmers. You need to know your way around these operating -systems to be able to install them. - -If you feel that you can usefully contribute to the future development -of WSJT on any platform, we would also like to hear from you! We -could use help with documentation and website maintenance, as well as -actual programming. - -The present WSJT working group consists of: - - Diane Bruce, VA3DB - James Courtier-Dutton - Bob McGwier, N4HY - Jonathan Naylor, ON/G4KLX - Stewart Nelson, KK7KA - Joe Taylor, K1JT - Kaj Wiik, OH6EH - - -Changes in WSJT 5.9.0: November 16, 2005 ------------------------------------------- - -1. JT65 decoding has been made faster and significantly improved in - other ways. Three new options appear on the Decode->JT65 menu: - "Fast", "Normal", and "Exhaustive". The program is most sensitive - if you choose "Exhaustive". Choosing "Normal" will make decoding - slightly less sensitive, but the loss is not great, and decoding - can be twice as fast. The "Fast" setting is faster still, but can - be less sensitive by 2 dB or more in some cases. If you have a 1.5 - GHz or faster computer, use "Exhaustive". With a slower computer - you may want to experiment with the other settings. - -2. In JT65 mode, double-clicking on the waterfall (SpecJT window) or - on the red curve (main window) sets "Freeze DF" to the selected - frequency, turns Freeze ON, sets Tol to 50 Hz, and invokes the - decoder. Using this feature, you can quickly decode a transmission - at several different values of DF. I find this feature to be - *extremely* useful. - -3. The range of DT values searched to establish synchronization has - been doubled, now extending from -2 to +10 seconds. The reported - values of DT are more accurate, as well. You should normally - expect EME signals to have DT in the range 2 to 3 seconds, but the - program will now synchronize properly even if DT is well outside - this range. - -4. WSJT now offers the ability to correct for errors in soundcard - input and output sampling rates. Numbers displayed in the first - panel of the status bar (at lower left of the main screen) give the - ratio of actual sample rates for input and output to the correct - value, 11025 Hz. The numbers should stabilize within about one - minute after program startup. If they fall in a "safe" range - between about 0.9990 and 1.0010, you have a good sound card (at - least in respect to sampling frequency). You can then leave the - entry fields "Rate In" and "Rate Out" on the "Setup -> Options" - page at their default values, 1.0. - - If your soundcard gives one or both numbers well outside the safe - range, you should enter the displayed errant numbers as "Rate In" - and/or "Rate Out" on the Setup->Options page. This needs to be - done only once; subsequent changes in the last decimal place of the - displayed values are not very significant, and can be safely - ignored. - - The result of this procedure is that your Tx signal will be - "trimmed" so that your tone spacings in time and frequency are more - nearly correct. In addition, your digitized Rx signals will be - adjusted so that the software can properly interpret them. - - This trimming is an important procedure. Some recent sound cards - produce sampling error factors as low as 0.9932 or as high as - 1.0068. If uncorrected, such results can degrade your S/N in WSJT - modes by 2 dB or more. - - If one of the measured sample rates differs from the corresponding - value specified for "Rate In" or "Rate Out" by more than 0.1%, a - red warning label will appear just below the graphical area on the - main screen. - -5. The graphical display of information obtained during JT65 decoding - has been enhanced. As before, a red line illustrates the maximum - correlation between the pseudo-random sync tone pattern and the - received signal at each value of frequency offset, DF. A blue line - shows the correlation at the best DF, plotted as a function of time - offset, DT. If a shorthand message is detected, two new lines - colored magenta and orange replace the red and blue lines. The new - lines illustrate phase-resolved spectra measured in each of the two - phases of the shorthand square-wave pattern. A properly detected - shorthand message will show a peak in the magenta curve, followed - at a specified distance by a peak in the orange curve. The correct - locations of the two peaks are marked by small yellow ticks. - Unlike the alternating shorthand message tones, birdies will appear - with approximately equal amplitudes in the magenta and orange - curves. - -6. For the convenience of temporary DXpeditions, a new JT65 feature - permits use of add-on DXCC prefixes that are not in the published - list of supported prefixes. Both stations in a QSO must enter the - required prefix (for example, PJ8 or FS) in a box on the - Setup->Options page. The effect will be to temporarily add the - entry to the table of supported prefixes. - -7. The Setup->Options page has new entry fields labeled "Source RA" - and "Source DEC". You can enter the current right ascension and - declination of a radio source to be used for system calibration, or - perhaps a pulsar or a deep space probe that you wish to detect. - The program will display (on the Astronomical Data screen) the - current Azimuth and Elevation of the specified object at your - station. The source Azimuth and Elevation are also written every - second to the file azel.dat, in case you have automated tracking - capabilities that depend on this information. - -8. For contest-style operations, the Setup->Options menu has an item - labeled "F4 sets Tx6". If this item is checked, when you hit F4 to - clear the To Radio box the program will turn Freeze OFF and set - the Tx message number to 6. - -9. To facilitate the coming release of the full source code of WSJT - under the GNU General Public License, the proprietary soft-decision - Reed Solomon decoder has been removed from WSJT proper and made - into a separate executable module, KVASD.EXE. This change is - transparent to the user, and the full benefit of the soft-decision - decoder is still available. An open source hard-decision decoder - is also provided; it's what you get when you select the "Fast" JT65 - decoding option. - -10. In WSJT 5.8.6, if the value of "Freeze DF" (as displayed in the - Status Bar) differs from the sync tone frequency by more than - "Tol", shorthand decoding was suppressed even if Freeze was not - checked. This is a bug, and it has been fixed. - -11. Earlier versions of WSJT had a bug that could cause the "Zap" - function to notch out a valid sync tone. Fixed. - -12. The Help screens called up by F1 and Shift-F1 have been updated. - Be sure to read these screens: they contain many operational - conveniences that you may not have discovered! - -13. At scrolling speed 5, the time labels and "minute separator" lines - were displayed erratically and the CPU load was excessive. Fixed. - -14. Signal strength measurements above -20 dB were formerly compressed - and significantly underestimated. This has been fixed. - -15. Decodings of the average of many properly synchronized transmissions - would sometimes go from "good" to "bad" after approximately 8-12 - transmissions. This was a bug, and it has been fixed. - -16. Several bugs in the FSK441 decoder have been fixed. Both - automatic decoding and mouse-picked decoding have been improved. - -17. Changing WSJT modes now sets Auto to OFF, Tol to 400, and the Tx - message number to 1. - -18. The generated audio for CW ID in FSK441 and JT6M modes has been - moved to 440 Hz, to avoid possible confusion with the other tones - used in these modes. - -19. Readout of "Rx noise" on the main screen is now highlighted in red - if the level is outside the range -10 to +10 dB. - -20. The Monitor button is no longer highlighted in green while you are - transmitting. - -21. No attempt is made to decode if the Rx level is very low -- for - example, if your receiver is turned off. - -22. If the Grid box does not contain a valid locator, readouts of - azimuth and distance are suppressed. - -23. Keying of the audio tone to produce Morse code has been softened - to suppress key clicks. - -24. Transmitted messages recorded in the file ALL.TXT are now - identified as to mode, and shorthand transmissions are noted as - such. - -25. A number of other very minor bugs have been fixed. - - -Changes in WSJT 5.8.6 ---------------------- - -1. Audio input and output has been modified in a way that accommodates - certain soundcards (e.g., SB Live!) that did not work correctly - with WSJT 5.8.3. - -2. New item on Setup->Options menu to select whether GenStdMsgs forces - Tx message number to 1. - -3. Status of all selectable items on Setup->Options menu is preserved - on program restart. - -4. If a CQ is transmitted in JT65 mode, the Sked box is automatically - unckecked. - -5. In v5.8.3, entering the same callsign and locator information in - MyCall and ToRadio/Grid could cause the program to freeze. Fixed. - -6. If MyCall includes an extra prefix, as in 4X/ZL1RS, the standard JT65 - messages should not include a grid locator. Fixed. - -7. The "ms" parameter has been removed from the Soundcard status - readout at bottom left. Separate sample-rate factors are now - displayed for audio input and output, but only if "Enable - diagnostics" is checked on the Setup menu. - -8. The SpecJT screen may now be made invisible by clicking on "X" in - the upper right corner. To restore it to visible status, click on - View->SpecJT on the main screen. - -9. Decoded text lines in JT6M mode were sometimes too long, causing - end-of-line wrap-around. Fixed. - -10. Some diagnostic messages printed to console window have been - removed. - -11. The values of S, Sync, Clip, Zap and NB are now preserved when the - program is terminated and restarted. - -12. Version 5.8.3 was unable to read back its own recorded wave files. - Fixed. - -13. A programming error in the JT65 shorthand message decoder has been - fixed. Under certain conditions, this error could cause false - decodes of shorthand messages. - -14. The logic of file saving commands Save Last, Save decoded, etc., - has been corrected. - -15. Wave files read from disk will now produce spectral plots on the - waterfall display if Monitor is OFF. - -16. The CW ID feature has been implemented. - -17. The mapping of signal levels to pixel colors and its dependence - on settings of Brightness and Contrast controls has been changed - so as to improve sensitivity to very weak signals. - -18. In v5.8.3, changing Dsec would create erroneous results for the - displayed soundcard sample rate factor. Fixed. - -19. Running in JT65 mode with Dsec>0 caused transmission errors - (including a gap in transmitted tones at t = 38-41 s), and the - resulting transmission was unreadable. Fixed. - -20. Undesired resizing of main screen could occur when a long FSK441 - message was transmitted. Fixed. - -21. The "yellow line" displayed in the graphical area in JT6M mode - was computed incorrectly in version 5.8.3. Fixed. - -22. When running at speeds 1-5, the waterfall spectrum may optionally - be "flattened" to remove rolloff at edges. To enable this - feature, check "Flatten spectra" on the SpecJT Options menu. - -COMMENTS ON SOUND CARDS ------------------------ - -In general, "high end" sound cards offer no advantages when used with -WSJT. Motherboard AC-97 compliant sound systems are cheap and work -well. If you do need to buy a sound card for use with WSJT, my advice -is to get a simple one. You do NOT need 8-channel surround-sound, -wavetable synthesis, special effects, etc. Those features are for -games and listening to music, and they will be wasted on WSJT. - -Likewise, you do not need 24-bit A/D and D/A conversions. -Specifications having to do with signal/noise ratio are quite -irrelevant to use with WSJT, as you should never be operating in a -regime where A/D quantizing noise (or any other noise generated in the -sound card) contributes significantly to the system S/N. - -If you have a choice, get a card that offers a *native* sampling rate -of 44100 or 11025 Hz, or both. (Unfortunately, it is often very -difficult to tell from the manufacturer's literature whether this -capability is present or not.) If native sampling at 11025 Hz is -available -- or if the manufacturer has at least provided a -well-designed resampling capability -- the soundcard sample-rate -factors (displayed by WSJT in the bottom left corner, if -"Setup->Enable diagnostics" is checked) should both be very close to -1.0000. - - -Changes in WSJT 5.8.3 ---------------------- - -1. The Dsec parameter was not working properly in v5.8.1. Fixed. - -2. CPU load at high waterfall speeds has been substantially reduced. - -3. Saving cumulative file of decoded text is no longer optional. The - file name has been changed to ALL.TXT, to reflect use of this file - for transmitted as well as decoded text. - -4. Logic for green bar illustrating region searched for sync tones has - been corrected. - -5. Bug producing index error in "plot_yellow" is fixed. - -6. Bug causing crash in CW mode if TRPeriod > 60 s is fixed. - -7. Tabular listing of Audio devices has been clarified. - -8. Name at top of waterfall screen has been changed to "SpecJT" so - that its icon can be distinguished from that of main screen. - -9. VOX control of T/R sequencing is now permitted by setting the COM - port to 0. - -10. Exit from program with the "To Radio" box empty caused error - message and substitution of default parameters on restart. Fixed. - -11. Default FSK441 message #5 for EU has been changed to "73 MyCall" - (which I am told conforms with standard EU practice). - -12. Lower case letters are now acceptable in entries on Setup->Options - screen, and will be translated appropriately to upper case in - transmitted messages. - -13. The file AZEL.DAT has been moved to the WSJT6 installation - directory. - -14. The "Sh Msg" box was always checked when entering FSK441 mode. It - now remembers its state if you had unchecked it. - -15. Keyboard shortcuts have been implemented for most on-screen - controls. Use F1 to see a full listing. - -16. "Gen Std Msgs" now sets the Tx message to #1 in all WSJT modes. - -17. Self-echo doppler value has been replaced by "Dgrd" in the - astronomical data displayed on the main screen. - -18. The audio stream has been trimmed by 0.5 s at the start of FSK441 - and JT6M Rx sequences, to prevent possibly copying one's own Tx - signal. (Is this enough?) - -19. Two header parameters in wave files recorded by WSJT have been - corrected so that the files can be read correctly by Windows Sound - Recorder. - -20. Four-digit grid locators no longer produce incorrect azimuth - headings. - -21. Logic error in the waterfall's horizontal scrolling mode fixed. - -23. The active Tx message box is now highlighted during a - transmission, as in WSJT 4.x. - -24. Green ticks marking range of JT65 tone frequencies and red ticks - marking shorthand tones may optionally be displayed only if Freeze - is checked. (Select on waterfall screen's Options menu.) - -25. "Tool-tip" readout of full entry in CALL3.TXT is now provided - after Lookup, if mouse pointer hovers over the ToRadio box. - -26. Parameter RDsec was removed from the screen, as it is not - implemented. - -27. Some additional diagnostic information is now displayed. A - parameter "ms" following the "Soundcard x.xxxx" readout is a - measure of the maximum time between successive servicing of the - audio callback routine. The nominal value is about 186 ms, but - somewhat larger values are normal owing to granularity of the - Windows system clock. Values larger than 330 ms cause a warning - message to appear in the console window. Large values of this - parameter may be related to audio input problems (see below). - -28. The latest version of DL8EBW's CALL3.TXT database is included with - the distribution. It will be installed only if there is no file - named CALL3.TXT already in your WSJT6 installation directory. - - -KNOWN PROBLEMS --------------- - -1. Some fraction of WSJT 5.8.1 users -- perhaps 5-10%, it is hard for - me to judge -- have had problems with erratic audio input. I am - having difficulty tracing the problem because I have not been able - to reproduce it on any computer to which I have access. Typical - symptoms are that after startup WSJT 5.8.1 runs normally in Monitor - mode for a minute or so, but then the reported audio level jumps to - a much higher value and perhaps fluctuates wildly. - - Two users have switched todifferent sound cards and made the - problem go away. Several others have discovered that if they first - start WSJT4 and leave it running (in Monitor mode, I believe), and - then start WSJT 5.8.1, the new program behaves properly. One user - corrected the problem by turning off an "AGC" feature on his sound - card. Apparently most of the newer SoundBlaster cards have this - AGC feature, and it is turned ON by default. I am told that it can - be turned OFF by using the supplied utility CTMIX32.EXE. - - I do not yet understand the cause of the erratic audio problem. It - is possible that it has been fixed in v5.8.3, as several minor - changes have been made to the audio input routines; but I think - this is unlikely. - - If you had this problem at your station and have now solved it, - please let me know what you did! If you still have problems when - running version 5.8.3, let me know about that as well. - -2. I do not yet have a good definition of the "minimum computer" - required to run WSJT6. Several people have told me that they are - using the program successfully on 300-500 MHz machines. Those with - computers slower than about 600 MHz will do best to avoid the - higher waterfall speeds and not run many other programs while using - WSJT. - - -Beta Release 5.8.1 ------------------- - -Beta release 5.8.1 is an entirely new program, dsesigned to preserve -the features and the "look and feel" of version 4.9.8, but also to add -many new features and do so in a way that will make for easier for -program maintenance and future development. After a period of beta -testing, the program will become known as WSJT 6.0. I will refer to -it here as WSJT6. - -Many features of WSJT6 will be familiar to present users of WSJT4.x. -However, the user interface and other real-time portions of the -program have been entirely re-written, so you may find a few things -that look different or work differently than before. - -WSJT6 is a multi-threaded program. This architecture permits much -better timing control and much better sharing of the CPU among the -program's many tasks. A real-time waterfall is provided, optimized -for each of the WSJT modes. You can measure and set the Rx gain in -real time. You can decode FSK441 pings immediately after hearing -them. - -The decoders for JT65 and JT6M are essentially the same as those in -recent versions of the program. (I have many plans for enhancements -to the decoders, but these must wait for future updates.) The FSK441 -decoder has intentionally reverted back to approximately version -3.8.1, because it has been shown that recent versions did not perform -quite as well. - -WSJT 5.8 is a stable release. Extensive tests by a small group of -early beta testers have already shown that it works well. However, it -contains many thousands of lines of new code, and most likely that -code has some bugs. Nevertheless, I think you will find many -operational advantages to using it. Over the past 2.5 months, all of -my own MS and EME QSOs have been made with the new version. - -If you decide to participate in the beta testing period, please accept -the responsibility of reporting any bugs that you find, as well as -telling me of features you would still like to see. I would -appreciate hearing about new features that you like, as well. - - -PRELIMINARY INSTRUCTIONS AND COMMENTS -------------------------------------- - -1. I suggest installing WSJT6 to a new directory such as C:\Program - Files\WSJT6. After installation you will probably want to copy - your version of the callsign database, CALL3.TXT, into the new - WSJT6 directory, replacing the one that is supplied. - -2. When you start the program you should get three windows on your - screen. One has a black background and I will call it the "console - window"; it is mainly used for debugging messages. You can - minimize it and generally ignore it. You should, however, look - there for messages if the program crashes (see also items 9 and - 11, below). The other two windows are a Spectran-like waterfall - and the more-or-less familiar WSJT window. It is no longer - necessary or desirable to run Spectran simultaneously with WSJT. - -3. FSK441, JT65, and JT6M are all present and functional. I have made - many QSOs with FSK441 and JT65, so I know they are working well. - JT6M has been tested somewhat less, but I have seen no problems as - yet. EME Echo mode and the CWID feature are not yet implemented. - -4. To start the real-time spectral display, click Monitor. Normally - you can leave Monitor on all the time. - -5. There are two ways to set the Rx Audio gain. You can call up the - Windows mixer as before, using the "Rx Volume Control" item on the - Options menu. There is also a digital gain control near the - bottom right of the waterfall screen. You should aim for around 0 - dB, as before -- but with 16-bit audio sampling it is no longer - very critical. Use the "S-meter" at the lower right of the - waterfall display, or the familiar box labeled "Rx noise" at - bottom center of the main screen. - -6. You should be able to make FSK441, JT65, and JT6M QSOs more or - less as usual. In FSK441 and JT6M you will want to run the - spectral display at speed "H1" or "H2" (speed is selected at the - top of the waterfall screen). (The "H" means horizontal - scrolling.) Scrolling speeds "5" and "H2" use a lot of CPU time, - so you may want to avoid them unless your computer is pretty fast. - I generally use speed "1" or "2" for JT65 and "H1" for FSK441 and - JT6M. - -7. When running FSK441 in the horizontal scrolling mode, the spectral - display shows current data in the top half and the previous Rx - sequence in the bottom half. The most recently decoded sequence - is shown also on the main screen, as in version 4.x. - -8. You can decode FSK441 pings right away by clicking on any of the - 2-dimensional spectral displays, or the accompanying green lines. - You can click on the top half, the bottom half, or in the main - screen's graphical area. - -9. If you have more than one sound card, you can select the desired - one. Look at the startup messages in the console window. You - should see a list of the available Audio devices and information - about which one has been selected. If you wish to change the - selection, enter the desired device numbers on the Setup->Options - screen, then terminate and restart the program. - -10. If your display has resolution 1024 x 768 or less, you may prefer - to resize the waterfall window so that only its top portion - remains visible. The two main WSJT windows may then be kept - visible without overlapping. - -11. Some program crashes can kill the console window so that you can't - read the error messages. If this happens, and if the crash is - repeatable, open a Windows Command-Prompt window; CD to your WSJT6 - installation directory, and start the program from there by typing - "WSJT6". With this startup procedure, any subsequent post-mortems - will remain visible. Please report any such messages to me! - -12. You may find decoding to be slightly slower than with v4.9.x. I - have not yet spent any time optimizing the new code for speed; it - will get faster when I turn attention to that task. If you have - an older computer you may wish to check the menu item - "Setup->Accelerated decoding", which will suspend updating the - waterfall during the decoding process. - -13. Be sure to look at the screens called up by function keys F1 and - Shift-F1. These screens are also available from the Help menu. - They list some useful keyboard and mouse commands that you might - otherwise overlook. - -14. Be sure to explore all the menus and on-screen controls, and try - out the commands listed on the help screens. Until I can find - time to write a new manual, this is the best way to learn about - some of the new features. - -15. In JT65 mode, a horizontal green line on the frequency scale shows - the range of frequencies that will be searched for a sync tone. - You can set the "Freeze DF" value by clicking on the main screen's - red curve (as in WSJT 4.x) or by clicking on the waterfall with - the shift key held down. If "Freeze" is checked, vertical green - ticks will mark the selected sync-tone frequency and the - corresponding frequency of the highest data tone. Red tick marks - denote the frequencies of the RO, RRR, and 73 shorthand messages. - -16. WSJT6 can read and process WAV files produced by earlier versions. - The converse is not true, however, because earlier versions of - WSJT are not equipped to read the 16-bit data files produced by - WSJT6. - -17. When you click "Log QSO," a line with date, time, HisCall, - HisGrid, frequency, and mode is added to the file WSJT.LOG in the - installation directory. - -18. Every second, a short file named "c:\azel.dat" is updated with - time, moon and sun coordinates, frequency, doppler, and doppler - rate information. This file could be used by other software to - make your antenna track or your radio follow doppler changes. - -19. In the lower left corner of the main screen you will see a message - of the form "Soundcard: x.xxxx", where x.xxxx is a number close to - 1.0000. This number is the ratio of the soundcard's measured - sampling frequency to the nominal value, 11025 Hz. The displayed - value should stabilize after the program has been running for a - minute or so. If you see values less than about 0.9990 or greater - than 1.0010, please let me know about it and tell me what kind of - computer and sound card you are using. - -20. Callsigns for Swaziland (prefix 3DA0) can now be used in standard - JT65 messages, and they will provide the full "deep search" - sensitivity. - -21. The box labeled "NB" enables a software noise blanker. If your - receiver already has a good noise blanker, this may be of little - use; if it does not, you may find this one better than nothing. - It can be helpful when short, impulsive noise spikes are present. - -22. The "QRN" parameter of older WSJT versions has been combined with - the "Clip" parameter. In FSK441 mode, Clip=0 corresponds to the - old QRN=5. If you want more FSK441 immunity to summertime QRN, - increase Clip above 0 just as you would have increased QRN above - 5. - -23. The "B" and "C" submodes of FSK441 have not been implemented. As - far as I could tell, they were little used. - - -Let me call your attention to the online WSJT Forums hosted by DK5YA -at www.vhfdx.de/cgi-bin/yabb/YaBB.pl. If you provide information and -post questions about WSJT 5.8 there, it will help others as well as -yourself -- and may help to reduce the load on my email inbox. - -I do, of course, want to hear from you directly if you have found a -problem with the new program version or suggestions for its -improvement. - - -Changes in Version 4.9.8 ------------------------- - -Version 4.9.8 is a minor maintenance release. The changes are: - -1. Bug in JT65 decoder could (rarely) cause a correct decoding by the - Reed-Solomon decoder to be "overruled" by an incorrect decoding - from the Deep Search decoder. Fixed. - -2. Bug in JT65 Reed-Solomon decoder could cause program to crash under - certain rare conditions. Fixed. - -3. The standard "CQ" message generated for a callsign having an extra - prefix or suffix should not include a grid locator. Fixed. - -4. Automatically generated CW messages for stations with callsigns longer - than 4 characters were improperly truncated. Fixed. - -5. Bug in JT65 decoder could occasionally cause one or two extra - letters to be appended to a correctly decoded callsign. Fixed. - -6. Grid locator entered in "Report" box in FSK441 mode (as used by - some in North American meteor scatter contest) would cause a crash - on program restart. Fixed. - - -Changes in Version 4.9.7 ------------------------- - -1. The only change in version 4.9.7 is to add KC4 to the list of supported - DXCC prefixes. - - -Changes in Version 4.9.6 ------------------------- - -1. WSJT 4.9.5 fails to decode some files that have relatively high S/N - and good Sync level. This is a bug, and has been fixed. For this - reason alone, you should definitely upgrade to Version 4.9.6. - -2. New optional message formats are provided for conveying and - responding to signal reports. - - It has been permissible for some time to send, for example, - - VK7MO K1JT -24 - K1JT VK7MO R-27 - - (The number after the minus sign must have two digits and must be in - the range -01 to -30.) - - I plan to implement a quick way of copying the measured strength - of a decoded transmission into TX message #2, when desired. This - is not yet done in v4.9.6, however. You must edit the TX messages - by hand if you use these formats. - - Enhancements in version 4.9.6 now allow you to send messages like - the ones listed below. Both stations will need to be running - v4.9.6 in order for these to work: - - VK7MO K1JT RO - VK7MO K1JT RRR - VK7MO K1JT 73 - -3. Decoding by the deep search algorithm has been extended so as to - include messages of the types discussed in item 2. - - -Changes in Version 4.9.5 ------------------------- - -1. Full support for long callsigns like ZA/PA2CHR and G4ABC/P is now - provided. When using such a callsign prefix or suffix, do not - include a grid locator in your transmitted message. Note that - 4.9.5 and 4.9.2 do not handle prefixes in the same way; they are - not compatible. To get the benefit of the expanded capability, - both stations (TX and RX) must use 4.9.5. The correct message - format is "K1JT V5/ZS5Y" or "V5/ZS5Y K1JT". The extended callsign - must be present in CALL3.TXT or in "To Radio" for the deep-search - decoder to be effective. - -2. If you double-click on a callsign in the decoded text window, and if - the word preceding the callsign is "CQ", then TX message #1 will be - selected after the messages are updated. Otherwise, TX message #2 - will be selected. - -3. So that you will be aware of what is happening, the background - color in the TX message box turns red whenever a message you have - entered is "non-standard" and will be sent as 13 characters of - plain text. - -4. Items related to decoding have been removed from the Setup | - Options screen and replaced by a new menu labeled Decoding. Here - you may now select "No shorthands" for FSK441 and several options - for JT65 decoding. - -5. In case you are upgrading directly from v4.9.0 or earlier to v4.9.5, - a callsign database file has been included as CALL3A.TXT. If you do - not already have a file CALL3.TXT, you should rename the supplied - file to CALL3.TXT. Otherwise, you will probably want to ignore - the supplied file, since you will have made additions to your own - copy. - -6. The frequency of program crashes (for example, after a long period - of monitoring) is much reduced, possibly to zero. - -Please, if you encounter a received wave file that reproducibly causes -WSJT to crash, send it to me. - - -Changes in Version 4.9.2 ------------------------- - -1. In CW mode you can now set the desired T/R period by using the text - box provided. This feature did not work properly in v4.9.1. - -2. Under some conditions using the "Add" button to edit information in - the file CALL3.TXT would cause a program crash with the message - "Run-time Error #53". Fixed. - -3. Using the double-mouse-click on a callsign in the decoded text - window will now set the active Tx Message to Tx2. I believe this - will be most commonly what is desired, and will be an added - convenience for random JT65 operation. - -4. The "Sked" box remained visible on the EME Echo screen, covering - part of the RIT box. Fixed. - -5. The program generates two numbers to characterize its level of - confidence in decoded messages. In version 4.9.1, these numbers - appeared at the end of each decoded text line. They are not - displayed in version 4.9.2, but in the next version I will - probably display them if you have checked the "Aggressive decoding" - box. The first number is 0 or 1 according to whether the - soft-decision Reed Solomon decoder has failed or succeeded. The - second number represents a confidence level on a 0-10 scale for - messages decoded using the "deep search" algorithm. Anything under - 3 is questionable; messages rated 6 and above are unlikely to be - wrong, unless you are processing "garbage" data containing strong - birdies, QRN, etc. In that case, you are on your own. - - -6. A bug was introduced when implementing the "Aggressive decoding" - check box. This bug caused a stray "OOO" flag to be sometimes - displayed even when no signal was present and synchronization had - not been achieved. Fixed. - - -Changes in Version 4.9.1 ------------------------- - -1. A programming error in version 4.9.0 prevented the "deep search" -portion of the JT65 decoder from detecting some messages that include -the "OOO" signal report. The bug has been fixed, and consequently the -extra 4 dB of sensitivity will become available for those messages. - -2. The callsign database, a file named CALL2.TXT in version 4.9.0, has -been converted to a comma-delimited format and is now named CALL3.TXT. -As has been true in the past, you should maintain your own copy of -this file according to your own needs. New calls may be added to the -file using the "Add" button of WSJT, and you can edit the file -directly with the Windows NotePad program. I apologize for the fact -that if you have already edited CALL2.TXT extensively, you will need -to do so again. The good news is that the programs WSJT, MoonSked (by -GM4JJJ) and Tracker (by W7GJ) will now use the same database file, -CALL3.TXT. - -3. Two new JT65 check boxes have been made available to the user: one -labeled "Sked", located on the main screen, and one labeled "Aggressive -decoding" on the Setup | Options screen. Check "Sked" to signify that -you are trying to work a known station; the deep search decoder will -then look only for your own call and the one displayed in the "To -Radio" box. Check "Aggressive search" if you want to see all messages -found by the deep-search decoder, even if the confidence level is -moderately low. Leave this box unchecked if you prefer to see only -decoded messages that have been assigned a relatively high confidence. - -4. The duration of T/R sequences in CW mode defaults to 60 s if the -Band is 50 MHz, 150 s if 432 MHz, and 120 s otherwise. However, an -on-screen box now allows you to override the defaults and set any -desired T/R period (in seconds). - - -Changes in Version 4.9.0 ------------------------- - -On the outside WSJT version 4.9.0 looks nearly the same as its recent -predecessors. A "CW" entry now appears on the Mode menu. This is -presently a "transmit only" mode: it sends standard EME-style messages -at 15 WPM, by keying an 800 Hz audio tone, and it takes care of the -timing and T/R switching for you. Receiving is left up to you, the -operator. For me, this combination makes CW EME QSOs relaxing and -enjoyable. Presently the program uses 2.5 minute sequences if you are -on 432 MHz, 2 minutes on 144 MHz, and 1 minute on 50 MHz. (If you -want to run with 1-minute sequences on 144, set the band indicator to -50 MHz.) - -Double-clicking on a callsign in either one of the decoded text -windows will cause that callsign to be copied into the "To Radio" box. -The call will then be looked up in the database and will be inserted -appropriately into the transmit message boxes Tx1 and Tx2. This -feature is designed to facilitate random JT65 operation by making it -easy to call a station you have just copied calling CQ, or responding -to your CQ. - -The most significant program enhancements are those made to the JT65 -decoder. It has been transformed into a multi-layered procedure that -takes better advantage of the structured nature of JT65 messages and -the substantial computing capability that most WSJT users have in -their hamshacks. - -In version 4.9.0, if the initial JT65 decoding effort fails then -deeper searches are attempted using an entirely different approach. -The result is a net gain of about 4 dB over a wide range of -circumstances. My JT65 digital simulator, which has accurately -predicted the performance of previous versions of the software, -correctly decodes about 50% of simulated Rx files with the v4.7.0 -decoder at a signal level of -24 dB. With the v4.9.0 decoder, it -correctly decodes more than half of the simulated data files at -28 -dB. This very substantial improvement means that JT65's -message-averaging facility will be needed much less frequently than -with earlier versions of WSJT. Most of the time, if the transmission -synchronizes properly, it will also decode properly. - - -You will get better performance from the new JT65 decoder if you -understand a few things about how it works. The following is a very -brief description; more complete technical details will be forthcoming -when I find time to write it all down. - -JT65 is capable of transmitting and receiving 2^72 (about 5 x 10^21) -distinct user messages. Instead of sending the minimum number of 72 -information bits needed to to convey any one of those distinct -messages, the program actually sends 63 six-bit "symbols" for a total -of 378 bits in each transmission. The 302 extra bits comprise the -powerful forward error correction (FEC) capability of the JT65 mode, -allowing the system to function reliably with signals far below the -audible threshold. - -One of the first tasks of the JT65 decoder is to measure the signal -level at each of the 64 data-tone frequencies during each of the 63 -data intervals in a transmission. The program must then decide which -one of the possible 2^72 messages was most likely the one sent. This -procedure is necessarily probabilistic in nature. The best decoder -will go as far down into the noise as possible, but it must also know -when to give up so that it produces few false decodes. - -The total of 2^72 distinct messages is far too many to permit each one -to be tested individually against the received signal. However, an -important characteristic of the Reed-Solomon FEC code used in JT65 is -that well-defined mathematical algorithms can be used to direct the -decoder toward the most likely candidate messages, based on the -available signal information. A mathematical inversion of the code is -made possible by the organization of the redundant information -contained in the 306 extra bits. - -The new JT65 decoder goes far beyond the capabilities of normal -Reed-Solomon decoders. If the standard decoding procedure fails to -produce a high-confidence solution, the program proceeds to search -explicitly for each one of a number of messages that it considers -likely or plausible on other grounds. - -Nearly 2^28 (over 250 million) different callsigns can be accommodated -in each of the two callsign fields of a JT65 message. Once again, -this is far too many to permit an exhaustive search for them all. -Consequently, the "deep search decoder" takes the callsigns listed in -the file CALL2.TXT (located in the user's WSJT directory) as being the -most likely alternatives in the message's second field. A correlation -algorithm is then applied to find out if one of these calls and its -associated grid locator are present, combined with either "CQ" or the -receiving station's callsign in the first field. High-confidence -matching of this kind can be accomplished down to about -28 dB on the -WSJT scale, in a single transmission, with a very low error rate. - -The bottom line is that for any arbitrary callsign the new JT65 -decoder performs at least as well as the one in WSJT version 4.7.0. -Message averaging works just as it did before, and if you are -listening in to a "third party" QSO between two other stations, the -sensitivity will be the same as in version 4.7.0. However, if a -station that is listed in the file CALL2.TXT is calling CQ or is -calling you, your sensitivity will be about 4 dB better on average. - -Please note that the decoder is given no information whatsoever about -what station you may be trying to work. Its heart is "as pure as the -driven snow," even if you are working a sked. However, the decoder -does presume that the callsign of the transmitting station is more -likely to be one listed in CALL2.TXT than some other callsign -constructed at random. - -The program always attempts to decode a purely arbitrary message -first. Failing that, it will look more deeply in the noise for the -presence of a message that includes the callsign of a station listed -in the database file. - -It is no accident that the algorithm just described bears close -resemblance to the thought processes (conscious and otherwise) that we -use to copy very weak CW by ear. Familiar combinations like CQ and -one's own callsign are always easier to dig out of the noise than -random combinations of characters. Callsigns that we have seen or -heard before are more easily recognized than arbitrary calls generated -at random. The new JT65 decoder behaves similarly, except that it -is kept fully in the dark about who you are trying to work. - -All decoders make mistakes, and this one is no exception. Just like a -human copying CW, the JT65 decoder has a "grey area" in which it finds -a solution but may have only moderate confidence in it. In such cases -the decoder appends a "?" to the decoded text, and the operator must -make the final decision as to whether the decoding is correct. Be -aware that because of the mathematical message structure, incorrect -decodings will not just differ from the correct one in a few -characters; more likely, they will exhibit a whole incorrect callsign. -As you gain experience in recognizing the graphical and numerical -indications of proper message synchronization and the effects of -"birdies" and other interference, you will become adept at making -these decisions when necessary. With added on-the-air experience I will -probably be able top reduce the decoder's error rate, as well. - -A final note: the file CALL2.TXT replaces the file CALLSIGN.TXT used -by earlier versions of WSJT. The format has been changed to permit -extended callsigns such as those sometimes used by DXpeditions, for -example ZA/PA2CHR. The name of the database file has been changed so -as not to "break" an earlier version of WSJT that you may wish to keep -available. Full support for extended callsigns (i.e., calls with an -extra prefix or suffix) is planned for a future version of WSJT. - - -Changes in Version 4.7.0 ------------------------- - -1. New feature: WSJT can now be used simultaneously with Spectran on -the same computer. You can start Spectran by selecting "Use Spectran -for input" on the Setup menu. This feature also allows the user to -select the sound card to be used for input. - -2. Bug fix: in some circumstances, switching from a JT65 long-format -message to a shorthand message did not work properly. Fixed. - -3. Bug fix: for operators in the southern hemisphere and longitudes -more than 90 degrees east or west, the wrong "Hot spot" was sometimes -identified as the best direction for sporadic meteors. Fixed. - - -Changes in Version 4.6.1 ------------------------- - -1. Bug fix: I mistakenly shifted the RX data by 2 seconds, rather -than the intended 1 s, when changing the DT range. Therefore in -v4.6.0 the actual DT range is not -1 to +5 s as stated, but rather 0 -to +6 s; moreover, the displayed values of DT are too small by 1.0 s. -This has been fixed. - -2. New feature: thanks to Akira, JM1SZY, I learned that occasionally a -file (or an average of several files) will decode better with the AFC -feature turned off. Consequently I have added a checkbox that must be -ticked to activate AFC in the JT65 modes. If you can trust the -frequency stability of the signal you are receiving, and especially if -you are trying to receive a signal at -27 dB or weaker, leaving this -box unchecked may yield a slight improvement in decoding. In most -cases, especially at 144 MHz and above, I recommend leaving the AFC -turned ON. - -3. Thanks to Chris, GW4DGU, for pointing out that the Gx series of -prefixes is no longer legal for reciprocal license operating in the -countries of the UK. The valid prefix series for such operation is -now the M-series, i.e., M MD MI MJ MM MU MW. I have changed the -prefix table accordingly. - -Version 4.6 ------------ - -This is the first full release of WSJT since version 3.0. New users -can install Version 4.6 directly, without upgrading from a previous -installation. Of course, you can also upgrade from an earlier version -in the usual way. All download files can be found on the WSJT home -page, http://pulsar.princeton.edu/~joe/K1JT. - -The new release includes an entirely new "WSJT 4.6 User's Guide." -This document is about one third the length of the former "User's -Guide and Reference Manual," but contains nearly everything you need -to know to use the program. A copy of the new Guide is included in -the version 4.6 distribution files. You can also download it directly -from http://pulsar.princeton.edu/~joe/K1JT/WSJT_User_460.pdf. Even if -you are an experienced WSJT user, you should definitely print and read -this document. - -New features in WSJT Version 4.6 include the following: - -1. Improved automatic frequency control in JT65 modes. If you have -lost JT65 QSOs because of unstable oscillators, this is for you. - -2. The acceptable range for DT in JT65 mode is now -1 to +5 s. This -range is a better fit for EME communication than the former -2 to +4 -s. It will allow for somewhat greater clock errors before -inter-station synchronization fails on an EME path. - -Note to experienced users: this means that the plotting scale for the -"blue curve" now runs from -1 to +5 s. EME signals should normally -produce a blue peak near the center of the plot area. - -3. When the blue window displaying moon coordinates has been toggled -to display coordinates for the DX station as well as the home station, -it now displays MaxNR in place of SD. MaxNR is the maximum path -non-reciprocity in dB. This effect arises from the combination of -spatial polarization shift plus Faraday rotation; it is what causes -"one way propagation" between stations that use fixed linear -polarization. - -4. A facility for generating the file ID.WAV for station identification -is now built into WSJT. - -5. The "Save Decoded" menu item now saves files with decoded shorthand -messages as well as normal messages. - -6. JT65 has a new shorthand message "ATT" (for "Attention!"). It is -intended as an aid to help two stations find each other by determining -the correct DF. - -7. Visual aids for evaluating JT65 shorthand messages "by eye" are -provided if you click on the sync-tone frequency in the Big Spectrum -display. - -8. For DXpeditions: a country prefix preceded by "/" may be -substituted for the grid locator in a type 1 JT65 message. - -9. Alternatively, a signal report of the form "-NN" or "R-NN" may be -substituted for the grid locator in a type 1 JT65 message. For -example, -24 might indicate that signals were being received at -24 -dB. The minus sign is required, and NN must lie between 01 and 30. - -10. The receiver noise level reported by Measure mode (the level of the -"green line") has been increased by 2 dB to be consistent with levels -reported by the other operating modes. - - -Changes in Version 4.5.1 ------------------------- - -Bug fixes: - -1. JT6M did not transmit properly in version 4.5.0 because the program -failed to switch its wavefile generator into JT6M mode. Fixed. - -2. WSJT consumed a large fraction of CPU time in JT65 mode, even when -the program was supposedly doing nothing. Fixed. - -3. Monitoring for long periods in JT65 mode would occasionally produce -a Fortran "output conversion error". Fixed. - -4. Clicking the "Add" button with nothing in the Grid box would cause -a program crash. Fixed. - - -Enhancements: - -1. In the FSK441 modes, messages longer than 3 nonblank characters and -starting with R26, R27, RRR, or 73 are no longer transmitted as -shorthand messages. - -2. Onscreen labels now indicate active status of the "Save Decoded", -"Save All", and "Save text in File DECODED.CUM" features. - -3. Small improvements have been made in the decoding of shorthand -messages in modes FSK441B and C. - -4. Alphabetic characters in message templates (on the Setup | Options -screen) are now case-insensitive. - - -Principal New Features in WSJT Version 4.5 ------------------------------------------- - -1. The JT65 modes employ an entirely new decoding algorithm that uses -"soft decisions" to recover the transmitted message. The message -format and Reed-Solomon encoding are unchanged, so the JT65A, B, and C -modes are fully compatible with earlier versions. However, the new -decoder is more sensitive by slightly more than 1 dB. It is based on -software licensed from CodeVector Technologies, LLC, and protected -under United States Patent 6,634,007. As usual, however, I am making -WSJT freely available for amateur radio use. - -Changes to the JT65 modes are "under the hood," and except for the -improved performance you will find them mostly invisible. The new -decoder can be somewhat slower than the one in v4.3.4, depending on -details of the received data. - - -2. Like JT65, FSK441 now provides three submodes. FSK441A is -identical to the "classical" FSK441. The two new modes, FSK441B and -FSK441C, use the same 4-tone frequency shift keying at 441 baud. -However, they use forward error correction (FEC) on a -character-by-character basis, to improve message reliability. They -also provide shorthand messages which are more robust than the -single-tone messages of traditional FSK441. Cross-mode communication -will not work: a transmission in FSK441B must be received in FSK441B, -etc. - -FEC information in FSK441B and FSK441C is conveyed by sending -additional channel symbols (tones) for each character, using special -codes designed to optimize the error rate and sensitivity with very -short pings. The additional symbols are redundant when the S/N is -high, but they allow recovery from transmission errors when the S/N is -low. - -FSK441A, which provides no redundancy, transmits 3 symbols per -character. Modes B and C use 4 and 7 symbols per character, -respectively. The raw throughput of user information is summarized -in the following table: - - FSK441A FSK441B FSK441C ----------------------------------------------------------------- -Sequential tones per character 3 4 7 -User data rate, characters/second 147 110 63 -Time for a 12-character message, ms 82 109 190 - - -The shorthand messages in FSK441B and FSK441C use alternating tones at -two specific frequencies, as follows: - -Shorthand Low tone High tone - message (Hz) (Hz) ------------------------------- - R26 861 1206 - R27 861 1550 - RRR 861 1895 - 73 861 2239 - -Tests with my digital simulator show that shorthand messages in -FSK441B and FSK441C are several dB more sensitive than the ST messages -of FSK441A. At the same time they give a far lower rate of false -positives. - -With multi-tone messages the sensitivities of the three submodes are -nearly the same, but they have different trade-offs. Mode A is 25 -percent faster than mode B, but mode B is more accurate and will -produce much less on-screen "gibberish". Mode C is about half the -speed of mode A but has still stronger FEC code. Parameters of the B -and C modes were selected in the expectation that FSK441B might become -the mode of choice for meteor scatter work on 144 MHz (and possibly -also 222 MHz), while FSK441C will likely prove best at 50 MHz where -the pings are longer. These suppositions need to be tested, of -course. - -Experienced WSJT users should have no difficulty making the new modes -work. Just select the desired mode from the Mode menu (or use the -appropriate hot-key combination), and away you go. - - -Other Changes in Version 4.5.0 ------------------------------- - -1. Bug fix: In JT65 mode, if you sent 73s and then started a QSO with -a new station, the program would sometimes continue sending the 73 -message even though TX message #1 had been checked. This has been -fixed. - -2. Performance enhancement: Shorthand messages in JT65 were sometimes -suppressed because of an apparent low-value Sync detection that -produced no decoded message. This has been fixed; there is no longer -any need to set your Sync threshold to a higher value when you are -expecting to receive a shorthand message. - -3. The JT65 "Filter" function has been removed. It was confusing to -some, and anyway was generally deemed of little value. The new -decoder provides a much better solution. - -4. The "suggested report" has been deleted from FSK441 decoded text -lines. It is replaced by S/N, the measured signal-to-noise ratio in -dB. Note that the familiar "dB" measurement of (S+N)/N is still -available, as well. - -5. Finer adjustment intervals are provided for "S", the FSK441 ping -detection limit. As in earlier version, these numbers refer to -(S+N)/N. In contrast, the "Single Tone" or "Shorthand" detection -limits refer to S/N, a more useful parameter at very low signal -levels. (See below for more details on signal to noise ratios, if -interested.) - -6. A button labeled "Add" just below the grid locator box will cause -the displayed callsign and grid to be entered into the CALLSIGN.TXT -database. - -7. A date and time stamp is now added to the DECODED.CUM file at -program startup or when you first enable writing to this file. - - -Request to Users ----------------- - -As usual, I will appreciate hearing from users about the new features -in WSJT. Let me know, of course, if you find bugs or other problems -in the program. In particular, let me know of your experiences with -FSK441B and FSK441C. Remember, my guess is that FSK441B should work very -well on 2 meters, while FSK441C may work best on 6 meters. After -you have gained some experience with FSK441C on 6 meters, I would be -interested to know whether you think JT6M should be retired. In North -America, at least, I do not think it is being used very much. - - -Why use both S/N and (S+N)/N ? ------------------------------- - -WSJT has traditionally measured the level of FSK441 signals as the -ratio (signal plus noise)/(noise) = (S+N/N), in dB. This quantity is -approximately what S-meters try to measure; it has the advantage that -it goes to zero when there is no signal, while at high signal levels -it increases as you would expect, in proportion to signal strength. - -At low signal levels, however, the numbers for (S+N)/N in dB behave in -a way that may be counter-intuitive. When WSJT reports that a meteor -ping had strength 3 dB, it means that signal plus noise was 3 dB -higher than noise alone. That means that signal and noise were equal -in power, so the corresponding value of S/N must be 0 dB. If the same -signal had been transmitted with half the power, it would have had S/N -= -3 dB, and (S+N)/N would have been 10*log(0.5+1.0) = 1.76 dB. Yes, -cutting the TX power in half would only reduce the ping level from -3.0 dB to 1.76 dB! That's why, for many purposes, S/N is a more -useful number -- and why I am now listing both numbers in FSK441 -decoded text lines. - -The table below will allow you to convert easily between S/N and -(S+N)/N, both as numerical ratios and as dB. - - S/N S/N (S+N)/N (S+N)/N - (dB) (dB) ----------------------------------------- - 10.0 10.000 11.000 10.41 - 9.0 7.943 8.943 9.51 - 8.0 6.310 7.310 8.64 - 7.0 5.012 6.012 7.79 - 6.0 3.981 4.981 6.97 - 5.0 3.162 4.162 6.19 - 4.0 2.512 3.512 5.46 - 3.0 1.995 2.995 4.76 - 2.0 1.585 2.585 4.12 - 1.0 1.259 2.259 3.54 - 0.0 1.000 2.000 3.01 - -1.0 0.794 1.794 2.54 - -2.0 0.631 1.631 2.12 - -3.0 0.501 1.501 1.76 - -4.0 0.398 1.398 1.46 - -5.0 0.316 1.316 1.19 - -6.0 0.251 1.251 0.97 - -7.0 0.200 1.200 0.79 - -8.0 0.158 1.158 0.64 - -9.0 0.126 1.126 0.51 - -10.0 0.100 1.100 0.41 - - -Beta Release 4.3.4 ------------------- - -Beta Release 4.3.4 of WSJT is now available for free download at the -WSJT home page, http://pulsar.princeton.edu/~joe/K1JT. The principal -change from version 4.2.1 is to offer three JT65 submodes. The -submodes differ in tone spacing and total bandwidth as follows: - - Mode Spacing Total BW - ------------------------- - JT65A 2.7 Hz 177.6 Hz - JT65B 5.4 355.3 - JT65C 10.8 710.6 - -Note that JT65A is identical to the original JT65. If you want to -work people who have not yet upgraded to v4.3.4, be sure to select -mode JT65A. Otherwise, be sure to use the same mode that your QSO -partner is using. Cross-mode contacts will not work. - -JT65B should be nearly as sensitive as JT65A, and it will be twice as -forgiving of frequency instabilities. On balance, with existing -"stock" radios, JT65B will probably be better than JT65A. JT65C is -less sensitive by a small amount, perhaps 1 dB, but will be even more -lenient on stability issues. By all means experiment with the -different submodes, and be sure to let me know your conclusions about -them! - -I am presently inclined to recommend that JT65B should become the -"standard" JT65 mode. If this tentative conclusion holds up, future -versions of the program may no longer support the A and C modes. - -Other changes from version 4.2.1 include the following: - -1. Further improvements have been made to the JT65 decoding - algorithm. These improvements apply to all three submodes. Some - wave files that would not decode with v4.2.1 now decode properly, - especially in averages over several minutes. - -2. The frequency width W of the sync tone (the "red spike") is now - measured and displayed in Hz after DF in the main text box. In any - of the three JT65 modes, W should be no more than 2-4 Hz under good - conditions. Uncorrected frequency drifts, excessive oscillator - phase noise, and certain propagation effects can make the width - larger. Anything over about about 4 Hz will impair copy in JT65A. - Similarly, widths greater than about 7 and 15 Hz will begin to - impair copy in JT65B and C, respectively. - -3. The utility program CWID.EXE now accepts lower case letters on the - command line. It also permits you to specify the audio frequency - of the tone in the wave file. You may wish to place the tone at - 600 Hz or lower so that it lies well below the tones generated by - any of the WSJT operating modes. - -4. The "Clip" function has been improved in several ways. The yellow - and magenta curves in the Big Spectrum display no longer disappear - when Clip > 0. Setting Clip = 3 does hard clipping, as before, but - it also blanks out any data regions with average power well above - the "baseline" of the green curve. Experimenting with different - values of Clip may help you to recover good copy from noisy data. - -5. I believe that the text window displays in Monitor mode, and when - you are using the Include/Exclude buttons, now function correctly. - -6. Minor bug fixes: the program no longer crashes in EME Echo mode if - you select "EME Calc | Load | Cancel". The correct "S" value is - listed on the status bar in JT6M mode. - -7. The program's "Fit and finish" is improved in several not very - important ways. - - -WSJT Version 4.2.1 ------------------- - -Version 4.2.1 contains a number of enhancements and bug fixes, mostly -related to the new JT65 mode. Changes from version 4.1.1 include the -following: - - 1.1 Message averaging now works correctly - 1.2 Many small improvements to the decoding algorithm - 1.3 Decoding speed improved by 50% - 1.4 JT65 monitor mode is properly implemented - 1.5 TX message can be changed up to t=59 s of preceding RX period - 1.6 Switch to a shorthand TX message at any time - 1.7 Freeze works properly for shorthand messages - 1.8 Decodes with failed FEC (forward error correction) are - optionally displayable - 1.9 "Garbage filter" provided so that questionable decodes appear - only if they contain some recognizable text - 1.10 Automatic station ID, as in FSK441 and JT6M modes - 1.11 Companion program to generate a CW ID.WAV file is included - 1.12 The birdie zapper now works in JT65 mode - 1.13 "Clip" function has been reactivated - 1.14 F5 help screen updated to reflect JT65 practices - 1.15 "OOO" message handled more transparently - 1.16 Optional display of Moon Az/El at DX station, replacing Sun - Az/El - 1.17 Right/Left audio out now works properly - 1.18 DT displayed as blank rather than 0.0 for shorthand - messages - 1.19 No program crash if ToRadio or Grid left empty - 1.20 No program crash if attempting to decode 60 s file in JT6M - 1.21 All other reported problems causing crash have been fixed - - -+-------------------------------------------------------------+ -| Quick Start Guide to Using WSJT version 4 and the JT65 Mode | -+-------------------------------------------------------------+ - -Version 4 of WSJT marks a significant departure in the program's -evolution. The list of features is no longer a full superset of -those available in all previous versions. In particular, the -JT44 mode is gone; it is replaced by a new mode called JT65 that -I hope will be a significant improvement for making QSOs via EME -and extremely weak tropospheric paths. - -The procedure for upgrading to version 4 is identical to previous -upgrades, with one exception: the setup procedure will install a -new program in your existing WSJT directory, but will keep the -old version alive as well. The two versions of the program can -coexist peacefully. During a testing period you will probably -want the older version and JT44 to be available as well. - - -What is different about JT65, compared to JT44? Here's a short -list: - -1. T/R period 60 s; actual TX audio duration 46.8 s. (Yes, this -will put somewhat more stress on your PA. If its cooling is -marginal, take appropriate action.) - -2. Modulation uses 64 data tones plus a sync tone. - -3. Tones are spaced by 2.7 Hz in frequency and 0.372 s in time. -The total occupied bandwidth of a JT65 signal is about 180 Hz. - -4. Transmissions consist of 63 data tones or "symbols," each -carrying 6 bits of information. In addition there are 63 sync -symbols for establishing time and frequency synchronization. - -5. Software AFC (automatic frequency control) can follow drift -rates up to about +/-10 Hz/minute. - -6. User messages are tightly "source coded" into 72 bits. - -7. Strong FEC (forward error correction) coding is used to -mitigate transmission errors. - -8. User-level message formats are designed to permit maximum -possible efficiency in EME or similar QSOs. A valid message must -be be one of three possible types: - - 1. "Call1 Call2 Grid" or "Call1 Call2 Grid OOO" - 2. "RO", "RRR", or "73" (so-called shorthand messages) - 3. "any text you want" (up to 13 characters selected - from a 42-character alphabet) - -Instead of a callsign, the first field of a message type 1 may -contain "CQ" or "QRZ". Other such "special tokens" may be added -later. The available alphabet of characters for message type 3 -is: - 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./? - -9. Instead of JT44's very effective intra-message averaging of -the even, odd, and "last N" characters of a message, JT65 offers -even more powerful special shorthand messages for RO, RRR, and -73. These have much higher sensitivity than the other message -types. They work reliably down to about -30 dB. If you -succeed in exchanging callsigns and "OOO" by means of type 1 -messages, you should certainly be able to complete the QSO. - -10. Message averaging over subsequent transmissions works as it -did in JT44, with one exception. The "OOO" signal report -typically used for EME can be appended to message #1 and the -message will continue averaging without any need to start over. -The presence or absence of "OOO" will be detected if sync is -achieved, whether or not full decoding has been successful. - -11. Receiving FEC-decoded transmissions takes some getting used -to. You will find *much* less gibberish on your screen in JT65 -than in JT44. The FEC algorithm has a good idea whether it has -succeeded or not, and the program will suppress output unless it -is "pretty sure" that it has got the message right. You will -discover that when the FEC procedure fails and the program has -not realized it, text is occasionally produced looks like -plausible (but quite wrong) callsigns or grid locators. You must -mentally reject such garbage messages, when they occur. In the -small amount of on-the-air testing that JT65 has enjoyed so far, -my experience is that that only a few percent of decoded messages -are displayed incorrectly. Most of the time, received text is -either "letter perfect" or is left blank. - -12. You may optionally have the program display text for instances -when the decoder in uncertain of its results. Doing so makes use of -an "expected message", and you can specify a minimum number of -characters thst must match before uncertain text is displayed. By -default the expected message is "MyCall HisCall HisGrid" where MyCall -is your own callsign, HisCall is the one entered in the onscreen "To -Radio" box, and HisGrid is the first four characters of the grid -locator in the "Grid" box. - -13. At least one design choice used to define the JT65 algorithm is -still subject to change. If the 2.7 Hz tone spacing turns out to be -problematic because of propagation anomalies or inadequate oscillator -stabilities, the spacing could be increased. There are significant -advantages to the smaller spacing, however, so I am sticking with it -for now. - -Beta Release 4.1.1 ------------------- - -+-------------------------------------------------------------+ -| Quick Start Guide to Using WSJT version 4 and the JT65 Mode | -+-------------------------------------------------------------+ - -Version 4 of WSJT marks a significant departure in the program's -evolution. The list of features is no longer a full superset of -those available in all previous versions. In particular, the -JT44 mode is gone; it is replaced by a new mode called JT65 that -I hope will be a significant improvement for making QSOs via EME -and extremely weak tropospheric paths. - -The procedure for upgrading to version 4 is identical to previous -upgrades, with one exception: the setup procedure will install a -new program in your existing WSJT directory, but will keep the -old version alive as well. The two versions of the program can -coexist peacefully. During a testing period you will probably -want the older version and JT44 to be available as well. - - -What is different about JT65, compared to JT44? Here's a short -list: - -1. T/R period 60 s; actual TX audio duration 46.8 s. (Yes, this -will put somewhat more stress on your PA. If its cooling is -marginal, take appropriate action.) - -2. Modulation uses 64 data tones plus a sync tone. - -3. Tones are spaced by 2.7 Hz in frequency and 0.372 s in time. -The total occupied bandwidth of a JT65 signal is about 180 Hz. - -4. Transmissions consist of 63 data tones or "symbols," each -carrying 6 bits of information. In addition there are 63 sync -symbols for establishing time and frequency synchronization. - -5. Software AFC (automatic frequency control) can follow drift -rates up to about +/-10 Hz/minute. - -6. User messages are tightly "source coded" into 72 bits. - -7. Strong FEC (forward error correction) coding is used to -mitigate transmission errors. - -8. User-level mesage formats are designed to permit maximum -possible efficiency in EME or similar QSOs. A valid message must -be be one of three possible types: - - 1. "Call1 Call2 Grid" or "Call1 Call2 Grid OOO" - - 2. "RO", "RRR", or "73" (so-called shorthand messages) - - 3. "any text you want" (up to 13 characters selected - from a 42-character alphabet) - -Instead of a callsign, the first field of a message type 1 may -contain "CQ" or "QRZ". Other such "special tokens" may be added -later. The available alphabet of characters for message type 3 -is: - 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./? - -9. Instead of JT44's very effective intra-message averaging of -the even, odd, and "last N" characters of a message, JT65 offers -even more powerful special shorthand messages for RO, RRR, and -73. These have much higher sensitivity than the other message -types. They work reliably down to -30 dB and below. If you -succeed in exchanging callsigns and "OOO" by means of type 1 -messages, you should certainly be able to complete the QSO. - -10. Message averaging over subsequent transmissions is intended -to work as it did in JT44, with one exception. The "OOO" signal -report typically used for EME can be appended to message #1 and -the message will continue averaging without any need to start -over. The presence or absence of "OOO" will be detected if sync -is achieved, whether or not full decoding has been successful. -[Note: message averaging is only partially functional in the -first beta release of the JT65 mode. I will need some experience -with the mode in order to optimize the code here.] - -11. Receiving FEC-decoded transmissions takes some getting used -to. You will find *much* less gibberish on your screen in JT65 -than in JT44. The FEC algorithm has a good idea whether it has -succeeded or not, and the program will suppress output unless it -is "pretty sure" that it has got the message right. You will -discover that when the FEC procedure fails and the program has -not realized it, text is occasionally produced looks like -plausible (but quite wrong) callsigns or grid locators. You must -mentally reject such garbage messages, when they occur. In the -small amount of on-the-air testing that JT65 has enjoyed so far, -my experience is that that only a few percent of decoded messages -are displayed incorrectly. Most of the time, received text is -either "letter perfect" or is left blank. - -12. The program makes use of what it calls the "expected -message". By default this message is "MyCall HisCall HisGrid" -where MyCall is your own callsign, HisCall is the one entered in -the onscreen "To Radio" box, and HisGrid is the first four -characters of the grid locator in the "Grid" box. The AFC -algorithm, in particular, can work more effectively when the -actual message received matches the expected message. - -13. Several design choices used in defining the JT65 algorithm -are still subject to change. If the 2.7 Hz tone spacing turns -out to be problematic because of propagation anomalies or -inadequate oscillator stabilities, the spacing could be -increased. About 1 dB of additional S/N could be obtained by -omitting the "Grid" field of the standard message format. This -would also reduce the maximum "plain text" message length from 13 -characters to 10. - -14. Please note that the "Clip" and "ST" are not functional in -WSJT v4.1.1. Their settings do not affect program operation. - - -Beta Release 3.8.1 ------------------- -This release contains the following new features: - -1. An optional large spectral display. Its axes are reversed with -respect to those of the FSK441 and JT6M waterfall displays; in the new -plot, frequency runs from left to right and time from top to bottom. - -2. A new birdie zapper that is especially effective in the FSK441 and -JT6M modes. You can watch what it is doing by observing the waterfall -displays before and after the "Zap" box is checked. Click "Decode" to -refresh the displays after checking or uncheking "Zap". - -3. Message decoding in FSK441 mode has been improved in several ways. -DF is more accurately determined. Better synchronization is achieved -with the precise timing of 25-sample tone bursts comprising each -message symbol. Folding of messages is no longer attempted. (It -seems that whenever a ping is long enough to make folding effective, -it's also strong enough to make folding unnecessary.) As in previous -versions, the left mouse button allows decoding of single-tone -messages while the right button suppresses them. - -4. It is now permissible to click "Gen Std Msgs" while transmitting in -FSK441 or JT6M mode. When this button is clicked, the Tx message -number will reset to #1 if and only if the callsign in "To Radio" has -changed. - -5. Message formatting templates for FSK441 and JT6M may now include -the special codes %G and %L to insert your 4-digit grid or full -6-digit locator, respectively, in the message. - -6. "Reset Defaults" now resets the QRN level to 5, as it should. - -7. The decoding parameters in use are no longer listed in the Status -Bar at lower right. This listing had become redundant. - -8. In Monitor mode, the name assigned to the Rx wave file begins with -"Mon_" instead of the "To Radio" callsign. - -9. In FSK441 mode, all messages with more than 3 non-blank characters -are transmitted in multi-tone mode. - -Beta Version 3.6.4 ------------------- - -The previous version had the threshold set very low for all mouse-picked -decoding attempts in JT6M mode. This was useful to me for testing, but -produced excessive gibberish. Version 3.6.4 has a reasonable threshold and -produces much cleaner output. In addition, the message averaging algorithm -has been improved. I find that I seldom need to use either "Freeze" or -"FixAve" now. These buttons are still present in version 3.6.4, but unless -I hear that people are finding them useful I may remove them soon. - -An option has been added to the Setup menu so that you can determine -whether you want the "Tx Stop" button to kick you out of Auto Mode, or -not. The default is not to do so. - -***IMPORTANT*** - -If you can make WSJT v3.6.4 crash in normal operation, please let me know -(and tell me how). Also let me know if you find anything that does not -work as intended. I believe the present code behaves well and is nearly -ready to be upgraded from "Beta" status to a full release. - -WSJT Beta Version 3.6.3 ------------------------ -Version 3.6.3 has a number of small improvements, many of them not -immediately visible. Several bugs have been exterminated. The JT6M -decoder works better and is more sensitive. JT6M now has a "FixAve" -checkbox; when this is checked, average messages will be sought only -at the lengths of the automatically generated messages. - - -WSJT Beta Version 3.6.2 ------------------------ -Version 3.6.2 corrects a problem that on a few machines caused a -fatal error that could only be corrected by deleting the initialization -file, WSJT361.INI. - - -WSJT Beta Version 3.6.1 ------------------------ -Version 3.6.1 corrects a problem that caused an immediate termination -on program startup on some users' machines (typically older ones). If -you need this upgrade, you need it bad! - -It also fixes a minor bug that could cause a divide-by-zero error if -you clicked on the plot area when no data was available to analyze. - - -WSJT Beta Version 3.6.0 ------------------------ - -The JT6M mode is only a week old, but many hundreds of QSOs have been -made with it all over the world. This mode is expressly designed for -meteor scatter on 6 meters, but it may be useful with some other -propagation modes as well. It has characteristics that place it about -midway between FSK441 and JT44 in both speed and sensitivity. A -second beta release of WSJT with JT6M, Version 3.6.0, is now available -for downloading at - - http://pulsar.princeton.edu/~joe/K1JT/UPD360.EXE - -The download file is about 0.75 MB in length. - - -Comparison of Versions 3.6.0 and 3.5.1 --------------------------------------- - -1. Version 3.6.0 has a better and faster decoder for JT6M. Further -improvements in this area are still to come. - -2. Several bugs that could cause crashes in V3.5.1 have been fixed. -Version 3.6.0 appears to be quite stable (at least on my own -computers). - -3. Some buttons have been moved from their familiar positions. - -4. Gadgets that Microsoft calls "Up-Down Controls" have replaced the -+/- buttons used for various decoding parameters. - -5. You can now drag the mouse pointer across any portion of the large -plot area to cause decoding of that portion of a recorded file. This -works in both FSK441 and JT6M mode. The area you selected is marked -when the plot is refreshed. - -6. A yellow curve now appears above the green curve in JT6M mode. The -yellow line represents measured power received at the sync-tone -frequency and in the sync-tone intervals. - - -I haven't yet written up any detailed instructions for the JT6M mode. -However, if you are an experienced WSJT user you probably won't need -any. Here are a few things it will be helpful to know about JT6M. - -1. Like JT44, JT6M uses 44-tone FSK with a "sync tone" and 43 possible -data tones -- one for each character in the supported alphanumeric -set. The sync tone is at 1076.66 Hz, and the 43 other possible tones -are spaced at 21.53 HZ intervals up to 2002.59 Hz. The tones are -keyed at a rate of 21.53 baud, so each one lasts for 1/21.53 = 0.04644 -seconds. The sync tone is ON during every 3rd transmission interval; -tones representing two data characters follow each sync tone. The -transmission rate of user data is therefore (2/3)*21.53 = 14.4 -characters per second. The transmitted signal sounds a bit like -piccolo music. - -2. Basic operation is very similar to FSK441. Just select JT6M from -the WSJT "Mode" menu (or use "Shift-F7") and then proceed as usual. - -3. The green line and waterfall display have their usual meanings. - -4. The program attempts to decode both single pings and an "average -message". The average is the last line displayed during each decoding -attempt, and is flagged with an asterisk as in FSK441. The number to -the right of the asterisk is the inferred message length (for example, -the number should be 10 for the message "W8WN K1JT "). If the program -finds the wrong length, the average will be garbled or meaningless. -All message lengths should be even numbers, because odd-length -messages are padded with an extra space at transmission time in order -to make them even. - -5. Clicking with the left mouse button decodes a 4-second block of -data near the mouse pointer. The right button uses a longer segment -of 10 seconds. Drag the mouse with the button down to select any -desired region. Experiment for best decoding as necessary. - -6. As soon as you see some properly decoded text, set the DF box to -the measured DF and check the "Freeze" box. Alternatively, you can -set the Tolerance to a low value (say 25 Hz) after the desired signal -has been identified. Use RIT, if necessary, to bring subsequently -measured DF's down to a small value. - -7. Default settings for the decoder are S > -12 dB, Tol=400 Hz, DF=0 -Hz. - -8. JT6M can work with signals that are up to 13 dB weaker than those -required for FSK441. In the brief on-the-air tests I've made with -W8WN, we have both found that mouse-clicking on the smooth green line, -even where nothing was heard and nothing can be seen, sometimes causes -both callsigns to pop up out of the noise! - - -Version 3.0 ------------ - -A new major release of WSJT, Version 3.0, is now available for free -download. Instructions for upgrading and for complete installations -can be found at http://pulsar.princeton.edu/~joe/K1JT. - -What's new in Version 3.0? --------------------------- - -1. The "User's Guide and Reference Manual" has grown to 51 well - illustrated pages. The new manual includes four major new - sections which together cover: - - a) the EME Echo mode, including the "Measure" sub-mode and the - "EME Calc" utility for estimating the strength of your echoes - from the moon; - b) the nature of the various astronomical calculations done within - WSJT, and a summary of their accuracies; - c) several pages describing availability of Fortran source code for - the DSP algorithms in WSJT, as well as a suite of test programs - for generating simulated data and testing the FSK441 and JT44 - encoding and decoding algorithms; - d) a short essay on possible future developments for WSJT. - -2. The astronomical calculations in WSJT have been overhauled and thoroughly - checked. In practice the differences from V2.9 will seem minor, but as - described in the new manual's Appendix B, the accuracies of - computed positions for the sun and moon, and for the EME Doppler - shift, are now well documented. Computed positions are accurate to - within about 0.04 degrees, and Doppler is better than 1 Hz at 144 - MHz. Exactly what is meant by the displayed data is now described - in the manual, as well. - -3. A new feature has been added on the Help menu. It pops up a screen - summarizing the standard message exchanges used for minimal QSOs - using FSK441 and JT44. No more excuses for not being sure about which - message you should send next! - -4. The Measure mode can now be left running indefinitely, with its output - written to a file. A few individuals have been wanting to use the - program for radio astronomy purposes, and the new version provides a - minimal facility for doing this. - -5. The display screen for the EME Calc utility has been cleaned and - tightened up. - -6. A few other small niceties, all minor in scope. - - -Version 2.9.0 -------------- - -I am pleased to announce the availability of an upgrade to WSJT -Version 2.9. The upgrade provides most of the features of the -soon-to-be-released Version 3.0; I am releasing it now as Version 2.9 -because many users have asked for early access to its new -capabilities. A full release of Version 3.0 must await some updating -of the Users Guide and Reference Manual. Probably a few additional -features will be added by then, as well. Please be patient! - -Version 2.9 is available only as an upgrade. As usual, it can be -downloaded from the WSJT web site, -http://pulsar.princeton.edu/~joe/K1JT, or from the European mirror -site http://www.dk5ya.de. New features of the program include the -following: - -1. EME Echo mode now works on certain computers (generally older, -slower ones) that previously refused to run Echo mode properly. The -new version runs fine under Windows 95 on my ancient 100 MHz Pentium -with 32 MB of RAM. - -2. A new feature known as "Measure" can be selected from the main -screen in EME Echo mode. Click the Measure button and your system -will record the received audio for one second, compute the level of -the noise and display the result in units of dB relative to the -nominal WSJT "0 dB" level. The program will repeat this measurement -cycle every 2 seconds and plot the results as a green line in the -graphical screen area. You can use this mode to measure Sun noise, -antenna temperature, ground noise, preamp gain, and a host of other -useful quantities, relative to a chosen reference level. - -3. A pop-up utility labeled "EME Calc" can be selected from the EME -Echo screen. It provides an easy way to predict whether you should be -able to detect your own echoes from the moon, as well as your ability -to work another station by EME. Boxes are provided to enter your TX -power, TX feedline loss, RX noise figure, RX feedline loss, antenna -gain, ground gain, ground noise, and sky temperature. Similar -quantities can be entered for a second station, and you must also -specify the operating frequency. When you click "Compute," the -program will calculate the maximum expected echo strengths for the -"Home Station" and the "DX Station" individually, as well as the -maximum expected signal strength of each station at the other -location. The program also estimates the averaging time that would be -required to detect echoes at the predicted signal level. - -Signal strengths are quoted relative to the WSJT standard, the noise -power in a 2500 Hz bandwidth. If the computed result for your echo -exceeds about -38 dB, you have a chance of being able to detect your -echoes using WSJT. In comparison, echoes are detectable by the human -ear only if they exceed about -14 dB on the same scale, or -equivalently +3 dB in a 50 Hz bandwidth. Note that the estimated -signal strengths are supposed to be the maximum values expected for -the specified conditions. There are many reasons (Faraday rotation, -ionospheric scintillation, libration fading, ...) why the actual -signal strength may be different, and deviations are much more likely -to be downward than upward. The predicted echo strength for my -present 144 MHz station at a reasonably good time of the month is -around -25 dB. My experience has been that the predictions are fairly -good if enough time is spent to be sure of catching a Faraday rotation -peak. - - -A number of smaller enhancements have been made in the EME Echo mode -of WSJT. These include the following: - -4. The program is much better behaved when operating at higher -frequencies, in particular 1296 MHz and above. If you fail to enter -an RIT setting or specify one that would make the return echo fall -outside the audio frequency range 900 - 2100 Hz, the program will -suggest a better RIT value for you to use. - -5. The amount of programmed frequency spread of your transmitted -signal (the "Dither" magnitude) can be set to any value in the range 0 -to 500 Hz. It defaults to 50 Hz. - -6. Instead of accumulating average echo parameters indefinitely, you -can set a parameter "Tavg" that specifies a time constant for -averaging. The default value is 5 minutes; at this setting the -average echo spectrum will build up as before for the first 5 minutes, -but thereafter it will track the signal characteristics over the most -recent 5 minutes. In other words, the average gradually "forgets" the -signals received more than Tavg minutes ago. Setting Tavg to a large -number, say 999 minutes, will closely approximate the program's -previous behavior. If you can detect your EME echoes easily and want -to see how they vary with time, you might set Tavg to 1 minute, start -a "Measure" sequence, and take down the signal level readings at one -minute intervals. - -7. Information sent to the main text window every 6 seconds now -accumulates, with the text window scrolling as necessary. The output -is also (optionally) written to file DECODED.CUM so that you can study -the data later. - - -Other miscellaneous improvements and bug fixes include the following: - -8. In JT44 mode, if the "Grid" box is left empty then no EME Doppler -shift will be displayed. - -9. The minimum "Dsec" increment has been reduced from 1 second to 0.5 -second. This will permit more precise on-the-fly correction of the -Windows clock for use by WSJT, should that be necessary. - -10. JT44 messages are always exactly 22 characters in length, and any -additional characters are ignored. To make this behavior more -obvious, any excess characters are now visibly removed from the screen -when transmission of a message begins. - -11. In Version 2.3.0, hitting the F4 key while in echo mode would -cause the program to crash. Fixed. - -12. Switching between modes could cause the Auto Period button to be -stuck in the disabled or "grayed out" state. Fixed. - -13. The last character in a manually edited FSK441 message was not -sent if the default trailing blank and "<" character were erased. -Fixed. - - -Version 2.3.0 -------------- - -This release of WSJT is the first to include the EME Echo mode. This -mode allows you to detect and measure your own lunar echoes, even if -they are far too weak to hear. The mode can be highly useful for -evaluating your station performance, even if you prefer to use CW -rather than JT44 for your EME QSOs. - -If you are a present user of WSJT with no interest in detecting and -measuring your EME echoes, you will find no significant advantages to -upgrading to WSJT Version 2.3.0. With the exception of a minor bug -fix, the FSK441 and JT44 modes are essentially unchanged. - -You can download the upgrade from the WSJT home page, -http://pulsar.princeton.edu/~joe/K1JT, and soon also from the European -mirror site http://www.vhfdx.de/wsjt. To upgrade an existing WSJT -installation of Version 1.9.4 or later you should download and execute -the file UPD230.EXE, which will replace your existing files WSJT.EXE -and WSJT1.DLL with new files of the same name. - -I have not yet produced a new full distribution of the latest version. -Doing this will require extensions to the User's Guide and Reference -Manual, and will probably be accompanied by further improvements to -the program. If you wish to do a full installation of Version 2.3.0 -from scratch you should download the installation file WSJT222.EXE, -run it to install Version 2.2.2, and then upgrade to Version 2.3.0 as -described above. - -Minor Bug Fix: In WSJT Version 2.2.2 and earlier, if you dismissed the -"Setup | Options" page by clicking on the "X" in the upper right -corner of the form, instead of by clicking the "Done" button, the home -station callsign ("My Call") would revert to its default value "K1JT". -(Contrary to popular opinion, this was not an subtle ploy designed to -increase my own VUCC totals; it was simply a coding mistake.) The bug -has now been fixed. - -EME Echo mode is presently a plain, no-frills implementation. You can -activate it from the Mode menu or by striking function key F9. Most -of the familiar WSJT buttons will then disappear from the screen, -leaving just a few that are essential for controlling the Echo mode. -If your station is already operational in the FSK441 and JT44 modes -and you have provided the proper signal levels, all you need to do for -an echo test is to start WSJT Version 2.3.0, hit F9 to switch to EME -Echo mode, aim your antenna at the moon, pick a clear frequency, and -toggle Auto Period On. The program will then start cycling through -the following loop: - -1. Transmit a fixed tone for 2.0 s -2. Wait about 0.5 s for the start of your echo -3. Record the received signal for 2.0 s -4. Analyze and plot the results -5. Repeat from step 1 - -The loop cycle time is 6 seconds, so the transmitter duty cycle is -only 2/6 or 33%. Your transmitter will think it is loafing. At the -start of each transmission the frequency of the transmitted tone is -randomly dithered by an offset up to +/- 100 Hz around a nominal value -of 1500 Hz. The programmed offset is removed from the computed -spectrum of each recording before it is added into the accumulating -average. This procedure helps to minimize the effect of birdies in -the receiver passband: in the average spectrum a fixed-frequency -birdie will be smeared out over a 200 Hz range, while the desired -signal remains sharply defined. - -Two curves are plotted in WSJT's main plot area during each pass -through the Tx/Rx loop. Each represents the spectrum of received -power over a 400 Hz range centered on the expected echo. The curve in -gray is a reference spectrum that you can use to be sure you have -chosen a reasonably birdie-free passband. It is aligned so as to -remove the EME doppler shift computed at the start of your run. The -alignment will not be subsequently adjusted for changes in doppler -shift or for the random dithering of the transmitted frequency. -Stable birdies will therefore stay fixed in the blue spectrum, making -them easy to recognize and evade if necessary. The red curve displays -the desired EME echo signal. Spectra computed for each 2-second -receive period are shifted to correct for changing doppler shift and -for the programmed frequency dithering, and are then averaged. The -EME echo should appear as a narrow spike near the middle of the red -curve, close to DF = 0. - -In addition to the graphical display, a line is presented in the WSJT -text window in the following form: - - N: 16 Sig: -26.3 dB DF: -1.3 Hz Width: 0.7 Hz Q: 9 - -This information gives the number N of Tx/Rx cycles that have been -averaged, the mean signal strength in dB, the measured frequency -offset of the detected echo from the expected frequency, the spectral -width of the echo, and a relative quality indicator for the detection -on a 0 - 10 scale. Signal strength is measured in the same units as -used in the FSK441 and JT44 modes, i.e., in dB relative to the -received noise power in a 2500 Hz bandwidth. Low values of Q -represent dubious detections, in which case the values of signal -strength, DF, and width may be meaningless. - -A note about doppler calculations will be helpful here. Most computer -programs in amateur EME stations use approximate formulae to compute -the position and distance of the moon and the expected doppler shifts -of echos. WSJT is no exception, and I cannot presently quote a firm -figure on the accuracy of its doppler calculations or describe how -their errors depend on lunar coordinates or the accuracy of your -station location. EME Echo mode uses a calculated doppler shift to -align received spectra so that the echo should appear at DF = 0. I -have found that on 2 meters the return signals generally fall within -10 Hz of DF = 0. Further improvements in accuracy of the doppler -routine will be forthcoming. - -If you can hear your own EME echoes you should see a spike in the red -curve within a few seconds after toggling Auto Period On. If your -echoes are 10-15 dB below the audible threshold you should see a -significant spike on the red curve within a few minutes. To give you -a better example of what to expect, consider the parameters of my -station. On 2 meters I run up to 400 Watts to a 17.6 dBd antenna (4 x -9 el yagis) aimed at the horizon. I have never heard my own CW echoes -with this system. However, when the moon is in my elevation window at -0 - 10 degrees I can easily detect my echoes at any time of the month -using WSJT in its EME Echo mode. Indeed, I can turn off the PA and -use my FT-847 barefoot, delivering 35 W to the antenna, and still -detect my echoes rather easily, even with the moon in a "bad" part of -the sky and the path degradation as large as -8 dB. I seem to be able -to detect my echoes reliably down to relative signal levels around -36 -dB. - -The spectral analysis done in EME Echo mode provides a frequency -resolution of 0.67 Hz. If your transmitter or receiver has short-term -frequency stability much worse than this value, so that something -drifts or wobbles by more than about 1 Hz in 2 seconds, your echo -sensitivity will be degraded. Most modern radios have no difficulty -in meeting this standard on the 6 and 2 meter bands, but the higher -UHF and microwave bands will be more problematic. I don't have enough -experience to know what the spectral width of an echo on the 432 MHz -or 1296 MHz band should be after averaging for a few minutes. I have -been measuring widths of 2 Hz or less on 2 meters. - -By default WSJT will assume that your receiver and transmitter are -tuned to the same frequency. An on-screen box labeled "RIT (Hz)" is -provided so that you can inform the program of any offset receiver -tuning, for example to accommodate a large doppler shift. Suppose you -are running a test on 70 cm and the predicted doppler shift at the -start of the run is -1087 Hz. That would cause echoes from the 1400 - -1600 Hz transmitted audio tone to come back as low as 313 Hz, probably -well below the low-frequency cutoff in your receiver's passband. Use -your transceiver's RIT control to offset the receiver tuning by some -round number within a few hundred Hz of the predicted value -- say --1000 Hz in this example -- and enter this offset in the RIT box -before starting the echo measurement. The program will accommodate -subsequent changes in the doppler shift up to 800 Hz or so, if -necessary, without any further adjustments. Your echo should appear -at the center of the red curve, as usual. You won't need to use -the RIT feature on 6 or 2 meters, where doppler shifts are much -smaller and echoes always fall well within the receiver's SSB -passband. - -Please note that I have so far tested the EME Echo mode only on 2 -meters. You will discover that the software implementation is not yet -highly polished; a number of improvements are already in the works, -but I want to gain the advantage of feedback from other users before I -go too much further. If you use the EME Echo mode -- especially on -bands other than 2 meters -- please send me your comments, -experiences, and suggestions! I am anxious to know how well it works -for you. - - -Version 2.2.2 -------------- - -This is a minor maintenance release. As usual, you can download it -from the WSJT web page, http://pulsar.princeton.edu/~joe/K1JT. In -addition to a short update file, UPD222.EXE, a full distribution of -WSJT Version 2.2.2 is available as WSJT222.EXE. - -I had thought that Version 2.2.1 had already fixed a sometimes -baffling bug appearing in earlier versions: if WSJT was terminated -when in its "minimized" state, it could get "stuck" on your Windows -taskbar and refuse to return to a full size display. - -It's not always easy for me to test program revisions on all available -versions of Windows, and it seems that the V2.2.1 fix did not solve -the problem on at least some versions of Windows 98. This time, with -V2.2.2, I believe it's *really* fixed! - -If WSJT is stuck in the minimized state you should fix it as follows, -and then upgrade to Version 2.2.2: - - A) Start WSJT. It should appear in minimized form on the taskbar at - the bottom of your screen. - - B) Right-click on the WSJT taskbar label and select "Move". - - C) Press the "left arrow" and/or "up arrow" keys a few times and - then move the mouse. You should start to see a "dotted frame" - indicating the location of the WSJT screen. - - D) Click the left mouse button, and you should be back in business. - -Then you should download and install UPD222.EXE and upgrade your -system to Version 2.2.2. - - -Version 2.2.1 -------------- - -This is a minor maintenance release. You can download it from the -WSJT web page, http://pulsar.princeton.edu/~joe/K1JT. In addition to -the short update file, a new full distribution of WSJT Version 2.2.1 -is available, as well as a new version of the manual addressing the -new program features. - -As always, I will be pleased to receive comments and suggestions at -email address k1jt@arrl.net. Please note, however, that I will be on -vacation and not reading email from July 7 through 21. - -Version 2.2.1 fixes the following minor bugs in Version 2.2.0: - -1. When first started without a valid INI file, the v2.2.0 would fail -to "Generate Std Messages" when asked to do so. Once you have -switched modes, say from FSK441 to JT44, the program worked correctly. - -2. Local hour angles greater than 180 degrees are now displayed as -negative angles. - -3. If you did not check the menu item "File | Save text in File -DECODED.CUM", the v2.2.0 would create an unwanted file named "fort.21" -and write all decoded JT44 text there. - -4. If WSJT was terminated when in the "minimized" state, it could get -"stuck" on your Windows taskbar. If you are stuck in this mode you -should fix it as follows, and then upgrade to Version 2.2.1: - - A) Start WSJT. It should appear in minimized form on the taskbar at - the bottom of your screen. - - B) Right-click on the WSJT taskbar label and select "Move". - - C) Press the "left arrow" and/or "up arrow" keys a few times and - then move the mouse. You should start to see a "dotted frame" - indicating the location of the WSJT screen. - - D) Click the left mouse button, and you should be back in business. - - -Version 2.2.0 -------------- - -WSJT Version 2.2.0 provides several significant enhancements, a number -of smaller improvements, and four minor bug fixes. - -To upgrade to v2.2.0 you should download the self-extracting zip file -UPD220.EXE and execute it to extract its contents, directing the -resulting files to your WSJT installation folder. - -The new version includes the following changes: - -1. The JT44 mode now has an adjustable parameter called "Clip." It -can be controlled with +/- buttons just below analogous ones for the -"Sync" parameter. The value of Clip defaults to 0, where it has no -effect. By increasing Clip to 1, 2, or 3 you can introduce "soft," -"moderate," or "hard" clipping of any sudden increases in signal -strength that might ruin the decoding of an otherwise usable signal. -I have found that setting Clip to 2 or 3 permits me to use JT44 in the -presence of summertime QRN that renders v2.0.1 useless. Clipping also -helps to accommodate occasional meteor pings in a JT44 QSO, recovering -the program's ability to synchronize on a weak residual signal. You -can leave the clipping turned on; note, however, that using hard -clipping on a signal that does not require it can cost you about 1 dB -in message S/N. I recommend generally leaving Clip set to 0 and -increasing it only when necessary. - -2. JT44 mode has a new checkbox labeled "Zap Birdies." It does just -what you would hope such a command would do -- and it can turn a -totally spoiled signal into good copy! (In the upgrade file I've -included an example wave file recorded via EME from W7FG, in the -presence of a strong birdie at my station. To become a believer, try -decoding this file both with and without "Zap Birdies" checked. He -was sending me the message "K1JT W7FG EM26 ".) - -The Zap algorithm works best with birdies that are steady in both -amplitude and frequency. A sure indicator that you have a birdie -problem is a persistent extra spike (or spikes) in the red-line plot, -in addition to the one corresponding to the JT44 sync tone. If the -birdie is higher in frequency than the sync tone by 20 to 465 Hz, you -will probably see a number of identical garbage characters in the line -of decoded text. If this happens, check the "Zap Birdies" box and hit -"Decode Again", and your copy should improve. It will work best if -you have already identified the correct value of DF and checked the -"Freeze" box to lock onto the Sync tone. - -Do not expect miracles! Keeping birdies out of your receiver or -QSYing to avoid them will always work better than trying to deal with -them in software. Nevertheless, this birdie-killer can make the -difference between a successful QSO and one that fails miserably. - -3. The JT44 mode has a second new checkbox labeled "Fold Msg." For -messages having identical content in the first and second half, this -feature can yield a signal-to-noise improvement of 1.5 dB. The JT44 -default message formats have been modified slightly to maximize the -opportunities for useful message folding. For example, if K1AA is -working G2ZZ, the first EME-style message will now be generated as -"G2ZZ K1AA G2ZZ K1AA ". (Notice the two spaces in the middle of the -message and at the end.) If the "Fold Msg" box is checked, the -message will be decoded simply as "G2ZZ K1AA ". Try decoding a -marginal signal both with and without the "Fold Msg" box checked. QSB -conditions might make one or the other preferable at a particular time. - -4. In WSJT versions 2.0.0 and 2.0.1 the JT44 decode algorithm produces -a single-character average of the last four character positions in a -message. In Version 2.2.0 the averaging limit has been changed to -equal the number of "O" characters (for EME messages) or "R" -characters (for non-EME messages) at the trailing end of default TX -message #2. For example, if clicking "Generate Std Texts" produces -"G2ZZ K1AA OOOOOOOOOOOO" for message #2, the program will produce a -single-character average based on the last 12 received character -positions. This choice gives you the best possible chance of properly -decoding an "O" or "R" report in message #2, and it also gives you a -good chance at snagging the "RRRRRRRRRRRRRRRRRRRRRR" message under -very marginal conditions. For steady signals the procedure can yield -a 5.4 dB S/N advantage over single characters and a 2.4 dB advantage -over the four-character average. - -5. WSJT now remembers whether you were using FSK441 or JT44 mode when -you last exited the program. On startup it restores the most recently -used mode, including values of W, S, and Sync, as appropriate. - -6. All decoded text in JT44 mode is now written to the cumulative file -DECODED.CUM. In previous versions of WSJT, text was saved only in -FSK441 mode. - -7. The default Sync setting in JT44 mode is now 1 rather than 2. -I believe nearly everybody runs with Sync = 1. - -8. WSJT v2.2.0 is more complete and more consistent about saving -information about the starting directory and the form size of the -"File | Open" dialog box. - -9. The displayed azimuths for "Hot A" and "Hot B" (direction headings -to use for optimal sporadic meteor reflections) now wrap correctly at -0 and 360 degrees. You will no longer see, for example, values like -368 or -8 degrees if you are working someone to your north. - -10. In JT44 mode the program now displays the local hour angle of the -Moon, in degrees. You will appreciate this if you have a polar -mounted EME array. - -11. The UTC Offset may now be specified as a floating-point number -- -that is, with significant digits after a decimal point. - -12. The count of available records displayed in the average message -window behaved illogically when "Decode Again" and "Include" were used. -This has been fixed. - -13. There was a bug in the JT44 display routine that caused error -messages to appear when the moon's right ascension was very close to -00:00. The error could appear at most once a month, and it would -persist for an hour or so. The bug has been fixed. - -14. There was an apparent logical inconsistency in program behavior if -"Exclude" was clicked after "Clear Avg" had been executed. This has -been fixed. - -15. In V2.0.1 if you hit F8 more than once and then hit F7, the -"Width" parameter in FSK441 mode would be set to 200 ms. This has -been fixed. - - -Version 2.0.1 -------------- -This is a minor maintenance release. Principal changes from Version -2.0 include the following: - -1. The installation scripts for both the full installation and the - upgrade to v2.0.1 are more robust and much easier to use. - -2. The decoding parameters for FSK441 mode are saved correctly after - you have used JT44 mode. - -3. The controls for "Decode Again", "Include", and "Exclude" are now - fully available during the Tx period. - -4. Certain colors (e.g., the backgrounds of a few labels) now display - better on older machines. - -5. The background colors behind certain Tx messages in JT44 mode - have been corrected. - -6. The manual has been updated to conform with the new installation - scripts, and a number of other small changes (mostly correcting - typos) have been made. - -7. The Tab key now moves the focus between various on-screen controls - and text boxes in a rational way. - -Version 2.0 ------------ - -A major new release of WSJT, Version 2.0 is now available for free -download. Instructions for upgrading and for new installations can be -found at http://pulsar.princeton.edu/~joe/K1JT. - -What's new in Version 2.0 ? --------------------------- - -The JT44 mode for extreme weak signal work was first introduced in -beta release 1.8.0. This mode has now matured, the program is stable, -and tons of EME QSOs (among others) are being made with it. New -features and fixes in Version 2.0 include the following: - -1. Full monitor mode with separate averaging of 1st and 2nd sequences. - -2. Mouse-selected value of DF for decoding when "Freeze" is checked. - -3. Program is much faster at certain critical points, and now runs - reliably on a 75 MHz Pentium with 24 MB of RAM. - -4. The dreaded "always starts minimized" bug has been fixed. - -5. Certain dates (such as "2002 VIII 21" now display properly in - machines configured for European format. - -7. A number of other small niceties. diff --git a/WSJT592.iss b/WSJT592.iss deleted file mode 100755 index feaa5c481..000000000 --- a/WSJT592.iss +++ /dev/null @@ -1,24 +0,0 @@ -[Setup] -AppName=WSJT -AppVerName=WSJT Version 5.9.2 r77 -AppCopyright=Copyright (C) 2001-2005 by Joe Taylor, K1JT -DefaultDirName={pf}\WSJT6 -DefaultGroupName=WSJT6 - -[Files] -Source: "c:\k1jt\svn\wsjt\release-5.9.2\WSJT6.EXE"; DestDir: "{app}" -Source: "c:\k1jt\svn\wsjt\release-5.9.2\README_592.TXT"; DestDir: "{app}" -Source: "c:\k1jt\svn\wsjt\release-5.9.2\CALL3.TXT"; DestDir: "{app}"; Flags: onlyifdoesntexist -Source: "c:\k1jt\svn\wsjt\release-5.9.2\wsjt.ico"; DestDir: "{app}"; Flags: onlyifdoesntexist -Source: "c:\k1jt\svn\wsjt\release-5.9.2\TSKY.DAT"; DestDir: "{app}"; Flags: onlyifdoesntexist -Source: "c:\k1jt\svn\wsjt\release-5.9.2\libsamplerate.dll"; DestDir: "{app}"; Flags: onlyifdoesntexist -Source: "c:\k1jt\svn\wsjt\release-5.9.2\kvasd.exe"; DestDir: "{app}"; -Source: "c:\k1jt\svn\wsjt\release-5.9.2\wsjtrc.win"; DestDir: "{app}"; -Source: "c:\k1jt\svn\wsjt\release-5.9.2\Tutorial_592.txt"; DestDir: "{app}"; -Source: "c:\k1jt\python\wsjt\rxwav\samples\W8WN_010809_110400.WAV"; DestDir: "{app}\RxWav\Samples\"; Flags: onlyifdoesntexist - -[Icons] -Name: "{group}\WSJT6"; Filename: "{app}\WSJT6.EXE"; WorkingDir: {app} -Name: "{userdesktop}\WSJT6"; Filename: "{app}\WSJT6.EXE"; WorkingDir: {app} - - diff --git a/WSJT_Source_Code.txt b/WSJT_Source_Code.txt deleted file mode 100755 index 4b962f3f2..000000000 --- a/WSJT_Source_Code.txt +++ /dev/null @@ -1,283 +0,0 @@ - WSJT DEVELOPMENT OVERVIEW - ------------------------- - -1 Introduction ----------------------------------------------------------------------- -WSJT is a computer program designed to facilitate Amateur Radio -communication under extreme weak-signal conditions. Three very -different coding and modulation methods are provided: one for -communication by "meteor scatter" techniques on the VHF bands; one for -meteor and ionospheric scatter, primarily on the 6 meter band; and one -for the very challenging EME (Earth-Moon-Earth) path. - - -2 Program Overview ----------------------------------------------------------------------- -WSJT's user interface is written in Python. The major Python -source-code files include: - -1. wsjt.py Defines the main-screen GUI for user interactions; - acts as "traffic cop" for orchestrating all - event-driven and time-shared activities. - -2. specjt.py Provides real-time display of received signals as - two-dimensional "waterfall" spectra. - -3. options.py Provides entry fields for user-defined parameters. - -4. astro.py Displays astronomical data for sun, moon, sky - temperature, etc. - -Smaller Python files serve various utility purposes. - -Both wsjt.py and specjt.py make calls to external procedures compiled -from Fortran and C. A variety of global data is shared among modules -through common blocks defined in Fortran. The Python code runs in a -single thread, although timers make the functions of the several main -modules appear concurrent. Fortran routines create additional threads -to be used for soundcard I/O and the decoding of received messages. - -As a small part of its overall task, the decoder for JT65 invokes an -external program named KVASD.EXE or KVASD, located in the main -WSJT directory. If this program is present it uses information on -received 64-FSK symbols and attempts to decipher it according to a -Reed Solomon (63,12) code, using the algebraic soft-decision algorithm -of Koetter and Vardy. If KVASD is not present, WSJT uses its own -internal hard-decision Reed Solomon decoder instead. Interprocess -communication between WSJT and KVASD takes place through a shared disk -file. KVASD is not an integral part of WSJT. Its algorithm is -patented, and the source code is the property of CodeVector -Technologies, LLC. However, compiled versions of KVASD may be freely -used in conjunction with WSJT for the purposes of amateur radio -weak-signal communication. - - -3 Some Functional Details ----------------------------------------------------------------------- -WSJT execution starts at the top of Python file wsjt.py. The -other Python modules are loaded and executed as needed. Fortran -routines are called to start a high-priority thread to handle -continuous A/D and D/A streams, and a background thread to decode -received or previously recorded signals. The top-level Python -code determines the overall state of program operation, e.g., -Idle, Monitoring, or Transmitting. In normal usage the operator -puts the program into Auto mode, resulting in a timed sequence of -alternating transmission and reception intervals. - - -4 Other Open-Source Software used in WSJT ----------------------------------------------------------------------- -WSJT 5.9 uses the following open source libraries: - - 1. FFTW, by Matteo Frigo and Steven Johnson, for computing Fourier - transforms - - 2. PortAudio, by Ross Bencina and Phil Burk, for audio I/O - - 3. "Secret Rabbit Code" or "libsamplerate", by Erik de Castro, for - accomplishing band-limited resampling of data - - 4. RS, by Phil Karn, KA9Q, for Reed Solomon encoding and - hard-decision decoding. - - -5 Platform-Dependent Notes ----------------------------------------------------------------------- -The Python code should run on any supported Python platform. Most of -the remaining code can be compiled for Linux, FreeBSD, unix, or OS/X, -as well as Windows. Platform-dependent versions of FFTW, PortAudio, -and libsamplerate may need to be installed. - -Methods are provided for creating additional threads and setting their -runtime priorities in Windows, Linux, and FreeBSD. - - -6 Partial List of Functions and Subroutines, and their purposes ----------------------------------------------------------------------- - Routines for audio startup, decoding, display computations - blanker.f90 Noise blanker - fivehz.f90 Called by PortAudio callback - flat2.f Flatten the spectrum for waterfall display - pix2d65.f90 Computes pixels for waterfall display - pix2d.f90 Computes pixels for waterfall display - runqqq.f90 Executes another process - - wsjtgen.f90 Generates Tx waveforms - abc441.f90 Part of FSK441 generator - gen65.f Generate JT65 waveform - chkmsg.f Check a JT65 message for presence of 'OOO' - encode65.f Encode a JT65 message - getpfx1.f Handle extra DXCC prefixes - getpfx2.f ... - graycode.f Convert binary to/from Gray code - nchar.f Convert number, letter, space to 0-36 - packcall.f Routines for JT65 source encoding - packdxcc.f ... - packgrid.f ... - packmsg.f ... - packtext.f ... - pfx.f ... - gen6m.f Generate JT6M waveform - gentone.f Generate tone for JT6M message - gencw.f Generate CW waveform - morse.f Convert ascii to morse dits - gencwid.f Generate a CW ID message - grid2k.f Convert grid locator to integer - interleave63.f Interleave JT65 symbols - - gcom1.f90 Global commons for sharing data among Fortran routines - gcom2.f90 and between Fortran and Python - gcom3.f90 - gcom4.f90 - - makedate.f90 Gererates makedate_sub.f90 - - Astronomical calculations: - - astro.f Computes Az, El, Doppler for Sun, Moon, etc. - astropak.f "Includes" for astro supoport routines - azdist.f Computes azimuth, distance, etc., between two locators - coord.f Spherical trig utility - dcoord.f Spherical trig utility in double precision - deg2grid.f Convert lat/long (degrees) to grid locator - dot.f Compute dot product - ftsky.f Get sky temperature from data file - geocentric.f Convert geodetic to geocentric coords - GeoDist.f Compute azimuth and distance between two locators - grid2deg.f Convert grid locator to lat/long - moon2.f Compute moon location at specified date and time - MoonDop.f Compute lunar doppler shift and related quantities - sun.f Compure sun location at specified date and time - toxyz.f Convert between polar and cartesian coords - - Utilities: - db.f Compute decibels from ratio - gasdev.f Generate Gaussian random numbers - igray.f Gray code - indexx.f Sort routine - set.f Move, add, zero, ... - pctile.f Sort an array and get specified percentile - ran1.f Uniform random numbers - rfile2.f Read a binary file (Linux) - sort.f Sort an array - - FFTs: - fftw3.f Fortran definitions for FFTW - four2a.f Wrapper to make FFTW look like four2 - four2.f FFT in Fortran (a;ternative to using FFTW) - ps.f Compute power spectrum - xfft.f Real to complex FFT wrapper - - - Routines for Decoding: - wsjt1.f Top-level decoding routine; handles FSK441 especially - avesp2.f Computes average spectrum - bzap.f Find and remove birdies - detect.f Measure power in FSK441 tones - flatten.f Flatten the spectrum - longx.f Decode normal FSK441 messages - lpf1.f Quick-and-dirty lowpass filter - mtdecode.f Multi-tone decoding - ping.f Find pings - s2shape.f Flatten the 2d spectrum - smooth.f Smooth by boxcar averaging - spec2d.f Compute 2d spectrum for FSK441 - stdecode.f Decode FSK441 shorthand messages - sync.f Synchronize FSK441 data - - wsjt65.f JT65 decoder - afc65.f AFC for JT65 - avemsg65.f Decode average message - decode65.f Decode JT65 message - deep65.f Deep search decoder - demod64a.f Compute probabilities of transmitted symbols - extract.f Extract message from JT65 symbol probabilities - flat1.f Flatten the passband - getsnr.f Compute snr or shorthand message - k2grid.f Convert integer to 4-digit grid locator - limit.f Clipper for JT65 - peakup.f Interpolate to find fractional-bin peak - setup65.f Initialize pseudorandom sync vector - short65.f Detect JT65 shorthand messages - slope.f Remove a straight-line slope - spec2d65.f Compute 2d spectrum for JT65 - spec441.f Compute spectra for FSK441 decoding - sync65.f Synchronize a JT65 signal - unpackcall.f Unpack JT65 message parts ... - unpackgrid.f ... - unpackmsg.f ... - unpacktext.f ... - xcor.f Compute cross-correlation for JT65 sync - - decode6m.f Decode JT65 signal - syncf0.f First frequency sync - syncf1.f Second freq sync - synct.f First time sync - avemsg6m.f Get average JT65 message - - JT65code.f Program to illustrate and test JT65 coding - - Hard-Decision Reed Solomon Codec - decode_rs.c Decoder - encode_rs.c Encoder - init_rs.c Initialization routine - wrapkarn.c Wapper for Fortran - - cutil.c Fortran wrappers for some basic C functions - jtaudio.c Audio I/O, calls PortAudio routines - padevsub.c Select desired audio device - ptt.c PTT via serial port DTR/RTS - ptt_linux.c Ditto for Linux (dummy at present) - resample.c Wrapper for resample routine - start_threads.c Start audio and decoder threads - - -7 Compiling Instructions ----------------------------------------------------------------------- -Scripts are provided for compiling WSJT in both Windows and Linux. -They are presently set up to use Compaq Visual Fortran (v6.6) and -Microsoft C (v6.0) in Windows, and g95 and gcc in Linux. My -installation has Python 2.3. Additional tools include f2py, which -compiles Fortran and C to make Python extensions; the Python Imaging -Library; Numeric Python; and the SciPy distribution utilities. - -Linux Windows Function -------------------------------------------------------------------- - g0 g0.bat Compiles the hard-decision Reed Solomon Decoder - Needs to be done only once. - g1 g1.bat Compiles the remaining Fortran and C to produce Python - extension module audio.pyd (Windows) or audio.so - (Linux). - g2 g2.bat Uses McMillan Installer to create an f2py specification - file, wsjt.spec - g3 g3.bat Uses Installer to produce a distributable file WSJT6.EXE - (Windows). - g99 g99.bat Runs all of the g[0-3] scripts. - -These steps produce a distributable file WSJT6.EXE (Windows) or wsjt6 -(Linux) that contains all necessary software components, so that the -end user does not need to install Python or any of its other -extensions, or the compilers. - -A configuration script and Makefile facility is also provided. -Assuming that all of the pre-requisites are properly installed, WSJT -can now be compiled in Windows as follows: - - C> copy Makefile.win Makefile - C> nmake - -In Linux or FreeBSD, do the following: - - $ ./configure --enable-portaudio (or --enable-alsa or --enable-oss) - $ make - - -8 Present status (January 17, 2006) ----------------------------------------------------------------------- - -WSJT version 5.9.2 (built from SVN revision 115) has been released for -Windows. It is is fully functional in Linux and BSD, as well, but -presently need to be compiled locally. In due course we plan to -provide distributions for standard *nix distributions. - - diff --git a/WSJT_User_600.pdf b/WSJT_User_600.pdf deleted file mode 100644 index c8bdccaa7..000000000 Binary files a/WSJT_User_600.pdf and /dev/null differ diff --git a/abc441.F90 b/abc441.F90 deleted file mode 100644 index a95789feb..000000000 --- a/abc441.F90 +++ /dev/null @@ -1,30 +0,0 @@ -subroutine abc441(msg,nmsg,itone,ndits) - - character msg*28 - integer itone(84) - integer lookup(0:91) - character cc*43 - data cc/' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.,?/#$'/ - data lookup/13, 15, 17, 46, 47, 45, 44, 12, 11, 14, & - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, & - 16, 48, 18, 19, 20, 21, 22, 23, 24, 25, & - 26, 27, 15, 29, 30, 14, 16, 42, 46, 35, & - 36, 37, 21, 0, 11, 41, 10, 13, 43, 1, & - 2, 3, 4, 5, 6, 7, 8, 9, 49, 56, & - 52, 55, 54, 12, 63, 17, 18, 19, 20, 44, & - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, & - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, & - 45, 63/ - save - - do i=1,nmsg - n=ichar(msg(i:i)) - if(n.lt.0 .or. n.gt.91) n=32 !Replace illegal char with blank - n=lookup(n) - itone(3*i-2)=n/16 + 1 - itone(3*i-1)=mod(n/4,4) + 1 - itone(3*i)=mod(n,4) + 1 - enddo - ndits=3*nmsg - return -end subroutine abc441 diff --git a/avemsg6m.f b/avemsg6m.f deleted file mode 100644 index 5d3d7fe46..000000000 --- a/avemsg6m.f +++ /dev/null @@ -1,110 +0,0 @@ - subroutine avemsg6m(s2db,nz,nslim,NFixLen,cfile6,lcum, - + f0,lumsg,npkept) - -C Attempts to find message length and then decodes an average message. - - real s2db(0:43,nz) - real s2dc(0:43,22) - real wgt(22) - real acf(0:430) - logical lcum - character*43 pua - character*6 cfile6 - character*22 avemsg,blanks - data pua/'0123456789., /#?$ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ - data blanks/' '/ - data twopi/6.283185307/ - data offset/20.6/ - -C Adjustable sig limit, depending on length of data to average. - nslim2=nslim - 9 + 4.0*log10(624.0/nz) !### +10 was here - - k=0 - sum=0. - nsum=0 - do j=1,nz - if(mod(j,3).eq.1) then - sum=sum+s2db(0,j) !Measure avg sig strength for sync tone - nsum=nsum+1 - else - k=k+1 - call move(s2db(0,j),s2db(0,k),44) !Save data spectra - endif - enddo - sig=sum/nsum !Signal strength estimate - nsig=nint(db(sig)-offset) - -C Most of the time in this routine is in this loop. - kz=k - do lag=0,kz-1 - sum=0. - do j=1,kz-lag - do i=0,43 - sum=sum+s2db(i,j)*s2db(i,j+lag) - enddo - enddo - acf(lag)=sum - enddo - acf0=acf(0) - do lag=0,kz-1 - acf(lag)=acf(lag)/acf0 - enddo - - lmsg1=NFixLen/256 - lmsg2=NFixLen-256*lmsg1 - if(mod(lmsg1,2).eq.1) lmsg1=lmsg1+1 - if(mod(lmsg2,2).eq.1) lmsg2=lmsg2+1 - smax=-1.e9 - do ip=4,22,2 !Compute periodogram for allowed msg periods - if(NFixLen.ne.0 .and. ip.ne.4 .and. ip.ne.lmsg1 - + .and. ip.ne.lmsg2) go to 5 - f=1.0/ip - s=0. - do lag=0,kz-1 - s=s+acf(lag)*cos(twopi*f*lag) - enddo - if(s.gt.smax) then - smax=s - msglen=ip !Save best message length - endif - 5 enddo - -C Average the symbols from s2db into s2dc. - - call zero(s2dc,44*22) - call zero(wgt,22) - do j=1,kz - k=mod(j-1,msglen)+1 - call add(s2db(0,j),s2dc(0,k),s2dc(0,k),44) - wgt(k)=wgt(k)+1.0 - enddo - - do j=1,msglen !Hard-decode the avg msg, - smax=-1.e9 !picking max bin for each char - do i=1,43 - s2dc(i,j)=s2dc(i,j)/wgt(j) - if(s2dc(i,j).gt.smax) then - smax=s2dc(i,j) - ipk=i - endif - enddo - k=mod(ipk,3) - i=ipk - avemsg(j:j)=pua(i:i) - enddo - ndf0=nint(f0-1076.66) - do i=1,msglen - if(avemsg(i:i).eq.' ') goto 10 - enddo - go to 20 - 10 avemsg=avemsg(i+1:msglen)//avemsg(1:i) - 20 if(nsig.gt.nslim2) then - npkept=npkept+1 - avemsg=avemsg(1:msglen)//blanks - write(lumsg,1020) cfile6,nsig,ndf0,avemsg,msglen - if(lcum) write(21,1020) cfile6,nsig,ndf0,avemsg,msglen - 1020 format(a6,8x,i6,i5,7x,a22,19x,'*',i4) - endif - - return - end diff --git a/blanker.f90 b/blanker.f90 deleted file mode 100644 index cb3ed6476..000000000 --- a/blanker.f90 +++ /dev/null @@ -1,18 +0,0 @@ -subroutine blanker(d2d,jz) - - integer*2 d2d(jz) - - avg=700. - threshold=5.0 - do i=1,jz - xmag=abs(d2d(i)) - xmed=0.75*xmed + 0.25*d2d(i) - avg=0.999*avg + 0.001*xmag - if(xmag.gt.threshold*avg) then -! d2d(i)=nint(xmed) - d2d(i)=0 - endif - enddo - - return -end subroutine blanker diff --git a/decode3.F90 b/decode3.F90 index 6bf94962c..e28f464ff 100644 --- a/decode3.F90 +++ b/decode3.F90 @@ -37,8 +37,6 @@ subroutine decode3(d2,jz,istart,filename) d2d(i)=d2(i) enddo - if(nblank.ne.0) call blanker(d2d,jz) - nseg=1 if(mode(1:4).eq.'JT65') then i=index(FileID,'.')-3 @@ -78,23 +76,7 @@ subroutine decode3(d2,jz,istart,filename) nclearave=0 nagain=0 - if(mode(1:4).eq.'JT65') then - call pix2d65(d2d,jz) - else if(mode.eq.'FSK441') then - nz=s2(1,1) - call pix2d(d2d,jz,mousebutton,MouseDF,NFreeze,mode,s2,64,nz,b) - else if(mode(1:4).eq.'JT6M' .and. mousebutton.eq.0) then - nz=s2(1,1) - call pix2d(d2d,jz,mousebutton,MouseDF,NFreeze,mode,s2,64,nz,b) - endif - -! Compute red and magenta cutves for small plot area, FSK441/JT6M only - if(mode.eq.'FSK441' .or. mode.eq.'JT6M') then - do i=1,128 - if(mode.eq.'FSK441' .and. ps0(i).gt.0.0) ps0(i)=10.0*log10(ps0(i)) - if(psavg(i).gt.0.0) psavg(i)=10.0*log10(psavg(i)) - enddo - endif + call pix2d65(d2d,jz) 999 return end subroutine decode3 diff --git a/decode6m.f b/decode6m.f deleted file mode 100644 index 73a358b90..000000000 --- a/decode6m.f +++ /dev/null @@ -1,159 +0,0 @@ - subroutine decode6m(data,jz,cfile6,MinSigdB,istart, - + NFixLen,lcum,f0,lumsg,npkept,yellow) - -C Decode a JT6M message. Data must start at the beginning of a -C sync symbol; sync frequency is assumed to be f0. - - parameter (NMAX=30*11025) - real data(jz) !Raw data - real s2db(0:43,646) !Spectra of symbols -c real s2(128,646) - real syncsig(646) - real yellow(216) - real ref(0:43) - logical lcum - character*43 pua - character*48 msg - character*6 cfile6 - real*8 dpha,twopi - complex*16 z,dz - complex zz - complex ct(0:511) - complex c - common/hcom/c(NMAX) - data pua/'0123456789., /#?$ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ - data offset/20.6/ - - ps(zz)=real(zz)**2 + aimag(zz)**2 !Power spectrum function - -C Convert data to baseband (complex result) using quadrature LO. - twopi=8*atan(1.d0) - dpha=twopi*f0/11025.d0 - dz=cmplx(cos(dpha),-sin(dpha)) - z=1.d0/dz - do i=1,jz - z=z*dz - c(i)=data(i)*z - enddo - -C Get spectrum for each symbol. -C NB: for decoding pings, could do FFTs first for sync intervals only, -C and then for data symbols only where the sync amplitude is above -C threshold. However, for the average message we want all FFTs computed. - - call zero(ref,44) - - nz=jz/512 - 1 - fac=1.0/512.0 - do j=1,nz - i0=512*(j-1) + 1 - do i=0,511 - ct(i)=fac*c(i0+i) - enddo - call four2a(ct,512,1,-1,1) - -C Save PS for each symbol - do i=0,127 - xps=ps(ct(i)) - if(i.le.43) s2db(i,j)=xps -c s2(i+1,j)=xps - enddo - if(mod(j,3).eq.1) call add(ref,s2db(0,j),ref,44) !Accumulate ref spec - enddo - -C Return sync-tone amplitudes for plotting. - iz=nz/3 -1 - do i=1,iz - j=3*i-2 - yellow(i)=s2db(0,j)-0.5*(s2db(0,j+1)+s2db(0,j+2)) - enddo - yellow(216)=iz - - fac=3.0/nz - do i=0,43 !Normalize the ref spectrum - ref(i)=fac*ref(i) - enddo - ref(0)=ref(2) !Sync bin uses bin 2 as ref - - do j=1,nz !Compute strength of sync - m=mod(j-1,3) !signal at each j. - ja=j-m-3 - jb=ja+3 - if(ja.lt.1) ja=ja+3 - if(jb.gt.nz) jb=jb-3 - syncsig(j)=0.5*(s2db(0,ja)+s2db(0,jb))/ref(0) - syncsig(j)=db(syncsig(j)) - offset - do i=0,43 !Normalize s2db - s2db(i,j)=s2db(i,j)/ref(i) - enddo - enddo - -C Decode any message of 2 or more consecutive characters bracketed by -C sync-tones above a threshold. -C Use hard-decoding (i.e., pick max bin). - - nslim=MinSigdB !Signal limit for decoding - ndf0=nint(f0-1076.77) !Freq offset DF, in Hz - n=0 !Number of decoded characters - j0=0 - sbest=-1.e9 - do j=2,nz-1,3 - if(syncsig(j).ge.float(nslim)) then - -C Is it time to write out the results? - if((n.eq.48) .or. (j.ne.j0+3 .and. j0.ne.0)) then - nsig=nint(sbest) - width=(512./11025.)*(1.5*n+1.0) - if(nsig.ge.nslim) then - npkept=npkept+1 - write(lumsg,1010) cfile6,tping,width, - + nsig,ndf0,(msg(k:k),k=1,n) - if(lcum) write(21,1010) cfile6,tping,width, - + nsig,ndf0,(msg(k:k),k=1,n) - 1010 format(a6,2f5.1,i4,i5,6x,48a1) !### 6x was 7x ### - endif - n=0 - sbest=-1.e9 - endif - j0=j - smax1=-1.e9 - do i=1,43 !Pick max bin for 1st char - if(s2db(i,j).gt.smax1) then - smax1=s2db(i,j) - ipk=i - endif - enddo - n=n+1 - if(n.eq.1) tping=j*512./11025. + (istart-1)/11025.0 !Start of ping - msg(n:n)=pua(ipk:ipk) !Decoded character - - smax2=-1.e9 - do i=1,43 - if(s2db(i,j+1).gt.smax2) then - smax2=s2db(i,j+1) - ipk=i - endif - enddo - n=n+1 - msg(n:n)=pua(ipk:ipk) - sig0=10.0**(0.1*(syncsig(j)+offset)) - sig=db(0.5*sig0 + 0.25*(smax1+smax2))-offset - sbest=max(sbest,sig) - endif - enddo - - nsig=nint(sbest) - width=(512./11025.)*(1.5*n+1.0) - if(n.ne.0 .and. nsig.ge.nslim) then - npkept=npkept+1 - write(lumsg,1010) cfile6,tping, - + width,nsig,ndf0,(msg(k:k),k=1,n) - if(lcum) write(21,1010) cfile6,tping, - + width,nsig,ndf0,(msg(k:k),k=1,n) - endif - -C Decode average message for the whole record. - call avemsg6m(s2db,nz,nslim,NFixLen,cfile6,lcum,f0,lumsg,npkept) - - return - end diff --git a/g0 b/g0 deleted file mode 100755 index 6d67b0f98..000000000 --- a/g0 +++ /dev/null @@ -1,3 +0,0 @@ -gcc -c -DBIGSYM=1 init_rs.c -gcc -c -DBIGSYM=1 encode_rs.c -gcc -c -DBIGSYM=1 decode_rs.c diff --git a/g1 b/g1 deleted file mode 100755 index df7a3b19b..000000000 --- a/g1 +++ /dev/null @@ -1,5 +0,0 @@ -G95=/usr/local/bin/g95 -COMPILER=//usr/local/lib/gcc-lib/i386-unknown-freebsd5.4/4.0.1/ -python f2py.py -c --quiet --opt="-O -cpp -DFreeBSD -fno-second-underscore" init_rs.o encode_rs.o decode_rs.o -m Audio --f77exec=$G95 --f90exec=$G95 -L$COMPILER -lpthread -lg2c only: ftn_init ftn_quit audio_init spec getfile azdist0 astro0 : a2d.f90 abc441.f90 astro0.f90 audio_init.f90 azdist0.f90 blanker.f90 decode1.f90 decode2.f90 decode3.f90 ftn_init.f90 ftn_quit.f90 get_fname.f90 getfile.f90 horizspec.f90 hscroll.f90 i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.f90 spec.f90 wsjtgen.f90 runqqq.f90 wsjt1.f fsubs1.f fsubs.f astro.f astropak.f jtaudio.c ptt_bsd.c igray.c wrapkarn.c start_threads.c cutil.c fivehz.f90 - - diff --git a/g99 b/g99 deleted file mode 100755 index db8221b3a..000000000 --- a/g99 +++ /dev/null @@ -1,4 +0,0 @@ -g0 -g1 -g2 -g3 diff --git a/gen6m.f b/gen6m.f deleted file mode 100644 index 4ace9e33f..000000000 --- a/gen6m.f +++ /dev/null @@ -1,49 +0,0 @@ - subroutine gen6m(msg,samfac,iwave,nwave) - -C Encodes a message into a wavefile for transmitting JT6M signals. - - parameter (NMAX=21504) !NMAX=28*512*3/2: number of waveform samples - character*28 msg !Message to be generated - real*8 samfac - real*4 x(NMAX) !Data for wavefile - integer*2 iwave(NMAX) !Generated wave file - integer*4 imsg(28) - - do i=27,1,-1 !Get message length - if(msg(i:i).ne.' ') go to 10 - enddo - i=1 - 10 nmsg=i+1 - if(mod(nmsg,2).eq.1) nmsg=nmsg+1 !Make it even - - nwave=nmsg*512*3/2 - do m=1,nmsg !Get character code numbers - ic=m - n=ichar(msg(ic:ic)) -C Calculate i in range 0-42: - if(n.ge.ichar('0') .and. n.le.ichar('9')) i=n-ichar('0') - if(msg(ic:ic).eq.'.') i=10 - if(msg(ic:ic).eq.',') i=11 - if(msg(ic:ic).eq.' ') i=12 - if(msg(ic:ic).eq.'/') i=13 - if(msg(ic:ic).eq.'#') i=14 - if(msg(ic:ic).eq.'?') i=15 - if(msg(ic:ic).eq.'$') i=16 - if(n.ge.ichar('a') .and. n.le.ichar('z')) i=n-ichar('a')+17 - if(n.ge.ichar('A') .and. n.le.ichar('Z')) i=n-ichar('A')+17 - imsg(m)=i - enddo - - k=1 - do i=1,nmsg,2 - call gentone(x(k),-1,k) !Generate a sync tone - call gentone(x(k),imsg(i),k) !First character - call gentone(x(k),imsg(i+1),k) !Second character - enddo - - do i=1,nwave - iwave(i)=nint(32767.0*x(i)) - enddo - - return - end diff --git a/glpr b/glpr deleted file mode 100644 index e3541b8a2..000000000 --- a/glpr +++ /dev/null @@ -1,92 +0,0 @@ -lpr astro.f -lpr Audio.f90 -lpr avemsg65.f -lpr avemsg6m.f -lpr avesp2.f -lpr azdist.f -lpr bzap.f -lpr chkmsg.f -lpr coord.f -lpr db.f -lpr dcoord.f -lpr decode65.f -lpr decode6m.f -lpr deep65.f -lpr deg2grid.f -lpr demod64a.f -lpr detect.f -lpr dot.f -lpr encode65.f -lpr extract.f -lpr fivehz.f90 -lpr flat1.f -lpr flat2.f -lpr flatten.f -lpr four2a.f -lpr fsubs1.f -lpr fsubs.f -lpr ftsky.f -lpr gasdev.f -lpr gen65.f -lpr gen6m.f -lpr gencw.f -lpr gentone.f -lpr geocentric.f -lpr geodist.f -lpr getpfx1.f -lpr getpfx2.f -lpr getsnr.f -lpr graycode.f -lpr grid2deg.f -lpr grid2k.f -lpr igray.f -lpr indexx.f -lpr interleave63.f -lpr jtaudio.c -lpr k2grid.f -lpr limit.f -lpr longx.f -lpr lpf1.f -lpr moon2.f -lpr MoonDop.f -lpr morse.f -lpr mtdecode.f -lpr nchar.f -lpr packcall.f -lpr packgrid.f -lpr packmsg.f -lpr packtext.f -lpr pctile.f -lpr peakup.f -lpr ping.f -lpr ps.f -lpr ptt.c -lpr ran1.f -lpr resample.c -lpr s2shape.f -lpr set.f -lpr setup65.f -lpr short65.f -lpr slope.f -lpr smooth.f -lpr sort.f -lpr spec2d65.f -lpr spec2d.f -lpr spec441.f -lpr stdecode.f -lpr sun.f -lpr sync65.f -lpr sync.f -lpr syncf0.f -lpr syncf1.f -lpr synct.f -lpr toxyz.f -lpr unpackcall.f -lpr unpackgrid.f -lpr unpackmsg.f -lpr unpacktext.f -lpr wrapkarn.c -lpr wsjt1.f -lpr wsjt65.f -lpr xcor.f -lpr xfft.f diff --git a/go b/go deleted file mode 100755 index 3a55c607d..000000000 --- a/go +++ /dev/null @@ -1,3 +0,0 @@ -gcc -c wrapkarn.c -gcc -c igray.c -f77 -o JT65code -fno-second-underscore JT65code_all.f igray.o wrapkarn.o init_rs.o encode_rs.o decode_rs.o diff --git a/horizspec.f90 b/horizspec.f90 deleted file mode 100644 index 217263fa6..000000000 --- a/horizspec.f90 +++ /dev/null @@ -1,88 +0,0 @@ - -!------------------------------------------------------ horizspec -subroutine horizspec(x,brightness,contrast,a) - - real x(4096) - integer brightness,contrast - integer*2 a(750,300) - real y(512),ss(128) - complex c(0:256) - equivalence (y,c) - include 'gcom1.f90' - include 'gcom2.f90' - save - - nfft=512 - nq=nfft/4 - gain=50.0 * 3.0**(0.36+0.01*contrast) - offset=0.5*(brightness+30.0) - df=11025.0/512.0 - if(ntr.ne.ntr0) then - if(lauto.eq.0 .or. ntr.eq.TxFirst) then - call hscroll(a,nx) - nx=0 - endif - ntr0=ntr - endif - - i0=0 - do iter=1,5 - if(nx.lt.750) nx=nx+1 - do i=1,nfft - y(i)=1.4*x(i+i0) - enddo - call xfft2(y,nfft) - nq=nfft/4 - do i=1,nq - ss(i)=real(c(i))**2 + aimag(c(i))**2 - enddo - - p=0. - do i=21,120 - p=p+ss(i) - n=0 - if(ss(i).gt.0.) n=gain*log10(0.05*ss(i)) + offset - n=min(252,max(0,n)) - j=121-i - a(nx,j)=n - enddo - if(nx.eq.7 .or. nx.eq.378 .or. nx.eq.750) then -! Put in yellow ticks at the standard tone frequencies for FSK441, or -! at the sync-tone frequency for JT65, JT6M. - do i=nx-4,nx - if(mode.eq.'FSK441') then - do n=2,5 - j=121-nint(n*441/df) - a(i,j)=254 - enddo - else if(mode(1:4).eq.'JT65') then - j=121-nint(1270.46/df) - a(i,j)=254 - else if(mode.eq.'JT6M') then - j=121-nint(1076.66/df) - a(i,j)=254 - endif - enddo - endif - - ng=140 - 30*log10(0.00033*p+0.001) - ng=min(ng,150) - if(nx.eq.1) ng0=ng - if(abs(ng-ng0).le.1) then - a(nx,ng)=255 - else - ist=1 - if(ng.lt.ng0) ist=-1 - jmid=(ng+ng0)/2 - i=max(1,nx-1) - do j=ng0+ist,ng,ist - a(i,j)=255 - if(j.eq.jmid) i=i+1 - enddo - ng0=ng - endif - i0=i0+441 - enddo - - return -end subroutine horizspec diff --git a/hscroll.f90 b/hscroll.f90 deleted file mode 100644 index ec0cc78dc..000000000 --- a/hscroll.f90 +++ /dev/null @@ -1,14 +0,0 @@ - -!------------------------------------------------- hscroll -subroutine hscroll(a,nx) - integer*2 a(750,300) - - do j=1,150 - do i=1,750 - if(nx.gt.50) a(i,150+j)=a(i,j) - a(i,j)=0 - enddo - enddo - return - -end subroutine hscroll diff --git a/longx.f b/longx.f deleted file mode 100644 index c45e07d79..000000000 --- a/longx.f +++ /dev/null @@ -1,128 +0,0 @@ - subroutine longx(dat,npts0,ps,DFTolerance,noffset, - + msg,msglen,bauderr) - -C Look for 441-baud modulation, synchronize to it, and decode message. -C Longest allowed data analysis is 1 second. - - parameter (NMAX=11025) - parameter (NDMAX=NMAX/25) - real dat(npts0) - real ps(128),psmo(20) - integer DFTolerance - real y1(NMAX) - real y2(NMAX) - real y3(NMAX) - real y4(NMAX) - real wgt(-2:2) - integer dit(NDMAX) - integer n4(0:2) - character msg*40 - character c*48 - common/acom/a1,a2,a3,a4 - data c/' 123456789.,?/# $ABCD FGHIJKLMNOPQRSTUVWXY 0EZ '/ - data wgt/1.0,4.0,6.0,4.0,1.0/ - - NSPD=25 !Change if FSK110 is implemented - LTone=2 - NBaud=11025/NSPD - npts=min(NMAX,npts0) - df=11025.0/256.0 - smax=0. - -C Find the frequency offset of this ping. -C NB: this might be improved by including a bandpass correction to ps. - - ia=nint((LTone*NBaud-DFTolerance)/df) - ib=nint((LTone*NBaud+DFTolerance)/df) - - do i=ia,ib !Search for correct DF - sum=0. - do j=1,4 !Sum over the 4 tones - m=nint((i*df+(j-1)*NBaud)/df) - do k=-2,2 !Weighted averages over 5 bins - sum=sum+wgt(k)*ps(m+k) - enddo - enddo - k=i-ia+1 - psmo(k)=sum - kpk=0 - if(sum.gt.smax) then - smax=sum - noffset=nint(i*df-LTone*NBaud) - kpk=k - endif - enddo - - - if(kpk.gt.1 .and. kpk.lt.20) then - call peakup(psmo(kpk-1),psmo(kpk),psmo(kpk+1),dx) - noffset=nint(noffset+dx*df) - endif - -C Do square-law detection in each of four filters. - f1=LTone*NBaud+noffset - f2=(LTone+1)*NBaud+noffset - f3=(LTone+2)*NBaud+noffset - f4=(LTone+3)*NBaud+noffset - call detect(dat,npts,f1,y1) - call detect(dat,npts,f2,y2) - call detect(dat,npts,f3,y3) - call detect(dat,npts,f4,y4) - -C Bandpass correction: - npts=npts-(NSPD-1) - do i=1,npts - y1(i)=y1(i)*a1 - y2(i)=y2(i)*a2 - y3(i)=y3(i)*a3 - y4(i)=y4(i)*a4 - enddo - - call sync(y1,y2,y3,y4,npts,jpk,baud,bauderr) - -C Decimate y arrays by NSPD - ndits=npts/NSPD - 1 - do i=1,ndits - y1(i)=y1(jpk+(i-1)*NSPD) - y2(i)=y2(jpk+(i-1)*NSPD) - y3(i)=y3(jpk+(i-1)*NSPD) - y4(i)=y4(jpk+(i-1)*NSPD) - enddo - -C Now find the mod3 phase that has no tone 3's - n4(0)=0 - n4(1)=0 - n4(2)=0 - do i=1,ndits - ymax=max(y1(i),y2(i),y3(i),y4(i)) - if(y1(i).eq.ymax) dit(i)=0 - if(y2(i).eq.ymax) dit(i)=1 - if(y3(i).eq.ymax) dit(i)=2 - if(y4(i).eq.ymax) then - dit(i)=3 - k=mod(i,3) - n4(k)=n4(k)+1 - endif - enddo - - n4min=min(n4(0),n4(1),n4(2)) - if(n4min.eq.n4(0)) jsync=3 - if(n4min.eq.n4(1)) jsync=1 - if(n4min.eq.n4(2)) jsync=2 -C Might want to notify if n4min>0 or if one of the others is equal -C to n4min. In both cases, could then decode 2 or 3 times, using -C other starting phases. - -C Finally, decode the message. - msg=' ' - msglen=ndits/3 - msglen=min(msglen,40) - do i=1,msglen - j=(i-1)*3+jsync - nc=16*dit(j) + 4*dit(j+1) +dit(j+2) - msg(i:i)=' ' - if(nc.le.47) msg(i:i)=c(nc+1:nc+1) - enddo - - return - end diff --git a/mtdecode.f b/mtdecode.f deleted file mode 100644 index 36622e701..000000000 --- a/mtdecode.f +++ /dev/null @@ -1,144 +0,0 @@ - subroutine mtdecode(dat,jz,nz,MinSigdB,MinWidth, - + NQRN,DFTolerance,istart,pick,cfile6,ps0) - -C Decode Multi-Tone FSK441 mesages. - - real dat(jz) !Raw audio data - integer NQRN - integer DFTolerance - logical pick - character*6 cfile6,cf*1 - - real sigdb(3100) !Detected signal in dB, sampled at 20 ms - real work(3100) - integer indx(3100) - real pingdat(3,100) - real ps(128) - real ps0(128) - character msg*40,msg3*3 - character*90 line - common/ccom/nline,tping(100),line(100) - - slim=MinSigdB - wmin=0.001*MinWidth * (19.95/20.0) - nf1=-DFTolerance - nf2=DFTolerance - msg3=' ' - dt=1.0/11025.0 - -C Find signal power at suitable intervals to search for pings. - istep=221 - dtbuf=istep/11025. - do n=1,nz - s=0. - ib=n*istep - ia=ib-istep+1 - do i=ia,ib - s=s+dat(i)**2 - enddo - sigdb(n)=s/istep - enddo - -!##################################################################### - if(.not.pick) then -! Remove initial transient from sigdb - call indexx(nz,sigdb,indx) - imax=0 - do i=1,50 - if(indx(i).gt.50) go to 10 - imax=max(imax,indx(i)) - enddo - 10 do i=1,50 - if(indx(nz+1-i).gt.50) go to 20 - imax=max(imax,indx(nz+1-i)) - enddo - 20 imax=imax+6 !Safety margin - base1=sigdb(indx(nz/2)) - do i=1,imax - sigdb(i)=base1 - enddo - endif -!################################################################## - - call smooth(sigdb,nz) - -C Remove baseline and one dB for good measure. - call pctile (sigdb,work,nz,50,base1) - do i=1,nz - sigdb(i)=dB(sigdb(i)/base1) - 1.0 - enddo - - call ping(sigdb,nz,dtbuf,slim,wmin,pingdat,nping) - -C If this is a "mouse pick" and no ping was found, force a pseudo-ping -C at center of data. - if(pick.and.nping.eq.0) then - if(nping.le.99) nping=nping+1 - pingdat(1,nping)=0.5*jz*dt - pingdat(2,nping)=0.16 - pingdat(3,nping)=1.0 - endif - - bigpeak=0. - do iping=1,nping -C Find starting place and length of data to be analyzed: - tstart=pingdat(1,iping) - width=pingdat(2,iping) - peak=pingdat(3,iping) - mswidth=10*nint(100.0*width) - jj=(tstart-0.02)/dt - if(jj.lt.1) jj=1 - jjz=nint((width+0.02)/dt)+1 - jjz=min(jjz,jz+1-jj) - -C Compute average spectrum of this ping. - call spec441(dat(jj),jjz,ps,f0) - -C Decode the message. - msg=' ' - call longx(dat(jj),jjz,ps,DFTolerance,noffset,msg, - + msglen,bauderr) - qrnlimit=4.4*1.5**(5.0-NQRN) - if(NQRN.eq.0) qrnlimit=99. - if(msglen.eq.0) go to 100 - -C Assemble a signal report: - nwidth=0 - if(width.ge.0.04) nwidth=1 !These might depend on NSPD - if(width.ge.0.12) nwidth=2 - if(width.gt.1.00) nwidth=3 - nstrength=6 - if(peak.ge.11.0) nstrength=7 - if(peak.ge.17.0) nstrength=8 - if(peak.ge.23.0) nstrength=9 - -! if(peak.gt.5.0 .and.mswidth.ge.100) then -! call specsq(dat(jj),jjz,DFTolerance,0,noffset2) -! noffset=noffset2 -! endif - -C Discard this ping if DF outside tolerance limits or bauderr too big. -C (However, if the ping was mouse-picked, proceed anyway.) - - if(.not.pick .and. ((noffset.lt.nf1 .or. noffset.gt.nf2) .or. - + (abs(bauderr).gt.qrnlimit))) goto 100 - -C If it's the best ping yet, save the spectrum: - if(peak.gt.bigpeak) then - bigpeak=peak - do i=1,128 - ps0(i)=ps(i) - enddo - endif - - tstart=tstart + dt*(istart-1) - cf=' ' - if(nline.le.99) nline=nline+1 - tping(nline)=tstart - write(line(nline),1050) cfile6,tstart,mswidth,int(peak), - + nwidth,nstrength,noffset,msg3,msg,cf - 1050 format(a6,f5.1,i5,i3,1x,2i1,i5,1x,a3,1x,a40,1x,a1) - 100 enddo - - return - end diff --git a/pix2d.f90 b/pix2d.f90 deleted file mode 100644 index 26d6eefbc..000000000 --- a/pix2d.f90 +++ /dev/null @@ -1,136 +0,0 @@ -subroutine pix2d(d2,jz,mousebutton,mousedf,nfreeze,mode,s2,nchan,nz,b) - -! Compute pixels to represent the 2-d spectrum s2(nchan,nz), and the -! green line. - - integer*2 d2(jz) !Raw input data - character*6 mode - real s2(nchan,nz) !2-d spectrum - integer*2 b(60000) !Pixels corresponding to 2-d spectrum - data nx0/0/ - save - - tbest=s2(2,1) - s2(1,1)=s2(3,1) - s2(2,1)=s2(3,1) - - gain=100. - offset=0.0 - - if(mousebutton.eq.0) then - k=0 - do i=54,7,-1 - do j=1,nz - k=k+1 - n=0 - if(s2(i,j).gt.0) n=gain*log10(s2(i,j)) + offset - n=min(252,max(0,n)) - b(k)=n - enddo - k=k+500-nz - enddo - do i=k+1,60000 - b(i)=0 - enddo - - else -! This is a mouse-picked decode, so we compute the "zoomed" region. - k=50*500 - do i=54,7,-1 - do j=1,nz - k=k+1 - n=0 - if(s2(i,j).gt.0) n=gain*log10(s2(i,j)) + offset - n=min(252,max(0,n)) - b(k)=n - enddo - k=k+500-nz - enddo - endif - - if(mousebutton.eq.0) then -! Compute the green curve - sum=0. - do i=1,jz - sum=sum+d2(i) - enddo - nave=nint(sum/jz) - nadd=661 - ngreen=min(jz/nadd,500) - k=0 - j=0 - do i=1,ngreen - sq=0. - do n=1,nadd - k=k+1 - d2(k)=d2(k)-nave - x=d2(k) - sq=sq + x*x - enddo - x=0.0001*sq/nadd - j=j+1 - x=120.0-40.0*log10(0.01*x) - if(x.lt.1.0) x=1.0 - if(x.gt.119.) x=119. - ng=nint(x) - ng=min(ng,120) - nx=i - if(nx.eq.1) ng0=ng - if(abs(ng-ng0).le.1) then - b((ng-1)*500+nx)=255 - else - ist=1 - if(ng.lt.ng0) ist=-1 - jmid=(ng+ng0)/2 - ii=max(1,nx-1) - do j=ng0+ist,ng,ist - b((j-1)*500+ii)=255 - if(j.eq.jmid) ii=ii+1 - enddo - ng0=ng - endif - enddo - - if(mode.eq.'FSK441') then -! Insert yellow tick marks at frequencies of the FSK441 tones - do i=2,5 - f=441*i - ich=58-nint(f/43.066) - do j=1,5 - b((ich-1)*500+j+2)=254 - b((ich-1)*500+j+248)=254 - b((ich-1)*500+j+495)=254 - enddo - enddo - else if(mode.eq.'JT6M') then -! Insert yellow tick marks at frequencies of the JT6M sync tone - f=1076.66 - ich=60-nint(f/43.066) !Why 58 for FSK441, above? - do j=1,5 - b((ich-1)*500+j+2)=254 - b((ich-1)*500+j+248)=254 - b((ich-1)*500+j+495)=254 - enddo -! Insert green tick at frequency indicated by MouseDF - if(NFreeze.gt.0) then - f=1076.66+mousedf - ich=60-nint(f/43.066) !Why 58 for FSK441, above? - do j=1,7 - b((ich-1)*500+j+2)=255 - enddo - endif - endif - -! Mark the best ping with a red tick - if(tbest.gt.0.0) then - nx=tbest/0.060 + 1 - do j=110,120 - b((j-1)*500+nx0)=0 - b((j-1)*500+nx)=253 - enddo - nx0=nx - endif - endif - - return -end subroutine pix2d diff --git a/spec.f90 b/spec.f90 index c5d7757e9..1cf321469 100644 --- a/spec.f90 +++ b/spec.f90 @@ -63,10 +63,6 @@ subroutine spec(brightness,contrast,logmap,ngain,nspeed,a) npts=jzc/2048 npts=2048*npts kread=0 - if(nspeed.ge.6) then - call hscroll(a,nx) - nx=0 - endif endif if(npts.lt.0) npts=npts+nmax if(npts.lt.nfft) go to 900 !Not enough data available @@ -118,20 +114,6 @@ subroutine spec(brightness,contrast,logmap,ngain,nspeed,a) endif endif - if(nspeed.ge.6) then - call horizspec(x,brightness,contrast,a) - ncall=Mod(ncall+1,5) - if(ncall.eq.1 .or. nspeed.eq.7) newdat=1 - if(ndiskdat.eq.1) then - npts=jzc-kread - else - npts=iwrite-iread - if(npts.lt.0) npts=npts+nmax - endif - if(npts.ge.4096) go to 10 - go to 900 - endif - call xfft2(x,nfft) do i=1,nh !Accumulate power spectrum diff --git a/spec2d.f b/spec2d.f deleted file mode 100644 index 336bcae5d..000000000 --- a/spec2d.f +++ /dev/null @@ -1,128 +0,0 @@ - subroutine spec2d(data,jz,nstep,s2,nchan,nz,psavg0,sigma) - -C Computes 2d spectrogram for FSK441 single-tone search and waterfall -C display. - - parameter (NFFT=256) - parameter (NR=NFFT+2) - parameter (NH=NFFT/2) - parameter (NQ=NFFT/4) - - real data(jz) - real s2(nchan,nz) - real x(NR) - real w1(7),w2(7) - real psavg(128) - real psavg0(128) - real ps2(128) - complex c(0:NH) - common/acom/a1,a2,a3,a4 - common/fcom/s(3100),indx(3100) - equivalence (x,c) - save - - df=11025.0/NFFT - -C Compute the 2d spectrogram s2(nchan,nz). Note that in s2 the frequency -C bins are shifted down 5 bins from their natural positions. - - call set(0.0,psavg,NH) - do n=1,nz - j=1 + (n-1)*nstep - call move(data(j),x,NFFT) - call xfft(x,NFFT) - - sum=0. - do i=1,NQ - s2(i,n)=real(c(5+i))**2 + aimag(c(5+i))**2 - sum=sum+s2(i,n) - enddo - s(n)=sum/NQ - -C Accumulate average spectrum for the whole file. - do i=1,nh - psavg0(i) = psavg0(i)+ real(c(i))**2 + aimag(c(i))**2 - enddo - enddo - -C Normalize and save a copy of psavg0 for plotting. Roll off the -C spectrum at 300 and 3000 Hz. - do i=1,nh - psavg0(i)=3.e-5*psavg0(i)/nz - f=df*i - fac=1.0 - if(f.lt.300.0) fac=f/300.0 - if(f.gt.3000.0) fac=max(0.00333,(3300.0-f)/300.0) - psavg0(i)=(fac**2)*psavg0(i) - enddo - -C Compute an average spectrum from the weakest 25% of time slices. - call indexx(nz,s,indx) - call zero(ps2,NQ) - do j=1,nz/4 - k=indx(j) - do i=1,NQ - ps2(i+5)=ps2(i+5)+s2(i,k) - enddo - enddo - ps2(1)=ps2(5) - ps2(2)=ps2(5) - ps2(3)=ps2(5) - ps2(4)=ps2(5) - sum=0. - do i=6,59 - sum=sum+ps2(i) - enddo - if(sum.eq.0.0) then - sigma=-999. - go to 999 - endif - -C Compute a smoothed spectrum without local peaks, and find its max. - smaxx=0. - do i=4,NQ - sum=0. - do k=1,7 - w1(k)=ps2(i+k-4) - sum=sum+w1(k) - enddo - ave=sum/7.0 - if(i.ge.14 .and. i.le.58) then - call pctile(w1,w2,7,50,base) - ave=0.25*(w2(1)+w2(2)+w2(3)+w2(4)) - endif - psavg(i)=ave - smaxx=max(psavg(i),smaxx) - enddo - -C Save scale factors for flattening spectra of pings. - a1=1.0 - a2=psavg(nint(2*441/df))/psavg(nint(3*441/df)) - a3=psavg(nint(2*441/df))/psavg(nint(4*441/df)) - a4=psavg(nint(2*441/df))/psavg(nint(5*441/df)) - afac=4.0/(a1+a2+a3+a4) - a1=afac*a1 - a2=afac*a2 - a3=afac*a3 - a4=afac*a4 - -C Normalize 2D spectrum by the average based on weakest 25% of time -C slices, smoothed, and with local peaks removed. - - do i=1,NQ - do j=1,nz - s2(i,j)=s2(i,j)/max(psavg(i+5),0.01*smaxx) - enddo - enddo - -C Find average of active spectral region, over the whole file. - sum=0. - do i=9,52 - do j=1,nz - sum=sum+s2(i,j) - enddo - enddo - sigma=sum/(44*nz) - - 999 return - end diff --git a/spec441.f b/spec441.f deleted file mode 100644 index 11fa9f2e1..000000000 --- a/spec441.f +++ /dev/null @@ -1,37 +0,0 @@ - subroutine spec441(dat,jz,s,f0) - -C Computes average spectrum over a range of dat, e.g. for a ping. -C Returns spectral array and frequency of peak value. - - parameter (NFFT=256) - parameter (NR=NFFT+2) - parameter (NH=NFFT/2) - real*4 dat(jz) - real*4 x(NR),s(NH) - complex c(0:NH) - equivalence (x,c) - - call zero(s,NH) - nz=jz/NFFT - do n=1,nz - j=1 + (n-1)*NFFT - call move(dat(j),x,NFFT) - call xfft(x,NFFT) - do i=1,NH - s(i)=s(i)+real(c(i))**2 + aimag(c(i))**2 - enddo - enddo - - smax=0. - df=11025.0/NFFT - fac=1.0/(100.0*nfft*nz) - do i=1,nh - s(i)=fac*s(i) - if(s(i).gt.smax) then - smax=s(i) - f0=i*df - endif - enddo - - return - end diff --git a/syncf0.f b/syncf0.f deleted file mode 100644 index 0ac308db4..000000000 --- a/syncf0.f +++ /dev/null @@ -1,56 +0,0 @@ - subroutine syncf0(data,jz,NFreeze,NTol,jstart,f0,smax) - -C Does 512-pt FFTs of data with 256-pt step size. -C Finds sync tone and determines aproximate values for jstart and f0. - - real data(jz) !Raw data - real s2(128,6) !Average spectra at half-symbol spacings - real x(512) - complex cx(0:511) - complex z - equivalence (x,cx) - - ps(z)=real(z)**2 + aimag(z)**2 !Power spectrum function - - call zero(s2,6*128) !Clear average - df=11025./512. - - ia=(f0-400)/df - ib=(f0+400)/df + 0.999 - if(NFreeze.eq.1) then - ia=(f0-NTol)/df - ib=(f0+Ntol)/df + 0.999 - endif - -C Most of the time in this routine is in this loop. - - nblk=jz/256 - 6 - do n=1,nblk !Accumulate avg spectrum for - j=256*(n-1)+1 !512-pt blocks, stepping by 256 - call move(data(j),x,512) - call xfft(x,512) - do i=ia,ib - x(i)=ps(cx(i)) - enddo - k=mod(n-1,6)+1 - call add(s2(ia,k),x(ia),s2(ia,k),ib-ia+1) !Average at each step - enddo - -C Look for best spectral peak, using the "sync off" phases as reference. - smax=0. - do i=ia,ib - do k=1,6 - k1=mod(k+1,6)+1 - k2=mod(k+3,6)+1 - r=0.5*(s2(i,k1)+s2(i,k2)) - s=s2(i,k)/r - if(s.gt.smax) then - smax=s - jstart=(k-1)*256 + 1 !Best starting place for sync - f0=i*df !Best sync frequency - endif - enddo - enddo - - return - end diff --git a/syncf1.f b/syncf1.f deleted file mode 100644 index 11a909643..000000000 --- a/syncf1.f +++ /dev/null @@ -1,117 +0,0 @@ - subroutine syncf1(data,jz,jstart,f0,NFreeze,DFTolerance,smax,red) - -C Does 16k FFTs of data with stepsize 15360, using only "sync on" intervals. -C Returns a refined value of f0, the sync-tone frequency. - - parameter (NFFT=16384) - parameter (NH=NFFT/2) - parameter (NQ=NFFT/4) - parameter (NB3=3*512) - real data(jz) !Raw data - integer DFTolerance - real x(NFFT) - real red(512) - real s(NQ) !Ref spectrum for flattening and birdie-zapping - - complex c(0:NH) - complex z - equivalence (x,c) - - ps(z)=real(z)**2 + aimag(z)**2 !Power spectrum ASF - -C Accumulate a high-resolution average spectrum - df=11025.0/NFFT - jstep=10*NB3 - nz=(jz-jstart)/jstep -1 - call zero(s,NQ) - do n=1,nz - call zero(x,NFFT) - k=(n-1)*jstep - do i=1,10 - j=(i-1)*NB3 + 1 - call move(data(jstart+k+j),x(j),512) - enddo - call xfft(x,NFFT) - do i=1,NQ - x(i)=ps(c(i)) - enddo - call add(s,x,s,NQ) - enddo - - fac=(1.0/NFFT)**2 - do i=1,NQ !Normalize - s(i)=fac*s(i) - enddo - call smooth(s,NQ) - -C NB: could also compute a "blue" spectrum, using the sync-off intervals. - n8=NQ/8 - do i=1,n8 - red(i)=0. - do k=8*i-7,8*i - red(i)=red(i)+s(k) - enddo - red(i)=10.0*red(i)/(8.0*nz) - enddo - - - dftol=min(DFTolerance,25) - if(nfreeze.eq.1) dftol=DFTolerance -C Find improved value for f0 - smax=0. - ia=(f0-dftol)/df - ib=(f0+dftol)/df + 0.999 -! if(NFreeze.eq.1) then -! ia=(f0-5.)/df -! ib=(f0+5.)/df -! endif - do i=ia,ib - if(s(i).gt.smax) then - smax=s(i) - ipk=i - endif - enddo - f0=ipk*df - -C Remove line at f0 from spectrum -- if it's strong enough. - ia=(f0-150)/df - ib=(f0+150)/df - a1=0. - a2=0. - nsum=50 - do i=1,nsum - a1=a1+s(ia-i) - a2=a2+s(ib+i) - enddo - a1=a1/nsum - a2=a2/nsum - smax=2.0*smax/(a1+a2) - - if(smax.gt.3.0) then - b=(a2-a1)/(ib-ia) - do i=ia,ib - s(i)=a1 + (i-ia)*b - enddo - endif - -C Make a smoothed version of the spectrum. - nsum=50 - fac=1./(2*nsum+1) - call zero(x,nsum) - call zero(s,50) - call zero(s(NQ-nsum),nsum) - sum=0. - do i=nsum+1,NQ-nsum - sum=sum+s(i+nsum)-s(i-nsum) - x(i)=fac*sum - enddo - call zero(x(NQ-nsum),nsum+1) - -C To zap birdies, compare s(i) and x(i). If s(i) is larger by more -C than some limit, replace x(i) by s(i). That will put narrow birdies -C on top of the smoothed spectrum. - - call move(x,s,NQ) !Copy smoothed spectrum into s - - return - end diff --git a/synct.f b/synct.f deleted file mode 100644 index 541e87bc4..000000000 --- a/synct.f +++ /dev/null @@ -1,69 +0,0 @@ - subroutine synct(data,jz,jstart,f0,smax) - -C Gets a refined value of jstart. - - parameter (NMAX=30*11025) - parameter (NB3=3*512) - real data(jz) - real*8 dpha,twopi - complex*16 z,dz - complex c,c1,zz - common/hcom/c(NMAX) - - ps(zz)=real(zz)**2 + aimag(zz)**2 !Power spectrum function - -C Convert data to baseband (complex result) using quadrature LO. - twopi=8*atan(1.d0) - dpha=twopi*f0/11025.d0 - dz=cmplx(cos(dpha),-sin(dpha)) - z=1.d0/dz - do i=1,jz - z=z*dz - c(i)=data(i)*z - enddo - -C Detect zero-beat sync tone in 512-sample chunks, stepped by 1. -C Sums replace original values in c(i). - - zz=0 - do i=1,512 !Compute first sum - zz=zz+c(i) - enddo - c1=c(1) - c(1)=zz - do i=2,jz-512 !Compute the rest recursively - zz=c(i-1)+c(i+511)-c1 - c1=c(i) !Save original value - c(i)=zz !Save the sum - enddo - -C Iterate to find the best jstart. - jstart=jstart+NB3 - nz=(jz-jstart)/NB3 -1 - smax=0. - jstep=256 - jbest=jstart - - 10 jstep=jstep/2 - jstart=jbest - do j=jstart-jstep,jstart+jstep,jstep - s=0. - r=0. - do n=1,nz - k=(n-1)*NB3 + j - s=s + ps(c(k)) - r=r + ps(c(k+512)) + ps(c(k+1024)) - enddo - s=2*s/r !Better to use s/r or s-r? - if(s.gt.smax) then - smax=s - jbest=j - endif - enddo - if(jstep.gt.1) go to 10 - - jstart=jbest - if(jstart.gt.NB3) jstart=jstart-NB3 - - return - end diff --git a/wsjt1.F b/wsjt1.F index 94dbc8063..818d83781 100644 --- a/wsjt1.F +++ b/wsjt1.F @@ -197,116 +197,6 @@ C Intentionally degrade SNR by -nclip dB. goto 900 endif -! If we're in JT6M mode, call the 6M decoding routines. - if(mode.eq.4) then - do i=1,jz !### Why is it level-sensitive? - dat(i)=dat(i)/25.0 - enddo -! For waterfall plot - call spec2d(dat,jz,nstep,s2,nchan,nz,psavg,sigma) - if(sigma.lt.0.0) basevb=-99.0 - if(jz/11025.0.lt.3.9 .or. sigma.lt.0.0) go to 900 - - f0=1076.66 - if(NFreeze.eq.1) f0=1076.66 + MouseDF - f00=f0 - call syncf0(dat,jz,NFreeze,DFTolerance,jstart,f0,smax) - call synct(dat,jz,jstart,f0,smax) - call syncf1(dat,jz,jstart,f0,NFreeze,DFTolerance,smax,red) - - do i=1,512 - ccf(i-6)=dB(red(i)) - enddo - df=11025./256. - do i=1,64 - sum=0. - do k=8*i-7,8*i - sum=sum+red(k) - enddo - psavg(i)=5.0*sum - fac=1.0 - freq=i*df - if(freq.gt.2500.0) fac=((freq-2500.)/20.0)**(-1.0) - psavg(i)=fac*psavg(i) - psavg(i+64)=0.001 - enddo - - jz=jz-jstart+1 - nslim=MinSigdB - NFixLen=0 - -C Call the decoder if DF is in range or Freeze is off. - if(NFreeze.eq.0 .or. - + abs(f0-f00).lt.float(DFTolerance)) then - call decode6m(dat(jstart),jz,cfile6,nslim,istart, - + NFixLen,lcum,f0,lumsg,npkept,yellow) - endif - - if(pick) then - do i=1,216 - ps0(i)=yellow0(i) - enddo - else - ps0(216)=yellow(216) - yellow0(216)=yellow(216) - do i=1,215 - ps0(i)=2*yellow(i) - yellow0(i)=ps0(i) - enddo - endif - goto 800 - endif - -! We're in FSK441 mode. Compute the 2D spectrum. - df=11025.0/256.0 !FFT resolution ~43 Hz - dtbuf=nstep/11025.0 - stlim=nslim2 !Single-tone threshold - call spec2d(dat,jz,nstep,s2,nchan,nz,psavg,sigma) - if(sigma.lt.0.0) basevb=-99.0 - if(sigma.lt.0.0) go to 900 - nline0=nline - STfound=.false. - npkept=0 - -C Look for single-tone messages - if((.not.pick) .or. MouseButton.eq.1) then - call stdecode(s2,nchan,nz,sigma,dtbuf,df,stlim, - + DFTolerance,cfile6,pick,istart) - endif - if(nline.gt.nline0) STfound=.true. !ST message(s) found - -C Now the multi-tone decoding - call mtdecode(dat,jz,nz,MinSigdB,MinWidth, - + NQRN,DFTolerance,istart,pick,cfile6,ps0) - - npkept=nline !Number of pings that were kept - smax=0. - stbest=.false. - if(npkept.gt.0) then - call indexx(npkept,tping,indx) !Merge the ST and MT decodes - do i=1,npkept - j=indx(i) - if(pick .and. STFound .and. - + line(j)(29:31).eq.' ') goto 10 - write(lumsg,1050) line(j) !Write to decoded.txt - 1050 format(a79) - if(lcum) write(21,1050) line(j) !Write to ALL.TXT - read(line(j),1060) sig,msg3 - 1060 format(16x,f3.0,9x,a3) - if(sig.gt.smax) then - smax=sig - tbest=tping(j) - stbest = (msg3.ne.' ') - endif - 10 enddo - endif - - dt=1.0/11025.0 !Compute spectrum for pink curve - if(stbest) then - jj=nint(tbest/dt) - call spec441(dat(jj),1102,ps0,f0) - endif - 800 continue call s2shape(s2,nchan,nz,tbest) diff --git a/wsjtgen.F90 b/wsjtgen.F90 index 09b266789..068e58f39 100644 --- a/wsjtgen.F90 +++ b/wsjtgen.F90 @@ -117,121 +117,34 @@ subroutine wsjtgen dt=1.d0/fsample_out LTone=2 - if(mode(1:4).eq.'JT65') then ! We're in JT65 mode. - if(mode(5:5).eq.'A') mode65=1 - if(mode(5:5).eq.'B') mode65=2 - if(mode(5:5).eq.'C') mode65=4 - call gen65(msg,mode65,samfacout,iwave,nwave,sendingsh,msgsent) + if(mode(5:5).eq.'A') mode65=1 + if(mode(5:5).eq.'B') mode65=2 + if(mode(5:5).eq.'C') mode65=4 + call gen65(msg,mode65,samfacout,iwave,nwave,sendingsh,msgsent) - if(lcwid) then -! Generate and insert the CW ID. - wpm=25. - freqcw=800. - idmsg=MyCall//' ' - call gencwid(idmsg,wpm,freqcw,samfacout,icwid,ncwid) - k=nwave - do i=1,ncwid - k=k+1 - iwave(k)=icwid(i) - enddo - do i=1,2205 !Add 0.2 s of silence - k=k+1 - iwave(k)=0 - enddo - nwave=k - endif - - goto 900 - endif - - if(mode(1:4).eq.'Echo') then -! We're in Echo mode. -! dither=AmpA -! call echogen(dither,wavefile,nbytes,f1) -! AmpB=f1 - goto 900 - endif - - if(mode(1:4).eq.'JT6M') then -! We're in JT6M mode. - call gen6m(msg,samfacout,iwave,nwave) - goto 900 - endif - - if(mode(1:2).eq.'CW') then -! We're in CW mode - wpm=15. - freqcw=800. - call gencw(msg,wpm,freqcw,samfacout,TRPeriod,iwave,nwave) - goto 900 - endif - -! We're in FSK441 mode. - if(nmsg.lt.28) nmsg=nmsg+1 !Add trailing blank if nmsg < 28 - -! Check for shorthand messages - sendingsh = 0 - if(shok.eq.1 .and. nmsg.le.4) then - if (msg(1:3).eq.'R26') then - msg='++' - nmsg=2 - sendingsh = 1 - else if (msg(1:3).eq.'R27') then - msg='**' - nmsg=2 - sendingsh = 1 - else if (msg(1:3).eq.'RRR') then - msg='%%' - nmsg=2 - sendingsh = 1 - else if (msg(1:2).eq.'73') then - msg='@@' - nmsg=2 - sendingsh = 1 - endif - endif - -! Encode the message - call abc441(msg,nmsg,itone,ndits) - ndata=ndits*nspd - -! Generate iwave - k=0 - df=11025.0/NSPD - do m=1,ndits - freq=(LTone-1+itone(m))*df - dpha=twopi*freq*dt - do i=1,NSPD - k=k+1 - pha=pha+dpha - iwave(k)=nint(32767.0*sin(pha)) - enddo - enddo - nwave=k - -900 sending=txmsg - if(mode(1:4).eq.'JT65' .and. sendingsh.ne.1) sending=msgsent - nmsg=nmsg0 - - if(lcwid .and. (mode.eq.'FSK441' .or. mode(1:4).eq.'JT6M')) then + if(lcwid) then ! Generate and insert the CW ID. wpm=25. - freqcw=440. + freqcw=800. idmsg=MyCall//' ' call gencwid(idmsg,wpm,freqcw,samfacout,icwid,ncwid) - k=0 - do i=ncwid+1,int(trperiod*fsample_out) - k=k+1 - if(k.gt.nwave) k=k-nwave - iwave(i)=iwave(k) - enddo + k=nwave do i=1,ncwid - iwave(i)=icwid(i) + k=k+1 + iwave(k)=icwid(i) enddo - nwave=trperiod*fsample_out + do i=1,2205 !Add 0.2 s of silence + k=k+1 + iwave(k)=0 + enddo + nwave=k endif +900 sending=txmsg + if(sendingsh.ne.1) sending=msgsent + nmsg=nmsg0 + 999 return end subroutine wsjtgen