Dados sísmicos em tempo real da libmseed utilizando um Raspberry Pi com 512 MB de RAM e um processador ARM de um único núcleo.
A otimização de sistemas simples permite que hardware como um Raspberry Pi básico com 512 MB de RAM e um processador ARM de um único núcleo seja utilizado para múltiplas tarefas grandes e importantes.
Na captura de ecrã de exemplo, este Raspberry Pi executa vários processos para capturar dados sísmicos:
Lê dados brutos dos três eixos (X, Y, Z) em tempo real a 1000 Hz a partir de um sensor acelerómetro ADXL355.
Aplica uma subamostragem a 100 Hz.
Aplica um filtro notch a 50 Hz para remover dados desnecessários do sinal.
Aplica a correção de gravidade ao eixo Z.
Guarda os dados brutos resultantes na memória.
Gera ficheiros . mseed com os dados brutos finais armazenados na memória. Aplica a calibração periódica para compensar o desvio de cada eixo individual e manter os dados centrados no eixo 0.
Aplica 26 filtros IIR diferentes a cada eixo para obter o sinal dividido e detetar diferentes tipos de eventos, tais como sismos próximos, tremores, sismos distantes, etc.
Aplica um filtro STA/LTA a cada eixo, permitindo identificar o evento dentro de um intervalo específico de Hz e eixo.
Aplica um filtro STA/LTA a cada eixo, permitindo identificar o evento dentro de um intervalo específico de Hz e eixo. Deteta a energia RMS de todos os três eixos.
Deteta o tempo de chegada do evento utilizando o método da curtose.
Deteta a chegada da onda sísmica usando um algoritmo AIC secundário.
Dispara alertas utilizando janelas de tempo individuais para cada filtro se o Limiar de Disparo, adaptado a cada gama de Hz e eixo, for excedido. Possui um servidor web nginx para exibir o painel de controlo.
Envia dados brutos de todos os itens acima para o painel de controlo através de WebSockets.
Gera ficheiros mseed em bruto para todos os três eixos num SD a cada minuto para manter os dados gerados seguros no cartão de memória.
Aplica um filtro FIR a cada uma das gamas de Hz para gerar um gráfico de helicordem visualmente mais apelativo.
Gera helicordens para cinco faixas diferentes, permitindo visualizar quaisquer eventos e ver como estes afetaram diferentes faixas.
Envia as helicordens anteriores para o servidor principal para visualização externa na internet.
Possui um servidor libseed para se ligar diretamente e recolher dados com outros softwares, como o Swarm.
Este mesmo servidor envia os dados libseed para um servidor central, onde serão redistribuídos publicamente e em tempo real. O painel de controlo incorpora um sistema que se liga a várias agências oficiais a cada 30 segundos para receber os eventos mais recentes. Se disponível, inclui um sistema de chegada de ondas para visualizar o tempo e como cada tipo de onda afeta o sinal no momento preciso, calculando a origem e a chegada à estação utilizando o método AK135 com base em coordenadas geodésicas.
O painel de controlo permite a ligação a servidores mseed para comparar a forma de onda da estação com as de outras estações profissionais.
Inclui também a geração de um espectrograma para visualizar a intensidade do sinal e a sua distribuição ao longo de uma janela temporal. Isto permite a visualização em tempo real da intensidade de um evento distribuída por toda a largura do sinal.
Poder-se-ia pensar que um Raspberry Pi tão limitado não conseguiria gerar tantos dados, de tantas formas diferentes e em tão pouco tempo, considerando a memória limitada disponível e o facto de termos apenas um processador. Portanto, as ligações de socket, a geração de dados e ficheiros, o servidor web, etc., tudo ocorre no mesmo CPU, sem possibilidade de multithreading separado. No entanto, longe de falhar, o sistema lida com isso na perfeição. Não existem interrupções de dados. As únicas interrupções ocorreram devido a reinicializações intencionais do serviço, recompilação do código-fonte e/ou alterações e atualizações. O sistema é estável.
Como os dados estão agora disponíveis externamente, implementei outro serviço no servidor principal que recolhe os dados da libseed em tempo real e os redistribui, permitindo que sejam desencriptados e apresentados em tempo real utilizando JavaScript.
Foi exatamente o que configurei. Um sistema em tempo real permite a monitorização simultânea de todas as três estações sísmicas, cada uma equipada com diferentes tipos de sensores. É exatamente isso que nos vai ajudar a interpretar como o sinal se comporta e aparece em cada sensor (acelerómetros e geofones).
Este vídeo demonstra a sincronização perfeita da data e hora do sistema com os dados do gráfico, que estão apenas alguns milissegundos atrasados, confirmando o que foi referido anteriormente.
Esta é uma conquista espetacular com hardware muito limitado e desatualizado. O desafio é fazê-lo funcionar com o mínimo necessário. Sabendo que funciona, fazê-lo funcionar em hardware atual e rápido não será problema.