Mar 16, 2021
19 mins read
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 cœur, 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 cœur 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 par minute…
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 :
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 a priori 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.
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 soit 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 leurs preuves dans la course à pied.
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.
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 :
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 d’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 :
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.
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 une course quelconque, il faut un modèle plus général.
L’idée consiste alors à 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, 30 et 60 dernières secondes. D[a…b] est l’écart type de la puissance sur l’intervalle [a…b]. Nous prenons donc en compte la puissance moyenne sur 15, 30, 60 secondes, 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 brefs. 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 ne 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.
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 :
Il faut se méfier des premiers résultats car la correspondance est apprise par cœur. Un des signes est que la première estimation avait une erreur nulle :
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 l’ordre 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…
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 la 25e minute :
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 10 mètres 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 sorti 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 1 heure 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 puissances aussi importantes et aussi courtes. L’estimation de la fréquence cardiaque n’est pas encore fiable sur ce point.
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 :
D’une manière générale, dans la première phase de la course, la prédiction reste bonne. Il est d’ailleurs intéressant de constater que la puissance semble être plus ou moins constante mais que la fréquence cardiaque dérive 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. Cela 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.
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 cœur et ensuite, n’a pas encore atteint une robustesse statistique.
Voici quelques courses typiques et les enregistrements obtenus.
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 :
J’étais déjà un peu étonné en jetant un œil 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 :
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.
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 a 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-poule, enjamber les obstacles… Il faut faire preuve de plus d’attention et la course est moins régulière. Cela a un prix en termes 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 : aux 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.
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 basse 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 reconnaître 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.
Pour finir, j’ai décidé de faire un test avec des intervalles en côte. 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 donc 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 faits ici sont à la limite de ce que peuvent analyser les capteurs car ils ne sont que de 25 secondes :
L’algorithme avait déjà appris à plusieurs reprises le comportement lors d’intervalles de 15 secondes, de 30 secondes et en côte. Il n’y a donc aucune raison qu’il livre des résultats délirants.
Voici la variation de la différence entre l’estimation et la fréquence cardiaque mesurée :
On peut y voir quatre étapes :
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 l’évolution de la fréquence cardiaque de session en sessions ou au cours d’une course longue. Cela ouvre des possibilités en termes 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 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 :
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 ↩︎
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. ↩︎
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 leurs 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!