Cette page est aussi traduite: "Heart rate estimation from running power"

Estimer La Fréquence Cardiaque À Partir De La Puissance De Course

D’une manière simple, on peut comparer le coureur à une voiture. La voiture, par la pompe à injection, fournit le carburant et l’effet est le couple qui nous permet d’avancer à une certaine vitesse. Le corps humain possède aussi sa pompe, le coeur, et son carburant est présent dans son sang. Si on appuie sur l’accélérateur, le rythme cardiaque augmente, pour apporter plus d’énergie aux muscles. Le coeur est notre pompe à injection et nos muscles le moteur.
Pour une automobile, nous avons l’habitude de prendre en compte l’énergie consommée et l’énergie cinétique produite, par exemple, pour estimer la consommation instantanée, pour calculer l’autonomie, pour déterminer le profil de puissance en fonction des tours minutes…

Si l’on délaisse l’analogie avec la voiture, on peut se poser la question de la pertinence de l’information que procure la fréquence cardiaque.
Il y a deux façons de répondre à cette question:

  • de manière qualitative, en analysant ce qu’elle permet de déterminer et que la puissance seule ne peut pas (les fréquences cardiaques de seuil, la fréquence maximale, …), de qu’elle représente ou ses limites.
  • de manière quantitative, en extrayant un information additionnelle de la mesure.

Nous allons ici nous intéresser à l’analyse quantitative du point de vue de la théorie de l’information. La théorie de l’information est une théorie mathématique utilisée souvent en informatique pour mesurer la quantité d’information. Elle considère l’information d’un évènement d’une mesure de manière très abstraite en considérant simplement que l’information est tout ce qui est imprédictible. Cela peut paraître surprenant apriori car la nature de l’information n’est pas prise en compte. Mais, cette considération reste pourtant pertinente.

Prenons, un petit exemple: un coureur affiche sur sa montre la distance parcourue. Cette information est totalement pertinente car, s’il peut la déduire de son feeling, cela ne permet pas de la déterminer de manière suffisamment précise.
Mais, quelle est l’information additionnelle s’il affiche en plus la distance restant à courir? Elle est nulle d’après la théorie de l’information car c’est un simple calcul à partir de la distance totale et la distance parcourue. Par contre, s’il ajoute le temps de course, cette valeur n’étant pas liée à 100% à la distance, il ajoute une information à son écran.

Comme on le voit bien avec ce simple exemple, on ne s’intéresse pas à la pertinence mais au fait que l’information soit ou non déductible d’autres connaissances.

Revenons à la fréquence cardiaque. Pourquoi la prédire en utilisant la puissance de course?

Simplement, parce qu’une fois prédite, on peut comparer la prédiction avec sa mesure et en déduire la partie imprédictible, c’est à dire l’information, que l’on pourra alors interpréter.

Modélisation

Pour prédire, il faut disposer d’un modèle dont on va devoir estimer les paramètres en analysant les courses passées. Pour qu’il doit efficace, il faut que le nombre d’inconnus à déterminer ne soit ni trop grand (car cela augmenterait le temps d’apprentissage) et ni trop petit pour laisser un degré de liberté suffisant. C’est pourquoi, j’essaye de généraliser les modèles qui ont déjà fait leur preuve dans la course à pied.

Modélisation simple en utilisant la puissance d’un intervalle

Si l’on réalise un test d’effort par pallier, on constate souvent une augmentation linéaire de la fréquence cardiaque en fonction de la puissance fournie. C’est du moins vrai jusqu’à un certain point, appelé le point de déflexion, où la pente change.

Test de Conconi - Point de Déflexion
Test de Conconi - Point de Déflexion

Ce comportement n’est pas certes constaté chez tous les athlètes1. Mais, il est judicieux d’en tenir compte dans une modélisation.

En effet, une modélisation affine risque d’être biaisée comme le montre la simulation suivante:

Modèle affine simple
Model affine simple

Si le coureur fait toutes ses courses sous le point de déflexion, on aura un modèle assez proche de la réalité. Mais, dès qu’il le dépasse, il perturbe le modèle et celui-ci ne sera plus assez fidèle ni en dessous du seuil d’aérobie, ni au dessus.

La solution, est l’intégrer une fonction qui ajoute une courbure. Voici, un exemple simple qui donne de bons résultats:

$$ HR = a + b \times Puissance + c \times \log( Puissance + 1 ) $$

a, b et c sont les paramètres à déterminer par l’analyse des données.

Voici, sur le même exemple ce que donnerait la modélisation:

Modèle affine avec courbure
Model affine avec courbure

On voit que le modèle épouse beaucoup mieux la courbe de référence. C’est la fonction de base que nous allons utiliser.

Modélisation plus générale

Utiliser la puissance sur un intervalle n’est pas assez général. Cela suppose que l’intervalle est suffisamment long pour que la fréquence cardiaque soit stabilisée. C’est une hypothèse qui peut être valide pour un protocole comme celui du test de Conconi ou de Cooper. Mais, pour un course quelconque, il faut un modèle plus général.

L’idée consiste alors d’utiliser le même modèle et de l’appliquer aux mesures moyennes de la puissance sur des durées différentes: la puissance des 15 dernières secondes, des 30 dernières secondes et ainsi de suite.

La formule est alors:

$$ HR = a_0 + \sum_{i=1}^{5}{ a_{3i-1} \times P[-15i\ldots 0] + a_{3i-2} \times \log( P[-15i\ldots 0] + 1 ) } + a_{3i} \times D[-15i\ldots 0] $$

P[a…b] est la puissance moyenne de l’instant relatif a jusqu’à l’instant b. P[-7…0], P[-14…0] et P[-28…0], sont la puissance moyenne des 15, 39 et 60 dernières secondes. D[a…b] est l’écart type de la puissance sur l’intervalle [a…b].
Nous prenons en donc en compte, la puissance moyenne sur 15, 30s, 60s, 1 minute, 2 minutes et 4 minutes et ses variations moyennes. Les paramètres a0 à a16 sont déterminés de telle sorte à minimiser l’erreur entre la fréquence cardiaque mesurée et celle qui est produite par la formule.

Cette formule a l’avantage de ne faire aucune hypothèse sur la forme du sportif. Pour un coureur occasionnel, la récupération est souvent plus longue et donc l’effort des minutes précédentes a plus d’effet que pour un sportif de haut niveau.

Néanmoins, cela suppose que la fréquence cardiaque puisse être déterminée sur des instants assez bref. Il n’est donc pas conseillé d’utiliser un capteur cardio-optique. Outre le fait qu’ils produisent souvent des valeurs complètement fausses lorsqu’ils sont mal positionnés, ils ont tendance à moyenner sur plusieurs dizaines de secondes la fréquence cardiaque. La ceinture pectorale est à privilégier et il ne faut pas oublier de bien humidifier les contacts avant.2

Ensuite, il faut pas perdre de vue qu’un algorithme d’apprentissage n’est capable que d’apprendre ce qu’il a déjà analysé. Il est alors théoriquement nécessaire de courir toute la gamme des puissances, aussi bien sur les intervalles longs que courts. C’est évidemment pas possible de le faire pendant une séance. C’est pourquoi, il faut courir quelques heures pour avoir un résultat probant.
D’une manière pragmatique, après avoir fait uniquement des séries de courses lentes, l’algorithme est incapable d’en déduire la fréquence lors d’une course soutenue. Il va produire des valeurs faussées et s’ajuster progressivement en apprenant ce nouveau cas de figure.

Test en course

Pour tester l’algorithme il faut tout d’abord réaliser un certain nombre de courses d’étalonnage où il apprendra à déterminer la correspondance entre la fréquence cardiaque et la puissance.
Il est illusoire de penser obtenir un résultat significatif après une ou deux sorties.

Dans les courses, je mesure la différence entre la fréquence cardiaque estimée et la fréquence cardiaque mesurée. Une valeur nulle, signifie que l’estimation est parfaite. Une valeur positive signifie que la fréquence cardiaque mesurée est inférieure à celle estimée (+3 signifie que j’ai économisé 3 pulsations par rapport à ce qui était prévu).
Pour faciliter la comparaison, toutes les courbes affichent les mêmes données: :w

  • La fréquence cardiaque mesurée (courbe grise)
  • La puissance (courbe jaune)
  • La différence entre les fréquences cardiaques (courbe rouge)

Sessions d’apprentissage

Première sortie: course modérée

Il faut se méfier des premiers résultats car la correspondance est apprise par coeur. Un des signes est que la première estimation avait une erreur nulle:

Première session
Première session

L’algorithme a ensuite tendance à osciller car toutes les erreurs de mesures du capteur Stryd et de la ceinture cardio-fréquencemètre ont tendance à influencer le résultat. Mais, on reste avec une erreur moyenne bonne de lors de 2 pulsations.

Il faut néanmoins, temporiser l’optimisme car cette session était une course lente avec certes quelques variations de vitesse mais pas d’intervalles, de côtes…

Deuxième sortie: course lente avec quelques accélératrins

Pour une deuxième course, je décide de courir plus lentement mais en bifurquant le parcours par un chemin de cross très irrégulier entre la 16e et 25e minute:

Deuxième session
Deuxième session

J’avais choisi cette portion car elle est particulièrement difficile pour estimer la puissance. En effet, ce chemin est composé de monticules escarpés d’une hauteur de 10m maximum avec une pente impossible à grimper sans avoir pris son élan avant. On y trouve aussi un chemin avec des virages tous les 5 mètres, des obstacles divers comme des troncs d’arbres à enjamber, des branches d’arbustes à hauteur des yeux… Bref, tout pour casser son rythme et une nécessité permanente de faire attention.
Le capteur Stryd lui ne livre rien de probant dans cette situation. Il lui faut 3-4 secondes pour estimer une puissance et, si l’effort n’est pas stable, la puissance est mal estimée. En plus, la nature du terrain génère ici un effort additionnel qui n’est pas seulement mesurable dans les jambes mais qui se reflète sur la fréquence cardiaque. Le résultat est que la puissance reste assez stable (à part quelques pics) mais que la fréquence cardiaque se décorrèle et grimpe de manière indépendante de la puissance.

Pour l’algorithme d’apprentissage, une seule heure de course était apprise, c’est encore insuffisant pour ne pas être influencé par cette portion. On voit que l’estimation décroche jusqu’à -20 pulsations (la fréquence cardiaque est 20 pulsations plus importante que prévue). Ensuite, une fois sortie de ce chemin, l’algorithme sous estime de 10 pulsations la fréquence cardiaque et, progressivement réapprend des mesures d’une course plus normale. Vers 30 minutes de course, l’algorithme donne à nouveau une bonne estimation de la fréquence cardiaque. Ce test montre bien la stabilité de l’algorithme: après 1h de course apprise, une portion atypique de 10 minutes peut certes influencer l’apprentissage mais ça se corrige très rapidement avec quelques minutes de course supplémentaires. Il est clair qu’avec plusieurs heures de course en mémoire l’influence d’une telle portion sera négligeable.

Pour finir, j’ai fait quelques accélérations. Là aussi, même problème, l’algorithme n’a jamais traité de puissance aussi importantes et aussi courtes. L’estimation de la fréquence cardiaque n’est pas encore fiable sur ce point.

Premiers intervalles

Après 3 sessions d’apprentissages avec des courses plus ou moins régulières, je décide de faire des intervalles de 30s avec 30 secondes de récupération. Les variations brusques d’intensité ne sont pas encore apprises et donc, il faut s’attendre à des erreurs d’estimation importantes:

Premiers Intervalles
Premiers Intervalles

D’une manière générale, dans la première phase de la couse, la prédiction reste bonne. Il est d’ailleurs intéressante de constater que la puissance semble être plus ou moins constante mais que la fréquence cardiaque drift doucement. L’algorithme le détecte bien car la différence entre la fréquence cardiaque mesurée et estimée passe progressivement de +5 pulsations à -5 pulsations. Peut-être une baisse de forme? Je ne peux plus l’affirmer.

Les premiers intervalles sont très mal pris en compte car il ne prédit quasiment aucune augmentation de la fréquence cardiaque (différence de -10 pulsations). Mais, c’est vite corrigé aux intervalles suivants et la fréquence prédite est alors plus proche de la réalité. (avec une différence entre 0 et +5 pulsations)
La phase de récupération, est aussi nouvelle et pas vraiment prise en compte. Ca nécessitera d’autres courses pour corriger ce point.

En tout cas, on voit bien qu’il faut faire apprendre des situations de course à l’algorithme. Il n’y a aucune prédiction fiable d’un contexte inconnu.

Résultats

Les premiers résultats vraiment significatifs sont obtenus à partir de 5 à 6 heures de course. En dessous, l’algorithme n’est pas fiable car dans les premières minutes, il apprend les configurations par coeur et ensuite, n’a pas encore attend une robustesse statistique.

Voici quelques courses typiques et les enregistrements obtenus.

Sortie en pleine forme

Il y a des jours où la météo vous sourit et où vous êtes vraiment en pleine forme. On démarre tranquillement la course et, quand on regarde sur la montre, on est étonné de courir aussi vite. Pourtant, on n’a pas l’impression de fournir un effort conséquent. C’est le genre de situation que reflète l’enregistrement suivant:

Sortie en pleine forme
Sortie en pleine forme

J’étais déjà un peu étonné en jetant un oeil sur ma montre, la fréquence cardiaque semblait plus faible que d’habitude mais je prenais ça pour un artéfact. Il faut dire qu’en regardant de temps en temps sa montre, cet instant ne reflète pas forcément une réalité sur toute une course. Et puis, n’étais-je pas victime d’une analyse faussée par mon optimisme du jour?

Ceci dit, l’analyse hors ligne a montré que ma fréquence cardiaque était systématiquement plus faible avec une moyenne de 4 à 5 pulsations. Ce qui est remarquable, c’est que l’algorithme de Garmin qui détermine la condition physique donne le même résultat3:

Sortie en pleine forme - Condition Physique
Sortie en pleine forme - Condition Physique

Néanmoins, la corrélation entre la fréquence cardiaque et la forme du moment n’est peut-être qu’une coïncidence. Il faudrait confirmer ce point par des articles scientifiques à ce sujet et par un test plus approfondi à long terme.

Trail

Après une dizaine d’heures de course en plaine, j’ai décidé de le tester en trail. Il s’agissait d’un parcours avec des dénivelés pas trop prononcés et, donc, il n’y avait pas besoin de recourir à la marche. Étant donné que j’ai couru 5 jours de suite, je ne m’attendais pas à une plus faible fréquence cardiaque pour une puissance donnée. La fatigue à court terme à tendance à provoquer une petite baisse de forme. Et, de toute manière, l’effort en trail est plus important qu’en course à pied sur route: il faut faire beaucoup plus attention aux aspérités des chemins, éviter les nids de poules, enjamber les obstacles… Il faut faire preuve de plus d’attention et la course est moins régulière. Ca a un prix en terme de dépense énergétique et donc, sur la fréquence cardiaque.

Pour cette séance, la fréquence cardiaque était environ de 5 pulsations plus haute que d’habitude, c’est cohérent avec la différence mesurée (constamment négative et tournant autour de -5). Néanmoins, pour cette course, une configuration nouvelle est apparue: au croisements, nous faisions une pause pour attendre tous les membres du groupe. C’est une situation encore non prise en compte par l’algorithme: la puissance se retrouvait nulle pendant plusieurs minutes.

Trail avec Pauses
Trail avec Pauses

Comme on peut le constater pendant le premier arrêt, la fréquence cardiaque estimée est complètement décorrélée de la réalité. Elle est même jusqu’à 50 pulsations plus basses que la mesure! Par contre, cette mauvaise estimation est corrigée dès la deuxième pause avec une différence plus modeste qui ne dépasse plus les 15 pulsations.

Il faut reconnaitre que c’est une situation extrêmement difficile à prédire. Cela revient à estimer le temps de récupération. Mais, tout le monde sait que celui-ci peut varier énormément d’une course à une autre. Ici, c’est d’autant plus compliqué qu’une puissance nulle peut certes correspondre à une récupération mais ce n’est pas parce qu’on ne marche pas qu’on est en train de récupérer… Bref, nous sommes ici dans un cas limite où l’algorithme ne s’applique pas. Il est par contre remarquable qu’il y ait tout de même un apprentissage qui corrige l’erreur lors de la pause suivante.

Intervalles en côte

Pour finir, j’ai décidé de faire un test avec des intervalles en côtes. Les intervalles 30/30 étaient déjà appris lors d’une séance précédente mais là, j’ai décidé d’y ajouter une pente de 10%.

Il faut tout d’abord dire que la puissance est ici réellement un atout: la vitesse en côte lors de ces intervalles est comparable à celle d’une course lente sur le plat. Il serait dont impossible pour un algorithme de prédire la fréquence cardiaque en connaissant uniquement les allures. Ici, la puissance permet de traiter cette situation.

Néanmoins, les intervalles fait ici sont à la limite de ce que peuvent analyser les capteurs car ils sont que de 25s:

  • Le capteur Stryd ne livre des informations de puissance qu’après 3 à 4 secondes, la phase d’accélération n’est pas vraiment analysable.
  • La ceinture cardio elle même a une latence similaire, ce qui pose un problème lors de l’apprentissage de l’algorithme
  • Ensuite, l’algorithme analyse toutes les 7 secondes les données, et il est possible que l’estimation de la fréquence cardiaque soit justement faite au moment où les capteurs fournissent des valeurs peu crédibles.

L’algorithme avait déjà appris à plusieurs reprises le comportement lors d’intervalles de 15s, de 30s et en côte. Il n’y a donc aucune raison qu’il livre des résultats délirants.

Voilà la variation de la différence entre l’estimation et la fréquence cardiaque mesurée:

Côtes 10x25s
Côtes 10x25s

On peut y voir 4 étapes:

  1. les premières 10 minutes: aucune estimation est faite lors de l’échauffement.
  2. une première course très lente, assez facile et me donnant l’impression d’avoir été en pleine forme. La fréquence cardiaque estimée est supérieure de 3-4 pulsations à celle mesurée.
  3. les intervalles de 25s en côte: là l’estimation aurait été de 10 à 13 pulsations supérieures à ce qui a été estimé. C’est peut-être un peu exagéré mais c’est assez cohérent avec le ressenti car j’avais l’impression d’avoir les jambes un peu lourdes (c’est pas étonnant car j’avais couru de manière un peu exagéré les derniers jours).
  4. Pour les reste de la course, la fréquence cardiaque estimée est à peu près la même que celle mesurée. C’est assez cohérent avec le ressenti: ces intervalles m’ont un peu exténués. Si je compare avec le début de course, où j’étais encore plus frais, c’est normal que ma fréquence cardiaque soit un peu plus haute.

Conclusion

On peut dire qu’après deux bonnes semaines de courses, on obtient des résultats assez intéressants. Au fur et à mesure que l’algorithme s’affine on arrive à comparer la l’évolution de la fréquence cardiaque de session en sessions ou au cour d’une course longue. Cela ouvre des possibilités en terme de suivi à moyen terme de la forme physique, mais je dois avouer qu’il me manque l’expérience et les connaissances en médecine du sport pour me lancer dans une telle expertise.

Ensuite, résultat produit reste aisément interprétable: on estime la différence entre la fréquence cardiaque estimée à partir des dernières de courses avec la course actuelle. Un coach qui a l’habitude de travailler avec la fréquence cardiaque ne devrait pas être déboussolé, comme c’est le cas pour la puissance qui est difficile à comparer entre athlètes.

Mais, la conclusion n’en est en fait pas une. Cette petite étude est l’occasion de développer de nouvelles fonctionnalités pour les montres Garmin:

  • Le calcul des zones de fréquence cardiaque à partir des zones de puissance (ou inversement)
  • Une calculatrice qui permet de prédire de la vitesse sur piste, à la puissance et à la fréquence cardiaque pour les courses longues.
  • L’affichage en temps réel du drift de la fréquence cardiaque.

  1. Hnízdil, Jan & Skopek, Martin & Balkó, Štefan & Nosek, Martin & Louka, Oto & Musalek, Martin & Heller, Jan. (2019). The Conconi Test-Searching for the Deflection Point. Physical Activity Review. 7. 10.16926/par.2019.07.19. PDF ↩︎

  2. Dans mon cas, la ceinture HRM-Dual donnait des fréquences cardiaques proches de la fréquence maximale pendant l’échauffement alors que je ne transpirais pas. La H10 de Polar semble être plus fiable en ce qui concerne ce point. En tout cas, bien mouiller la ceinture permet d’éviter cet artéfact. ↩︎

  3. Cela ne serait pas étonnant que Garmin fasse le même type de calcul pour déterminer la condition physique. Mais, comme ils refusent de donner tout détail technique sur leur algorithmes, on ne peut que supposer et les prendre avec des pincettes. On ne peut en effet pas savoir dans quelles conditions ils ne s’appliquent pas! ↩︎


Partagez pour mieux faire connaître!