Skip to main content

Install on Raspberry Pi

Primary target: Raspberry Pi 5 (4 GB+) running Raspberry Pi OS (64-bit) Bookworm. Secondary: Pi 4 with RNNoise only.

Hardware notesโ€‹

ModelRecommended useActive coolingModel
Pi 5 (8 GB)Full real-time DFN3 + SDR pipelineRequiredDeepFilterNet3 (FP32)
Pi 5 (4 GB)Full real-time DFN3 + SDR pipelineRequiredDeepFilterNet3 (INT8)
Pi 4 (8 GB)Audio-only denoise, RNNoise fallbackRecommendedRNNoise-ham
Pi 400Same as Pi 4Keyboard heatsink helpsRNNoise-ham
Pi Zero 2 WUltra-portable monitor onlyAirflow mattersRNNoise-ham (tiny)
POTA / SOTA build

A Pi 5 + RTL-SDR v4 + a 10 Ah USB-C PD bank runs RFWhisper + WSJT-X for hours in the field. Add an Argon ONE M.2 case for the NVMe slot and cooling.

1. Flash Raspberry Pi OS (64-bit)โ€‹

Use Raspberry Pi Imager and pick Raspberry Pi OS (64-bit) Bookworm. Enable SSH and set a username during the pre-flash customization.

2. System update + depsโ€‹

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y \
python3 python3-venv python3-pip \
git git-lfs \
libportaudio2 libsndfile1 libasound2-dev \
ffmpeg build-essential cmake pkg-config

3. (Optional) GNU Radioโ€‹

sudo apt install -y gnuradio gr-soapy soapysdr-module-all soapysdr-tools

gr-dnn is not yet packaged for Raspberry Pi OS; we ship an aarch64 wheel in v0.2.

4. Install RFWhisperโ€‹

git clone https://github.com/jakenherman/rfwhisper.git
cd rfwhisper
python3 -m venv .venv && source .venv/bin/activate
pip install -U pip wheel

# On Pi 5 prefer DFN3; on Pi 4 / Zero 2 W stick to RNNoise:
pip install -e ".[audio]"
python -m rfwhisper.models.fetch --variant auto # picks RNNoise on <Pi 5
rfwhisper doctor

5. Tuning for low latencyโ€‹

Governor + irqbalanceโ€‹

# Keep CPU at max while RFWhisper is running
sudo apt install -y cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl restart cpufrequtils

# Spread IRQs off the audio core
sudo apt install -y irqbalance
sudo systemctl enable --now irqbalance

Realtime schedulingโ€‹

Same as Linux ยง 5 โ€” add yourself to a realtime group and set rtprio/memlock limits.

Audioโ€‹

Use ALSA directly (not PulseAudio) for lowest latency:

rfwhisper denoise-live --in hw:0,0 --out hw:1,0 --blocksize 240 --profile ssb

6. RTL-SDR / SoapySDR modules on aarch64โ€‹

sudo apt install -y rtl-sdr soapysdr-module-rtlsdr
# Test:
SoapySDRUtil --find

If you see your dongle listed, RFWhisper's flowgraphs will too.

7. Expected performance (Pi 5 8 GB, DFN3 INT8)โ€‹

PipelineCPULatency p99
Audio-only denoise~35 % of 1 core70โ€“90 ms
RTL-SDR โ†’ SSB demod โ†’ denoise~55 % of 2 cores150โ€“220 ms

(See Architecture โ†’ Latency Budget for the formal budget.)

Troubleshootingโ€‹

  • Throttling (vcgencmd get_throttled returns non-zero) โ€” add a proper heatsink/fan and check your power supply delivers โ‰ฅ 27 W for the Pi 5.
  • Underruns under load โ€” lower blocksize limits; try --blocksize 480 for audio-only on Pi 4.
  • Missing CoreML or CUDA providers โ€” expected. RPi runs on the CPU provider + XNNPACK.
  • ALSA lib pcm.c warnings at startup โ€” generally benign; verify audio works end-to-end before investigating.