diff --git a/app/engine/Flywheel.js b/app/engine/Flywheel.js index a6ea8dba07..5eaab18d20 100644 --- a/app/engine/Flywheel.js +++ b/app/engine/Flywheel.js @@ -22,9 +22,10 @@ import loglevel from 'loglevel' import { createStreamFilter } from './utils/StreamFilter.js' -import { createLabelledBinarySearchTree } from './utils/BinarySearchTree.js' import { createOLSLinearSeries } from './utils/OLSLinearSeries.js' import { createTSQuadraticSeries } from './utils/FullTSQuadraticSeries.js' +import { createWeighedSeries } from './utils/WeighedSeries.js' + const log = loglevel.getLogger('RowingEngine') function createFlywheel (rowerSettings) { @@ -116,19 +117,20 @@ function createFlywheel (rowerSettings) { } // Let's make room for a new set of values for angular velocity and acceleration - _angularVelocityMatrix[_angularVelocityMatrix.length] = createLabelledBinarySearchTree() - _angularAccelerationMatrix[_angularAccelerationMatrix.length] = createLabelledBinarySearchTree() + _angularVelocityMatrix[_angularVelocityMatrix.length] = createWeighedSeries() + _angularAccelerationMatrix[_angularAccelerationMatrix.length] = createWeighedSeries() let i = 0 + const goodnessOfFit = _angularDistance.goodnessOfFit() + while (i < _angularVelocityMatrix.length) { - // Please note, the label used in the Binary Search Tree has no meaning, as we will not do any targetted remove actions - _angularVelocityMatrix[i].push(i, _angularDistance.firstDerivativeAtPosition(i)) - _angularAccelerationMatrix[i].push(i, _angularDistance.secondDerivativeAtPosition(i)) + _angularVelocityMatrix[i].push(_angularDistance.firstDerivativeAtPosition(i), goodnessOfFit) + _angularAccelerationMatrix[i].push(_angularDistance.secondDerivativeAtPosition(i), goodnessOfFit) i++ } - _angularVelocityAtBeginFlank = _angularVelocityMatrix[0].median() - _angularAccelerationAtBeginFlank = _angularAccelerationMatrix[0].median() + _angularVelocityAtBeginFlank = _angularVelocityMatrix[0].weighedAverage() + _angularAccelerationAtBeginFlank = _angularAccelerationMatrix[0].weighedAverage() // And finally calculate the torque _torqueAtBeginFlank = (rowerSettings.flywheelInertia * _angularAccelerationAtBeginFlank + drag.clean() * Math.pow(_angularVelocityAtBeginFlank, 2))