Données sismiques en temps réel issues de libmseed, obtenues avec un Raspberry Pi doté de 512 Mo de RAM et d'un processeur ARM.
L'optimisation de systèmes simples permet d'utiliser un matériel comme un Raspberry Pi de base (512 Mo de RAM et processeur ARM) pour de multiples tâches importantes.
Dans la capture d'écran illustrée, ce Raspberry Pi exécute plusieurs processus pour acquérir des données sismiques :
Il lit en temps réel les données brutes des trois axes (X, Y, Z) à 1 000 Hz à partir d'un accéléromètre ADXL355.
Il effectue un sous-échantillonnage à 100 Hz.
Il applique un filtre coupe-bande à 50 Hz pour éliminer les données parasites du signal.
Il applique une correction de gravité à l'axe Z.
Il enregistre les données brutes résultantes en mémoire.
Il génère des fichiers .mseed à partir des données brutes finales stockées en mémoire. Il effectue un étalonnage périodique pour compenser la déviation de chaque axe et maintenir les données centrées sur l'axe 0.
Il applique 26 filtres IIR différents à chaque axe pour obtenir le signal décomposé et détecter différents types d'événements, tels que les séismes proches, les secousses, les séismes lointains, etc.
Il applique un filtre STA/LTA à chaque axe, ce qui lui permet d'identifier l'événement dans une plage de fréquences et d'axes spécifique. Il détecte l'énergie RMS des trois axes.
Il détecte l'instant d'arrivée de l'événement par la méthode du kurtosis.
Il détecte l'arrivée de l'onde sismique grâce à un algorithme AIC secondaire.
Il déclenche des alertes par fenêtre temporelle individuelle pour chaque filtre si le seuil de déclenchement, adapté à chaque fréquence et à chaque plage d'axes, est dépassé. Il dispose d'un serveur web nginx pour l'affichage du panneau de contrôle.
Il transmet les données brutes issues de tous les processus précédents au panneau de contrôle via WebSockets.
Il génère des fichiers mseed bruts pour les trois axes sur un SD toutes les minutes afin de garantir la sécurité des données générées sur la carte mémoire.
Il applique un filtre FIR à chaque plage de fréquences pour générer un graphique hélicoïdal plus esthétique.
Il génère des graphiques hélicoïdaux pour cinq plages différentes, permettant de visualiser les événements et leur impact sur les différentes plages.
Il envoie les graphiques hélicoïdaux précédents au serveur principal pour consultation externe sur Internet. Il dispose d'un serveur libseed permettant la connexion directe et la collecte de données avec d'autres logiciels, tels que Swarm.
Ce même serveur envoie les données libseed à un serveur central, où elles sont redistribuées publiquement et en temps réel. Le tableau de bord intègre un système qui se connecte à divers organismes officiels toutes les 30 secondes pour recevoir les événements les plus récents. S'il est disponible, il inclut un système d'arrivée des ondes permettant de visualiser la chronologie et l'influence de chaque type d'onde sur le signal à un instant précis, en calculant l'origine et l'arrivée à la station selon la méthode AK135 basée sur les coordonnées géodésiques.
Le panneau de contrôle permet la connexion aux serveurs mseed pour comparer la forme d'onde de la station avec celles d'autres stations professionnelles.
Il inclut également la génération d'un spectrogramme pour visualiser la puissance du signal et sa distribution dans le temps. Ceci permet une visualisation en temps réel de la puissance d'un événement répartie sur toute la largeur du signal.
On pourrait penser qu'un Raspberry Pi aussi limité ne pourrait pas générer autant de données, de tant de manières et en si peu de temps, compte tenu de sa mémoire disponible limitée et de son unique processeur. Par conséquent, les connexions réseau, la génération de données et de fichiers, le serveur web, etc., s'effectuent tous sur le même processeur, sans possibilité de multithreading. Pourtant, loin de planter, le système gère cela parfaitement. Aucune interruption de données n'est à déplorer. Les seules interruptions constatées sont dues à des redémarrages de service intentionnels, à la recompilation du code source et/ou à des modifications et mises à jour. Le système est stable.
Les données étant désormais accessibles en externe, j'ai implémenté un autre service sur le serveur principal qui collecte les données libseed en temps réel et les redistribue, permettant ainsi leur déchiffrement et leur affichage en temps réel via JavaScript.
C'est précisément ce que j'ai mis en place. Un système en temps réel permet la surveillance simultanée des trois stations sismiques, chacune équipée de différents types de capteurs. C’est précisément ce qui nous permettra d’interpréter le comportement et l’apparence du signal au niveau de chaque capteur (accéléromètres et géophones).
Cette vidéo démontre la synchronisation parfaite de la date et de l’heure du système avec les données graphiques, qui ne présentent qu’un décalage de quelques millisecondes, confirmant ainsi ce qui a été mentionné précédemment.
Il s’agit d’une performance remarquable, réalisée avec un matériel très limité et obsolète. Le défi consiste à le faire fonctionner avec le strict minimum. Sachant que cela fonctionne, l’adapter à du matériel actuel et performant ne posera aucun problème.