public override void Analizza(int[] buffer) { foreach (var i in buffer) { RicevitoriRisultato?.Invoke(i); } }
public override void Analizza(int[] buffer) { // Trovo il tempo attuale long tempoAttuale = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; // Trova il massimo elemento int max = -1; for (int i = 0; i < buffer.Length; i++) { if (buffer[i] > max) { max = buffer[i]; } } if (max > SogliaPicco && (tempoAttuale - TempoUltimoPicco) > TempoDistanzaMinimo) { codaPicchi.Enqueue(tempoAttuale); TempoUltimoPicco = tempoAttuale; } // Conto i picchi e dimensiono la coda if (codaPicchi.Count > 0 && (tempoAttuale - codaPicchi.Peek()) > TempoAnalisi) { codaPicchi.Dequeue(); } int valoreFrequenza = codaPicchi.Count; // Verifico se il massimo supera una soglia int indiceSoglia = -1; for (int i = 0; i < Soglie.Length; i++) { if (valoreFrequenza > Soglie[i]) { indiceSoglia = i; } } // Se la supera, creo un evento if (indiceSoglia >= 0) { EventoSismico evento = new EventoSismico { Messaggio = "Frequenza ha superato: " + valoreFrequenza, Priorita = (Priorita)indiceSoglia, Stazione = Stazione, Tag = "Frequenta", Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }; GestoreEventi.NotificaEventoAsync(evento); } // Notifica il risultato RicevitoriRisultato?.Invoke(valoreFrequenza); }
public override void Analizza(int[] buffer) { long tempoAttuale = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; // Trova il massimo elemento int max = -1; for (int i = 0; i < buffer.Length; i++) { if (buffer[i] > max) { max = buffer[i]; } } // Converto in magnitudo double valoreMagnitudine = Math.Abs(max - 500) / 50f; // Verifico se il massimo supera una soglia int indiceSoglia = -1; for (int i = 0; i < Soglie.Length; i++) { if (valoreMagnitudine > Soglie[i]) { indiceSoglia = i; } } // Se la supera, creo un evento if (indiceSoglia >= 0 && (tempoAttuale - _tempoUltimoAvviso) > DistanzaMinimaTraAvvisi) { EventoSismico evento = new EventoSismico { Messaggio = "Magnitudo ha superato: " + valoreMagnitudine, Priorita = (Priorita)indiceSoglia, Stazione = Stazione, Tag = "Magnitudo", Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }; GestoreEventi.NotificaEventoAsync(evento); _tempoUltimoAvviso = tempoAttuale; } // Notifica il risultato RicevitoriRisultato?.Invoke(valoreMagnitudine); }