Go to content

FreeDV Modem - SARCNET

School Amateur Radio Club Network
School Amateur Radio Club Network
School Amateur Radio Club Network
School Amateur Radio Club Network
Skip menu
Title
Skip menu
Skip menu
FreeDV Modem
FreeDV is a digital voice mode specifically for Amateur Radio HF communications. It provides wide-bandwidth, crystal-clear, noise-free audio and works with weak signals down to 5 dB under the ambient HF noise level. For us it is a game-changer: We now use it every day to run our School Amateur Radio Club Net on 7083 kHz, which we previously ran for 10 years on 7105 kHz - often putting up with barely readable and very noisy analog single-sideband signals. With FreeDV we now have our Amateur Radio (rig) connected to Hi-Fi speakers and listen all day for stations calling in without the annoying snap, crackle and pop of HF band noise. We can hear local, and many more DX stations from ZL and VK6, just like they were in the other room! When conditions on 40 m are stable we can often work stations up to 300 km away on only 100 mW PEP. So what's not to love? Well, actually, one really big thing for us: How do we use FreeDV easily when setting up our portable station at parks or summits, or safely when mobile in our car, all without having to lug around and interact with a laptop computer?  

This project provides a small, "black-box" modem to easily setup your portable FreeDV station, or to use it safely (hands-free) in your car. It has no distracting screen, keyboard or mouse and runs on 12 V DC. Instead a small dash-mounted console controls everything and provides visual feedback. You just plug in a USB headset and a USB controlled Amateur Radio transceiver. You can now take FreeDV with you wherever you go!
Mobile Setup with PyFreeDV Modem, PyFreeDV Console, Headset and Uninterruptable Power Supply
Features
  • Safe operation while mobile:
    • No distracting displays or keyboards
    • Hands free (except for dash-mounted PTT button)
  • Radio frequency and modulation mode is set using the rig
  • Rig Audio is via USB or an external USB sound adapter
  • Rig PTT is via USB or an external audio VOX control
  • Works with USB or Bluetooth, Headset or Mic and Speaker
  • FreeDV Reports are uploaded via WiFi a Smart-Phone Hotspot
  • FreeDV Reported Frequency is obtained from the rig or the configuration file
  • FreeDV Reports can be monitored on a Smart-Phone Web Browser
  • Automatic start-up: 65 second start-up time
  • Shut-down button with green 12V DC power indicator: 15 second shut-down time
  • Regulated 5.1 V USB Power for the Raspberry Pi prevents "Low Voltage Warning" and CPU throttling
  • Uninterruptible Power Supply (optional) keeps PyFreeDV Modem alive when the engine is off and charges when the engine is on
  • Fused, 12 V power cable with in-line power switch (optional)
Hardware Setup
This project uses the following hardware:
FreeDV Console Wiring
Prepare a 10-Way rainbow ribbon cable to connect between the PyFreeDV Modem and PyFreeDV dash-mounted console.
FUNCTION
PIN
PIN
FUNCTION
APPLICATION
LED VOLTAGE
LED CURRENT
LED RESISTOR
WIRE COLOUR
3.3V
1
2
5V
SHUTDOWN BUTTON LED
2.13 V
10 mA
270 R
BROWN
GPIO2
3
4
5V





GPIO3
5
6
GND





GPIO4
7
8
GPIO14
PTT BUTTON



RED
GND
9
10
GPIO15
GROUND FOR LEDS



ORANGE
GPIO17
11
12
GPIO18
RED LED
1.77 V
6 mA
270 R
YELLOW
GPIO27
13
14
GND
GREEN LED
2.35 V
6 mA
180 R
GREEN
GPIO22
15
16
GPIO23
BLUE LED
2.65 V
8 mA
82 R
BLUE
3.3V
17
18
GPIO24





GPIO10
19
20
GND





GPIO9
21
22
GPIO25





GPIO11
23
24
GPIO8





GND
25
26
GPIO7





N.C.
27
28
N.C.u





GPIO5
29
30
GND





GPIO6
31
32
GPIO12





GPIO13
33
34
GND
SHUTDOWN BUTTON



PURPLE
GPIO19
35
36
GPIO16
PTT BUTTON  LED
1.77 V
10 mA
150 R
GREY
GPIO26
37
38
GPIO20
EXTRA



WHITE
GND
39
40
GPIO21
GROUND FOR BUTTONS



BLACK
Wiring Notes
Observe that the ribbon cable must thread into the Raspberry Pi enclosure of the PyFreeDV Modem and the PyFreeDV Console. First check that the cable and crimp connectors will fit through the apertures.

The blue highlighted blocks above indicate the position of the crimp sockets on the 40-pin header. The Application and columns to the right refer to those pins.

To calculate the LED resistor values use R = (V supply - V led) / I led.  V supply = 5V for the Shutdown Button LED and 3.3V for all others. Choose the next highest preferred resistor value in the range.

To wire the 10-way rainbow ribbon cable to the 40-pin IDC header on the Raspberry Pi:
  • Do not solder the ribbon cable conductors directly to the pins
  • Buy an IDC Crimp Connector Kit!
  • Buy the correct Crimping Tool!
  • Separate the three sets of ribbon cable wires and shorten the centre bundle
  • Strip the wire ends to 2mm
  • Insert the wire ends into the crimp socket
  • Fold over the tabs with pinch-nose plyers to initially secure the wire
  • Crimp the socket using the Crimping Tool
  • Choose 1-pin, 5-pin and 4-pin housings from the kit
  • Insert the crimp sockets into the correct positions of the correct housing as shown above
  • Make sure the crimp sockets lock into the housings
  • Plug the ribbon cable into the 40-way IDC header on the Raspberry Pi

The IDC Crimp Connector Kit comes with both pin and socket crimp connectors. If required, you can make a disconnect in the cable as follows:
  • Cut the cable at the required position
  • Crimp pins to each wire on the PyFreeDV Console side
  • Crimp sockets to each wire on the Raspberry Pi side
  • Insert the pins and sockets into housings. You will need four, 5-way housings
  • Use superglue (sparingly) to glue the housings on each side of the cable together to make a single 10-way disconnect.

To wire the LED resistors:
  • Cut the LED resistor pigtails to 3mm long
  • Cut the RGB LED pigtails flush with the shortest lead (remember the RGB/Ground order)
  • Solder the LED resistors to the RGB LED and to the Switch LED connections

To wire the additional ground wires:
  • Cut black hook-up wire to 100mm long
  • Strip the ends to 2mm and tin them with a soldering iron
  • Solder a hook-up wire between the Switch LED Grounds
  • Thread thin heat-shrink tubing over one hook-up wire
  • Solder that hook-up wire between the RGB LED Ground and one Switch LED Ground  

To wire the PyFreeDV Console:
  • Thread the ribbon cable into the enclosure
  • Separate and fan out the ribbon cable into three bundles 100mm long
  • Separate and fan out the ends of the ribbon cable 25mm long  
  • Strip the wire ends to 2mm and tin them with a soldering iron
  • Thread thin heat-shrink tubing over the ends of the ribbon cable
  • Solder the ends of the ribbon cable to the correct components
  • Position and shrink the heat-shrink tubing over all exposed conductors
Connecting Crimp Sockets to the Ribbon Cable using the Crimping Tool
Connecting The Ribbon Cable to the Raspberry Pi
PiFreeDV Console
USB Power Adapter
It is a sad fact that those USB power outlets in cars (and most USB AC phone chargers for that matter) do not deliver sufficient voltage to boot up and power a Raspberry Pi without getting a "Low Voltage" alarm and causing the CPU frequency to be throttled. Instead, an elevated USB supply must be maintained between 5.1 V and 5.25 V. We always use a switch-mode regulator module to efficiently convert between 12 - 14 V car power and 5.1 V USB power. Our favourite is the XL4015 module which has a multiturn, pre-set potentiometer to set the output voltage (and often the same to set the output current limit). There are some precautions, though: A switch must be provided for the 12 V supply as the regulator has a quiescent current of 60 mA. When the regulator is first started it draws a large in-rush current and won't start if preceded by a current limiter of less than 2A.  

USB Power Check
Always use the following command on a Raspberry Pi in a terminal window to check if it is or has been subject to under-voltage, temperature limits, mild CPU frequency capping or emergency CPU throttling:

vcgencmd get_throttled

It will return a hexadecimal bitmask code as follows:

• Bit 0  (0x00001): Under-voltage currently active
• Bit 1  (0x00002): ARM frequency currently capped
• Bit 2  (0x00004): Currently throttled
• Bit 3  (0x00008): Soft temperature limit currently active
• Bit 16 (0x10000): Under-voltage has occurred since last reboot
• Bit 17 (0x20000): Frequency capping has occurred since last reboot
• Bit 18 (0x40000): Throttling has occurred since last reboot
• Bit 19 (0x80000): Soft temperature limit has occurred since last reboot

The best result is 0x00000
Uninterruptable Power Supply (Optional)
An Uninterruptable Power Supply (UPS) is required if you want to protect against corruption of the Raspberry Pi's micro SDHC card in the event of an abrupt power failure. For example, turning off the car ignition switch without shutting down the PyFreeDV Modem first. The UPS may only be needed to keep the device running for a few minutes, long enough for you to remember to press the green shutdown button and then disconnect the batteries via the power toggle switch. There are many solutions for an automotive UPS, but we wanted to avoid the risks associated with charging Lithium batteries in a potentially hot car. We originally tried a 20000 mAh USB Power Bank, but it did not maintain sufficient output voltage during the boot up process. The "Under Voltage Alarm" was raised and the CPU frequency was throttled as a result.

Instead, we decided to design our own UPS. Nickel Metal Hydride (NiMH) batteries are safer than Lithium batteries. They can be charged to about 80% capacity using a simple Constant Current/Constant Voltage charging regime. They and do not need cell load-balancing. Since we were already using an XL4015 CC/CV DC/DC converter to provide 5.1V to run the Raspberry Pi, we thought we would use another one to charge a small 9.6 V (8S) 2550 mAh NiMH battery pack from the same 12V supply. The charging current was set to 0.1C = 255 mA and the charge voltage was set to 11.2 V. A low voltage-drop 1N5822 3A Schottky diode combiner circuit was used to provide an automatic changeover from the car battery supply to the UPS battery supply. The output regulator is set to 5.1 V, the minimum to avoid Raspberry Pi undervoltage alarms, and 3 A for good measure. A double-pole toggle switch simultaneously disconnects the car battery and the backup battery, preventing discharge. The following pictorial schematic diagram shows the wiring and the setting of the XL4015 potentiometers.
Uninterruptable Power Supply Pictorial Schematic

The following photo shows the general layout of the UPS. It is housed inside a plastic zippy box. Partitions are used to separate the regulators from the battery, and to hold everything in place. The 9.6 V battery pack was made from 8 AA cells. Tin tabs were spot-welded to join the adjacent cells together. It is well worth getting a battery-operated, spot-welder for this task. Absolutely do not try to directly solder to the battery terminals - They can short and may even explode. There is also an in-line 3 A fuse in the car power connector. We estimated the NiMH battery would probably power the PyFreeDV Modem for nearly three hours after the car power was switched off. So its OK to leave it running while you stop for coffee.

Uninterruptible Power Supply Wiring
Software Setup
This project uses the following free, open-source software:
  • Raspberry Pi Imager for Raspberry Pi OS (64-bit) Lite: A port of Debian Trixie with no desktop (516 MB download)
  • A FreeDV codec, called radae_headless, ported by Peter Marks VK3TPM to run without a GUI.
  • HAMLIB Ham Radio Control Library
  • Python 3.14
  • Our PyFreeDV Modem script:
    • Runs as a Linux service on power up
    • Maintains a system configuration file
    • Controls an Amateur Radio transceiver: Frequency, Mode and PTT
    • Controls radae_headless, the FreeDV codec
    • Spots activity on the FreeDV Reporter website
    • Provides a Press-To-Talk toggle switch GPIO interface for hands-free operation
  • Our PyFreeDV Modem Installer script:
    • Upgrades the RPi OS
    • Installs Linux packages and Python libraries
    • Compiles radae_headless
    • Creates a Linux boot service
  • WinSCP or PuTTY to configure the system using SSH over you Home WiFi network
Software Installation
Software installation requires the preparation of a micro SDHC with a fresh installation of a Raspberry Pi OS Lite (64-bit) and then installation of the PfreeDV Modem software.

The current version of the software is: PyFreeDV Modem version 1.0
Prepare a micro SDHC Card
To get started, insert a 32 GB micro SDHC Card into the PC via a USB adapter. Download and run Raspberry Pi Imager as follows:
Select Raspberry Pi OS Lite (64-bit)
Select Device - Raspberry Pi 3

Select OS Raspberry Pi OS (Other)

Select the location, time zone and keyboard layout
Select your micro SDHC card storage device
Enter the network hostname of the Raspberry Pi
Enable SSH
Enter your username and password
Enter the SSID and Wi-Fi password of your Wi-Fi Router
Confirm Write Image
Disable Raspberry Pi Connect
Review and select Write Image
Remove the micro SDHC card
Wait for the image to be written
Wait for the image to be verified
Once the micro SDHC Card has been prepared:
  • Power off the Raspberry Pi
  • Insert the micro SDHC Card into the Raspberry Pi
  • Power up the Raspberry Pi - It will boot up and connect to your WiFi router
  • Discover the IP address of the Raspberry Pi:
    • Log into your WiFi Router and find the list of connected stations. Look for the RPi host name; or
    • Use a free IP scanner such as Advanced IP Scanner.  Look for the RPi host name; or  
    • Open a terminal session, ping your WiFi network broadcast address and use Address Resolution Protocol; or
      • Type: ping 192.168.1.255
      • Type: arp -a
      • You will then see a list of all the IP address on your WiFi network. It's the new one!
      • Ping the address with the RPi powered up or down to check.
    • If all else fails, temporarily connect an HDMI monitor and USB keyboard:
      • Log in to the Raspberry Pi using your username and password
      • Type: ifconfig
      • Look for the inet address associated with the wlan0 port
  • Start SCP and log in to the Raspberry Pi IP address over WiFi using your credentials
Install the PyFreeDV Modem Software
Once logged in: Copy and paste, or type, the following commands in bold to download and run the installer from this website; edit the configuration file and reboot the Raspberry Pi:

curl -fLo pyfreedv.sh https://sarcnet.org/files/FreeDV/pyfreedv.sh && chmod +x pyfreedv.sh && sudo ./pyfreedv.sh

You will have to re-enter your password. The installation process will take about 15 minutes. Then:

nano /opt/freedv/pyfreedv.txt

Edit the configuration file as described here. Then:

sudo reboot
Open WinSCP
Open the PuTTY window
Configuration
Before using the software for the first time, or to make changes, you will have configure the PyFreDV Modem application as follows:

  1. Log into the Raspberry Pi with your user credentials:
    1. Using WinSCP or PuTTY from a remote PC over the WiFi network; or
    2. By temporarily connecting an HDMI display and USB Keyboard
  2. Type: pacmd list-sources | grep -e 'name:' to list the names of all the audio input devices
  3. Type: pacmd list-sinks | grep -e 'name:' to list the names of all the audio output devices
  4. Type: ls -l /dev/serial/by-id to list the names of all the USB serial devices.
  5. Match your rig's serial device name to the USB port, usually shown as: -> ../../ttyUSB0
  6. Edit the configuration file using:
    1. The built-in WinSCP editor on a remote Windows PC; or
    2. PuTTY on a remote Winodws PC: Type: nano /opt/freedv/pyfreedv.txt. Press CTRL-O, <ENTER>, CTRL-X when finished; or
    3. The HDMI display and USB Keyboard: Type: nano /opt/freedv/pyfreedv.txt. Press CTRL-O, <ENTER>, CTRL-X when finished .

The default configuration file is as shown below, with comments in bold. You will have to edit the Station, Audio, Rig and FreeDV sections:

[Station]
callsign = NOCALL                  Your Callsign
grid_square = QF22NC            Your Maidenhead locator

[Audio]
fromradio = alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo   Radio RX USB Audio Device
tospeaker = alsa_output.usb-Plantronics_Plantronics_DA45-00.mono-fallback                 Speaker USB Audio Device
toradio = alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo     Radio TX USB Audio Device
frommic = alsa_input.usb-Plantronics_Plantronics_DA45-00.mono-fallback                     Microphone USB Audio Device

[Rig]
model = IC7200                       HAMLIB Rig Model. See here. Note1.
rigid = 3061                             HAMLIB RIG ID
freq = 7083000                        Last Used Frequency. Note 2.
mode = LSB                             Last Used Modulation Mode
hamlib = yes                            Use HAMLIB to Control Radio
port = /dev/ttyUSB0                  USB Serial Device to Control Radio
baud = 19200                           USB Serial Device Baud Rate

[Modem]
version = PyFreeDV 1.0             Modem version as sent to FreeDV Reporter. Note 3.
beep = yes                               Enable an audible beep on RX SYNC Start and Stop
ptt_button = 4                          GPIO Port for the PTT Button
ptt_led = 19                             GPIO Port for the PTT LED
red_led = 17                            GPIO Port for the RGB Red LED
green_led = 27                         GPIO Port for the RGB Red LED
blue_led = 22                           GPIO Port for the RGB Red LED
snr_level = (0, 10, 20)               SNR Level Breakpoints in Percent for Green, Purple, Blue LED Display. Note 4.
mic_level = (30, 50, 80)             Mic Level Breakpoints in Percent for Green, Purple, Blue LED Display
rgb_red = (0.02, 0.0, 0.0)          RGB LED Colour Ratio for Red. Note 5.
rgb_green = (0.0, 0.02, 0.0)       RGB LED Colour Ratio for Green
rgb_purple = (0.05, 0.0, 0.05)    RGB LED Colour Ratio for Purple
rgb_blue = (0.0, 0.0, 0.05)         RGB LED Colour Ratio for Blue

[FreeDV]
mode = RADEV1                        Codec Mode as sent to FreeDV Reporter
status = TX                               Status (TX or RX Only) as sent to FreeDV Reporter
message = PyFreeDV is Great!   Message as sent to FreeDV Reporter
report = yes                              Use FreeDV Reporter
url = https://qso.freedv.org:443  FreeDV Reporter URL

Notes:
  1. The PyFreeDV app automatically sets the Rig Id from the Rig Model, but the model must exactly match the name in the list.
  2. The PyFreeDV app always starts on the frequency and mode in the configuration file, but saves any subsequent changes.
  3. The PyFreeDV app version is set automatically by the app  
  4. The RGB LED indicates: Off = N/A, Red = Bad, Green = Good, Purple = Better and Blue = Best, according to the breakpoints shown.
  5. The three floating-point numbers in the brackets indicate the ratio of the Red, Green and Blue LED drive level from 0.0 to 1.0. They are all set fairly low to avoid excessive glare in a vehicle at night.
Configure Mobile Internet Access
The following additional configuration is required to add a mobile phone hotspot to the PyFreeDV Modem. When you transfer the modem to the vehicle and are outside the range of the home WiFi router, the modem should connect to your mobile phone hotspot. Copy and paste, or type, the following two commands:

sudo nmcli c add con-name <NAME> ifname wlan0 type wifi ssid <SSSID> wifi-sec.key-mgmt wpa-psk wifi-sec.psk <PASSWORD>
sudo nmcli c up <NAME>

Where:
<NAME> is the name given to the new WiFi interface
<SSID> is the ssid of the mobile phone hotspot
<PASSSWORD> is the password to access the mobile phone hotspot
Configure the Audio Levels
To set the audio volume control levels for the headset and rig interfaces you have to access the ALSA sound system by typing the following commands in bold. Different devices will have different soundcard numbers and control names. So the first step is to identify them for your set up. Some devices have sub-controls, which can only be found by querying the main control. You need to identify a total of four (4) controls: The headset earphone and microphone and the rig TX and RX controls. Then you can set the levels for each control - at least within the limits shown. Start by setting all levels to 100% and then back them off if needed. When finished, make sure you store the levels.
Get the Soundcard Numbers
aplay -l | grep 'card'
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
card 1: DA45 [Plantronics DA45], device 0: USB Audio [USB Audio]                     This is our headset interface
card 2: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
card 3: Device [USB Audio Device], device 0: USB Audio [USB Audio]                  This is our rig interface
Get the Control Names for each Soundcard
amixer -c1 scontrols
Simple mixer control 'Bass',0
Simple mixer control 'Treble',0
Simple mixer control 'Sidetone',0
Simple mixer control 'Headset',0          This is the name of the headset control (it has two sub-controls - see next)
amixer -c3 scontrols
Simple mixer control 'Speaker',0           This is the name of the rig's TX audio control
Simple mixer control 'Mic',0                 This is the name of the rig's RX audio control
Simple mixer control 'Auto Gain Control',0
Get the Audio Control Levels
amixer -c1 get Headset
Simple mixer control 'Headset',0
 Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
 Playback channels: Mono                Headset Playback is the name of the headset earphone control
 Capture channels: Mono                 Headset Capture is the name of the headset microphone control
 Limits: Playback 0 - 25 Capture 0 - 4
 Mono: Playback 0 [0%] [-50.00dB] [on] Capture 0 [0%] [-9.00dB] [on]
amixer -c3 get Speaker
Simple mixer control 'Speaker',0
 Capabilities: pvolume pswitch pswitch-joined
 Playback channels: Front Left - Front Right
 Limits: Playback 0 - 30
 Mono:
 Front Left: Playback 0 [0%] [-45.00dB] [on]
 Front Right: Playback 0 [0%] [-45.00dB] [on]
amixer -c3 get Mic
Simple mixer control 'Mic',0
 Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
 Playback channels: Mono
 Capture channels: Mono
 Limits: Playback 0 - 14 Capture 0 - 30
 Mono: Playback 0 [0%] [-12.00dB] [off] Capture 0 [0%] [-12.00dB] [on]
Set the Audio Control Levels
amixer -c1 set Headset Playback 100%               Set headset earphone level
amixer -c1 set Headset Capture 100%                Set headset microphone level
amixer -c1 set Sidetone 50%                                Set headset sidetone level to monitor your microphone level
amixer -c3 set Speaker 100%                               Set rig TX level
amixer -c3 set Mic 100%                                       Set rig RX level
Save the Audio Control Levels
sudo alsactl store                                                   Save the audio level controls
Hardware Installation
  • Install the rig, PyFreeDV Modem, PyFreeDV Console and the UPS or USB power adapter in the vehicle in safe locations
  • Connect the PyFreeDV Modem to the rig:
    • A USB CAT cable for rigs with inbuilt USB serial ports and sound cards; or
    • A USB sound adapter for transmit and receive audio; with
    • A USB to serial converter for CAT control; or
    • A VOX control in the rig for PTT control; or
    • A VOX adapter for PTT control
    • See our USB Rig Interface page for details
  • Connect the USB/Bluetooth audio input and output devices to the PyFreeDV Modem:
    • A USB microphone and a USB Speaker; or
    • A USB Headset; or
    • A Bluetooth Headset
  • Connect the UPS or USB Power Adapter:
    • Connect 12 V car power to the UPS or USB power adapter
    • Connect 5 V UPS or USB power adapter power to the PyFreeDV Modem using a micro USB power cable
How it works
  • The user creates a new RPi OS Lite (64-bit) image using RPi Imager. Together with the user's login and home WiFi access credentials. It is a headless image, meaning it has no desktop. This was chosen to reduce to CPU overhead, especially on the RPi 3B+, and since a GUI requires an additional display which would also be distracting in a mobile environment.
  • The user logs into the RPi and manually downloads and runs an installation script
  • The installation script:
    • Updates and upgrades the operating system
    • Installs the required application libraries and removes any unused libraries
    • Removes any previous installations
    • Creates a user application directory
    • Clones and builds the FreeDV codec, radae_headless, a port by Peter VK3TPM from his GitHub repository
    • Creates a Python virtual environment
    • Installs the required Python libraries
    • Downloads the PyFreeDV application script, its configuration file and a beep.wav file from this website
    • Enables sound and WiFi services at boot up, without any user login, since PyFreeDV requires Pulse Audio and WiFi services, which are not normally started until user login
    • Creates, enables and restarts a PyFreeDV service file, which automatically executes on boot
    • Configures a RPi GPIO shutdown pin, in /boot/firmware/config.txt, to permit an external signal to gracefully shutdown the RPi
  • The PyFreeDV script:
    • Creates a user configuration file object:
      • Reads the file on start up
      • Saves the file with updated rig frequencies and modes
    • Creates a radae_headless codec object to send and receive the FreeDV digital waveform:
      • Starts the codec as a separate thread on start up
      • Captures real-time output from the codec
      • Signals RX and TX modes to the codec
    • Creates a HAMLIB rig object to control an Amateur Radio transceiver:
      • Gets the correct HAMLIB Rig ID for the configured HAMLIB Rig Model
      • Connects to the rig on start up
      • Gets and sets rig PTT, Frequency and Mode
    • Creates a GPIO ptt object to provide the user with a PTT button:
      • Monitors the PTT button state
      • Sets the modem's RX or TX mode   
    • Creates a FreeDV Reporter spot object to send operation reports to the FreeDV Reporter website:
      • Connects to the FreeDV Reporter website on start up
      • Sends Callsign, Locator, Frequency, Status and Message
      • Sends RX (SNR and Callsign) and TX Reports
    • Creates an integrated PyFreeDV modem object:
      • Initializes and starts the other objects
      • Runs a 100ms loop, polling the codec output for SYNC, EOO and TX events  
      • Beeps in the headset on SYNC events
      • Spots RX mode and SNR on SYNC events
      • Spots Callsign on EOO events
      • Spots TX mode on TX events
      • Tries to restart the codec on disconnection of the rig
      • Tries to reconnect the rig on disconnection of the rig
      • Tries to reconnect FreeDV Reporter on disconnection of FreeDV Reporter
Operation
  • In-line Power switch
    • Press to power up the PyFreeDV Modem - Check PyFreeDV console power LED is on
    • Press to power down the PyFreeDV Modem after it has been shutdown - Check PyFreeDV console power LED is off
  • PyFreeDV console momentary press-button shutdown switch - with green power indicator
    • Press to shutdown PyFreeDV Modem - Wait 15 seconds, then turn off in-line power switch
    • Green LED off: Power off
    • Green LED on: Power on
  • PyFreeDV console press-button PTT switch - with red PTT Indicator
    • Press to TX Press to RX
    • Red LED Off: RX Mode
    • Red LED On: TX Mode
  • PyFreeDV console RGB LED indicator
    • LED Off: No RX signal or TX audio
    • Red LED: Bad. RX signal below 0 dB SNR, or TX audio below 30%
    • Green LED: Good. RX signal above 0 dB SNR, or TX audio above 30%
    • Purple LED: Better. RX signal above 10 dB SNR, or TX audio above 50%
    • Blue LED: Best. RX signal above 20 dB SNR, or TX audio above 80%
  • Beep tone on audio output device
    • 1 Beep - On start or stop of FreeDV RX SYNC signal
Acknowledgments
Skip menu
Skip menu
Back to content