Publié le 1 février 2016 - par

Réalisez un analyseur de spectre avec le Raspberry Pi 2

freqshow_250pxMême si je suis pas très actif côté émission (c’est un peu la faute au Raspberry Pi ), je reste radioamateur et passionné par les techniques de plus en plus numériques qui apparaissent dans ce domaine.
Je vous ai déjà parlé du SDR (Software Defined Radio) pour suivre les avions ou écouter la radio avec votre RasPi… Le projet que décrit cet article vous permettra de visualiser une fréquence et ses environs. Il s’agit d’un analyseur de spectre à base de Raspberry Pi. Adafruit appelle ce projet un scanner

Ne vous lancez pas dans cette réalisation si vous êtes débutant. Ce tutoriel ne détaille pas toutes les opérations et il vaut mieux avoir un peu d’expérience avec Debian…

Un analyseur de spectre avec un Raspberry Pi

C’est quoi un analyseur de spectre ?

Un analyseur de spectre est un instrument de mesure destiné à afficher les différentes fréquences contenues dans un signal ainsi que leurs amplitudes respectives. Les signaux peuvent être de natures diverses : électrique, optique, sonore, radioélectrique. (wikipedia)

https://commons.wikimedia.org/wiki/File:SpectrumAnalyzerDisplay.png

Source Wikipedia

Les analyseurs de spectre sont des appareils autonomes coûtant de quelques centaines à quelques milliers (glups !) d’euros. C’est pourtant un appareil très utile (sinon indispensable) quand on travaille dans le domaine des radiocommunications.
Le premier modèle proposé par Adafruit avait été réalisé sur une base de Raspberry Pi model B, il était tentant de profiter de la disponibilité du Raspberry Pi 2 avec ses 4 cœurs  pour améliorer (peut-être) cette réalisation.

La problématique

  • L’analyseur de spectre (scanner) a été initialement réalisé sur un RasPi model B sous Wheezy.
  • Les réponses sur le forum Adafruit renvoient généralement les questionneurs dans leurs buts quand l’écran utilisé n’est pas celui pour lequel le « scanner » a été développé.
  • Ça tombe bien (comme disait le père La Chaise) l’écran adapté au Pi2 est le modèle Adafruit 2441 (3,5 pouces PiTFT Plus) alors que le scanner a été réalisé avec le modèle 2097 (3,5 pouces PiTFT…). Donc s’il y a des problèmes… dém… toi 🙁
  • Même si on n’est pas en présence d’un « vrai » appareil de mesure, les clés USB DVB-T que j’ai utilisées jusqu’alors présentent un certain nombre de défauts (on va pas chipoter pour un récepteur à 15€…)

Les choix

Après moult réflexion, lecture de docs (RTFM) et d’articles parus sur des blogs, étude des caractéristiques… il fallait se décider ! Voici donc les choix que j’ai arrêtés pour ce projet :

  • Utiliser un Raspberry Pi 2 sous Jessie
  • Utiliser un écran Adafruit PiTFT Plus 3,5 pouces (ref. 2441)
  • Utiliser une clé DVB-T RTL-DSR de dernière génération (et un peu plus cher 🙂 )
  • Lancer l’analyseur automatiquement au démarrage du RasPi
  • Rendre l’appareil autonome (par la suite)

Réalisation de l’analyseur logique / scanner

Choix et installation du système

Il y a deux possibilités :

Vous ferez bien comme vous voulez… Pour ma part la solution consistant à utiliser une distribution toute faite me convient particulièrement bien 🙂 et c’est celle que je vous propose.

Téléchargez la version de Jessie préparée pour gérer l’écran PiTFT 3.5″. Téléchargez les 1,5 Go de cette version et rangez le fichier 2015-09-24-raspbian-jessie-pitft35r.zip dans un dossier de votre PC. Extrayez l’image contenue dans l’archive .zip : 2015-09-24-raspbian-jessie-pitft35r.img (4,2 Go).

Si vous êtes sous Windows, insérez votre carte micro SD dans le lecteur de carte. Repérez soigneusement la lettre identifiant votre carte, toute erreur effacera irrémédiablement les données à l’endroit où vous transférerez l’image !!! freqshow_win32diskimager

Lancez Win32DiskImager (en tant qu’admin), choisissez la lettre de la carte micro SD de destination (voir ci-dessus) et démarrez l’écriture de l’image sur la carte…

freqshow_win32diskimager2A la fin de l’opération vous avez entre les mains une carte prête à être utilisée avec le Raspberry Pi 2 et l’écran PiTFT 3,5″.

Avant de mettre la carte en service et d’appliquer la tension d’alimentation, regardons les composants que nous allons utiliser.

Le Raspberry Pi 2

freqshow_raspberrypi2_600pxBon, ici pas de surprise. c’est un Raspberry Pi 2 classique. Ne faites pas attention aux pattes tordues sur le GPIO (ah, zut, vous n’aviez pas remarqué ?) c’est arrivé en enlevant l’écran à la main, c’est parti d’un coup et d’un côté… La prochaine fois ce sera tournevis plat et démontage précautionneux 😉
Remarquez l’adhésif sur le dessus des prises. L’écran n’a pas de contacts dans cette zone, sauf… 1 et c’est par précaution que j’ai appliqué cette protection. Pour le reste c’est un Raspberry Pi 2 tout ce qu’il y a de plus banal (processeur 4 cœurs 900MHz ARM Cortex-A7 CPU, 1 Go de RAM, 4 ports USB, un port Ethernet, sortie HDMI et audio/vidéo analogique…)

L’écran PiTFT Plus 3,5″

freqshow_ecran_3p5_dessus_600pxLivré tout monté et prêt à l’emploi, l’écran PiTFT Plus 3,5″ Adafruit est destiné aux modèles A+, B+ et Pi2 du fait de la présence d’un connecteur 40 points. Ce modèle 2441 utilise les même ports que son prédécesseur à 26 points (modèle 2097) : Le bus SPI (SCLK, MISO, MOSI) ainsi que les ports GPIO 25 et 24. C’est ce qui m’a fait espérer une compatibilité entre les deux modèles.

freqshow_raspberrypi2_ecran_600pxL’écran s’adapte parfaitement sur le Raspberry Pi 2. Il dispose de 4 « oreilles » qui permettront de le fixer (sur une façade d’appareil par exemple). Le Raspberry Pi est fermement maintenu uniquement par le connecteur 40 points.

freqshow_raspberrypi2_ecran2_600pxCet écran tactile de 3,5 pouces (ça fait presque 9 cm de diagonale) offre une résolution de  480×320 pixels avec une profondeur de couleur de 16 bits (65536 couleurs). Le dessus de l’écran comporte une couche résistive qui le rend sensible à la pression du doigt. On peut l’utiliser comme consolefenêtre graphique, affichage d’images ou de vidéo, etc. Sa qualité est suffisante pour assurer un usage normal.

freqshow_ecran_3p5_dessous_600pxUn connecteur (à droite sur la photo ci-dessus) donne accès aux ports du GPIO si c’est nécessaire. Les informations techniques (implantation et schéma) sont disponibles en ligne.
Avec le backplane à fond (éclairage à l’arrière de l’écran) la consommation est de 100 mA environ.

Récepteur RTL-SDR.com

Par rapport aux modèles existant sur le marché, ce nouveau modèle est amélioré ce qui explique un prix de vente (un peu) supérieur aux modèles qu’on trouve sur les sites d’enchère en ligne : 19.95$ pour le récepteur seul ou 24.95$ avec 2 antennes télescopiques. La plus petite va de 6 cm à 20 cm, et la plus grande va de 20 cm à 1,5 m. L’embase de l’antenne est également plus grande avec un diamètre de 4,5 cm, à comparer aux embases miniatures livrées avec la plupart des modèles. Cela permet une meilleure stabilité lors de l’utilisation de l’antenne la plus grande.

rtl-sdr_05

Ces deux antennes peuvent s’accorder sur presque toute la gamme de réception de la clé. Pour un bon fonctionnement, l’antenne sera placée à l’extérieur et aussi haut que possible pour obtenir le meilleur rendement. freqshow_Rx6_600pxColler l’embase magnétique sur une surface métallique peut également aider à améliorer le fonctionnement de l’antenne en lui fournissant un plan de masse. Lorsqu’elle est entièrement rentrée, la petite antenne fonctionne à 1090 MHz pour la réception des fréquences ADS-B.

rtl-sdr_01

Le récepteur a reçu les améliorations suivantes :

  • Oscillateur compensé en température précision 1 ppm (TCXO) – La fréquence est précise et la dérive en fonction de la température pratiquement nulle (2 ppm de décalage initial, 1 ppm de dérive en température). L’oscillateur à quartz 28,8 MHz utilisée dans la plupart des clés DVB-T est peu précis. Cela signifie que lorsque vous voulez recevoir une fréquence connue, elle sera probablement décalée de quelques kHz. rtl-sdr_03Habituellement, la compensation prévue sur les clés DBV-T est de l’ordre de 30 à 150 ppm. En outre, lorsque les composants se réchauffent, la fréquence va encore dériver jusqu’à 20 ppm ou plus, jusqu’à ce que la température se stabilise. Le TCXO est un oscillateur à compensation thermique qui offre un réglage précis avec un décalage initial de 2 ppm maxi et une dérive de température de 1 ppm au fil du temps. Cela signifie qu’un signal connu apparaîtra là où il doit être sur le spectre de fréquences et ne dérivera pas en fréquence de manière significative lorsque la clé se réchauffera.
  • Prise d’antenne SMA femelle – La plupart des clés DVB-T utilisent un connecteur MCX ou PAL moins répandus. freqshow_Rx5_600pxLe connecteur SMA utilisé ici est beaucoup plus commun et de nombreuses antennes ou adaptateurs sont disponibles dans ce format. freqshow_Rx4_600pxIl a également une longévité plus grande et a des pertes d’insertion inférieures.
  • Tuner R820T2 – Plus sensible / bruit plus faible que le tuner R820T plus. 100% compatible avec les logiciels écrits pour le R820T. rtl-sdr_04Cette version améliore le fonctionnement aussi bien en HF qu’aux environs de 1,5 GHz.
  • Amélioration des tolérances de tous les composants – Permet au dongle RTL-SDR de travailler beaucoup mieux sur toutes les fréquences.
  • Expérimental : Alimentation USB 4.5V pour préampli – Peut être activée en reliant deux pastilles du circuit par une soudure. bias_tee_instructions_600pxCela permet au RTL-SDR d’alimenter un LNA (amplificateur à faible bruit)comme le LNA4ALL et HABAMP, ou des antennes actives via le câble coaxial.
  • Expérimental : Possibilité d’utiliser l’échantillonnage directbreakoutpads_instructions_600pxDeux pastilles à souder donnent accès aux broches 4 et 5 du circuit intégré RTL2832U pour permettre l’échantillonnage direct. L’accès direct à l’échantillonnage est une modification matérielle qui vous permet de syntoniser des fréquences HF avec un dongle RTL-SDR.

rtl-sdr_02

  • Boîtier en aluminium et refroidissement passif – les modèles les plus récents sont montés dans un boîtier en aluminium. pad_thermiqueIls bénéficient d’un refroidissement passif via un pad thermique…

freqshow_Rx_600px freqshow_Rx2_600px freqshow_Rx3_600px

Premier test

Comme toujours le test de chaque étape est important. Trop souvent on voit des messages (sur les blogs ou les forums) du style : « Ouais, tuto de m… je l’ai suivi et ça marche pas ! » Sauf qu’aucune des étapes intermédiaires n’a été testée… Alors si à la fin du tutoriel il y a un souci, c’est très difficile de déterminer d’où vient le problème.

Alors ici on va procéder calmement, par étape. D’abord mettez l’écran PiTFT en place sur le Raspberry Pi 2. La clé RTL-SDR peut encore attendre un peu… laissez la de côté pour le moment. Reliez le Raspberry Pi au réseau Ethernet, Insérez la carte microSD que vous avez préparée précédemment avec Win32DiskImager. L’heure est venue du premier test. Branchez l’alimentation micro USB sur le Raspberry Pi 2. L’écran doit s’illuminer (le backlight s’allume) puis le texte habituel défile.

freqshow_demarrage1_600pxEnsuite l’écran PiTFT s’éteint et après une attente (qui parait bien longue), l’écran affiche le bureau de Raspbian :

freqshow_demarrage2_600pxLa première étape est franchie… testez le fonctionnement du menu. La liste des items est plus longue que l’écran. Une petite flèche en bas du menu permet de faire défiler le menu (j’ai du appuyer avec l’ongle pour la faire fonctionner…). Si vous avez du mal vous pouvez brancher une souris, elle fonctionne.

Le Raspian  Wheezy installé est en anglais. Il va falloir le passer en français si vous voulez l’utiliser avec un clavier. Ici comme on a une utilisation dédiée, je l’ai laissé en anglais. Je me suis connecté en SSH avec Putty pour intervenir sur le système et finalement je suis passé par le bon vieux raspi-config pour passer en français 😉

Voyons déjà quelle place il reste sur la partition créée par l’image d’Adafruit :

pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 3.9G 3.2G 502M 87% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 6.4M 457M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/mmcblk0p1 56M 29M 28M 52% /boot
tmpfs 93M 0 93M 0% /run/user/1000

500 Mo restant. Un peu juste mais pour le moment je ne touche à rien…

Blacklister les modules d’origine

Lorsqu’il détecte une clé TNT (DVB-T) Raspbian charge un module destiné à géré le matériel. Comme nous voulons gérer la clé DVB-T à notre façon, il faut empêcher le noyau de charger le(s) module(s) correspondant(s).

Ouvrez le fichier /etc/modprobe.d/raspi-blacklist.conf avec nano

 sudo nano /etc/modprobe.d/raspi-blacklist.conf

et ajoutez lui les lignes suivantes :

blacklist dvb_usb_rtl28xxu
blacklist dvb_usb_v2
blacklist rtl_2830
blacklist rtl_2832
blacklist rtl_2838
blacklist r820t

Ceci garantit que le dongle DVB-T sera bien géré par la bibliothèque qui nous intéresse.

Installer les dépendances

Avant d’installer le logiciel il va falloir installer quelques dépendances (bin oui quoi, on est sous Linux : ) ). Pour cette installation le Raspberry Pi doit impérativement pouvoir accéder à Internet.
Connectez-vous au Raspberry Pi et exécutez les commandes suivantes pour installer les dépendances :

sudo apt-get update
sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev python-numpy git

Ne vous inquiétez pas si vous obtenez des messages indiquant que la dernière version est déjà installé et continuez. (Si ce sont d’autres messages trouvez ce qui cloche !)

Maintenant il va falloir télécharger, compiler et installer la librairie RTL-DSR d’osmocom :

cd ~
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
make
sudo make install
sudo ldconfig

Lorsque la librairie est en place, on peut installer le wraper Python qui va  permettre de faire la liaison entre la librairie et les applications en Python.

sudo pip install pyrtlsdr

Tout est (presque) en place pour l’utilisation du programme freqshow.py.

Redémarrez le Raspberry Pi pour mettre tout ça proprement en place.

Test du dongle RTL-SDR

Allez le moment que vous attendiez est enfin arrivé ! Vous pouvez connecter la clé RTL-SDR sur un port USB, et l’antenne sur la prise SMA…

freqshow_raspberrypi2_ecran_Rx_600pxVérifions déjà que la clé USB est bien reconnue :

pi@raspberrypi ~ $ lsusb
Bus 001 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter

Oui, le Device 006 est un RTL2838 DVB-T : impeccable !

Est-ce que ça fonctionne ?

pi@raspberrypi ~ $ rtl_test
Found 1 device(s):
0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.

C’est rassurant la clé DVB-T est reconnue et le test fonctionne. Nous allons pouvoir installer le programme freqshow.py.

Le message PLL not locked! semble être habituel et ne pas perturber le fonctionnement des programmes … A priori cette info est affichée lorsqu’il n’y a pas d’émission sur la fréquence de réception. A vérifier.

Installation du programme analyseur de spectre / scanner

L’installation du logiciel est on ne peut plus simple, puisqu’elle consiste à télécharger le programme Pyton sur votre Raspberry Pi…

Lancez les commandes suivantes pour télécharger freqshow.py :

cd ~
git clone https://github.com/adafruit/FreqShow.git
cd FreqShow

Respectez bien la casse (les majuscules et les minuscules) !
Et… c’est tout. Le programme est prêt à être utilisé ! On y va ?

Premier essai de l’analyseur de spectre

Vérifiez que vous travaillez bien dans le répertoire ~/FreqShow et lancez le programme :

pi@raspberrypi ~/FreqShow $ sudo python freqshow.py

Vous devriez voir apparaître l’écran d’accueil de freqshow :

freqshow_logo_600pxet quelques instants après l’analyseur de spectre :

freqshow_comment_600px

Photo Adafruit

Cette image d’Adafruit montre le résultat sur l’écran PiTFT. En bas figurent les fréquences couvertes par l’affichage. A gauche les niveaux mini et maxi du signal. Par défaut le réglage est automatique. J’ai souvent été amené à modifier le niveau mini manuellement pour obtenir une courbe exploitable.

Utilisation de freqshow.py

La partie haute de l’écran est occupée par un menu. QUIT ferme le programme, SWITCH MODE passe l’affichage en mode waterfall (bleu = niveau mini / rouge = niveau maxi) :

freqshow_waterfall_600px

Photo Adafruit

CONFIG donne accès au menu de configuration (comme on s’en serait douté 🙂 )

freqshow_config_600pxOn peut régler la fréquence centrale, celle d’échantillonnage, le gain et les niveaux maxi et mini de l’affichage du signal.

Lorsqu’on veut saisir une valeur numérique, l’écran passe dans un mode de saisie numérique :

freqshow_clavier_600pxPar exemple ici vous pouvez modifier la fréquence centrale, en saisissant la valeur sur l’écran tactile. Appuyez sur la touche CLEAR pour effacer complètement la valeur actuelle de la fréquence centrale, et saisissez la nouvelle valeur en tapant sur les chiffres. Pour supprimer le dernier chiffre saisi appuyez sur DELETE.

Une fois que vous avez entré la nouvelle valeur vous pouvez appuyer sur ACCEPT pour changer la fréquence centrale. Si finalement vous ne voulez pas changer la fréquence appuyez sur CANCEL  pour fermer la boîte de dialogue sans modifier la valeur.

Essayez de changer la fréquence centrale pour celle d’une station de radio FM de votre région. Appuyez sur BACK en bas à gauche de l’écran de configuration pour revenir à l’affichage graphique de fréquence. Vérifiez sur l’écran graphique que la fréquence centrale a été modifiée.

freqshow_fullscreen_600pxDepuis l’écran graphique, si vous tapez au centre de l’écran vous passez en mode Plein Écran comme ci-dessus. Tapez à nouveau vers le centre de l’écran pour revenir à l’affichage normal.

Démarrage automatique du programme

Le mieux serait qu’à la mise sous tension du Raspberry Pi, le programme freqshow.py soit lancé automatiquement. Pour un appareil dédié ça semble logique…
Comme nous sommes sous Jessie, il va falloir créer un lanceur qui va s’intégrer à systemd.

freqshow_lancement_progCréation du script de lancement

Avec nano créez un script /home/pi/scanner.sh

Dans ce script ajoutez les lignes suivantes :

#!/bin/bash

# Ci-dessous indiquez le script ou le programme Python que vous voulez lancer
cd /home/pi/FreqShow
sudo python freqshow.py

Rendez le script exécutable

sudo chmod +x /home/pi/scanner.sh

Testez le script pour vérifier son fonctionnement :

pi@raspberrypi ~ $ ./scanner.sh
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!

Si tout va bien, vous devez voir apparaitre l’analyseur de spectre sur le Raspberry Pi. (vous pouvez interrompre le programme avec CTRL C ci vous êtes à distance avec Putty).

Création du fichier service

Il faut maintenant indiquer à systemd qu’il doit lancer le service :

Créez le fichier /lib/systemd/system/scanner.service avec nano :

sudo nano /lib/systemd/system/scanner.service

Ajoutez les lignes suivantes dans le fichier :

[Unit]
Description=Analyseur de spectre
After=multi-user.target

[Service]
Type=simple
ExecStart=/home/pi/scanner.sh

[Install]
WantedBy=multi-user.target

Faites prendre en compte votre service par systemd :

pi@raspberrypi /etc/systemd/system $ sudo systemctl daemon-reload

pi@raspberrypi /etc/systemd/system $ sudo systemctl enable scanner.service
Created symlink from /etc/systemd/system/multi-user.target.wants/scanner.service to /lib/systemd/system/scanner.service.

Bon… Normalement on n’est pas loin du but 🙂

On se fait un test de démarrage ? Chiche !

sudo reboot

Et là…. Miracle de la technologie moderne, vous voyez le texte défiler sur l’écran, puis le bureau de Raspbian et enfin devant vos yeux emplis de larmes, l’analyseur de spectre se met en route !

freqshow_demarrage3_600pxBon, si vous avez autant de chance que moi, la bande FM est muette autour de 90.3 MHz… Qu’à cela ne tienne, je vais changer la fréquence avec le menu Config… Euh… tiens, ça marche pas… Et Switch Mode ? pas plus que QUIT ! Damned, c’est quoi ce tuto de m…. Ils l’avaient pourtant bien dit que ça marchait juste avec le clavier 2097… Pourquoi t’a été prendre celui-là ? tsss

Trouver la panne

Ne vous en faites pas c’est comme ça très souvent… C’est ce qui apprend à être patient, à ne pas aller trop vite, à lire la doc, à faire des recherches…

Allez on commence. Pourquoi donc le clavier tactile serait-il inerte ?

Après quelques recherches d’abord en français, sans succès, puis en anglais (ça sert quand même la langue de Shakespeare) je me retrouve sur un document Adafruit (décidément !) :

adafruit_touchscreen_01

Cliquez pour accéder au PDF

Et tout à la fin du document cette phrase sybilline :

adafruit_touchscreen_02

Et là un doute m’étreint (comme on dit à la SNCF) et si freqshow utilisait pygame ? Vite je regarde le début du programme avec un cat freqshow | less :

import os
import time

import pygame

import controller
import model
import ui

Bingo ! Effectivement le programme utilise pygame 🙂

Donc le problème pourrait venir d’une incompatibilité d’humeur entre pygame et la librairie SDL utilisée.

Un ps pour trouver le PID de freqshow.py et me voici sur la liste des librairies utilisées :

pi@raspberrypi /proc/827 $ sudo cat maps | grep SDL
75900000-75920000 r-xp 00000000 b3:02 57546      /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0
75920000-75927000 ---p 00020000 b3:02 57546      /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0
75927000-75928000 r--p 0001f000 b3:02 57546      /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0
75928000-75930000 rw-p 00020000 b3:02 57546      /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0.12.0
75a61000-75a66000 r-xp 00000000 b3:02 57554      /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1
75a66000-75a6d000 ---p 00005000 b3:02 57554      /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1
75a6d000-75a6e000 rw-p 00004000 b3:02 57554      /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0.10.1
75d2e000-75d39000 r-xp 00000000 b3:02 57532      /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4
75d39000-75d40000 ---p 0000b000 b3:02 57532      /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4
75d40000-75d41000 r--p 0000a000 b3:02 57532      /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4
75d41000-75d42000 rw-p 0000b000 b3:02 57532      /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0.8.4
76961000-769bd000 r-xp 00000000 b3:02 57514      /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4
769bd000-769cd000 ---p 0005c000 b3:02 57514      /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4
769cd000-769ce000 r--p 0005c000 b3:02 57514      /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4
769ce000-769cf000 rw-p 0005d000 b3:02 57514      /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4

Il y a bien du SDL là dedans. La solution est proposée dans le document d’Adafruit (merci Lady ADA) : Il faut réinstaller l’ancienne version de SDL, la 1.2. Comme elle se trouve sur le dépôt Wheezy il faut rajouter celui-ci à la sources.list. C’est ce que fait très bien le script inclus dans le pdf 🙂

Créez un fichier installsdl.sh dans /home/pi

Ajoutez y les lignes suivantes :

#!/bin/bash



#enable wheezy package sources
echo "deb http://archive.raspbian.org/raspbian wheezy main
" > /etc/apt/sources.list.d/wheezy.list



#set stable as default package source (currently jessie)
echo "APT::Default-release \"stable\";
" > /etc/apt/apt.conf.d/10defaultRelease



#set the priority for libsdl from wheezy higher then the jessie package
echo "Package: libsdl1.2debian
Pin: release n=jessie
Pin-Priority: -10
Package: libsdl1.2debian
Pin: release n=wheezy
Pin-Priority: 900
" > /etc/apt/preferences.d/libsdl



#install
apt-get update
apt-get -y --force-yes install libsdl1.2debian/wheezy

Rendez le script exécutable :

sudo chmod +x installsdl.sh

puis exécutez le :

sudo ./installsdl.sh

Après exécution du script votre écran devient sensible à la pression de vos doigts ! C’est pas beau ?

Changer la fréquence d’origine

Le démarrage de l’analyseur logique ne me convient pas trop. La fréquence de 90.3 MHz sur laquelle l’affichage est centré n’est pas occupée par un émetteur FM.

Pour montrer le fonctionnement du RTL-DSR, j’ai choisi de régler la fréquence centrale sur… RTL soit 105.5 MHz 🙂 Mais il doit y avoir moyen de modifier ça dans le programme pour que l’analyseur se cale sur RTL à chaque démarrage, non ?

Quelques cat plus loin je trouve :

pi@raspberrypi ~/FreqShow $ cat model.py |less
self.sdr = RtlSdr()
self.set_center_freq(90.3)
self.set_sample_rate(2.4)
self.set_gain('AUTO')

C’est donc là que ça se tient ! Modifiez la fréquence de départ en fonction de ce que vous voulez avoir au démarrage. Après avoir modifié comme suit :

self.set_center_freq(105.5)

freqshow_RTL_600px

Le programme se lance avec la fréquence centrale choisie. Il y a certainement moyen de modifier d’autres informations au lancement (le gain, les mini et maxi…) mais bon, vous allez peut-être chercher un peu, non ?

Et la consommation ?

Si vous envisagez de réaliser un appareil autonome, il est important d’avoir une idée de la consommation pour dimensionner la batterie qui va alimenter l’ensemble RasPi + écran + clé TNT…

Avec l’analyseur en fonctionnement on est au dessus de 700 ma ! Quand même… Il faudra peut-être prévoir de jongler avec l’éclairage de l’écran (PWM prot GPIO 18) pour abaisser la consommation.

freqshow_conso_600px

Consommation indiqué par l’analyseur USB

La vidéo

 

Conclusion

Pour une centaine d’euros vous avez à portée de main un analyseur de spectre. Sans être un vrai appareil de mesure, il pourra donner de précieuses indications à tous ceux qui gravitent autour des radiocommunications.

Le programme ne décode pas les signaux et ne sort donc pas le signal démodulé sur la prise HP du Raspberry Pi. Ce sera peut-être une évolution de cette application.

Le même matériel peut être utilisé avec gnu-radio. GNU Radio est une boîte à outils logicielle open-source qui fournit des blocs de traitement des signaux pour mettre en œuvre des radios logicielles (SDR). Il est largement utilisé dans les environnements amateur, universitaires et commerciaux pour mener à la fois des recherches sur les communications sans fil et sur les systèmes de radio réels. J’espère avoir l’occasion de vous le présenter dans un futur article.

Sources

How To Autorun A Python Script On Boot Using systemd

APRS Rx-only IGate with Raspberry Pi and DVB-T dongle

 

 

Share Button

A propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

23 réflexions au sujet de « Réalisez un analyseur de spectre avec le Raspberry Pi 2 »

    1. François MOCQ Auteur de l’article

      Bonsoir Isnogoud
      il me semble fait pour un écran Tontec qui n’a pas d’oreilles de fixation comme celui d’Adafruit…
      et l’écran Tontec ce n’est pas garanti qu’il fonctionne ici…
      bonne journée
      cordialement
      François

      Répondre
  1. Eric

    Bonjour,
    Nouveau dans le monde du raspberry, je suis tombé sur votre site super intéressant qui m’a appris beaucoup de choses.
    Petite question suite à ce tuto , est il possible de réaliser quelque chose de similaire pour aider à pointer les satellites ?

    Eric

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Eric
      à tester
      un LNB sort entre 950 et 2150 Mhz
      1- voir si la clé TNT couvre cette plage
      2- alimenter le LNB avec un système adapté
      mais sur le bas de la gamme c’est certainement possible
      cordialement
      François

      Répondre
      1. S.POURRE

        Bonjour

        J’ai un gros doute sur la faisabilité pour les stellites TV.
        Un transpondeur occupe une bande passante de plusieures dizaines de Mhz. En analogique, 1 transpondeur = 1 programme TV (plus des canaux son).
        En numérique, quasi généralisé, un transpondeur est occupé par un multiplex qui groupe plusieurs chaînes.
        Cette bande passante me semble être un obstacle sérieux au traitement numérique pour afficher le spectre ou le waterfall (typique des SDR).
        En effet, le traitement est effectué par la carte son et une valeur typique de la bande passante traitée est de 2 Mhz (il y a des cartes son de
        compétition qui dépasse cette valeur). Ceci semble d’ailleurs confirmé par les captures d’écran qui illustrent l’article.
        de toute manière, il faut alimenter le LNB et le montage le plus pratique est d’utiliser le récepteur satellite dont on dispose, surtout que ce
        ux-ci sont équipés d’un S-mètre bien pratique pour peaufiner le calage. L’avantage manifeste du Raspberry est sa petite taille pour l’emporter sur le toit. Comme dit François, il faut tester (en faisant attention de ne pas détruire le dongle RTL-SDR en ramenat la tension d’alimentation
        du LNB dessus).

        Cordiales salutations – Sylvain

        Répondre
        1. François MOCQ Auteur de l’article

          bonsoir Sylvain
          je n avais pas pensé à cet aspect d’occupation de bande des chaines sat.
          effectivement les 2.4 MHz permis par la clé DVB-T risquent d’être un peu « short »
          73’s
          François

          Répondre
  2. régis

    Bonjour
    une petite question : pour rendre l’écran tactile, je suis votre procédure, qui me donne cette erreur , u lancement du script :
    E: La valeur « stable » n’est pas valable pour APT::Default-Release car cette version ne fait pas partie des sources disponibles.
    Normal ? que dois je faire ?
    en tout cas, merci pour ce bel article détaillé , c’est complet et pédagogique
    Bien à vous
    Régis P

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Regis
      je ne sais pas trop
      ça a fonctionné du premier coup sur 2 cartes SD différentes…
      …?
      il n y a pas eu d’autre message d’erreur ?
      vous êtes bien connecté à Internet ?

      Répondre
  3. S.POURRE

    Bonjour François,

    Réponse rédigée sous VI ;-))

    Très bon article (as usual).
    Comme vous le signalez fort honnêtement, il s’agit plus d’un récepteur panoramique que d’un instrument de mesure (on ne peut que rêver devant l
    a capture d’écran d’un Agilent).
    Comme tel, il peut permettre de vérifier le fonctionnement d’une télécommande, de veiller une bande de fréquence ..
    On attend donc la suite logique qui est la démodulation du signal; Comment se comporte la Framboise aux 4 coeurs ? reste-t-il du CPU disponiblepour faire tourner les blocs de traitement de GNU-radio ?
    Nota: Je suis tout de même surpris par la forte dépendance à un type d’afficheur, ça va certainement limiter la portabilité.
    Cordiales 73 – Sylvain de F1MYZ.

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour Sylvain
      ok pour Vi 🙂
      comme je n ai pas pu tester d’autre écran j en suis resté à ce que j’ai trouvé sur les forums Adafruit
      mais c’est sur qu ils vont pas dire que ça marche avec les concurrents
      je verifierai pour l occupation CPU
      pour info le Raspi tourne depusi 3 jours non stop en affichant la frequence d’RTL…
      73’s
      François

      Répondre
  4. Ping : Réalisez un analyseur de spectre avec le...

  5. Ping : Réalisez un analyseur de spectre avec le...

  6. Ping : Réalisez un analyseur de spectre avec le Raspberry Pi 2 – Radioamateur France

  7. f1abr Michel

    Bonjour
    Probleme avec Freqshow.py
    Il Y a t’il une version pour fonctionner avec la sourie ?
    Je hub usb est ok.
    Sinon je il fonctionne mais je ne peut riens en faire et ni l’arreter!

    J’ai essayé d’installer Gqrx mais pas moyen de le faire fonctionner!
    il ya des tutos mais pas trouvé ce qui convient.
    Merci

    Michel

    Répondre
  8. f1abr Michel

    onjour
    Une précision, pour que le scanner utilise la sourie :
    Dans: /freqshow/freqshow.py à la ligne pygame,mouse,set_visible (False)
    remplacer (False) par (True)
    Dommage qu’il n’y a pas de sons !

    Répondre
  9. FEVRAT

    Bonjour,

    Tout d’abord merci pour ce tuto très bien expliqué et documenté.
    Vivant dans un petit village du centre de la France, je souhaiterai savoir si cette analyseur peut observer les fréquences GSM pour ainsi connaitre le meilleur opérateur téléphonique (ras le bol de la mauvaise réception).

    Je vous remercie par avance.

    Cordialement Jérémy

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Jérémy
      il ne fait qu’afficher les signaux qu’il reçoit… en plus ce n’est pas un appareil de mesure, les fréquence ne sont pas hyper précises….
      comment comptez vous identifier les différents fournisseurs ?
      cordialement
      François

      Répondre
      1. FEVRAT

        Bonjour François,

        Effectivement, ce n’est pas un appareil de mesure mais les fréquences des fournisseurs sont données sur un site en relation avec l’ARCEP. Je me dis donc que si on peut observer des pics de fréquences dans des zones spécifiques (pour SFR entre 904.90 et 914.90 MHz en upload par exemple), je saurai le meilleur fournisseur en fonction de la puissance du signal la plus importante dans une plage donnée.

        CDL Jérémy

        Pour les fréquences le liens ci-dessous :
        http://www.lowcostmobile.com/actualite/1495-lots-frequences-operateur-technologie-gsm-umts-lte

        Répondre
  10. FEVRAT

    Bonjour François,
    j’ai un problème au niveau de l’écran tactile une fois le programme de l’analyseur lancé et je souhaiterais savoir s’il y’a un moyen de le calibrer.
    Je n’ai cependant aucun soucis lorsque je suis sur l’écran de base de raspbian.
    Merci pour la réponse que vous pourrez me donner.

    Cordialement

    Répondre
  11. Ping : Une interface web pour un émetteur FM avec le Raspberry Pi | Framboise 314, le Raspberry Pi à la sauce française….

  12. Ping : Une interface web pour un émetteur FM avec Raspberry Pi | Radioamateur France

  13. Alexidreaming

    Bonjour, je suis un habitué de ce superbe site internet et j’ai mis l’os sur la carte mais le tactile de l’écran ne fonctionne pas et ayant un serveur NAS et cloud dessus je n’aimerais pas reformater la carte.
    Merci
    Cordialement

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.