ChannelSPURIOUS EMISSIONS

Sheet 4 · The written guides

Distress Calls,
Beacons, and HFGCS

At the end you can decode the digital calls that ships send and tell by the clock which of 18 beacons you hear. You can also catch a military voice broadcast, and you have a log of each.

Rev A · checked 2026-10-10

Download the Markdown

The Markdown file is the whole guide in plain text. You can give it to a coding agent.

Some links are affiliate links: if you buy through them, I may earn a commission at no extra cost to you. As an Amazon Associate I earn from qualifying purchases. How links work.

Contents

1. What this guide builds

A receiving position for three signals on shortwave. One is data from ships, one is Morse code from amateur beacons, and one is a voice. You need one shortwave receiver, one antenna and one computer.

Signal Frequency Antenna Radio Decoder Computer
DSC, the digital calls of ships 2187.5, 4207.5, 6312, 8414.5, 12577, 16804.5 kHz Any shortwave antenna An SDR radio SDRangel, DSC Demodulator A PC with a screen
NCDXF/IARU beacons 14.100, 18.110, 21.150, 24.930, 28.200 MHz, in CW mode Any antenna for 14 to 28 MHz Any shortwave receiver Your ear and a clock None needed
HFGCS voice 4724, 8992, 11175, 15016 kHz, upper sideband Any shortwave antenna Any shortwave receiver Your ear. Optional: whisper.cpp Optional

In the episode I decode all three with programs that I wrote. Those programs are not public. This guide uses free public programs for the same jobs, and it says where no such program exists.

There are two paths. Path A is the lowest-cost one: a narrow radio, a PC with a screen, one frequency at a time. Path B is my hardware: a wide receiver that hears all of shortwave at once, on a PC with no screen.

 Path A (lowest cost)
 --------------------
 wire or loop antenna -- coax -- RTL-SDR Blog V4L -- USB -- PC with a screen
                                                            SDRangel:
                                                              DSC Demodulator  (ship calls, log file)
                                                              SSB Demodulator  (beacons, voice, by ear)

 Path B (what I use)
 -------------------
 loop -- RG-6 -- power injector -- 30 MHz low-pass filter -- RF limiter -- RX-888 Mk II
                                                                              |
                                                          own USB 3.0 socket  |
                                                                              v
                                              hf (x86 PC, no screen): ka9q-radio
                                                beacons: 5 channels, by ear with "monitor"
                                                voice:   4 channels, "pcmrecord", then whisper.cpp
                                                DSC:     no free public decoder without a screen

2. What you need

Prices are US dollars unless the cell says otherwise. Each price has its seller. I checked the prices on 2026-10-07. They change. A part marked ◆ is what I use. A blank box is for your pencil.

Lowest-cost path (Path A)

☐ Part Job Connector Price Note
☐ RTL-SDR Blog V4L The radio SMA $37.95, rtl-sdr.com The maker says it has a built-in shortwave converter, 500 kHz to 28.8 MHz. I have not used it on shortwave
☐ A shortwave antenna that you own: a dipole, a vertical, or a long wire The antenna Yours Nothing A receive-only wire of 10 m outdoors is a start
☐ 50 ohm coax, with an adapter to an SMA plug Antenna to radio SMA at the radio See seller
☐ A PC with a screen: Windows, macOS, or Ubuntu Linux on x86-64 Runs SDRangel USB Yours SDRangel publishes installers for these three
☐ A clock that shows UTC seconds The beacon schedule Nothing The PC clock is enough if it is synchronized

You may own a shortwave receiver or transceiver with CW and SSB. Then you need no new radio for the beacons and the voice. You need the SDR radio and SDRangel only for DSC.

What Path A gives up:

  • It hears one slice of shortwave, about 2 MHz wide. The six DSC frequencies are far apart, so you watch one at a time.
  • It needs a person at the screen. Nothing runs by itself overnight, except a DSC log that SDRangel writes while it is open.
  • The radio has 8 bits. Strong broadcast stations at night can cover weak signals.

What I use (Path B)

☐ Part Job Connector Price Note
☐ ◆ MLA-30+ active loop with its power injector The antenna SMA See listing, Amazon The amplifier is in the loop head. Mine is still indoors
☐ ◆ Turn Island Systems F3060 low-pass filter In front of the receiver See listing $80, Turn Island Systems Required at 64.8 MS/s (section 4)
☐ ◆ TAPR RF Limiter Last part before the receiver See listing $20, TAPR Needed if you also transmit
☐ ◆ RX-888 Mk II, 16-bit, 10 kHz to 64 MHz The radio: all of shortwave at once SMA $152.79, OpenSourceSDRLab, 2026-10-11 Copies exist. Mine is from OpenSourceSDRLab
☐ ◆ x86-64 desktop PC, 4 cores of Intel Haswell class (2013) or newer, 8 GB, a USB 3.0 socket on the main board hf USB 3.0 Used market Mine: HP EliteDesk 800 G1 SFF, Core i5-4570, 12 GB, bought used
☐ SATA solid-state drive, 120 GB or more Storage for hf See seller Recordings fill a drive fast (section 9)

Cable and small parts

☐ Part Job
☐ RG-6 quad-shield coax, and two F to SMA adapters Loop to the receiver. On shortwave, 10 to 20 m of it loses under 1 dB
☐ Short SMA plug-to-plug jumpers, 3 or more Injector to filter to limiter to receiver
☐ Snap-on ferrites Both ends of the antenna cable, and the USB cable
☐ Grounding block for the cable where it enters the house, and bonding wire Section 4, “Ground the cable”
☐ 50 ohm SMA terminator The noise test in section 6

Do not buy an amplifier at the start. An amplifier in front of a receiver that is already full makes reception worse.

3. Before you start

Skills. You know how to tune an SSB receiver. For Path A you install one program with an installer. For Path B you type commands into a Linux terminal over SSH.

Time. Path A: one evening. Path B: one day, of which 36 minutes is one command that runs by itself on my PC.

Accounts. None.

Values to choose first. Write these down. The steps use them as placeholders.

Placeholder Meaning Example form
<NAME> A station name with no personal detail. Path B sends it nowhere unless you add a feeder my-station
<LOG_DIR> The folder for your logs and recordings /home/you/shortwave
<DSC_KHZ> The one DSC frequency you watch on Path A 8414.5

You do not need your position for any step. Do not enter it anywhere.

The law, for the United States. I am not a lawyer. US law (47 U.S.C. section 605) says that a person who receives a radio message not meant for the public must not tell others its contents, or use it for gain. It makes exceptions for broadcasts to the public, for amateur radio, and for messages about ships, aircraft or people in distress. Other countries differ.

My rules, which are stricter than that law. They are the rules of this guide.

  • This guide is for reception only. Never transmit on a DSC frequency or an HFGCS frequency. You have no licence for them.
  • Never publish or pass on a real DSC call: no ship number, no name, no position. A call involves real people.
  • If you hear a real distress call, the coast stations have it already. They keep watch on these frequencies all day. Do not relay it, do not post it, and do not try to call the ship.
  • Do not publish a recording or a transcript of an HFGCS broadcast. The messages are not meant for the public.
  • The beacons are amateur radio. You may log and share what you hear from them.

Every call and message in this guide is an example that I wrote by hand. Each one has the tag “example”.

4. The antenna and the radio-frequency chain

Path A

Caution. A transmitter near the antenna can destroy the radio’s input. Never connect the SDR radio to an antenna while another radio transmits into that antenna or one close to it. Disconnect the SDR radio before you transmit.

  1. Put the antenna outside if you can. Distance from the electronics in the house matters more than height.
  2. Connect the coax to the antenna.
  3. Connect the SMA adapter to the radio end of the coax.
  4. Connect the coax to the SMA socket of the radio.
  5. Connect the radio to the PC with a short USB extension cable. The cable moves the radio away from the PC’s noise.

Keep the radio’s bias tee off. A bias tee puts DC on the coax. A dipole or a balun can short it.

Path B

Build the chain in this order, antenna first.

loop -- RG-6 -- power injector -- F3060 (30 MHz low-pass in, shelf filter bypassed)
     -- RF limiter -- RX-888 Mk II, HF input

The reasons for the order:

  • Injector first on the loop cable. Every part after it then sees no DC. The limiter blocks DC, so it must come after the injector.
  • Low-pass filter before the limiter. A limiter makes harmonics when it clamps. TAPR’s manual says to filter ahead of it.
  • The 30 MHz filter is not optional. At 64.8 million samples each second, the receiver cannot tell a signal above 32.4 MHz from one below it. A signal from 32 to 65 MHz folds back onto shortwave. The F3060 removes it.
  • Leave the F3060 shelf filter bypassed. It cuts 20 dB at 3.5 MHz, and the lowest DSC frequency is below that.
  • Bias tee off on the RX-888. The loop takes its power from its own injector.

Ground the cable

An outdoor antenna cable needs a path to ground where it enters the building. In the US the rule is National Electrical Code Article 810. Bond the grounding block to the building’s own grounding electrode system. Never use a ground rod that stands alone: a surge then goes through your equipment. I read a published summary of the rule, not the code text.1 Use a licensed electrician if you are not sure.

5. Path A: the computer and the program

Program: SDRangel. It is free and open source. It drives the radio, shows the spectrum, and holds a decoder for DSC and a demodulator for CW and SSB. I have not run it. The names of its controls below are from its documents.

  1. Open the latest release page. On 2026-10-10 that was version 7.27.2, dated 2026-08-19.

  2. Download the file for your computer.

    Windows                 sdrangel-7.27.2-win64.exe
    macOS, Intel            sdrangel-7.27.2_mac-15.7.7_x86_64.dmg
    macOS, Apple silicon    sdrangel-7.27.2_mac-14.8.7_arm64.dmg
    Ubuntu 24.04            sdrangel_7.27.2_ubuntu-24.04_amd64.deb
    
  3. Install it. On Ubuntu, use this command in the folder that holds the file.

    sudo apt install ./sdrangel_7.27.2_ubuntu-24.04_amd64.deb
    
  4. On Windows, install the radio’s USB driver as the RTL-SDR Blog guide for the V4L says. On Linux, stop the kernel’s TV driver from taking the radio: the same guide gives the file.

  5. Synchronize the PC clock. Windows and macOS do this by default. On Ubuntu, install chrony.

    sudo apt install -y chrony
    
  6. Start SDRangel. Add a receiver with the key Ctrl-R. Choose the RTL-SDR device from the list.

    Result: a device window and a spectrum window open.

  7. Leave “Direct sampling mode” off for a V4L. The maker says the V4L converts shortwave inside the radio. An older RTL radio with no converter needs this box on.

  8. Set the center frequency to 8,400 kHz. Start the device with the triangle button.

    Result: the button changes to a green square, and the spectrum moves.

Caution. The V4L needs a driver from 2026. An older driver opens the radio and receives nothing. I did not confirm that the driver inside SDRangel 7.27.2 knows the V4L. If the spectrum is a flat line on every band, read section 13.

6. Path B: the computer and the receiver

Receiver program: ka9q-radio, free and open source. Its radiod service reads the whole of shortwave from the RX-888 Mk II. It gives each listener its own channel over the computer’s internal network. I run these steps on my station. They build the version I run (commit b5bbb9aa, 2026-09-25).

  1. Install Ubuntu Server 24.04 LTS. Set the host name to hf. Turn SSH on. Use wired Ethernet.

  2. Add the author’s package source. Two of the libraries are only there.

    sudo wget -P /usr/share/keyrings http://www.ka9q.net/debian/ka9q-radio.asc
    echo "deb [signed-by=/usr/share/keyrings/ka9q-radio.asc arch=amd64] http://www.ka9q.net/debian noble main" \
      | sudo tee /etc/apt/sources.list.d/ka9q.list
    sudo apt update
    
  3. Install the build tools and libraries. The list is from the project’s docs/INSTALL.md.

    sudo apt install -y git avahi-utils build-essential make gcc libairspy-dev libairspyhf-dev \
      libbsd-dev libfftw3-dev libfftw3-bin libhackrf-dev libiniparser-dev libncurses-dev libopus-dev \
      librtlsdr-dev libusb-1.0-0-dev libusb-dev portaudio19-dev libasound2-dev rsync libogg-dev \
      libsamplerate0-dev libliquid-dev libncursesw5-dev libbladerf-dev libhydrasdr-dev libfobos-dev \
      libcsv-dev libsoapysdr-dev chrony
    
  4. Build and install.

    cd ~ && git clone https://github.com/ka9q/ka9q-radio.git && cd ka9q-radio
    git checkout b5bbb9aa
    make -j && sudo make install
    sudo adduser $(whoami) radio
    sudo systemctl enable --now set_lo_multicast
    

    Result: the install creates the user and group radio, the service files, and the rules that load the receiver’s firmware. Log out and in again so the new group applies.

  5. Connect the chain from section 4. Plug the RX-888 Mk II into a USB 3.0 socket on the PC. Never use a hub for it.

    lsusb | grep 04b4          # expect 04b4:00f1 "RX888mk2". 00f3 means the firmware did not load
    lsusb -t | grep -B2 usbfs  # the receiver's line must end in 5000M
    
  6. Write the receiver settings. Start from the project’s example.

    sudo cp ~/ka9q-radio/config/examples/radiod@rx888-generic.conf /etc/radio/radiod@hf.conf
    sudoedit /etc/radio/radiod@hf.conf
    

    Set these lines in the first two sections.

    [global]
    hardware = rx888
    status = hf.local
    
    [rx888]
    device = "rx888"
    description = "<NAME>"
    samprate = 64m8
    gain = 10
    

    Always write samprate = 64m8. One of the project’s default files uses the full rate, which makes more heat and needs a faster PC.

  7. Make the speed tables for this PC. This took 36 minutes on my Core i5-4570. radiod must not run during it.

    cd /etc/fftw && sudo touch nwisdom && sudo chown $(whoami):radio nwisdom wisdomf 2>/dev/null
    time fftwf-wisdom -v -T 1 -o nwisdom rof1620000 cob1920 cob1200 cob960 cob800 cob600 \
      cob480 cob320 cob300 cob200 cob160 cob150
    ls -l nwisdom && cp nwisdom wisdomf
    

    Do not leave out -T 1. Do not copy the file from another computer.

  8. Start the receiver and look at it.

    sudo systemctl enable --now radiod@hf
    systemctl is-active radiod@hf        # expect "active"
    control hf.local                     # the live panel. Press q to leave
    

    Result: the panel shows the receiver’s levels. The service name is radiod@hf, not radiod@hf.conf.

  9. Set the gain. In the panel, read the level of the analog-to-digital converter. The project’s rule is an average of -20 to -25 dBFS. I run 10 dB of gain, which gives about -32 dBFS here. A count of “overranges” that keeps rising means too much gain.

  10. Test that the antenna, not the receiver, sets the noise. Note the noise level on a quiet frequency. Replace the antenna cable with the 50 ohm terminator. The noise must fall by 6 dB or more.

  11. Keep the receiver in its case, and keep air around it. It runs hot.

7. Signal 1: the calls of ships (DSC)

What a call is

Digital selective calling (DSC) is the calling system that ships use for distress and safety. A ship’s radio sends a short burst of data in place of a voice call. The public standard is ITU-R M.493.

  • The burst is two tones 170 Hz apart, at 100 bits each second. A call lasts a few seconds.
  • Each character is sent twice. The call ends with a check character.
  • Every ship radio has a nine-digit number, the MMSI. A coast station’s number starts with two zeros.

A call contains these fields.

Field What it says Values you see
Format Who the call is for One ship, a group, an area, all ships, or a distress alert
To The number of the station called A nine-digit number, or an area
Category How urgent the call is Routine, safety, urgency, distress
From The number of the caller A nine-digit number
Telecommand What the caller wants Test, or a voice mode for the next contact
Position and time Where the ship is. Mostly in a distress alert Degrees and minutes, and a UTC time
Nature of distress What is wrong. Only in a distress alert Fire, collision, sinking, disabled and adrift, a piracy attack, and others
End, and check How the call ends, and if the check matched Request for an answer, answer, or plain end

Almost all calls are tests. A ship calls a coast station to test its radio, and the coast station answers. On my station, about 98 calls in 100 are a test or its answer. The US Coast Guard says its stations answer test calls on 4207.5 kHz automatically.

Two examples, written by hand. Neither number is a valid ship number, because no country code starts with 1.

EXAMPLE (a test call, invented)
Format    Selective call
To        001234567    coast station
Category  Safety
From      123456789    ship
Telecmd   Test
End       Request for an answer
Check     OK

EXAMPLE (a distress alert, invented)
Format    Distress alert
From      123456789
Nature    Piracy or armed robbery attack
Position  12°34' N 123°45' W
Time      12:34 UTC
Check     OK

What to tune

The six shortwave frequencies for distress and safety calls are fixed by rule (in the US, 47 CFR 80.359).

Frequency Share of the calls at my station When to try it
2187.5 kHz About 5 in 100 Night
4207.5 kHz About 20 in 100 Night
6312 kHz About 15 in 100 Night, dusk and dawn
8414.5 kHz About 25 in 100 Most of the day. Start here
12577 kHz About 15 in 100 Day
16804.5 kHz About 15 in 100 Day

The shares are one week at my station in the Puget Sound, rounded. Yours differ. The “when” column is the general rule of shortwave: low frequencies travel at night and high frequencies by day.

Path A: decode with SDRangel

Caution. Step 5 below names a switch that sends every call you decode to a public database, with a station name. That breaks the rule in section 3. Leave it off.

  1. Start the device as in section 5, with the center frequency at 8,400 kHz.

  2. Add a channel to the device. Choose “DSC Demodulator” from the list of channels.

  3. Set the frequency shift of the channel to +14,500 Hz. The channel is then on 8414.5 kHz.

  4. Set “Mode” to MF/HF. The other mode is for the VHF marine channel 70.

  5. Leave “Feed to YaDDNet” off. Leave the UDP box off.

  6. Turn “Filter Invalid” on. The table then hides calls that failed their check.

  7. Choose a log file with the “.csv Log Filename” button. Put it in <LOG_DIR>.

  8. Turn “Start/stop Logging Messages to .csv File” on.

    Result: nothing, until a call arrives. Wait. A call is a short, rough buzz, and a narrow double line on the spectrum for a few seconds. Then one new row appears in the table.

For another frequency, change the center frequency and the shift. Keep the center 10 to 50 kHz away from the signal. An RTL radio has a false line at the exact center.

SDRangel is not the only choice. YaDD is a free DSC decoder for Windows that reads the sound of any SSB receiver. I could not read its documents on the check date, so this guide has no steps for it.

Path B: what is missing

I found no free public DSC decoder for Linux that runs without a screen. That is why I wrote my own. My program listens on all six frequencies at once and drops every call that fails its check.

With an RX-888 Mk II you have two honest choices. Run SDRangel on a PC with a screen and a second, low-cost radio, as in Path A. Or wait: a public decoder may appear. I did not test SDRangel with the RX-888 Mk II.

What a good reception looks like

  • The ECC column and the Valid column of the row both show a pass.
  • “From” and “To” are nine digits each. One of them often starts with two zeros.
  • The “Telecommand 1” column says “Test” in most rows.
  • The “Errors” column is low. SDRangel may repair a damaged character from its second copy.

SDRangel looks up ship names for the table at the web site aprs.fi. Each lookup sends the ship number to that site.

How many to expect

My station hears about 350 valid calls a day on all six frequencies together, with a small loop indoors. About 40 more each day are damaged, and my program drops them. On one frequency, expect far fewer. My first test heard 9 calls in two hours on one frequency.

How to log it

The CSV file from step 7 is the log. It holds every column of the table. Keep it on your own computer.

To share what you learned, count, and share only the counts. This is the form I use in the episode:

EXAMPLE (a summary that is safe to share, invented numbers)
Week of listening on 8414.5 kHz
Valid calls           120
Tests and answers     about 98 in 100
Calls dropped         15

Warning. A call with the format “Distress alert” may be a real emergency, or a false decode. In both cases, do nothing with it. The coast stations and rescue centers have it already. Do not post it, do not pass it on, and do not transmit.

8. Signal 2: the eighteen beacons

What the beacons send

The NCDXF/IARU International Beacon Project runs 18 beacons around the world. Amateur radio groups operate them. All 18 share one frequency on each of five bands, so they take turns.

  • A turn is 10 seconds. A round is 18 turns, which is 3 minutes. The beacons run 24 hours a day.
  • In its turn, a beacon sends its callsign in Morse code at 22 words a minute. Then it sends four dashes, each one second long.
  • The callsign and the first dash have 100 watts. The next dashes have 10 watts, 1 watt and 0.1 watt.
  • After its turn, the beacon moves to the next higher band. The next beacon starts on the band it left.

What to tune

Band Frequency Mode
20 m 14.100 MHz CW
17 m 18.110 MHz CW
15 m 21.150 MHz CW
12 m 24.930 MHz CW
10 m 28.200 MHz CW

In CW mode, set the dial to the exact frequency. A receiver with no CW mode works too. Set it to upper sideband and tune 700 Hz lower: the beacon is then a 700 Hz tone.

Start on 14.100 MHz. It is open to some part of the world for most of the day. The three highest bands open only by day, and only when the sun is active enough.

The schedule

A round starts at every minute of the UTC hour that divides by 3: at :00, :03, :06 and so on. The table gives the start of each beacon’s turn inside the round, in minutes and seconds. I name each beacon by its place. The NCDXF page lists the callsigns.

Beacon, in the order of the turns 14.100 18.110 21.150 24.930 28.200
1. New York 0:00 0:10 0:20 0:30 0:40
2. Inuvik, northern Canada 0:10 0:20 0:30 0:40 0:50
3. Mt. Umunhum, California 0:20 0:30 0:40 0:50 1:00
4. Maui, Hawaii 0:30 0:40 0:50 1:00 1:10
5. Masterton, New Zealand 0:40 0:50 1:00 1:10 1:20
6. Rolystone, Western Australia 0:50 1:00 1:10 1:20 1:30
7. Mt. Asama, Japan 1:00 1:10 1:20 1:30 1:40
8. Novosibirsk, Siberia 1:10 1:20 1:30 1:40 1:50
9. Hong Kong 1:20 1:30 1:40 1:50 2:00
10. Colombo, Sri Lanka 1:30 1:40 1:50 2:00 2:10
11. Pretoria, South Africa 1:40 1:50 2:00 2:10 2:20
12. Kikuyu, Kenya 1:50 2:00 2:10 2:20 2:30
13. Tel Aviv, Israel 2:00 2:10 2:20 2:30 2:40
14. Lohja, Finland 2:10 2:20 2:30 2:40 2:50
15. Madeira 2:20 2:30 2:40 2:50 0:00
16. Buenos Aires, Argentina 2:30 2:40 2:50 0:00 0:10
17. Lima, Peru 2:40 2:50 0:00 0:10 0:20
18. Caracas, Venezuela 2:50 0:00 0:10 0:20 0:30

I computed this table from the order and the clock rule on the NCDXF pages. Some beacons are off the air at times. The NCDXF schedule page marks them.

Know the beacon by the clock alone

You do not need to read Morse code. The clock tells you who is on.

  1. Read the UTC time, for example 14:37:20.
  2. Find the start of the round: the last minute that divides by 3. Here that is 14:36:00.
  3. Subtract. Here the time inside the round is 1:20.
  4. Find that time in the column of your band. On 14.100 MHz, 1:20 is beacon 9, Hong Kong.

This command prints the number of the beacon that is on 14.100 MHz now. It works on Linux and macOS.

echo $(( ($(date -u +%s) / 10) % 18 + 1 ))

For each higher band, subtract 1 from that number. Below 1, continue from 18.

Your clock must be right to one second or two. A clock that is 10 seconds wrong names the wrong beacon.

Use the four dashes to judge a path

Each dash has one tenth of the power of the dash before it. That is a step of 10 dB. So the beacon measures the path for you.

You hear What it means
Nothing The path is closed, or the beacon is off the air
The callsign and 1 dash The path is open for 100 watts, with little to spare
2 dashes 10 watts gets through. The path has about 10 dB to spare
3 dashes 1 watt gets through. About 20 dB to spare
4 dashes A tenth of a watt gets through. About 30 dB to spare

The same test compares two antennas. Listen to one beacon on each antenna in turns that follow each other. One more dash is 10 dB better.

Listen

Path A or your own receiver. Tune as in “What to tune”. In SDRangel, add the channel “SSB Demodulator”. A positive value in its “BW” control selects upper sideband. Set the shift so that the channel sits 700 Hz below the beacon frequency.

Path B. Give radiod the five beacon channels. The project includes the settings.

cat ~/ka9q-radio/config/examples/fragments/ibp.conf | sudo tee -a /etc/radio/radiod@hf.conf >/dev/null
sudo systemctl restart radiod@hf

The lines you added are these.

[IBP]
data = ibp.local
samprate = 12k
encoding = s16be
mode = cwu
freq = "14m100 18m110 21m150 24m930 28m200"

Then listen. The monitor program plays the channels on the sound output of the computer it runs on.

monitor ibp.local

Result: a list of five sessions. Use the arrow keys to select one. Press M to mute all, then u to open the selected one. Press Q to leave. The cwu mode moves the beacon to a 500 Hz tone.

hf has no loudspeaker in my station. Run monitor on a computer with sound, on the same network, with ka9q-radio installed. I did not confirm the network settings that this needs.

What a good reception sounds like

A burst of fast Morse code that lasts a few seconds. Then long tones, each weaker than the one before, in clear steps. Then, 10 seconds after the start, a new station with a new strength. A steady carrier with no steps is not a beacon.

What to expect

With a small loop indoors, I hear a beacon in fewer than 1 turn in 100. In one week I heard northern Canada, California and Hawaii the most. New York, New Zealand and Japan came in now and then. The other twelve, almost never. On 24.930 and 28.200 MHz I heard nothing that I can count.

An antenna outdoors hears far more than that. Your list of regular beacons depends on where you are.

How to log it

Listen to one full round, 3 minutes, on one band. Write one row.

EXAMPLE (one round on 14.100 MHz, invented)
UTC date and time of the round   2026-01-01 18:00
Band                             20 m
Dashes heard, beacons 1 to 18    0 2 4 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0

Do this at the same hours for some days. The rows show which paths open, and when.

Programs that do this for you

  • Faros, for Windows. It watches all 18 beacons on five bands, and measures signal quality and delay. It needs a CW or SSB receiver and a sound input. I listed it at $25 after a 30-day trial on 2026-10-07. Its page did not show a price on 2026-10-10.
  • Beacon Monitor 2, for Linux. The NCDXF page calls it a Faros-like monitor. It is open source, a beta version, written for a SoftRock receiver, and last changed in 2018.
  • ka9q-radio gives the five channels, but no program that measures them. My own program does that job. It is not public.

I have run none of the first two.

9. Signal 3: military voice (HFGCS)

What it is

The US Air Force talks to its aircraft on shortwave. The network is the High Frequency Global Communications System (HFGCS). Its frequencies are public. Its best-known messages are long strings of letters and digits, read in the spelling alphabet. Anyone can hear them. Only the intended receivers know what they mean.

What to tune

Frequency Mode Share of the speech at my station
4724 kHz Upper sideband About 15 in 100
8992 kHz Upper sideband About 40 in 100
11175 kHz Upper sideband About 40 in 100
15016 kHz Upper sideband About 5 in 100

Public references list these four as the main voice frequencies. Hobby lists add 6739 and 13200 kHz. I heard nothing I can count on those two in one week.

Start on 11175 kHz by day and 8992 kHz in the evening.

What a good reception sounds like

A clear voice in English, with the flat rhythm of someone who reads a list. Most of what it reads are letters in the spelling alphabet and digits. A typical broadcast lasts about 20 seconds. Some repeat on several frequencies at the same moment.

This is an example that I wrote. The groups are invented.

EXAMPLE (invented)
"All stations, all stations, this is EXAMPLE. Stand by.
 Alfa Bravo Two Charlie Delta Seven Echo ... I say again ...
 This is EXAMPLE, out."

How long to wait

The network is quiet for long times, then busy. My first test heard nothing in 30 minutes. In one later week my station recorded about 50 pieces of speech a day. Leave the receiver on the frequency while you do other work.

Listen

Path A or your own receiver. Set upper sideband. Set the dial to the frequency in the table. In SDRangel, use the channel “SSB Demodulator” with a positive “BW” value near 3 kHz and a shift of 0 from the frequency.

Path B. Add this section at the end of /etc/radio/radiod@hf.conf. It makes one channel for each frequency.

[HFGCS]
data = hfgcs.local
mode = usb
samprate = 12k
freq = "4724k 8992k 11175k 15016k"
sudo systemctl restart radiod@hf
monitor hfgcs.local

Result: a list of four sessions, each with noise until someone speaks.

Record without a person at the receiver (Path B)

Caution. A recording of this traffic is for your own ears. Do not publish it. Keep the folder on your own computer.

pcmrecord is the recorder of ka9q-radio. It writes one sound file for each channel.

sudo install -d -o radio -g radio /var/lib/hfgcs
sudo -u radio pcmrecord -d /var/lib/hfgcs -s -L 600 hfgcs.local
  • -d names the folder.
  • -s makes one folder for each channel, then for each year, month and day.
  • -L 600 starts a new file every 600 seconds.

pcmrecord records all the time, noise too. A 12 kHz channel fills about 2 GB each day. Four channels fill about 8 GB each day. I found no public program that keeps only the speech. My own program does that: it tells speech from static by its rhythm. Syllables come 3 to 8 times each second.

Delete old files with this command. It removes files older than 7 days.

sudo -u radio find /var/lib/hfgcs -type f -mtime +7 -delete

Make text from a recording

Program: whisper.cpp, free and open source. It runs with no screen. These are the steps from its README. I use another free program for this job, faster-whisper, on another computer.

  1. Build the program and get a model.

    sudo apt install -y cmake ffmpeg
    cd ~ && git clone https://github.com/ggml-org/whisper.cpp.git && cd whisper.cpp
    sh ./models/download-ggml-model.sh base.en
    cmake -B build
    cmake --build build -j --config Release
    
  2. Convert one recording to the form that the program reads.

    ffmpeg -i <recording>.wav -ar 16000 -ac 1 -c:a pcm_s16le /tmp/one.wav
    
  3. Make the text.

    ./build/bin/whisper-cli -f /tmp/one.wav
    

    Result: lines of text, each with a start time and an end time.

Expect mistakes. The program writes words for pure noise too, so use it only on a file that you know holds speech. Always keep the sound: the text is a guide to the sound, not a record.

How to log it

Log that a broadcast arrived, not what it said.

EXAMPLE (a log that is safe to keep and to share, invented)
UTC date and time    Frequency    Kind             Length
2026-01-01 18:42     11175 kHz    letter groups    25 s
2026-01-01 19:10      8992 kHz    short call       8 s

10. Sharing (optional)

You do not need to share anything. If you do, read this first.

Your station becomes public. Every network below shows a station name, and most show a position or a grid locator. A six-character locator places you within a few kilometers. Choose a name that does not name you or your street.

Signal Where people share My advice
DSC YaDDNet, a public database. SDRangel can feed it Do not feed it. It publishes real calls: ship numbers and positions. That breaks the rule in section 3
Beacons The NCDXF page lists stations that run Faros and publish their results Fine. The beacons are amateur radio. I do not feed them
HFGCS Hobby sites collect recordings and text Do not. Share counts and times only

11. Running it unattended

Path A. SDRangel keeps its DSC log while it runs. Leave the PC on, with sleep off, on one DSC frequency. That is the only unattended job on Path A.

Path B. radiod is a service already. It starts with the PC. To make the recorder a service too, create this file.

sudoedit /etc/systemd/system/hfgcs-record.service
[Unit]
Description=Record the HFGCS voice channels
After=radiod@hf.service
Requires=radiod@hf.service

[Service]
User=radio
Group=radio
ExecStart=/usr/local/bin/pcmrecord -d /var/lib/hfgcs -s -L 600 hfgcs.local
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now hfgcs-record
systemctl is-active hfgcs-record        # expect "active"

I wrote this service file for this guide. I did not run it. My station uses my own recorder.

Run the delete command from section 9 each day. A full drive stops the receiver’s other jobs.

In the PC’s firmware settings, set the PC to start again after a power cut.

12. Check that it works

  1. The receiver hears shortwave. Tune 10000 kHz, AM or upper sideband. In most of the world you hear a time signal with a tick each second. Wait: 1 minute.

  2. The clock is right. Compare the PC clock with that time signal. They must agree to one second.

  3. Beacons. Listen on 14.100 MHz for three full rounds, 9 minutes, in daylight. Pass: one beacon or more, with dashes that get weaker in steps. With an indoor antenna you may need several tries at other hours.

  4. The beacon is the one the clock names. If you read Morse code, compare the callsign with the NCDXF list for that turn.

  5. DSC. Leave the decoder on 8414.5 kHz for 4 hours. Pass: one row or more with a passed check and a test telecommand. My first test heard 9 calls in two hours.

  6. HFGCS. Leave the receiver on 11175 kHz by day or 8992 kHz in the evening. Pass: one broadcast with letter groups. Wait: up to a day.

  7. Path B only. Run these.

    systemctl is-active radiod@hf            # expect "active"
    lsusb -t | grep -B2 usbfs                # the receiver's line ends in 5000M
    ls -R /var/lib/hfgcs | head              # new .wav files
    

Then write down what you hear in one normal day: beacons per round, DSC calls, broadcasts. That is your baseline. Change one thing at a time, and compare with it.

13. If it does not work

Symptom Likely cause What to do
SDRangel shows a flat spectrum on every band with a V4L The driver is older than 2026 and does not know the V4L’s tuner Update the driver as the RTL-SDR Blog guide says. Try a newer SDRangel
Linux: the radio is “busy” or cannot be opened The kernel’s TV driver took the RTL radio Block the driver as the RTL-SDR Blog guide says. Restart the computer
A strong false line sits on the frequency you want The exact center of an RTL radio has a false signal Move the center frequency 10 to 50 kHz away. Use the channel’s shift
DSC: the buzz is there, but no row appears “Mode” is set to VHF, or the shift is wrong Set MF/HF. Check that center plus shift is the exact frequency
DSC: rows appear and vanish, or are marked invalid Weak or damaged calls Normal. Keep “Filter Invalid” on. Never trust a row that failed its check
DSC: nothing for hours Wrong band for the hour, or an indoor antenna Use 8414.5 kHz by day and 4207.5 kHz at night. Put the antenna outside
A row says “Distress alert” A real call, or a false decode Do nothing with it. Section 3
Beacons: the wrong station for the time The clock is wrong by 10 seconds or more Synchronize the clock. Check it against a time signal
Beacons: a steady tone with no steps Another station or a local noise, not a beacon Wait for the 10-second pattern. A beacon stops after its turn
Beacons: nothing on 24.930 and 28.200 MHz The band is closed. This is common Listen at local noon. Use 14.100 and 18.110 MHz
Voice sounds like a duck Lower sideband, or the dial is off Set upper sideband. Set the exact frequency
HFGCS: nothing for an hour Normal. The traffic comes in bursts Wait. Try 8992 and 11175 kHz
whisper.cpp writes text for a file of noise The model invents words when there is no speech Use it only on files that hold speech. Listen first
Shortwave is full of signals that should not be there (Path B) No 30 MHz low-pass filter, so signals above 32.4 MHz fold back Fit the filter (section 4)
radiod reports dropped data The RX-888 is on a hub or a USB 2 socket Use a USB 3.0 socket on the main board
The loop has no signal DC is wrong: the limiter blocks it, or the injector has no power Injector first on the loop cable. Check its power supply
2187.5 kHz is weak (Path B) The F3060 shelf filter is on Bypass it
A ka9q-radio channel hears nothing on its frequency The frequency has no unit. In ka9q-radio, 22500 means 22.5 MHz Write the unit: 8992k
The drive is full pcmrecord records all the time Run the delete command in section 9 each day

14. What I did wrong

  • My antenna is still indoors. The loop sits near the computer, which is the worst place for it. I hear a beacon in fewer than 1 turn in 100. Put the antenna outside first.
  • I judged DSC from one short test. My first test heard 9 calls in two hours on one frequency. I thought the signal was rare. With all six frequencies and a week of time, the count was about 350 a day.
  • I judged HFGCS from 30 minutes. I heard nothing and wrote “no traffic”. The network is quiet, then busy. A week showed about 50 pieces of speech a day.
  • I trusted a label before I listened. My program labels about 30 recordings in 100 as coded messages. I have not checked that label by ear. Nobody has checked that every recording is an Air Force station.
  • I counted on the high bands. On 24.930 and 28.200 MHz I heard one turn each in a week. That is nothing. An indoor loop does not show what those bands can do.

15. Not run and not confirmed

  • I ran none of the public programs in this guide for these signals. My station uses my own decoders. SDRangel, YaDD, Faros, Beacon Monitor 2 and whisper.cpp are not run here.
  • Every SDRangel step in sections 5, 7, 8 and 9. The names of the controls are from the project’s documents, read on 2026-10-10. I did not confirm the exact name of the button that adds a channel.
  • That SDRangel 7.27.2 holds a driver that knows the RTL-SDR Blog V4L. The V4L needs a 2026 driver.
  • The RTL-SDR Blog V4L on shortwave. Its shortwave range and its built-in converter are the maker’s statements. I have not used it below 24 MHz.
  • That the DSC Demodulator of SDRangel decodes well on an 8-bit radio. I have no count for it.
  • The content of the “ECC” and “Valid” cells in the SDRangel table. The documents name the columns, not the words in them.
  • YaDD: its price, its input and its settings. I could not read its documents. For an SSB receiver and a sound-card decoder, the usual practice is upper sideband with the dial 1.7 kHz below the DSC frequency. I did not confirm that from a source.
  • The ka9q-radio section [HFGCS] in section 9. I wrote it for this guide from the form of the project’s examples. My station takes its voice channels in another way.
  • The pcmrecord command in section 9 and the service file in section 11. The options are from the project’s document. I did not run that combination. I did not confirm that a channel in usb mode sends sound all the time. The 2 GB a day is computed, not measured.
  • monitor on a second computer. I did not confirm the network settings that it needs.
  • The whisper.cpp steps. They are from its README. I use faster-whisper with the model small.en. The Ubuntu package names cmake and ffmpeg are from memory.
  • The beacon schedule table. I computed it from the order on the NCDXF “Locations” page and the clock rule in the script of the NCDXF schedule page. I did not compare each cell with the air.
  • Which beacons are on the air today. The NCDXF page marks beacons that are off.
  • The price of Faros. The page showed none on 2026-10-10.
  • The upper sideband mode of HFGCS. The public overview that I link says “single sideband”. Upper sideband is what my station uses, and it works.
  • The “when to try it” column of the DSC table. It is the general rule of shortwave, not a count from my station.
  • The time signal on 10000 kHz in the checks. It is a published fact about the stations WWV and WWVH. I did not use it as a test.
  • The price and the connector of the RX-888 Mk II, the F3060 and the limiter. Read each listing.
  • That the newest ka9q-radio builds with the steps in section 6. I built the commit named there.
  • No step in this guide was run on a new, empty computer as written.

16. Sources

All were read on 2026-10-10, except where a date is given.

The episode. Its fact sheet, its script and its link list, in the series’ private repository. The numbers from my station are one week, rounded.

The full-station guide. Build the station, sections 2, 4, 11, 15, 17 and 18, checked against my station on 2026-10-07. The parts, the prices, the ka9q-radio steps and the law paragraph come from it.

DSC. ITU-R M.493, the standard: https://www.itu.int/rec/R-REC-M.493 (linked, not read today). US Coast Guard, digital selective calling: https://www.navcen.uscg.gov/digital-selective-calling. The frequencies, 47 CFR 80.359: https://www.law.cornell.edu/cfr/text/47/80.359. SDRangel: https://github.com/f4exb/sdrangel, its release list, and the documents of its DSC Demodulator, SSB Demodulator, RTL-SDR input and main window. YaDD, a description by a user: https://swling.com/blog/2022/11/guest-post-monitoring-digital-selective-calling-dcs-with-yadd (found in a search, not read in full).

Beacons. NCDXF/IARU International Beacon Project: https://www.ncdxf.org/beacon/, its pages “Locations” (https://www.ncdxf.org/beacon/beaconlocations.html) and “Listener programs” (https://www.ncdxf.org/beacon/beaconprograms.html), and the script of its schedule clock. Faros: https://www.dxatlas.com/Faros/. Beacon Monitor 2: https://github.com/yokoyama-flogics/ibp_monitor_2.

HFGCS. A public overview: https://en.wikipedia.org/wiki/High_Frequency_Global_Communications_System. whisper.cpp: https://github.com/ggml-org/whisper.cpp. faster-whisper: https://github.com/SYSTRAN/faster-whisper.

The receiver. ka9q-radio: https://github.com/ka9q/ka9q-radio. Read: config/examples/fragments/ibp.conf, config/examples/radiod@rx888-generic.conf, share/presets.conf, docs/utils/pcmrecord.md, docs/utils/monitor.md, docs/utils/control.md. RTL-SDR Blog V4L: https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/.

Rules. 47 U.S.C. 605: https://www.law.cornell.edu/uscode/text/47/605 (read 2026-10-07).

Footnotes

  1. Mike Holt’s summary of NEC 810.21, 2020 edition: https://www.mikeholt.com/files/PDF/20BG_810.21.pdf. ↩

SpurMy own decoders are not public, and I ran none of the public programs in this guide. Section 15 lists every step that is not proven.