Process consecutive values. Returns the central value of three consecutive values.

SpikeRemoveFilter.h

Committer:
Chi7Shi
Date:
2020-05-27
Revision:
1:d34bcdec7177
Parent:
0:d8d565a9d473

File content as of revision 1:d34bcdec7177:

/*
 * Copyright (c) 2017 Koichi Shibata
 */

#ifndef SPIKE_REMOVE_FILTER_H
#define SPIKE_REMOVE_FILTER_H

#include "mbed.h"

template <class T> class SpikeRemoveFilter
{
protected:

    T x0; // latest data
    T x1;
    T x2; // oldest data

public:

    // Constructor
    SpikeRemoveFilter( void );

    // Destructor
    virtual ~SpikeRemoveFilter( void );

    T process( T x );
    
    static int size( void ) { return 3; }

};

// Constructor
template <class T> SpikeRemoveFilter<T>::SpikeRemoveFilter( void )
{
}

// Destructor
template <class T> SpikeRemoveFilter<T>::~SpikeRemoveFilter( void )
{
}

template <class T> T SpikeRemoveFilter<T>::process( T x )
{
    x2 = x1;
    x1 = x0;
    x0 = x;
    if ( x1 < x2 ) {
        if ( x0 < x1 ) {
            return x1;
        } else if ( x2 < x0 ) {
            return x2;
        } else {
            return x0;
        }
    } else { // x2 <= x1
        if ( x0 < x2 ) {
            return x2;
        } else if ( x1 < x0 ) {
            return x1;
        } else {
            return x0;
        }
    }
}

#endif