Realtime seismische data van libmseed met behulp van een Raspberry Pi met 512 MB RAM en een ARM-processor
De optimalisatie van eenvoudige systemen maakt het mogelijk om hardware zoals een basis Raspberry Pi met 512 MB RAM en een ARM-processor te gebruiken voor meerdere grote en belangrijke taken.
In de voorbeeldscreenshot voert deze Raspberry Pi meerdere processen uit om seismische data vast te leggen:
Hij leest in realtime ruwe data van de drie assen (X, Y, Z) met een frequentie van 1000 Hz van een ADXL355-accelerometersensor.
Hij past een downsampling toe met een frequentie van 100 Hz.
Hij past een notchfilter toe met een frequentie van 50 Hz om onnodige data uit het signaal te verwijderen.
Hij past zwaartekrachtcorrectie toe op de Z-as.
Hij slaat de resulterende ruwe data op in het geheugen.
Hij genereert .mseed-bestanden met de uiteindelijke ruwe data die in het geheugen zijn opgeslagen. Hij past periodieke kalibratie toe om de afwijking van elke afzonderlijke as te compenseren en de data gecentreerd te houden op de 0-as.
Hij past 26 verschillende IIR-filters toe op elke as om het gesplitste signaal te verkrijgen en verschillende soorten gebeurtenissen te detecteren, zoals aardbevingen in de buurt, schokken, aardbevingen op afstand, enz.
Hij past een STA/LTA-filter toe op elke as, waardoor hij de gebeurtenis binnen een specifiek Hz- en asbereik kan identificeren. Het systeem detecteert de RMS-energie van alle drie de assen.
Het detecteert de aankomsttijd van de gebeurtenis met behulp van de kurtosismethode.
Het detecteert de aankomst van de seismische golf met behulp van een secundair AIC-algoritme.
Het activeert waarschuwingen met behulp van individuele tijdvensters voor elk filter als de triggerdrempel, aangepast aan elk Hz- en asbereik, wordt overschreden. Het heeft een Nginx-webserver om het bedieningspaneel weer te geven.
Het verzendt ruwe data van al het bovenstaande naar het bedieningspaneel via WebSockets.
Het genereert elke minuut ruwe mseed-bestanden voor alle drie de assen op een SD om de gegenereerde data veilig op de geheugenkaart te bewaren.
Het past een FIR-filter toe op elk van de Hz-bereiken om een visueel aantrekkelijker helicordergrafiek te genereren.
Het genereert helicorders voor vijf verschillende bereiken, zodat u gebeurtenissen kunt visualiseren en kunt zien hoe ze verschillende bereiken hebben beïnvloed.
Het verzendt de voorgaande helicorders naar de hoofdserver voor externe weergave via internet.
Het beschikt over een libseed-server om rechtstreeks verbinding te maken en gegevens te verzamelen met andere software, zoals Swarm.
Deze server stuurt de libseed-gegevens naar een centrale server, waar ze openbaar en in realtime worden verspreid. Het dashboard bevat een systeem dat elke 30 seconden verbinding maakt met verschillende officiële instanties om de meest recente gebeurtenissen te ontvangen. Indien beschikbaar, bevat het een systeem voor golfaankomst om de timing en de invloed van elk type golf op het signaal op het precieze moment te visualiseren. De oorsprong en aankomst bij het station worden berekend met behulp van de AK135-methode op basis van geodetische coördinaten.
Het bedieningspaneel maakt verbinding met mseed-servers mogelijk om de golfvorm van het station te vergelijken met die van andere professionele stations.
Het bevat ook de mogelijkheid om een spectrogram te genereren om de signaalsterkte en de verdeling ervan over een tijdsvenster te visualiseren. Dit maakt realtime weergave mogelijk van de sterkte van een gebeurtenis verdeeld over de gehele signaalbreedte.
Je zou denken dat een Raspberry Pi met zulke beperkte mogelijkheden niet zoveel data op zoveel verschillende manieren en in zo'n korte tijd zou kunnen genereren, gezien het beperkte beschikbare geheugen en het feit dat we slechts één processor hebben. Daarom vinden socketverbindingen, data- en bestandsgeneratie, de webserver, enzovoort, allemaal plaats op dezelfde CPU zonder de mogelijkheid van aparte multithreading. Het systeem loopt echter niet vast, maar verwerkt het perfect. Er zijn geen data-uitval. De enige storingen zijn veroorzaakt door opzettelijke herstarts van services, hercompilatie van de broncode en/of wijzigingen en updates. Het systeem is stabiel.
Omdat de data nu extern beschikbaar is, heb ik een andere service op de hoofdserver geïmplementeerd die de libseed-data in realtime verzamelt en herverdeelt, zodat deze in realtime kan worden gedecodeerd en weergegeven met behulp van JavaScript.
Dit is precies wat ik heb opgezet. Een realtime systeem maakt gelijktijdige monitoring van alle drie de seismische stations mogelijk, die elk zijn uitgerust met verschillende soorten sensoren. Dit is precies wat ons zal helpen interpreteren hoe het signaal zich gedraagt en verschijnt bij elke sensor (accelerometers en geofonen).
Deze video demonstreert de perfecte synchronisatie van de datum en tijd van het systeem met de grafiekgegevens, die slechts enkele milliseconden achterlopen, waarmee wordt bevestigd wat eerder is gezegd.
Dit is een spectaculaire prestatie met zeer beperkte en verouderde hardware. De uitdaging is om het te laten werken met het absolute minimum. Nu we weten dat het werkt, zal het geen probleem zijn om het te laten werken op moderne, snelle hardware.