max30100
Dependents: BIOMETRICOS_HUMANOS_BETA
Fork of MAX30100 by
MAX30100_BeatDetector.h
- Committer:
- AVELARDEV
- Date:
- 2016-11-25
- Revision:
- 0:010b908e2187
File content as of revision 0:010b908e2187:
/* Arduino-MAX30100 oximetry / heart rate integrated sensor library Copyright (C) 2016 OXullo Intersecans <x@brainrapers.org> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef MAX30100_BEATDETECTOR_H #define MAX30100_BEATDETECTOR_H #include "mbed.h" #include <stdint.h> #include <algorithm> #define BEATDETECTOR_INIT_HOLDOFF 2000 // in ms, how long to wait before counting #define BEATDETECTOR_MASKING_HOLDOFF 200 // in ms, non-retriggerable window after beat detection #define BEATDETECTOR_BPFILTER_ALPHA 0.6 // EMA factor for the beat period value #define BEATDETECTOR_MIN_THRESHOLD 20 // minimum threshold (filtered) value #define BEATDETECTOR_MAX_THRESHOLD 800 // maximum threshold (filtered) value #define BEATDETECTOR_STEP_RESILIENCY 30 // maximum negative jump that triggers the beat edge #define BEATDETECTOR_THRESHOLD_FALLOFF_TARGET 0.3 // thr chasing factor of the max value when beat #define BEATDETECTOR_THRESHOLD_DECAY_FACTOR 0.99 // thr chasing factor when no beat #define BEATDETECTOR_INVALID_READOUT_DELAY 2000 // in ms, no-beat time to cause a reset #define BEATDETECTOR_SAMPLES_PERIOD 10 // in ms, 1/Fs typedef enum BeatDetectorState { BEATDETECTOR_STATE_INIT, BEATDETECTOR_STATE_WAITING, BEATDETECTOR_STATE_FOLLOWING_SLOPE, BEATDETECTOR_STATE_MAYBE_DETECTED, BEATDETECTOR_STATE_MASKING } BeatDetectorState; class BeatDetector { public: BeatDetector(); bool addSample(float sample); float getRate(); float getCurrentThreshold(); private: bool checkForBeat(float value); void decreaseThreshold(); BeatDetectorState state; float threshold; float beatPeriod; float lastMaxValue; uint32_t tsLastBeat; Timer t; }; #endif