Digital Modes & Audio

OrbitDeck can record a pass, decode SSTV, and work full-duplex FT4 on a linear transponder — all from the received audio of a USB audio interface or, experimentally, an Icom network-audio radio.

Audio interfaces

The recording, SSTV and FT4 cards appear on Home when audio is available: a class-compliant USB audio interface (via USB-C or the camera adapter), or an Icom network-audio radio (RS-BA1) that is configured and connected. Connect your radio's receive audio to the interface's input; for FT4, connect the interface's output to the radio's audio-in.

iOS treats a USB audio input as a microphone, so the first time you record or decode, iOS asks for microphone permission.

Choosing which cards appear

In Settings → Audio features each of the three cards (Pass recording, SSTV, FT4) has an independent setting:

  • Auto (default) — the card appears only when an audio interface is connected.
  • Always show — the card appears even without an interface, using the phone's built-in microphone (hold the phone near your receiver's speaker to decode/record acoustically).
  • Hidden — the card never appears, even with an interface plugged in. Handy if you only operate voice and want just the pass recorder without the SSTV/FT4 cards.

Input & output levels

The SSTV and FT4 cards show a live input-level meter with a gain slider (and FT4 adds an output/TX level). Set the input so the meter rides in the green — too low buries the signal in noise, too high (red) clips and hurts decoding. The SSTV level control lives in Setup & calibration and is available before you start decoding. Your gain settings are saved and restored across launches for each feature.

Runs off the home screen and in the background

Recording, SSTV, FT4, CAT and the rotator are all app-wide — they keep running when you navigate to other screens, and audio modes keep decoding/recording with the screen locked or the app backgrounded during a pass. If a connection drops while you're away (iOS reclaims Bluetooth and network sockets when an app is suspended), OrbitDeck re-establishes it when you return.

Pass recording

The Home Pass recording card streams the received audio to a compressed AAC .m4a file tagged with the satellite and UTC time — roughly a fifteenth the size of uncompressed WAV, so a full pass is a few MB. Recordings are listed on the Log screen with playback and share.

SSTV

The Home SSTV card decodes the video subcarrier live, auto-detecting the mode from the VIS header (or you can force a mode). Supported modes include Robot 36/72, Scottie S1/S2/DX, Martin M1/M2, Wraase SC2-180 and the full PD series (PD 50/90/120/160/180/240/290). The decoder locks onto the horizontal sync pulse on every line so the picture stays aligned across long modes.

Doppler-aware decoding. A fast LEO on 70 cm shifts the whole audio band during the pass, which slants the picture and casts its colors. OrbitDeck's Auto-tune (on by default) reads each line's sync pulse to measure that offset and correct it continuously, so the image stays straight and true-colored as the satellite moves. When you also have rig control connected, the app feeds its live Doppler tuning forward into the decoder so the dial steps it makes mid-image don't tear the picture (important for the long PD modes) — with no rig connected the decoder is unaffected.

Live calibration controls let you clean up a picture as it builds — slant (clock correction), tuning (receiver-offset), H-shift (horizontal position), and contrast/saturation. Each adjustment re-renders the current image instantly. Decoded images are saved to the dedicated SSTV Images screen (Operating Tools), where you can view them full-screen, share, delete (single or multi-select), or export to your iOS photo library.

Fixing an image after the pass. Every saved image can be cleaned up from its viewer. Fix image straightens a leftover slant and adjusts brightness/contrast/saturation on the picture itself. Re-decode from recording goes further: OrbitDeck keeps the pass audio for each decode, so it can rebuild the image from scratch with different slant and Auto-tune settings — recovering geometry and the Doppler color cast that a picture-only edit can't. Both save a new copy and leave the original untouched.

Full-duplex FT4

On a linear transponder you can hear your own downlink while transmitting, so OrbitDeck runs FT4 full duplex: it decodes the downlink and transmits the uplink at the same time, on alternating 7.5-second slots. The card shows a live spectrum waterfall (with a TX-frequency marker), a scrolling WSJT-X-style decode panel (your own transmissions and any decode of your own signal are color-coded), and a countdown to the next slot. Tap Call CQ to start calling, or tap a decoded station to answer it — the auto-sequencer runs the exchange and logs the QSO. Set your TX audio frequency to drop your signal into a clear spot on the waterfall. A live Doppler-corrected RX/TX frequency readout under the pass line shows exactly where to set the radio, so you can operate FT4 by hand even without CAT. Signal reports (SNR) are calibrated to read close to WSJT-X. FT4/FT8 encode and decode use the open-source, MIT-licensed ft8_lib.

FT4 runs at nearly 100% duty cycle. On a shared linear transponder, reduce power out of respect for other operators — the app shows this reminder on the FT4 card.

IC-9700 owners: there's a step-by-step guide to working FT4 on the 9700 entirely over its network connection (CAT and audio, no PC or USB interface) — see FT4 on the IC-9700 over the network.

Doppler correction (on by default)

The downlink Doppler drift is common to every signal on a linear transponder, so OrbitDeck flattens it in the audio domain. Two toggles under the FT4 card's setup — Doppler-correct RX audio and Doppler-correct TX audio — are on by default. RX de-chirps each received 7.5-second slot before decoding; TX pre-compensates your transmitted burst so the signal the satellite hears stays on one frequency. Both need a configured transponder.

While FT4 is running with a connected CAT radio, OrbitDeck holds the dial steady and only re-tunes at slot boundaries (between the receive and transmit slots) rather than chasing Doppler continuously — a mid-slot re-tune would shift the whole coherent burst and break the decode. Because the dial is frozen for the slot, the audio-domain correction isn't optional polish: it's what removes the within-slot drift. For exactly how this works — and why the transmit correction depends on your transponder's inversion — see the deep dive below.

Automatic transponder calibration (opt-in)

On a properly-netted linear transponder your own signal comes back at about the audio frequency you transmit. So while you work FT4 full duplex, OrbitDeck can measure where your own decoded signal actually lands and fold the difference into this satellite's saved calibration, refining it a little on every decode of your own signal — so both your receive and everyone else's line up better as the pass goes on. It's opt-in (Settings → Audio features → Auto-calibrate transponder from FT4), applies to linear transponders only, and is damped and clamped so a single stray decode can't throw the calibration off. You can review or clear the result on the Calibrations screen.

PSKReporter reception reports

OrbitDeck can upload the FT4 stations it decodes to PSKReporter so they show on its public map. This is opt-in — turn on Settings → PSKReporter → Upload FT4 reception reports (your callsign and grid must be set). The reported frequency is the absolute downlink RF — the Doppler-corrected downlink dial from CAT when connected, otherwise the transponder's downlink center — plus the decode's audio offset. Nothing is sent unless you enable it; see the privacy policy.

Doppler compensation — deep dive

How OrbitDeck keeps a coherent FT4 burst readable through the fast Doppler of a low-earth-orbit pass. This section is for the curious; you don't need any of it to operate.

Why Doppler breaks FT4

An FT4 transmission is a continuous-phase 4-GFSK burst: 105 symbols at a 0.048 s symbol period (≈4.48–5 s on the air), with the four tones spaced 20.83 Hz apart. The decoder recovers each symbol by finding which tone bin holds the energy, coherently, across the whole burst. If the signal's frequency slides during the burst, each tone smears across bins and the decode collapses.

On a LEO pass the Doppler shift is largest and changing fastest near closest approach (TCA). On 70 cm the total shift swings several kHz across a pass; the rate near TCA can be well over 10 Hz/s. Over a single ≈5 s burst that's tens of Hz of drift — several tone spacings. Left uncorrected, nobody decodes you (and you can't decode the bird).

Two things move: downlink and uplink

  • Downlink — the frequency you receive drifts. On a linear transponder this drift is common to every signal in the passband: the whole band slides together.
  • Uplink — the frequency the satellite receives from you drifts, so without correction your signal walks across the transponder passband as others hear it.

Both come straight from the ephemeris. With range rate (positive = receding) and carrier f, the shift is −f·ṙ/c. OrbitDeck samples this from the same SGP4 propagator that drives the rest of the app.

Why not just tune the radio faster?

Two reasons. A CAT dial over CI-V/BLE can't be nudged smoothly or often enough to track a 10 Hz/s slope. More fundamentally, any re-tune during the burst shifts the entire coherent signal — the very thing the decoder can't tolerate. So OrbitDeck splits the labor:

  • Coarse, between slots: the CAT dial is stepped once per 7.5 s slot boundary and then held rock-steady through the slot. (This is the "hold the dial, step at boundaries" behavior above.)
  • Fine, within the slot: the smooth residual drift is removed in the audio domain, where it can be a continuous chirp instead of a staircase.

Over one ≈5 s burst the drift is very nearly linear, so a straight-line (constant-slope) correction is more than good enough. OrbitDeck samples the ephemeris shift at the slot start and one burst-length later and uses the slope between them.

Receive: de-chirping the slot

Because the downlink drift is common to the whole passband, one correction fixes every signal at once. OrbitDeck takes the recorded 7.5 s slot, forms its analytic (complex) signal with a Hilbert transform, and multiplies by a complex exponential whose frequency ramps at the negative of the downlink slope — a de-chirp — then hands the flattened audio to the decoder. The effect is dramatic near TCA: toggling Doppler-correct RX audio off there visibly thins out the decodes.

Transmit: pre-chirping the burst

The goal on transmit is that the frequency the satellite receives holds still, so you sit on one spot in the passband for everyone listening. With the dial frozen for the slot, that has to be done in the transmitted audio. The sign of the correction depends on which sideband the uplink uses:

  • USB uplink (non-inverting transponder): transmitted RF = dial + audio. To cancel a rising uplink Doppler the audio must fall — offset = −slope · t.
  • LSB uplink (inverting transponder): transmitted RF = dial audio, so the audio→RF mapping flips and the sign of the correction flips with it — offset = +slope · t.
Most linear transponders invert (RS-44, the CAS/XW birds, AO-7 mode B, …), and OrbitDeck keys their uplink in LSB when the downlink is USB. Applying the USB sign on an inverting bird doesn't just fail to help — it doubles the drift, so everyone reports you smearing. OrbitDeck derives the uplink sideband from the transponder's inversion flag and flips the correction automatically; the slope is anchored to the slot start so it matches the dial that was stepped at the boundary.

Starting the burst on time

FT4's signal occupies only ≈5 s of the 7.5 s slot, leaving dead air at the end. OrbitDeck uses that tail: on a transmit slot it steps the dial and keys PTT before the boundary, so the burst begins right on time instead of after the CAT round-trips. Receiving stations see this as your dT — the offset of your signal from the slot start — and it should sit well under a few tenths of a second. (Earlier builds could start ≈0.8 s late, which both hurt your decodes and ate into the decode window.)

Putting it together

On a connected CAT radio, one FT4 cycle looks like this: at the slot boundary the dial steps to the new coarse Doppler and then holds; on receive slots the recorded audio is de-chirped and decoded; on transmit slots PTT is pre-armed in the previous slot's dead air and the burst is synthesized with a sideband-correct pre-chirp so the satellite hears a steady tone. The dial handles the big, slow, between-slot motion; the audio handles the small, smooth, within-slot motion. Neither double-corrects the other, because the dial never moves inside a slot.

PTT for FT4

When a CAT radio is connected, OrbitDeck keys transmit over CAT automatically — CI-V, Yaesu, Kenwood, rigctld, and Icom network. If your radio has no CAT PTT, use VOX or key manually: the FT4 card shows a prominent TRANSMIT NOW indicator at the start of each of your slots so you key in time.

Maturity & testing

These features are new in 0.9.14. SSTV and FT4 decode from a USB audio interface have been validated on-air; the SSTV calibration controls help with marginal or slanted pictures. The Icom network-audio path is experimental and best validated on your own radio — it now re-establishes automatically if the RS-BA1 link drops and reconnects mid-pass, rather than going silent for the rest of the pass. Feedback from on-air use is welcome.

Permissions & privacy

Audio is captured only while you record or decode, and stays on your device (SSTV images are saved to the app; you choose when to export to Photos). See the privacy policy.