Manual for the WOLF GUI


  1. What is WOLF ?
  2. What is the WOLF GUI ?
  3. The menu
  4. The main tab
  5. Configuration and Calibration
    1. Calibrating the soundcard's sample rate
    2. Compensating the receiver's frequency error
  6. Experiments with different WOLF signalling speeds
  7. "QSO" mode
  8. RX / TX Messages and the "automatic answering machine"
  9. Command line operation ("batch mode")
  10. Links
  11. Disclaimer

What is WOLF ?

WOLF was written by Stewart Nelson (KK7KA). WOLF means "Weak-signal Operation on Low Frequency". WOLF can operate over a wide range of signal levels. For example, a WOLF beacon transmits a 15-character message repeatedly. If the received signal would be adequate for conventional CW, copy will be displayed in 24 seconds (for the standard WOLF speed).
More information about WOLF can be found on used to be available at Stewart Nelson's website. Since that site seems to have disappeared, you can find a copy of the original info here. A simple explanation of the WOLF coding process written by Andy, G4JNT is on his website.

What is the WOLF GUI ?

GUI means "graphic user interface" in this case. The original WOLF implementation by KK7KA was a simple WIN32 console application. I (DL4YHF) tried to write a user interface for it in April 2005, using Borland C++Builder V4. At the moment, this is still "under construction", so please don't expect too much. The plan was...

  1. First to write a simple user interface, not too crowded, but allows adjusting the most important WOLF parameters.
  2. to use the SAME sourcecodes in the WOLF console application and the GUI variant, to minimize the testing effort, and to simplify coordination between co-workers (any takers ?..),
  3. implement real-time processing of data from the soundcard later,
  4. implement some new features to simplify bit-sync (possibly via GPS or other time signal broadcasters)

The menu

The following items exist in the main menu (there may be more than explained here !)

To analyze (decode) and encode wave files, like the original WOLF console application

For interactive operation...

May help to find the signal, and see "what else is going on". But caution, you won't see a weak WOLF signal (which can be successfully decoded) on a waterfall- or spectrum display !

Quickly take you to WOLF option tabs, or other options, and open the soundcard volume control program (for recording = reception and playback = transmission). It is important to have the volume controls properly adjusted.Both too weak and too strong input levels must be avoided. The vertical level indicator bar on the left side of the main screen should ideally be between 25 and 50 percent (on a linear scale, where 100 % is the soundcard's clipping point).

Opens the inevitable "About"-box (which shows the compilation date instead of a proper version number, as long as the program is still under construction), and shows this online help system (using your default HTML browser).

The main tab

The main tab contains the tuning scope, the "TX" / "RX" indicator (which is also a TX/RX control), an edit field for the transmitted text in the upper part, and the decoder output in the lower part. You can change the screen areas with a "screen splitter" control (the horizontal separator between tuning scope and decoder text list).

Buttons on top of the Decoder Output window:

Restarts the WOLF decoder (lets it forget the previous history, especially helpful if a strong signal has already been decoded, and you want to check if anything else will be decoded)
Copies text from the decoder output window into the clipboard.
If text is selected, only the selected text will be copied.
If no text is selected, the entire text will be copied.
Removes all text from the decoder output window

The status line at the bottom of the WOLF window shows the current action of the program (or an error message), and the current buffer usage. Observing the buffer usage is important if your PC is fast enough to decode WOLF in real-time (if it's a 300 MHz Pentium 2, or better, it will be, and you can skip the next paragraph).

The Buffer Usage display

To understand what the "Buffer Usage" indicator (in the status line of the main window) shows, first an explanation how WOLF runs in real-time mode:

The WOLF GUI is a multi-threaded application. When using the soundcard, three different threads are running at the same time:

The "large buffer" can contain up to 96 seconds of audio data, because it is also used as a playback-loop for transmission. While receiving, it buffers the audio samples because the WOLF processing thread may "think" for a while, when it decodes the previously received frame. The "thinking"-time depends on the speed of your CPU. If the CPU is fast enough, WOLF decodes much faster than the samples are written into the buffer, and the buffer usage indicator rarely rises above 50 percent.

If the buffer usage exceeds 80 percent (while WOLF is "thinking"), try to reduce the CPU load from other threads and programs. This means:

Note: During transmission, it's ok to have 100 % buffer usage, because the buffer must contain a full WOLF data frame (= 96 seconds of audio samples). When the buffer usage reaches 0 % during TX, the frame has been transmitted completely. But a TX period will usually consist of more than one WOLF data frame.

Configuration and Calibration

Most of the configuration parameters can be set on the WOLF Config tab, a few others on other tabs. All configuration data are saved in an old-style INI-file upon exit (which can be viewed and edited with any text editor; the WOLF GUI does not use the windows registry).

In the WOLF GUI, the most important configuration parameters are set on the "WOLF Config" tab. In the list below, their corresponding command line argument names are given for reference.

Transmit Options

Explained in one of the next chapters.

Transmit Options

Receive Options

I/O configuration and RX/TX switch

For RX/TX control of the transmitter, either use the VOX of your transceiver, or use the serial port (RTS = Request To Send is used to activate the PTT, like in many other amateur radio programs). Select the proper COM port on the I/O Config tab. There is also a test function for the PTT control line.


Unlike some of my other programs, the WOLF GUI is a well-behaving windows application which does not use direct register access for the serial port chip. For this reason, the RX/TX control may even work with a USB/RS-232 converter.

You can select the soundcard used for input (reception) and output (transmission) on the I/O Configuration tab if you have more than one soundcard installed in your PC (or connected to the PC via USB, which is quite common these days). By default, the WOLF GUI uses the default soundcard (sic..) .

Calibrating the soundcard's sample rate

Calibrating the soundcard's sampling rate is important. If you already know the exact sample rate of your soundcard from another program, enter it in the configuration tab as explained in the previous chapter. Otherwise, you will need a precise audio reference signal. This can be an audio frequency generator with built-in frequency counter (accuracy better then 0.1 Hz), or a crystal oscillator followed by a frequency divider (for example, use a 10-MHz XO and a 12- to 14-stage binary counter like the old CMOS 4060. Pin 2 = Q13 will produce a square wave at 10 MHz / ( 2 power 13) = 1220.703125 Hz).

Another very precise reference signal is the LORAN chain, if you have an AM(!) receiver which may be tuned to 100.0 kHz. In AM, you don't need a stable VFO in your receiver (unlike CW or SSB). Depending on the group repetition interval (GRI) of the nearest LORAN chain in your area, there will be stong components in the audio(!) spectrum near 1 kHz and 2 kHz because the LORAN pulses are 1 ms long. One example for the Sylt transmitter chain (GRI = 74990 usec):

Audio frequency of the 150-th harmonic : 150 / 74990 usec = 2000.26670 Hz
Audio frequency of the 151-th harmonic : 151 / 74990 usec = 2013.60181 Hz

Observe both frequencies in the spectrum display. Their amplitude should be almost equal (otherwise you are listening to the wrong signal). Furthermore the next spectrum line (from another chain) should be several Hz away from the reference signal.

To calibrate the sampling rate, enter the precise frequency of your reference signal in the "Carrier Frequency" field (for TX) on the WOLF Config tab. Then start the frequency measurement ("Mode".."Frequency Measurement"). Observe the peak frequency on the tuning scope (if there is only one peak), or look at the decoder output. The "f:"-value in the decoder window must be added to the carrier frequency. Example: Carrier frequency set to 2000.26670 Hz (150-th audio harmonic of LORAN SYLT), decoder output = "t: 96 f: 0.004 a: 0.5 dp: 36.4" -> measured audio signal at 2000.26670 PLUS 0.004 Hz =  2000.27070. This value must be entered when the program asks for the "DISPLAYED frequency". Alternatively, you can copy the last displayed "f:"-value (0.004 in this example) into the input box. Don't forget the sign if its a negative offset ! If the value entered is less than 10 Hz, the program will automatically add the carrier frequency (it assumes you entered a frequency offset instead of an absolute audio frequency in that case).

The program will then calculate the new sampling rate and show it in a message box. If you think it's reasonable, click "Ok". The new sampling rate will be written into the edit field of the configuration tab. Now start the frequency measurement again for a few minutes. The "f:"-value in the decoder output should be constantly zero from now on. If not, repeat the above procedure. If the calibration of the sample rate is ok, you are ready for the next step: Measure the frequency error of the local oscillator in your LF receiver.

Note: Telling the 150-th harmonic from the 151-th harmonic may be a bit tedious. John, W1TAG, has written a nice article describing the calibration of the sample rate by measuring the base frequency (fundamental) of the Loran GRI; for example 1 / 74990 usec = 13.33511135 Hz (for the Sylt transmitter). John's article is here: . This article also contains a table of Loran frequencies worldwide.

Compensating the receiver's frequency error

After calibrating the soundcard's sampling rate, you may need to know the frequency error of your LF receiver - unless it has a very stable frequency reference. For example, you want to receive a WOLF signal on 137.4410 kHz. The LF receiver runs in USB, tuned to 135.8 kHz, so the audio "carrier" frequency should be 1641.0 Hz ... but is this precise enough ? A weak LORAN line in the vincinity of the operating frequency can be used to detect the frequency error (offset) of the longwave receiver.
Note: There is a table with all LORAN lines (frequencies) in the 136 kHz amateur radio band on G4CNN's website.

For example, one of the sidebands from the LORAN-C transmitter at Sylt is at 137585.011335 Hz. A receiver tuned to 135.8 kHz (in USB) will produce a weak audio signal near 1785.011 Hz. The WOLF decoder can lock to this frequency in frequency measurement mode, if its within the tolerance range (like +/- 1 Hz). So, for this example, enter "1785.011" in the Carrier Frequency field on the WOLF config tab, then select "Mode".."Frequency Measurement" from the main menu. Let the decoder run for a few minutes, and observe the "f:"-display in the output window. If the "f:"-value is positive, the received audio frequency is too high, which means your (USB-) receiver is too low in frequency. To compensate this without retuning the LF receiver, add the "f:" value to the audio carrier frequency which you want to receive later. For example, if the frequency test run with the LORAN-line shows "f: 0.126" in the decoder output window, enter 1641.126 (Hz) instead of 1641 in the Carier Frequency field to decode the signal on 137.4410 kHz later.

Experiments with different WOLF signalling speeds

The original WOLF implementation by KK7KA sends 10 symbols per second. 5 of these symbols carry "data" bits, the other 5 bits contain a pseudo-random sequence for synchronisation. So a 10-symbol-per-second WOLF signal occupies the same -3-dB-bandwidth like a classic BPSK signal at 10 bit/second. But it sends 5 "data"-bits per second. In the WOLF GUI, this original WOLF speed will be called 'normal' speed.

In November 2005, a few slower and faster variants were added. The slower variants may help for extremely weak signals. At the time of this writing, the following speeds were implemented in the WOLF GUI :

The WOLF speed setting can be changed through the "Mode" menu.
Please note: On a crowed band (if the amateur radio LF is ever crowded), avoid the "Fast" and the "Turbo" mode, or -at least- use a longer transition time for the phase reversals (the old 't' option) of at least 0.5. The "fast" modes are not for "extremenly" weak signals -just for weak signals- but they may prove helpful to explore short propagation lifts.

A short off-air test, with the same amount of added white noise (but no matched filter), produced the following output:

2005-11-20 20:49:03 >WOLF40  -r 8000 -f 800 -t 1.0 -w 0.0000
t:   6 f: 1.016 a: 1.1 dp: 74.2 ci:10 cj:229 OYN85B1H1D6/ EB ?
t:  12 f:-0.940 a:-0.8 dp: 70.6 ci: 9 cj:171 UF14XURBJYAW R4 -
t:  24 f: 0.725 a:-1.5 dp: 66.4 ci: 3 cj: 78 4XB???E1FY.P6HW ?
t:  48 f:-0.039 pm:4.888 jm:656 q:-13.5 -5.8 ???OCDEU1IHKMS3 -
t:  72 f:-0.039 pm:5.144 jm:656 q:-11.1 -8.0 3BWF9TQQC8NOTYX ?
t:  96 f:-0.977 pm:5.440 jm:573 q:-10.2 -6.7 RY.XKL*B7F9ACJY ?
t: 120 f: 0.078 pm:6.431 jm:500 q: -6.4 -8.4 1SC2Z 1HCU6X6 V ?
t: 144 f:-0.312 pm:7.180 jm:661 q: -8.7 -8.1 AXOQ2*CBSU5A4HE ?
t: 168 f: 0.117 pm:8.691 jm:334 q: -8.6 -9.0 5CGSOVHS7UFY4F9 ?
t: 192 f: 0.117 pm:9.434 jm:500 q: -3.8 -4.2 QUICK BROWN FOX -
2005-11-20 20:54:03 >WOLF20  -r 8000 -f 800 -t 1.0 -w 0.0000
t:  12 f:-0.918 a: 0.9 dp: 77.9 ci:14 cj:  1 SL.VNFZ9XGJW??? ?
t:  24 f:-0.813 a: 0.2 dp: 75.3 ci:15 cj:  1  6MJ5LCDRDV/Q6/ ?
t:  48 f: 0.404 a:-1.4 dp: 73.2 ci: 8 cj:278 6KJWQ/LH/ORUZJV ?
t:  96 f: 0.098 pm:11.31 jm:911 q: -9.5 -8.7 /SMVNYN/C9NO9UH ?
t: 144 f: 0.098 pm:18.30 jm:911 q: -7.8 -8.2  PJDQ ZJJ6 /XIA ?
t: 192 f: 0.098 pm:27.44 jm:911 q: -5.5 -5.6 QUICK BROWN FOX -
2005-11-20 20:58:19 >WOLF10  -r 8000 -f 800 -t 1.0 -w 0.0000
t:  24 f:-0.239 a:-0.9 dp: 86.7 ci: 6 cj:395 POGB K994ALPMSK ?
t:  48 f:-0.750 a:-0.8 dp: 82.8 ci:12 cj:377 RDR 5KBDPD1 ??? ?
t:  96 f:-0.244 a:-0.6 dp: 78.7 ci: 4 cj:154 8X OX6C4*/KIRQD ?
t: 192 f: 0.098 pm:26.50 jm:941 q: -7.8 -9.1 V448*F0A6CNEF5. ?
t: 288 f: 0.098 pm:53.36 jm:941 q: -5.2 -3.4 QUICK BROWN FOX -

It's interesting to see that under these identical SNR conditions, the 'fast' modes were not worse than the 'normal' mode (except for the occupied bandwidth of course). A matched filter may improve the performance of the slower modes, but such a feature has not been implemented yet.



The "QSO mode" may help in attempted two-way contacts in WOLF BPSK mode. If you have used WSJT, or are familiar with EME procedures on VHF, this may sound familiar. In QSO mode, the program periodically toggles between transmission and reception, synchronized to the beginning of an hour.

Both stations must agree on 'synchronized' transmission and reception. As a suggestion, use 15 minute intervals for transmission or reception (maybe 30 minutes will turn out to be a better choice for trans atlantic QSO attempts, a discussion on the RSGB LF reflector may show who uses which interval, and on which frequency..).
The QSO-mode parameters must be defined on the WOLF Config tab :

To start a QSO, type a CQ call in the TX message (on the main screen), and enter QSO mode by selecting "Mode"..."QSO mode" from the main menu.


While receiving, watch the decoder output, and -if you're lucky and someone answers your call- type an answer in the TX message field before your next TX interval starts. The transmitted message won't change while transmitting ! If you came back into the shack just a few seconds too late, and find yourself transmitting the wrong message, stop the transmitter (Mode..Stop), enter the text you want to send, and enter QSO mode again. A few seconds of your TX-over will be missing then, but this is not a problem because the WOLF message is repeated a few times anyway.

When the QSO is complete, switch back to Receive Only in the mode menu or start another CQ call (don't forget this; the WOLF GUI is rather stupid, it doesn't know when a QSO is finished, and would keep on sending in your TX-periods until the fuses blow..).

RX / TX Messages and the "automatic answering machine"

On the "RX / TX Message" tab, some special messages can be defined which will be compared with all received (and successfully decoded) messages. This feature can be used to...

To define the message strings, and to enable or disable the automatic answering function, switch to the "RX / TX Messages" tab :

Screenshot "RX/TX Messages" (AutoAnswerMachine)

Letters in lower case are macros (placeholders) which may be defined in the upper part of this tabsheet. If the "dxcall" field is empty, the program will automatically set it to the received string. For example, if the message "CQ WD2XES K" was successfully decoded, it will match the predefined RX-message "CQ dxcall K". If the "dxcall"-field is still empty at that time, it will automatically be set to the received letters (here: dxcall will be set to WD2XES). After that, the "dxcall"-macro will be automatically replaced during transmission (but not in the definition table). The "dc"-macro produces a short form of the "dxcall" (=two last letters from the suffix), the "mc"-macro expands into your own two-letter suffix.


Command line operation

Though WOLF now has a graphic user interface, it is still possible to invoke the program with all parameters in the command line. This is very helpful for off-air testing, using wave files with signals and artifical or recorded noise (see below, -a option).
The syntax is exactly the same as in the original console application. A detailed description of all command line parameters are in Stewart's original description of WOLF. Here just an essay:

Parameter /
-a dB set attenuation of test data below noise
-b set noise blanker
-c set coherent averaging
-e  - set eight bit mode (for WAVE file)
-f Hz set frequency
-k  - set keyed (xor gate) mode
-l  - look at last frame only for freq and pos
-m set measurement interval
-n set frame count (serial mode)
-o set binary options (octal bit combination)
-q specify name of signal file
-r Hz specify actual sample rate
-s specify number of samples to skip
-t Hz specify frequency tolerance (on rx)
-t 0 to 1 specify phase transition time (on tx)
-v set verbose mode
-w Hz / second set slew rate
-x "15 characters" specify message to transmit

WOLF Links


 (Ok, I hate this paranoid stuff, but someone told me it's wise to have it here..)


Namings for products in the software and this manual, that are registered trademarks, are not separately marked. The same applies to copyrighted material. Therefore the missing (r) or (c) character does not implicate, that the naming is a free trade name. Furthermore the used names do not indicate patent rights or anything similar.

WOLF was developed by Stewart Nelson (KK7KA). The graphic user interface was written by Wolfgang Büscher (DL4YHF).

You may use this software, copy it, modify it, but only for non-profit purposes. The above copyright notice and terms of use shall be included in all copies or substantial portions of the software.

The program must not be used in 'critical' environments, where program failure may cause harm to persons or damage to property. Dont rely on this program as an emergency communication medium !

Further restrictions to the use of WOLF may apply, please check Stewart's website too !

Last modified: 2013-02-17 (YYYY-MM-DD)