private SensorSingleData process(List<Double> measurementValues) {
		if (isInitialised) {
			List<Double> correctedValues = new ArrayList<Double>();
			for (int i = 0; i < measurementValues.size(); i++) {
				// compute the Kalman gain
				double kalmanGain = predictedVariances.get(i) / (predictedVariances.get(i) + noiseVariances.get(i));

				// update the sensor prediction with the measurement
				double correctedValue = Constants.FILTER_GAIN * predictedValues.get(i) + (1.0 - Constants.FILTER_GAIN) *
						measurementValues.get(i) + kalmanGain * (measurementValues.get(i) - predictedValues.get(i));

				// predict next variance and value
				predictedVariances.add(i, predictedVariances.get(i) * (1.0 - kalmanGain));
				predictedValues.add(i, correctedValue);

				correctedValues.add(i, correctedValue);
			}

			sensorSingleData
					.setAccX(correctedValues.get(0))
					.setAccY(correctedValues.get(1))
					.setAccZ(correctedValues.get(2));

			return sensorSingleData;
		} else {
			return init(measurementValues);
		}
	}