processData method

  1. @override
Future<List<WTResult>> processData({
  1. required List<SensorEvent> accData,
  2. required List<SensorEvent> gyroData,
  3. required List<SensorEvent> magData,
  4. required double accActualRate,
  5. required double gyroActualRate,
  6. required double magActualRate,
})
override

Processes raw sensor data and returns a list of WTResults.

accData - List of accelerometer sensor events. gyroData - List of gyroscope sensor events. magData - List of magnetometer sensor events. accActualRate - Actual sampling rate of accelerometer. gyroActualRate - Actual sampling rate of gyroscope. magActualRate - Actual sampling rate of magnetometer. Returns a list of processed WTResults.

Implementation

@override
Future<List<WTResult>> processData({
  required List<SensorEvent> accData,
  required List<SensorEvent> gyroData,
  required List<SensorEvent> magData,
  required double accActualRate,
  required double gyroActualRate,
  required double magActualRate,
}) async {
  List<SensorEvent> processedAccData = [];

  // Process only accelerometer y-axis for chest placement
  if (config.useAccelerometer && config.accelerometerAxes.contains(SensorAxis.y)) {
    // Decimate data to target sampling rate
    processedAccData = decimateData(
      accData,
      config.accelerometerSamplingRate,
      accActualRate,
    );
  }

  // Detect all steps in the processed data
  final steps = detectSteps(acc: processedAccData.map((e) => e.y - 9.8).toList(), threshold: 0.4);

  // Calculate measurement window (20% to 80% of target steps)
  final firstStepIndex = (measure.numberOfSteps * 0.2).round();
  final lastStepIndex = (measure.numberOfSteps * 0.8).round();

  // Get timestamps for measurement window
  final firstMeasuredStep = processedAccData[steps[firstStepIndex].timestampIndex].timestamp;
  final lastMeasuredStep = processedAccData[steps[lastStepIndex].timestampIndex].timestamp;

  // Calculate time for the measured step range
  final time = lastMeasuredStep.difference(firstMeasuredStep).inMilliseconds / 1e3;

  if (kDebugMode) {
    print('Detected time: $time');
  }

  return [
    WTResult.fromResults(
      time: time,
    ),
  ];
}