GNU Radio
Configuration de GNU Radio avec gr-iio pour le Pluto+
GNU Radio + gr-iio
GNU Radio est l'environnement de développement SDR le plus puissant et flexible.
Installation
Ubuntu/Debian
# Installation depuis les dépôts
sudo apt install gnuradio gr-iio
# Ou compilation depuis les sources (dernière version)
git clone https://github.com/analogdevicesinc/gr-iio.git
cd gr-iio
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfigWindows
- Télécharger GNU Radio pour Windows
- Installer le plugin gr-iio depuis les options
macOS
brew install gnuradio
# gr-iio doit être compilé depuis les sourcesBlocs PlutoSDR
PlutoSDR Source (réception)
Paramètres du bloc :
| Paramètre | Valeur exemple | Description |
|---|---|---|
| IIO context URI | ip:192.168.2.1 | Adresse du Pluto+ |
| Buffer size | 32768 | Taille buffer (puissance de 2) |
| LO Frequency | 98000000 | Fréquence centrale (Hz) |
| Sample Rate | 2000000 | Taux d'échantillonnage |
| RF Bandwidth | 200000 | Bande passante RF |
| Gain Mode | slow_attack | AGC automatique |
| Manual Gain | 50 | Gain si mode manual |
PlutoSDR Sink (émission)
| Paramètre | Valeur exemple | Description |
|---|---|---|
| IIO context URI | ip:192.168.2.1 | Adresse du Pluto+ |
| LO Frequency | 144200000 | Fréquence TX (Hz) |
| Sample Rate | 2000000 | Taux d'échantillonnage |
| RF Bandwidth | 200000 | Bande passante RF |
| Attenuation | 10 | Atténuation TX (dB) |
Flowgraph réception FM
#!/usr/bin/env python3
# Récepteur FM simple avec Pluto+
from gnuradio import gr, analog, audio, filter
from gnuradio import iio
class fm_receiver(gr.top_block):
def __init__(self):
gr.top_block.__init__(self, "FM Receiver")
# Source Pluto+
self.pluto = iio.fmcomms2_source_fc32(
"ip:192.168.2.1",
[True, True], # RX1 activé
32768
)
self.pluto.set_frequency(98000000) # 98 MHz
self.pluto.set_samplerate(2000000)
self.pluto.set_gain_mode(0, "slow_attack")
# Filtre et démodulation
self.lpf = filter.fir_filter_ccf(
10,
filter.firdes.low_pass(1, 2000000, 100000, 10000)
)
self.demod = analog.wfm_rcv(
quad_rate=200000,
audio_decimation=4
)
# Sortie audio
self.audio_sink = audio.sink(48000)
# Connexions
self.connect(self.pluto, self.lpf, self.demod, self.audio_sink)
if __name__ == '__main__':
tb = fm_receiver()
tb.start()
input('Appuyer sur Entrée pour arrêter...')
tb.stop()
tb.wait()Configuration MIMO (2 canaux)
# Réception MIMO - 2 canaux RX
from gnuradio import gr, iio
class mimo_receiver(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
# Source MIMO - 2 canaux RX
self.pluto = iio.fmcomms2_source_fc32(
"ip:192.168.2.1",
[True, True], # RX1 et RX2 actifs
32768
)
self.pluto.set_frequency(2400000000) # 2.4 GHz
self.pluto.set_samplerate(2000000)
self.pluto.set_gain_mode(0, "slow_attack")
self.pluto.set_gain_mode(1, "slow_attack")
# Les deux canaux sont disponibles sur les sorties 0 et 1Full-duplex (TX + RX simultané)
# Transpondeur simple
from gnuradio import gr, iio, blocks
class transpondeur(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
# RX à 145.500 MHz
self.rx = iio.fmcomms2_source_fc32(
"ip:192.168.2.1", [True, True], 32768
)
self.rx.set_frequency(145500000)
self.rx.set_samplerate(48000)
# TX à 145.600 MHz (décalage +100 kHz)
self.tx = iio.fmcomms2_sink_fc32(
"ip:192.168.2.1", [True, True], 32768
)
self.tx.set_frequency(145600000)
self.tx.set_samplerate(48000)
self.tx.set_attenuation(0, 10)
# Connexion RX → TX
self.connect(self.rx, self.tx)