Commit Graph

40 Commits

Author SHA1 Message Date
Mark Liversedge
f92d8a5b79 Stress Metric Prototypes
Added a few new training stress metrics whilst discussing
and working on a multicomponent view of training stress.

This is all a wip falling out of discussions around stress
metrics beyond the old TSS/BikeScore models.

For now this just includes;
1. Aerobic Training Impact Scoring System on PM/PMC
2. Work (Kj) above/below CP on PM/PMC
3. Aerobic TISS on the Ride Plot

There is lots more to come; specifically around Anaerobic TISS,
looking again at polarised training and personalised training stress
based upon the individual's CP model.
2014-03-17 20:51:57 +00:00
Mark Liversedge
bd29aa4e69 Fix W' work metric
.. the calculation assumed 1s recording (or was just wrong)
   joules are now calculated properly, this is especially
   important for SRM recordings of 0.5s samples
2014-02-15 00:09:45 +00:00
Mark Liversedge
c0dca04bd8 Limit the CP autosolve for W'bal
.. if its waaaay off then don't try to autosolve for
   CP .. instead just warn that W' is probably set
   incorrectly.
2014-02-14 20:19:56 +00:00
Mark Liversedge
2fb9f10245 W'bal decay set to 1hr, infinite not practical 2014-01-28 20:58:44 +00:00
Mark Liversedge
7c9a83058b W'bal decay to infinity
.. No more cutoff of the decay. Since we use threads its
   not such a big deal as before.

.. We now get a full, smooth decay till the end of the ride
   which was much more noticeable when predicting W'bal for
   a workout, than it was for a ride.
2014-01-28 20:18:20 +00:00
Mark Liversedge
2877ddd6c5 Plot Predicted W'bal in Train mode
.. only plots predicted W'bal for the workout but at least that
   means you can see if the workout is even possible.
2014-01-28 18:32:26 +00:00
Mark Liversedge
4554ce58ac Update WPrime comment
.. to explain how we sped up the W'bal integral calculation
2014-01-26 20:15:20 +00:00
Mark Liversedge
12711685af Fix WPrime CP lookup SEGV
.. when zones or cp not set for the date in question

Fixes #774.
2014-01-26 16:22:00 +00:00
Mark Liversedge
a061a1741f Fix DIV0 SEGV
.. in WPrime, and also don't bother trying to autosolve
   CP when W'bal is negative if W' is not setup
2014-01-26 12:10:13 +00:00
Mark Liversedge
5d5f84acad W'bal use threads
.. to boost performance. Now will compute the integral
   in parallel and saves about 35% in elapsed time on a
   dual core processor.
2014-01-25 22:56:41 +00:00
Mark Liversedge
c40c69a688 Less bounds checking on W'bal calculation
.. to save on computing cost the W'bal decay was only
   calculated to 20mins and also bounds checked to a
   decay of 0.1w, but of course, the decay is more like
   25 minutes and 0.1w * 1500 samples is a lot... so
   I've removed them.

.. the key optimisation is the way the decay is integrated
   and that is skipped for samples where W' exp is zero ..
   that optimisation reduces the amount of computing cost
   to 25% of doing it for all samples.
2014-01-24 18:36:43 +00:00
Mark Liversedge
8fd8cc1c48 W' Exp rename W' Expended
It was too oblique a name, could have mean't a few things...
2014-01-24 18:12:00 +00:00
Mark Liversedge
28db7b7a6c New Metric W' Exp
For maximum W' capacity expended i.e. Min W'bal
expressed as a percentage of W'.

So if W' is 20 kJ and W'bal is 2kJ then 18 kJ
have been expended, which when expressed as a
percentage of W' (18/20 %) would be;

Max W' Exp of 90%

I also cleaned up a few extra instances of WPrime
being created when calculatinf metrics which was
not a big deal for the Metric refresh but would make
interval metrics painful.
2014-01-24 17:27:45 +00:00
Mark Liversedge
7f32cbd35c WPrime don't crash on bad data
.. if duration is overly large we don't want to get some
   massive array, it will exhaust heap and cause a crash ..
   and it is likely to just be bad data.
2014-01-24 15:37:53 +00:00
Mark Liversedge
f4e3e901a5 WPrime interpolation fixup
.. don't be so keen to add zero values interpolating gaps
   in recording when the gap is less than 2 samples wide.

.. previously we were adding way too may zero values at
   subsecond intervals that caused an interpolated value
   returned by the spline to be /practically/ zero.
2014-01-24 11:53:13 +00:00
Mark Liversedge
1b338eb0df Fix WPrime spline starts from 0
.. offset needed to be a double not an int to ensure
   we handle recording gaps from powertap etc where
   it is not an whole number of seconds

.. Thanks for Armando Mastracci for highlighting this
   and providing a test file to recreate

Fixes #773
2014-01-24 10:33:57 +00:00
Mark Liversedge
aeacf4ae3b Autosolve CP for Min W'bal +/- 3w
.. just speeding up the autosolve by only looking in increments
   of 3w, should speed up by a factor of 3 but will mean the result
   is correct to +/- 3w .. which given the W' is usually only right
   to +/- 2kJ should be about right.
2014-01-24 07:51:54 +00:00
Mark Liversedge
e1cffcf46e W' Work
.. don't rely on WPrime to compute it, its pretty simple
   to compute as long as CP is set

.. add to the summary totals so always there to compare
   against the total work
2014-01-23 17:55:41 +00:00
Mark Liversedge
4dbbabc1ba Fix W'bal calculation
.. the optimisation was a little eager and took out
   the integration step !

.. access to PCP is now hidden behind a function so
   it is only computed when neccessary.

.. the calculation is still significantly faster than
   the old one but not as instant as the non-integrating
   version (but then it wasn't working either!).
2014-01-23 16:30:53 +00:00
Mark Liversedge
bc95e3efbf Fix DIV/0 SEGV with WPrime 2014-01-23 08:49:35 +00:00
Mark Liversedge
4cda185dcf Minimum CP for W'bal going negative
.. on ride plot, when W'bal is plotted we put a mesage to say
   that CP is wrong, and autosolve for W'bal to zero.

.. this patch also optimises WPrime to make it a member of the
   ridefile class and this always available (even for intervals).

.. fixed a SEGV when computing metrics for intervals by shifting
   the timestamps to always start from zero.
2014-01-22 20:48:42 +00:00
Mark Liversedge
e2459b9f17 Enable use of Minimum W' bal in data filter 2014-01-21 18:07:33 +00:00
Mark Liversedge
3633c066fa Added W' expenditure metric
.. energy spent above CP
2014-01-20 20:33:33 +00:00
Mark Liversedge
d736eb80e7 Added W' Tau as a metric
.. so we can track and see if it correlates with anthing.
2014-01-20 19:54:00 +00:00
Mark Liversedge
5764b899e0 Add W'bal Metrics
Added;
- minimum W'bal == how deep did you go on the ride?
- max match == hardest sustained effort in KJ.

Fixes #760
2014-01-20 19:25:55 +00:00
Mark Liversedge
3e038b498c Optimise W' calculation
Instead of just reimplementing the spreadsheet we now
implement according to the original formulas as defined
in the W'bal paper.

This means there is no longer a 1200s limit to the decay
which was not part of the original paper.

We should be able to add some W'bal metrics now.
2014-01-20 18:47:03 +00:00
Mark Liversedge
cee2c1b138 Honour "CP" override in W'
W' calculator didn't use the "CP" metadata to override the
CP for the ride.
2013-11-15 18:14:17 +00:00
Mark Liversedge
135f3e366c Fix W' crash smoothing sub-second recording. 2013-11-14 23:02:30 +00:00
Mark Liversedge
a3ae770965 Find Matches as Intervals
Now let the user add 'match' intervals in
the find intervals dialog by setting a minimum
cost for the match.
2013-11-11 17:53:58 +00:00
Mark Liversedge
29dd3139a7 Find Matches
Added auto finding matches in Wprime, but there are
two areas to develop further;

1. Use the W'bal data to find matches instead of the
   power above CP (which is really being used as a proxy
   for the better approach).

2. Update the 'find intervals' dialog to allow you to
   find matches and add them as normal intervals.

Pushing to repo as a version checkpoint, this function
will definitely need refining before 3.1 is released.
2013-11-07 20:43:51 +00:00
Mark Liversedge
9680b3aef3 Fix crash on tmp reference line at 0w 2013-11-07 13:58:42 +00:00
Mark Liversedge
ec1225fecb W' calculator fill gaps with zeroes
Otherwise they are interpolated and smoothed, which is not
consistent with the rest of GC.
2013-11-04 17:18:10 +00:00
Mark Liversedge
8f3c44c270 Allow user to specify W' alongside CP
In preferences->athlete->power you can now set
your W' in joules alongside your CP.

This is also available in the new cyclist dialog
which also defaults to 20Kj.
2013-11-03 20:32:48 +00:00
Mark Liversedge
c1791b3438 Fix W' calculator for bad data
Fix 1s smoothing to ensure time doesn't go backwards
as when the same timestamp is used more than once the
QwtSpline used to interpolate returns all zeroes.
2013-11-01 16:47:15 +00:00
Mark Liversedge
39e22e0dc6 Calculate tau for W'
The implementation set tau to a constant when it
should be derived from the recovery power across
the ride.

I've also added tau to the chart so you can see
what value has been derived.
2013-11-01 13:21:26 +00:00
Mark Liversedge
587429b5ad W' calculate starting from 0s
Instead of starting at 20 minutes, which was a function of the
code for calculating decay, i.e. an implementation nit, not a
physiological constraint.
2013-10-31 18:13:39 +00:00
Mark Liversedge
ab7ee66f5b Disable Minimum W' Metric
.. its too slooooow.

.. lets fix the WPrime performance issue before
   introducing any metrics on the back of it.
2013-10-31 17:36:56 +00:00
Mark Liversedge
9bf7816f02 Add Minimum W' Metric
It TREBLES the amount of time required to refresh the
metrics, so will need to be optmised before 3.1 is released.

But it should only need to run once.

I've also added a 'RideMetric::Low' type which we could
also apply to weight.
2013-10-31 16:49:43 +00:00
Mark Liversedge
682530f8a9 Add W' to All Plot
Will plot the W' balance as another data series.
2013-10-31 15:00:25 +00:00
Mark Liversedge
d0d577ed19 Missed off previous commit. 2013-10-30 22:56:54 +00:00