27 Doppler
Alan Johnston edited this page 2026-07-24 15:53:35 -04:00

Simulated Doppler Frequency Shift

If you upgrade your software to the latest master-b branch, you can try out simulated Doppler Shift. You can try it out with a CubeSatSim or a Lite.

Here's a Raspberry Pi Disk Image you can download and write to a 16 GB micro SD card or larger with the usual username pi and password raspberry

https://cubesatsim.org/download/cubesatsim-v2.2-bookworm.iso.zip

Here's the instructions you can use if your Pi Zero 2 is connected to the internet after logging in:

   cd
   cd CubeSatSim
   git pull
   git checkout master-b
   ./upgrade
   sudo reboot now

After the reboot, you will need to log back into your Pi Zero 2.

The Doppler Effect

Doppler frequency shift occurs if there is a speed difference between a transmitter and a receiver, such as an orbiting satellite and a ground station on the earth. On a satellite signal, you can see this shift on an SDR waterfall and sometimes hear it in the radio signal. This principle in reverse is how Doppler weather radar and radar speed guns work. For more info, see https://en.wikipedia.org/wiki/Doppler_effect

The CubeSatSim can simulate Doppler shift by simulating an orbit, calculating the Doppler frequency shift, then applying that new frequency each time the CubeSatSim begins a transmission. This allows for simulated Doppler shift for APRS, CW, SSTV, Pacsat, and Repeater modes. For continuous transmission modes such as FSK, BPSK, and FUNcube, the CubeSatSim can't simulate Doppler shift.

The best way to observe Doppler shift is to use CW (Morse Code) mode, since the frequency can be updated after each character is transmitted. Also, when Doppler shift is enabled, the CubeSatSim will transmit true CW, instead of the FM modulated CW audio that it normally uses. You will decode this CW using USB or LSB demodulation (CW demodulation also works, but the wider bandwidth of USB and LSB mode is easier).

In APRS, Pacsat, and SSTV modes, each time a new transmission starts, the frequency will be slightly different. In the Cross Band Repeater mode, each time you transmit and break the squelch, the repeated transmission frequency will be slightly different.

CubeSatSim Simulated Doppler

Here's how to try it. First switch your CubeSatSim to CW Mode (Morse Code) by pressing and holding the pushbutton for 5 blinks, or by logging into your Pi Zero 2 and typing this command (you can log into your Pi Zero 2 from a web browser using Raspberry Pi Connect - see the section below):

   CubeSatSim/config -m

After a reboot or a restart, you should hear CW on 434.9 MHz. It will be the usual FM mode.

To turn on simulated Doppler shift, use this command:

   CubeSatSim/config -K

Type y or yes to enable Doppler shift, then type sim for Simulated Doppler Shift mode. Here's what you should see:

   pi@cubesatsim:~ $ CubeSatSim/config -K
   
   CubeSatSim v2.2 configuration tool
   
   Editing the Doppler frequency shift setting in
   the configuration file for CubeSatSim
   
   Simulated Doppler frequency shift mode enabled
   
   Do you want Doppler frequency shift ON (y/n) 
   y
   
   Do you want simulated Doppler shift or rigctld Doppler (sim/rig)
   sim
   Simulated Doppler frequency shift mode enabled
   
   CubeSatSim configuration sim.cfg file updated to: 
   
   AMSAT 6 0.0000 0.0000 no 3 434.9 435 no 0 0 no 60 sim
   
   Restarting

After the restart or reboot, the sound of the CW will change. If you are still listening using FM, instead of tones you will hear clicks. If you are looking on an SDR waterfall, the signal will be much skinnier. To hear the Doppler shift, you will need a 70cm SSB radio or an SDR such as the RTL-SDR and the Raspberry Pi Ground Station (FIABv4) or your computer. On an SDR, if you select USB decoding and tune or click just to the left of the signal, you should hear the Morse Code tone again.

The blue transmit LED will also blink on and off with each dot and dash when Simulated Doppler Mode is enabled.

The frequency will be slightly shifted from your 434.9 MHz default (or another frequency if you used the CubeSatSim/config -F command to change it). The frequency will initially be close to 434.909 MHz, but it will decrease over time.

As you listen over time, you should hear the note of the CW tone decrease. After a minute or two, the tone might go away as the frequency has shifted below where you are tuned. Tune again to just to the left of the signal, and you will hear it again. About 5 minutes since you enabled simulated Doppler, the frequency will be at 434.9 MHz, but it will also be changing rapidly. If you zoom into the waterfall (if you are using OpenWebRX, click on the magnifier plus icon in the lower right box a few times, you might be able to see that the signal is not a vertical line, but slanting slightly as the frequency bends over time.

In OpenWebRX, you can slow down the waterfall (on FIABv4 by selecting the Settings icon in the top left, logging in with the username admin and password raspberry and then selecting General Settings then scroll down to Waterfall Settings and for FFT Speed set 2 then select Apply and Save) as shown here:

Screenshot 2026-07-22 at 9 17 39 PM

After another 5 minutes, the frequency will not be changing very fast, and will be around 434.891 MHz. Then, the frequency will jump back to around 434.909, which is as if it is the start of a new pass (AOS). This cycle will repeat every 10 minutes.

In this waterfall over the complete simulated pass (about 10 minutes), you can see the "S" curve characteristic of a Doppler shifted satellite signal:

OpenWebRX waterfall showing Doppler Frequency Shift

If you switch to APRS or Pacsat mode, you will also see the APRS packet frequency shift over time in the same shape, although you won't hear a frequency shift like in CW mode. Here's how it looks for APRS mode:

Screenshot 2026-07-23 at 6 13 28 PM

In SSTV mode, at the start of each SSTV image, the simulated Doppler shift will be calculated, but the frequency will be constant for the 30 seconds it takes to transmit the whole image. Here's how it looks in SSTV mode:

Screenshot 2026-07-23 at 6 42 22 PM

In the other modes (FSK, BPSK, and FUNcube), you will not see a simulated Doppler shift.

You can view the instantaneous doppler shifted frequencies by typing the command CubeSatSim/config which will show you something like this:

   pi@cubesatsim:~ $ CubeSatSim/config 
   
   CubeSatSim v2.2 configuration tool
   
   Mode is CW
   
   Simulated Telemetry is OFF
   No simulated failure
   Random Failure Mode is OFF
   Simulated Doppler frequency shift enabled
   Current TX and RX Frequency (Hz) is: 434891461 434991461
   Balloon mode is OFF
   Current command count is: 0
   Squelch level is: 3
   Radio command and control is OFF
   RX PL code is: 0 TX PL code is: 0
   Battery saver mode is OFF
   Transmit beacon telemetry is ON
   USB Sound Card detected
   FM TXC is present
   No RTL-SDR detected
   
   Current sim.cfg configuration file:
   AMSAT 6   0.0000   0.0000 no 3 434.9 435 no 0 0 no 60 sim
   To change, include an OPTION
   To see options, type config -h

Note that the receive frequency is also Doppler shifted, so it no longer is 435 MHz in this example, but a little lower.

You can also use this command to see the transmit and receive frequencies in real time:

   CubeSatSim/log -f r

The first frequency is the transmit frequency and the second is the receive frequency.

Rigctl Control Doppler

A more advanced Doppler shift based on actual satellite passes can be generated using Rigctl Doppler Shift Mode.

You select this mode by typing this command:

   cd
   CubeSatSim/config -K

Then type y or yes to enable Doppler shift, then type rig for Rigctl Doppler Shift mode.

In this mode, a satellite tracking application such as Gpredict can use Radio Control to control the frequency and the doppler shift of the CubeSatSim. If you enable Boot to Graphical User Interface (GUI) on your Pi Zero 2, you can run Gpredict on your Pi Zero 2. Or, you can run it on any computer on the same network as the Pi Zero 2, including the FIABv4 Raspberry Pi Ground Station or your Windows or Mac laptop.

These instructions are for Gpredict, a popular open source satellite tracking program. You can use any satellite tracking program that supports hamlib radio control.

On a Raspberry Pi, you will need to run Gpredict inside the Pi OS Graphical User Interface. You can connect a HDMI monitor, USB keyboard and mouse to your Pi, or you can use remote access software such as VNC to login to your Pi from your laptop when you are on the same network.

Raspberry Pi Connect

If you are using the Bookworm disk image, you can use Raspberry Pi Connect in your browser to access your Pi. First, create an account at https://connect.raspberrypi.com Then, login to your Pi and type this command:

   rpi-connect signin

It will display "Complete sign in by visiting" and then an authentication URL (web link). Copy this URL into any browser and log into your Raspberry Pi Connect account, and you will then be able to remotely log into your Pi using the browser. Select your Pi at https://connect.raspberrypi.com/devices and select Connect Via then Screen Share for the GUI. To troubleshoot issues, type this command:

   rpi-connect doctor

Running Gpredict on the CubeSatSim or FIABv4

To run Gpredict, you can double click on a Gpredict icon on the Desktop:

Screenshot 2026-07-23 at 11 59 52 AM

Or open a command window and just type:

   gpredict
Screenshot 2026-07-23 at 1 50 39 PM

You should see the map and satellites:

Screenshot 2026-07-23 at 1 51 31 PM

The first thing you want to do is to go under the Edit menu and select Update TLE Data from the Network, then select Close when finished. Then go again under Edit select Update Transponder Data then select Close when finished:

Screenshot 2026-07-23 at 12 00 32 PM Screenshot 2026-07-23 at 1 53 23 PM

Back at the Gpredict map, select the three bars menu on the top right then select Radio Control.

Screenshot 2026-07-23 at 12 03 05 PM

In the Settings box, elect Engage. The Device name and the Engage button should turn grey. If they don't stay grey, it means the connection was unsuccessful. Things to check include:

  • Is the CubeSatSim and the computer running Gpredict on the same WiFi network?
  • If they are on the same computer (i.e. the Pi Zero 2), check the Interface setting Host is set to localhost.
  • If they are different computers, make sure the Interface setting Host is set to cubesatsim.local or the IP address of the CubeSatSim.

Next, in the Target box, select ISS then Mode U/V FM Voice then select Track. In the Downlink box, the frequency after Radio will be the CubeSatSim transmit frequency, while in the Uplink box, the frequency after Radio will be the CubeSatSim receive frequency. If there is no dropdown below the ISS dropdown, it probably means you forgot to update the Transponder Data over the internet.

Screenshot 2026-07-23 at 12 07 38 PM

Tune your SDR to the Downlink Radio frequency and you should hear and see the CubeSatSim signal. Over time, the frequency will change due to Doppler shift.

Cross Band Repeater with Simulated Doppler Shift

First try out the Cross Band Repeater without simulated Doppler shift. The Cross Band Repeater Quick Start Guide (QSG) has the full instructions: https://cubesatsim.org/download/cross-band-repeater-qsg.pdf

Once you have it working, you can try turning on simulated Doppler using the CubeSatSim/config -K command by entering yes and sim

You will notice that initially the Downlink frequency will be a bit higher, closer to 144.903 MHz. Note that while the simulated Doppler shift in the 70cmm band is around +/- 9 kHz, in 2m band, it is about +/- 3 kHz since the Doppler shift is proportional to the frequency.

You can try selecting different transponders and different satellites. If the Downlink frequency is outside the amateur radio 2m (144 - 148 MHz) or 70cm bands (420 - 450 MHz), the CubeSatSim won't transmit on that frequency, but will instead transmit in the 70cm band.

Cross Band Repeater with Rigctl Doppler Shift

This mode is fun because the CubeSatSim can emulate real satellite transponders that have UHF Uplink and VHF Downlink (so called U/V sats).

The following sats can be emulated:

  • ISS U/V FM Voice
  • AO-73 U/V Linear (emulated as an FM repeater)
  • AO-91 U/V FM Voice
  • AO-7 U/V Mode U/V (B) Lin (emulated as an FM repeater)

To try the last one, you will need to Add the AO-7 satellite by opening the three bars menu on the top right, selecting Configure, scrolling down the list of satellites until you see AO-7, then double click on AO-7 to add it to the list on the right. Then click OK and now in the Radio Control menu you will be able to select AO-7.

Gpredict Full Install and Configuration

If you use the CubeSatSim image, these configuration steps will already be done. But if you aren't, or you want to configure Gpredict on another computer, follow these steps.

Raspberry Pi / Debian / Ubuntu Install

Just use the command sudo apt-get install gpredict to install. Run by typing gpredict

Windows Install

Download the Windows zip file:

https://sourceforge.net/projects/gpredict/files/Gpredict/2.3.37/gpredict-win32-2.3.37.zip

Unzip the file and run gpredict.exe

Mac Install

Use Macports or Brew to install Gpredict

Configuration

The first thing you want to do when you run Gpredict is to go under the Edit menu and select Update TLE Data from the Network, then select Close when finished. Then go again under Edit select Update Transponder Data then select Close when finished:

625849134-76e934a5-5467-4f31-9e6b-441c7dae5a47 625873886-a3cba952-82c4-4a86-8d85-14397da43f08

Next, go under the Edit menu then select Preferences:

625894353-63792413-c012-482f-ae5e-f57e56d2af2f

Then select the Interfaces icon on the left.

Screenshot 2026-07-23 at 12 00 55 PM

Under Radios, select Add new. Here are the default settings:

625893459-f504bab7-67cf-4441-8f40-08615efd7f64

You just need to change these settings:

   Name: CubeSatSim
   Host: cubesatsim.local (alteratively, you could type in the IP address of your Pi Zero 2 or localhost)
   Port: 4532
   Radio type: FT817/857/897 (manual)
   PTT Status: Off
Screenshot 2026-06-30 at 3 52 50 PM

Then select OK.

Don't forget to select OK again and don't just close this window or your changes won't be saved.

625884520-371d6126-6dcc-4b13-9e02-5e739ad4e843

Now Gpredict is configured!