nidas v1.2.3
AdaptiveDespiker.h
Go to the documentation of this file.
1// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4; -*-
2// vim: set shiftwidth=4 softtabstop=4 expandtab:
3/*
4 ********************************************************************
5 ** NIDAS: NCAR In-situ Data Acquistion Software
6 **
7 ** 2006, Copyright University Corporation for Atmospheric Research
8 **
9 ** This program is free software; you can redistribute it and/or modify
10 ** it under the terms of the GNU General Public License as published by
11 ** the Free Software Foundation; either version 2 of the License, or
12 ** (at your option) any later version.
13 **
14 ** This program is distributed in the hope that it will be useful,
15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ** GNU General Public License for more details.
18 **
19 ** The LICENSE.txt file accompanying this software contains
20 ** a copy of the GNU General Public License. If it is not found,
21 ** write to the Free Software Foundation, Inc.,
22 ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 **
24 ********************************************************************
25*/
26
27#ifndef NIDAS_CORE_ADAPTIVE_DESPIKER_H
28#define NIDAS_CORE_ADAPTIVE_DESPIKER_H
29
30#include <stdexcept>
31
32namespace nidas { namespace core {
33
42{
43
44public:
49
57 void setOutlierProbability(float val);
58
59 float getOutlierProbability() const { return _prob; }
60
68 void setDiscLevelMultiplier(float val);
69
70 float getDiscLevelMultiplier() const { return _levelMultiplier; }
71
77 float getDiscLevel() const { return _level; }
78
85 float despike(float u, bool* spike);
86
91 float forecast() const
92 {
93 return _u1 * _corr + (1. - _corr) * _mean2;
94 }
95
99 void reset();
100
107 static float discrLevel(float prob);
108
113 static float adjustLevel(float corr);
114
115private:
116
117 static bool staticInit();
118
119 static const size_t STATISTICS_SIZE = 100;
120
121 static const int ADJUST_TABLE_SIZE = 100;
122
123 static const int LEN_ERFC_ARRAY = 140;
124
125 static float _adj[ADJUST_TABLE_SIZE][2];
126
127 static bool staticInitDone;
128
129 static void spline(float* x,float* y,int n,double yp1,double ypn,float* y2);
130
134 static double splint (float* xa,float* ya,float* y2a,int n, double x);
135
136 void initStatistics(float u);
137
138 void incrementStatistics(float u);
139
140 void updateStatistics(float u);
141
142
144 float _prob;
145
148
155
157 float _u1;
158
160 double _mean1;
161
163 double _mean2;
164
166 double _var1;
167
169 double _var2;
170
171
173 double _corr;
174
177
178 double _level;
179
182
185
187 size_t _npts;
188};
189
190}} // namespace nidas namespace core
191
192#endif
Adaptive forecaster for despiking of time-series data.
Definition AdaptiveDespiker.h:42
size_t _npts
Number of points processed.
Definition AdaptiveDespiker.h:187
void initStatistics(float u)
Definition AdaptiveDespiker.cc:237
static bool staticInitDone
Definition AdaptiveDespiker.h:127
static float _adj[ADJUST_TABLE_SIZE][2]
Definition AdaptiveDespiker.h:125
static float discrLevel(float prob)
Compute a discrimination level from a Gaussan probability.
Definition AdaptiveDespiker.cc:364
float _missfreq
Running ave of freq of missing data.
Definition AdaptiveDespiker.h:181
double _corr
Correlation.
Definition AdaptiveDespiker.h:173
float _prob
Prob for detection of outlier in good Gaussian data.
Definition AdaptiveDespiker.h:144
void setOutlierProbability(float val)
Definition AdaptiveDespiker.cc:90
float _u1
Last point.
Definition AdaptiveDespiker.h:157
double _var2
Current variance.
Definition AdaptiveDespiker.h:169
float _levelMultiplier
Increase detection level with this factor.
Definition AdaptiveDespiker.h:147
double _mean2
Current mean.
Definition AdaptiveDespiker.h:163
float despike(float u, bool *spike)
Pass a value u, and return a forecasted value, along with a boolean indicating whether AdaptiveDespik...
Definition AdaptiveDespiker.cc:206
void reset()
Reset the statistics.
Definition AdaptiveDespiker.cc:199
static double splint(float *xa, float *ya, float *y2a, int n, double x)
Definition AdaptiveDespiker.cc:168
float forecast() const
Forecast a value based on the previous point and correlation and mean.
Definition AdaptiveDespiker.h:91
double _level
Definition AdaptiveDespiker.h:178
double _mean1
Previous mean.
Definition AdaptiveDespiker.h:160
static const int ADJUST_TABLE_SIZE
Definition AdaptiveDespiker.h:121
static bool staticInit()
Definition AdaptiveDespiker.cc:45
double _var1
Previous variance.
Definition AdaptiveDespiker.h:166
static float adjustLevel(float corr)
Adjust the discrimination level based on the current correlation.
Definition AdaptiveDespiker.cc:340
float getDiscLevel() const
If a value is more than discrLevel * sigma away from the mean, then it is considered a spike,...
Definition AdaptiveDespiker.h:77
double _initLevel
Discrimination level.
Definition AdaptiveDespiker.h:176
AdaptiveDespiker()
Constructor.
Definition AdaptiveDespiker.cc:69
void incrementStatistics(float u)
Definition AdaptiveDespiker.cc:256
static void spline(float *x, float *y, int n, double yp1, double ypn, float *y2)
Copied from "Numerical Recipies in C", the only changes being arrays are indexed from 0,...
Definition AdaptiveDespiker.cc:117
float getDiscLevelMultiplier() const
Definition AdaptiveDespiker.h:70
static const int LEN_ERFC_ARRAY
Definition AdaptiveDespiker.h:123
float _maxMissingFreq
If more than _maxMissingFreq of the recent 10 data points are missing data points,...
Definition AdaptiveDespiker.h:154
void setDiscLevelMultiplier(float val)
Definition AdaptiveDespiker.cc:96
int _msize
Memory size.
Definition AdaptiveDespiker.h:184
static const size_t STATISTICS_SIZE
Definition AdaptiveDespiker.h:119
float getOutlierProbability() const
Definition AdaptiveDespiker.h:59
void updateStatistics(float u)
Definition AdaptiveDespiker.cc:294
Root namespace for the NCAR In-Situ Data Acquisition Software.
Definition A2DConverter.h:31