⚠️ DIY ÉTHIQUE – Utilisez cet analyseur uniquement pour écouter des fréquences publiques autorisées. L'interception de communications privées est interdite. ⚠️

📻 Analyseur de spectre RF portable – Couteau suisse radio

Transformez un Raspberry Pi et une clé RTL-SDR en analyseur de spectre autonome, capable de balayer de 25 MHz à 1,7 GHz avec un waterfall en temps réel.

⏱️ 1-2 semaines💰 ~40€📊 Waterfall🧰 SDR

📦 Matériel nécessaire

💡 Budget : environ 40€ si vous possédez déjà un Raspberry Pi, sinon compter ~60-80€. La clé RTL-SDR V3 coûte ~10-15€.

🧠 Fonctionnement du SDR

Une clé RTL-SDR est un tuner TV numérique reconverti en récepteur large bande. Elle capture le signal brut (I/Q) et l'envoie au Raspberry Pi via USB. Des logiciels comme rtl_power ou pyrtlsdr décodent ce signal et produisent un spectrogramme (waterfall).

Le système final doit être capable d'afficher en continu le spectre de 25 MHz à 1,7 GHz, de zoomer sur une fréquence (ex. 433 MHz pour télécommandes) et de démoduler des signaux FM/AM.

graph LR Antenne[Antenne] --> SDR[RTL-SDR] SDR -->|USB| Pi[Raspberry Pi] Pi -->|rtl_power| Data[Données FFT] Data -->|Python| Waterfall[Affichage Waterfall] Waterfall --> Ecran[Écran tactile]

🛠️ Installation du système

1. Préparer la carte SD

Flashez Raspberry Pi OS Lite (sans bureau) ou avec bureau léger selon votre préférence. Activez SSH et configurez le Wi-Fi.

# Téléchargez Raspberry Pi Imager, sélectionnez "Raspberry Pi OS Lite (32-bit)"
# Dans les options (Ctrl+Shift+X), activez SSH et configurez le Wi-Fi
# Flashez la SD, insérez-la et démarrez.

2. Mises à jour et installation des dépendances

sudo apt update && sudo apt upgrade -y
sudo apt install rtl-sdr librtlsdr-dev python3-pip python3-numpy python3-matplotlib -y
pip3 install pyrtlsdr

3. Test de la clé RTL-SDR

# Vérifier que la clé est reconnue
rtl_test
# Vous devriez voir des informations sur le tuner Rafael Micro R820T2.
# Si erreur, vérifiez le câble USB ou l'alimentation.

📊 Création d'un waterfall en Python

Ce script capture des tranches de spectre et génère une image du waterfall. Il peut être exécuté en continu et affiché sur l'écran.

#!/usr/bin/env python3
import matplotlib
matplotlib.use('TkAgg')  # si vous utilisez l'écran tactile
import matplotlib.pyplot as plt
import numpy as np
from rtlsdr import RtlSdr
import time

# Configuration
CENTER_FREQ = 433e6   # Fréquence centrale (433 MHz)
SAMPLE_RATE = 2.4e6   # Échantillonnage
NFFT = 512
NUM_ROWS = 100        # Nombre de lignes du waterfall

sdr = RtlSdr()
sdr.sample_rate = SAMPLE_RATE
sdr.center_freq = CENTER_FREQ
sdr.gain = 'auto'

fig, ax = plt.subplots()
waterfall = np.zeros((NUM_ROWS, NFFT))
im = ax.imshow(waterfall, aspect='auto', cmap='inferno', vmin=-50, vmax=0)
ax.set_xlabel('Fréquence (MHz)')
ax.set_ylabel('Temps')

freqs = np.linspace(-SAMPLE_RATE/2, SAMPLE_RATE/2, NFFT) / 1e6 + CENTER_FREQ/1e6
ax.set_xticks(np.linspace(0, NFFT-1, 10))
ax.set_xticklabels([f'{f:.2f}' for f in freqs[::NFFT//10]])

plt.ion()
plt.show()

try:
    while True:
        samples = sdr.read_samples(256*1024)
        psd, _ = matplotlib.mlab.psd(samples, NFFT=NFFT, Fs=SAMPLE_RATE/1e6, scale_by_freq=False)
        psd_db = 10 * np.log10(psd + 1e-10)
        waterfall = np.roll(waterfall, -1, axis=0)
        waterfall[-1, :] = psd_db[:NFFT]
        im.set_data(waterfall)
        fig.canvas.draw()
        fig.canvas.flush_events()
        time.sleep(0.1)
except KeyboardInterrupt:
    pass
finally:
    sdr.close()
    plt.close()
💡 Ce script nécessite un affichage graphique. Si votre Pi Lite n'a pas de bureau, utilisez une interface web ou enregistrez des images et servez-les via un petit serveur HTTP.

🌐 Alternative : waterfall via interface web

Vous pouvez faire tourner rtl_power en tâche de fond et servir les données via un mini serveur Python.

# Lancer un scan continu de 88 à 108 MHz (bande FM) et sortie CSV
rtl_power -f 88M:108M:1k -i 2 -g 20 -e 1m  scan.csv

# Puis utiliser un script Python pour lire le CSV et générer une image
# ou une page HTML avec JavaScript et canvas.

Pour un vrai confort, vous pouvez installer SPECTRAN ou GQRX qui offrent une interface graphique complète, mais plus lourde.

🎛️ Utilisation pratique

Écouter une fréquence FM

# Syntoniser 100.0 MHz et sortir le son sur les haut-parleurs
rtl_fm -f 100.0M -M wbfm -s 200k -r 48k | aplay -r 48k -f S16_LE

Analyser les télécommandes 433 MHz

Réglez la fréquence centrale sur 433 MHz. Lorsque vous appuyez sur un bouton de télécommande, vous verrez une impulsion dans le waterfall.

Scanner les signaux des drones (2.4 GHz, 5.8 GHz)

La clé RTL-SDR monte jusqu'à 1.7 GHz, mais avec un downconverter vous pouvez atteindre les bandes hautes. Sinon, certaines clés étendues montent à 2.2 GHz.

📦 Montage portable

Pour rendre le système autonome, imprimez un boîtier qui intègre l'écran, le Pi, la batterie et la clé SDR. Fixez l'antenne sur un connecteur SMA externe. Ajoutez un bouton d'arrêt et une LED d'état.

🧪 FAQ

Je ne reçois aucun signal ?

Vérifiez que l'antenne est bien vissée et que le gain n'est pas trop bas. Augmentez-le avec l'option -g.

L'écran tactile ne fonctionne pas ?

Certains écrans nécessitent des drivers spécifiques (par ex. waveshare). Installez-les selon la doc du fabricant.

Puis-je enregistrer les signaux ?

Oui, utilisez rtl_sdr -f 433M capture.iq pour enregistrer des échantillons bruts, puis analysez-les plus tard.

Quelles fréquences puis-je légalement écouter ?

En France, l'écoute des bandes de radiodiffusion (FM, DAB+), radioamateurs, bandes ISM (433 MHz) est autorisée. L'écoute des conversations privées (téléphone, PMR cryptées) est interdite.

📋 Checklist de validation