Fitness HRV

Logo Logo

Release Site for Fitness HRV Applications


1 June 2022

AIEndurance HRV Readiness

by Stuart Lynne


AIEndurance has defined and promoted the concept of Readiness and Durability based on DFA A1.

DFA A1 is Detrended Fluctuation Analysis, a heart rate variability index representing the degree of fractal correlation properties of the cardiac beat sequence.

HRV Pa is defined as the power necessary to operate at a fixed a1.

HRV Readiness is calculated during the first thirty minutes of a workout (during the warm up period) and compares your data against a baseline of data from previous workouts using Pa for that period.

HRV Durability is a comparison or Pa for the first and second half of a workout and quantifies durability (effectively endurance).

From AIEndurance on HRV Readiness:

If you put out less power/pace for the same a1 on a given day, you are not performing 
well compared to your current baseline.

Conversely, if your power/pace for the same a1 is higher than your current baseline, 
this is an indication that you're performing well and you might be particularly ready 
to train or race.

From AIEndurance on HRV Durability:

If you put out significantly less power/pace for the same a1 during the second half of 
your workout compared to the first half, this indicates a lack of durability for a given 
workout type and/or length.

Conversely, if your pace/power for a given a1 is constant throughout a workout, this 
indicates durability of the athlete.


Other approaches to HRV Readiness using rMSSD and sDNN are available using apps such as HRVTraining, EMFIT, Kubios, Oura etc. These typically suggest a morning measurement on waking to allow making a decision about training. These can provide data to make a decision about training before starting, but require the additional steps to take the measurement every day so that baseline data is available.

This approach to readiness allows an athlete to use the warm up period of his workout to make decisions about how to continue the workout. A high readiness score may allow for a harder then planned workout. A low score can suggest scaling back the planned workout.

The advantage of this approach is that the if the fitness app is being used to guide the workout, then the readiness score is automatically calculated. There are no additional steps required.

The trade off is being able to make an earlier decision based on a separate measurement or getting information on fitness from data collected automatically during the warmup.


a1 and P data

a1 is derived using the DFA Alpha1 algorithm from the recorded RR data from a heart rate monitor.

P is the average power for the a1 period, derived from the power data recorded from a power meter or fitness trainer.

a1 and P are calculated every two seconds starting at two minutes into the workout and saved.

Starting at two minutes into the workout, every two seconds:

N.b. a1 wil be displayed and graphed as a separate statistic in fitness_dashboard.

Pa Function Definition

The Pa function is used to derive the power necessary to perform at a fixed a1. This can derived from a specified range of a1 and P data.

Pa is based on the dot product of the specified range of the a1 and P lists.

    def Pa(Ns, Ne):
        a1 = a1_data_for_workout[Ne:Ns]
        P = average_power_data_for_a1_periods[Ne:Ns]
        return (1 / len(a1)) * sum([x*y for xy in zip(a1,P)])

The Pa function is used to calculate other statistics, typically Ra and Da.

Ra readiness to train / recovery

Ra is a measure of the fitness state as measured during the first half hour of a workout. It is derived from a1 and P using the Pa function.

Ra is based on *Pa(5*60, 30*60), i.e. the power required to train for the initial portion of the workout, discarding the first five minutes.

The Ra data calculated for every workout and saved.

    # Ra = 100 * ((iPa - mean(iPa)) /mean(iPa))
    def Ra():
        RaData = read_ra_data()
        iPa = Pa(5*60, 30*60):
        ra = 100 * ((iPa - mean(RaData[-30])) / mean(RaData[-30]))
        return ra

Ra will be calculated as iPa is being calculated and will be displayed in the HRM stat plot.

Implementation Note

Ra will be calculated and saved for every workout, but the mean value needs to be calculated only using the first valid Ra for each calendar day.


Da durability / drift

The Da statistic is calculated for every workout longer than thirty minutes. It is intended to quantify the athletes ability to perform the workout.

The Da variable is calculated using the Pa data for the first half and the second half of the workout.

If the athlete puts out:

Using Pa, durability is defined as:

    # Da = 100 * (Pa(first half) - Pa(second half)) / Pa (first half))
    def Da(workout_length):
        pa_first_half = Pa(1, workout_length/2)
        pa_second_half = Pa(workout_length/2, 1)
        return 100 * (pa_first_half - pa_second_half) / pa_first_half

The more negative Da for an activity, the less durability for that particular workout type and duration.

Da will be calculated starting at thirty minutes and will be displayed in the HRM stat plot.

Typical values for durability