Dati sismici in tempo reale da libmseed utilizzando un Raspberry Pi con 512 MB di RAM e un singolo processore ARM

 

L'ottimizzazione di sistemi semplici consente di utilizzare hardware come un Raspberry Pi di base con 512 MB di RAM e un singolo processore ARM per molteplici attività importanti e di grandi dimensioni.

 

Dati sismici in tempo reale da libmseed utilizzando un Raspberry Pi con 512 MB di RAM e un singolo processore ARM

Dati sismici in tempo reale da libmseed utilizzando un Raspberry Pi con 512 MB di RAM e un singolo processore ARM
Tempo di lettura: 3 minuti

Nell'esempio mostrato nello screenshot, questo Raspberry Pi esegue diversi processi per acquisire dati sismici:

Legge i dati grezzi dai tre assi (X, Y, Z) in tempo reale a 1000 Hz da un sensore accelerometro ADXL355.

Applica un sottocampionamento a 100 Hz.

Applica un filtro notch a 50 Hz per rimuovere i dati non necessari dal segnale.

Applica la correzione gravitazionale all'asse Z.

Salva i dati grezzi risultanti in memoria.

Genera file .mseed con i dati grezzi finali memorizzati in memoria. Applica una calibrazione periodica per compensare la deviazione di ciascun asse e mantenere i dati centrati sull'asse 0.

Applica 26 diversi filtri IIR a ciascun asse per ottenere il segnale suddiviso e rilevare diversi tipi di eventi, come terremoti vicini, scosse, terremoti distanti, ecc.
Applica un filtro STA/LTA a ciascun asse, consentendo di identificare l'evento all'interno di uno specifico intervallo di frequenza e asse.

Rileva l'energia RMS di tutti e tre gli assi.

Rileva il tempo di arrivo dell'evento utilizzando il metodo della curtosi.

Rileva l'arrivo dell'onda sismica utilizzando un algoritmo AIC secondario.
Attiva avvisi utilizzando finestre temporali individuali per ciascun filtro se viene superata la soglia di attivazione, adattata a ciascun intervallo di frequenza e asse. Dispone di un server web nginx per visualizzare il pannello di controllo.
Invia i dati grezzi da tutte le funzioni sopra descritte al pannello di controllo tramite WebSocket.
Genera file mseed grezzi per tutti e tre gli assi su un SD ogni minuto per mantenere i dati generati al sicuro sulla scheda di memoria.
Applica un filtro FIR a ciascun intervallo di frequenza per generare un grafico dell'elicottero più accattivante.

Genera elicotteri per cinque diversi intervalli, consentendo di visualizzare qualsiasi evento e di osservare come ha influenzato i diversi intervalli.
Invia gli elicotteri precedenti al server principale per la visualizzazione esterna su Internet.

Dispone di un server libseed per connettersi direttamente e raccogliere dati con altri software, come Swarm.

Questo stesso server invia i dati libseed a un server centrale, dove vengono ridistribuiti pubblicamente e in tempo reale. La dashboard integra un sistema che si connette a diverse agenzie ufficiali ogni 30 secondi per ricevere gli eventi più recenti. Se disponibili, include un sistema di arrivo delle onde per visualizzare la tempistica e l'impatto di ciascun tipo di onda sul segnale in un dato momento, calcolando l'origine e l'arrivo alla stazione utilizzando il metodo AK135 basato su coordinate geodetiche.

Il pannello di controllo consente la connessione a server mseed per confrontare la forma d'onda della stazione con quelle di altre stazioni professionali.

Include inoltre la generazione di uno spettrogramma per visualizzare l'intensità del segnale e la sua distribuzione in un intervallo di tempo. Ciò consente la visualizzazione in tempo reale dell'intensità di un evento distribuita sull'intera larghezza di banda del segnale.

Si potrebbe pensare che un Raspberry Pi così limitato non sia in grado di generare una tale quantità di dati, in così tanti modi diversi e in un tempo così breve, considerando la memoria limitata disponibile e il fatto che disponiamo di un solo processore. Pertanto, le connessioni socket, la generazione di dati e file, il server web, ecc., avvengono tutti sulla stessa CPU senza la possibilità di un multithreading separato. Tuttavia, lungi dal bloccarsi, il sistema gestisce tutto perfettamente. Non si verificano interruzioni di dati. Le uniche interruzioni sono state dovute a riavvii intenzionali dei servizi, ricompilazione del codice sorgente e/o modifiche e aggiornamenti. Il sistema è stabile.

Dato che i dati sono ora disponibili esternamente, ho implementato un altro servizio sul server principale che raccoglie i dati di libseed in tempo reale e li ridistribuisce, consentendone la decrittazione e la visualizzazione in tempo reale tramite JavaScript.

Questo è esattamente ciò che ho configurato. Un sistema in tempo reale permette il monitoraggio simultaneo di tutte e tre le stazioni sismiche, ciascuna dotata di diversi tipi di sensori. È proprio questo che ci aiuterà a interpretare il comportamento e l'aspetto del segnale su ciascun sensore (accelerometri e geofoni).

Questo video dimostra la perfetta sincronizzazione tra la data e l'ora del sistema e i dati del grafico, che presentano un ritardo di pochi millisecondi, confermando quanto affermato in precedenza.

Si tratta di un risultato spettacolare, ottenuto con hardware limitato e obsoleto. La sfida è far funzionare il sistema con il minimo indispensabile. Sapendo che funziona, farlo funzionare su hardware attuale e performante non sarà un problema.

Video:






Altri post del blog correlati: