I have data signal which is generated at constant time interval of 500ms. It is a real world measurement and thus exhibits some noise in its baseline. The noise is fairly consistent.
I obtain the measurement at a regular time interval and stash it inside a circular rolling buffer of sample data. This rolling buffer is an array of values which are located at positions (0,1,2,3,4,5... -> n). Once the nth position in this array is reached, my buffer rolls over and overwrites the value at 0th array position followed by the value at the 1st array position and so on until the value at the nth position is overwritten (then rollover again). This process repeats over and over. I use the rolling sample buffer to calculate a moving average and a std dev and perform a linear extrapolation calculation using the data within the buffer.
Now for my issue:
The real world signal has the potential to be in 3 states. Either increasing over time at an unknown rate or decreasing over time at an unknown rate or it can also remain fairly constant over time until an increase or decrease is detected. (I need to detect the increase or decrease from a fairly stable baseline) Such an increase of decrease can happen at any point.
I want to detect whether the signal is Increasing over time, Decreasing over time, or is remaining Constant over time with a good degree of certainty. Graphically speaking, I expect my data to fluctuate at some baseline value and remain constant until some time t1 at which point the signal will either increase or decrease and continue to increase or decrease until some time t2 at which the state will change. What sort of algorithm would effectively notice this?
I was thinking maybe using the derivative calculated from the data points in the array and if the slope of the tangent line is positive then the graph is increasing over time, if negative then decreasing and if 0 then constant? Not sure how to implement that in Java on my rolling array or if it would work.
I think that a fairly reliable increasing/decreasing signal would be if my data is 3*stdDev above or below the moving average but I am not sure if that is the case.
Circular array:
private final static int NUM_SAMPLES = 100;
double[] samples = new double[NUM_SAMPLES];
int sampleIndex;
public boolean isBufPopulated() {
synchronized(this) {
return this.isBufPopulated;
}
}
public void addSample(double val) {
synchronized(this) {
samples[sampleIndex++] = val;
if(sampleIndex == NUM_SAMPLES) {
sampleIndex = 0;
isBufPopulated = true;
}
this.avg = calcAvg();
}
}
My real world baseline looks like this:
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -9 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -11 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 1 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -2 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -4 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= -7 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3
data= 3 avgData= -3 stdDevData= 3 extrapolatedData= -3