Echtzeit-Seismikdaten von libmseed auf einem Raspberry Pi mit 512 MB RAM und einem ARM-Einzelprozessor

 

Die Optimierung einfacher Systeme ermöglicht den Einsatz von Hardware wie einem Basis-Raspberry Pi mit 512 MB RAM und einem ARM-Einzelprozessor für mehrere große und wichtige Aufgaben.

 

Echtzeit-Seismikdaten von libmseed auf einem Raspberry Pi mit 512 MB RAM und einem ARM-Einzelprozessor

Echtzeit-Seismikdaten von libmseed auf einem Raspberry Pi mit 512 MB RAM und einem ARM-Einzelprozessor
Lesezeit: 3 Minuten

Im Beispiel-Screenshot führt dieser Raspberry Pi mehrere Prozesse zur Erfassung seismischer Daten aus:

Er liest Rohdaten der drei Achsen (X, Y, Z) in Echtzeit mit 1000 Hz von einem ADXL355-Beschleunigungssensor.

Er wendet ein Downsampling mit 100 Hz an.

Er wendet einen Notch-Filter mit 50 Hz an, um unnötige Daten aus dem Signal zu entfernen.

Er korrigiert die Z-Achse um die Schwerkraft.

Er speichert die resultierenden Rohdaten im Speicher.

Er generiert .mseed-Dateien mit den finalen, im Speicher abgelegten Rohdaten. Er führt eine regelmäßige Kalibrierung durch, um die Abweichung jeder einzelnen Achse auszugleichen und die Daten auf der Nullachse zu zentrieren.
Er wendet 26 verschiedene IIR-Filter auf jede Achse an, um das Signal aufzuteilen und verschiedene Ereignistypen wie nahe Erdbeben, Erschütterungen, ferne Erdbeben usw. zu erkennen. Er wendet einen STA/LTA-Filter auf jede Achse an, um das Ereignis innerhalb eines bestimmten Frequenz- und Achsenbereichs zu identifizieren.

Er wendet einen STA/LTA-Filter auf jede Achse an, um das Ereignis innerhalb eines bestimmten Frequenz- und Achsenbereichs zu identifizieren. Es erfasst die Effektivenergie aller drei Achsen.

Es ermittelt die Ankunftszeit des Ereignisses mithilfe der Kurtosis-Methode.

Es erkennt die Ankunft der seismischen Welle mithilfe eines sekundären AIC-Algorithmus.

Es löst Alarme in individuellen Zeitfenstern für jeden Filter aus, sobald der für jeden Frequenzbereich und Achsenbereich angepasste Auslöseschwellenwert überschritten wird. Ein Nginx-Webserver dient zur Anzeige des Bedienfelds.

Die Rohdaten aller oben genannten Komponenten werden per WebSocket an das Bedienfeld gesendet.

Es generiert minütlich Rohdaten-MSEED-Dateien für alle drei Achsen auf einer SD, um die Daten auf der Speicherkarte zu sichern.

Es wendet einen FIR-Filter auf jeden Frequenzbereich an, um ein übersichtlicheres Helikopterdiagramm zu erzeugen.

Es generiert Helikopterdiagramme für fünf verschiedene Bereiche, sodass Sie Ereignisse visualisieren und deren Auswirkungen auf die verschiedenen Bereiche erkennen können.

Die vorherigen Helikopterdiagramme werden zur externen Anzeige im Internet an den Hauptserver gesendet.

Es verfügt über einen Libseed-Server zur direkten Verbindung und Datenerfassung mit anderer Software wie Swarm.

Dieser Server sendet die Libseed-Daten an einen zentralen Server, wo sie öffentlich und in Echtzeit verteilt werden. Das Dashboard beinhaltet ein System, das sich alle 30 Sekunden mit verschiedenen offiziellen Stellen verbindet, um die neuesten Ereignisse zu empfangen. Sofern verfügbar, visualisiert es den Zeitpunkt und die Auswirkungen verschiedener Wellentypen auf das Signal im jeweiligen Moment. Dabei werden Ursprung und Ankunft an der Station mithilfe der AK135-Methode auf Basis geodätischer Koordinaten berechnet.

Über das Bedienfeld kann eine Verbindung zu MSeed-Servern hergestellt werden, um die Wellenform der Station mit denen anderer professioneller Stationen zu vergleichen.

Zusätzlich wird ein Spektrogramm generiert, um die Signalstärke und ihre Verteilung über ein Zeitfenster zu visualisieren. Dies ermöglicht die Echtzeit-Anzeige der Stärke eines Ereignisses über die gesamte Signalbreite.

Man könnte meinen, dass ein so leistungsschwacher Raspberry Pi angesichts des begrenzten Speichers und des einzelnen Prozessors nicht in der Lage wäre, so viele Daten auf so vielfältige Weise und in so kurzer Zeit zu generieren. Daher laufen Socket-Verbindungen, Daten- und Dateigenerierung, der Webserver usw. alle auf derselben CPU ab, ohne die Möglichkeit von separatem Multithreading. Doch anstatt abzustürzen, bewältigt das System dies einwandfrei. Es gibt keine Datenausfälle. Die einzigen Ausfälle waren auf beabsichtigte Neustarts von Diensten, die Neukompilierung des Quellcodes und/oder Änderungen und Aktualisierungen zurückzuführen. Das System ist stabil.

Da die Daten nun extern verfügbar sind, habe ich auf dem Hauptserver einen weiteren Dienst implementiert, der die libseed-Daten in Echtzeit sammelt und weiterverteilt. So können sie mithilfe von JavaScript in Echtzeit entschlüsselt und angezeigt werden.

Genau das habe ich eingerichtet. Ein Echtzeitsystem ermöglicht die gleichzeitige Überwachung aller drei seismischen Stationen, die jeweils mit unterschiedlichen Sensortypen ausgestattet sind. Genau das wird uns helfen zu interpretieren, wie sich das Signal an den einzelnen Sensoren (Beschleunigungsmessern und Geophonen) verhält und darstellt.

Dieses Video demonstriert die perfekte Synchronisierung von Datum und Uhrzeit des Systems mit den Diagrammdaten, die nur wenige Millisekunden hinterherhinken und damit die vorherigen Aussagen bestätigen.

Dies ist eine bemerkenswerte Leistung mit sehr begrenzter und veralteter Hardware. Die Herausforderung besteht darin, das System mit minimalem Aufwand zum Laufen zu bringen. Da wir wissen, dass es funktioniert, wird die Implementierung auf aktueller, schneller Hardware kein Problem darstellen.

Video:






Weitere verwandte Blogbeiträge: