123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package com.feemers.android.fftdrawer.SignalProcessing;
-
- import android.util.Log;
- import android.util.Pair;
-
- import java.util.ArrayList;
-
- public class DetectorTimedomain extends DetectorImpl {
- private boolean m_calculate_amplitude;
- private int m_threshold_cnt;
- private int m_sample_cnt;
-
- public DetectorTimedomain(int windowSize) {
- super(windowSize);
- Log.d("DetectorTimedomain", "DetectorTimedomain() - Constructor called");
- m_calculate_amplitude = false;
- m_threshold_cnt = 0;
- m_sample_cnt = 0;
- }
-
- @Override
- public void onNewSample(double sample) {
- super.onNewSample(sample);
- check_for_earthquake(sample);
- }
-
- public void check_for_earthquake(double sample)
- {
- // This method checks if threshold was exceeded and calculates the amplitude if enough values are available
- // Possible combinitions of the return values:
- // 1: false, 0.0 -> Threshold wasn't exceeded
- // 2: true, 0.0 -> Threshold was exceeded, but no value for amplitude is available yet (because m_buffer isn't filled yet)
- // 3: true, amplitude -> Threshold was exceeded and a value for amplitude is available
- //TODO: find better solution for returning the results -> temp solution: No return-values but printing to logcat instead. Use Notifier later.
-
- Pair<Boolean, Double> return_pair = new Pair<Boolean, Double>(false, 0.0);
- if ((sample > m_threshold) && !(m_calculate_amplitude)) {
- Log.d("DetectorTimedomain", "threshold was exceeded. threshold: " + m_threshold); //TODO: send this info with notifier instead
- m_threshold_cnt++;
- // Later: add Logger entry
- m_calculate_amplitude = true;
- m_buffer = new ArrayList<>(); //resetting to an empty ArrayList
- }
-
- if (m_calculate_amplitude) {
- if (m_sample_cnt >= m_buffer_SIZE) {
- //Vector sensor_samples is filled -> determine amplitude
- double amplitude = calculate_maximum(m_buffer);
- m_sample_cnt = 0;
- m_calculate_amplitude = false;
- Log.d("DetectorTimedomain", "Maximum calculated: " + amplitude); //TODO: send this message with notifier instead
- return_pair = new Pair<Boolean, Double>(true, amplitude);
- // Later: add Logger entry
- } else {
- m_buffer.add(sample);
- m_sample_cnt++;
- return_pair = new Pair<Boolean, Double>(true, 0.0);
- }
- }
- m_Notifier.sendEvent();
- //return return_pair;
- }
-
- private double calculate_maximum(ArrayList<Double> samples) {
- double maximum = 0;
- for (double sample : samples) {
- if (maximum < sample)
- maximum = sample;
- }
- return maximum;
- }
- }
|