Een hartslag van 60 slagen per minuut betekent niet dat het hart exact om de seconde slaat. Ook bij een “constante” hartslag zit er bij een gezonde mens namelijk altijd een kleine variatie op de duur tussen twee opeenvolgende hartslagen. Dit is perfect normaal, en zelfs gezond.
Onderstaande figuur maakt dit duidelijk.

Dit fenomeen staat bekend als hartslagvariabiliteit, vaak afgekort tot HRV (heart rate variability). De HRV is een maat voor de variatie in tijdsduur tussen twee opeenvolgende hartslagen. De HRV wordt gewoonlijk gemeten in rust, bv. tijdens de slaap. De HRV wordt uitgedrukt in milliseconden.
De HRV heeft niets te maken met het hart, maar houdt verband met het autonome zenuwstelsel. Een hoge HRV wijst op een gezond lichaam. Een lage HRV wordt typisch geassocieerd met stress, vermoeidheid of ziekte.
Er is meer dan één manier om de HRV te bepalen op basis van een meting. In deze opgave maken we gebruik van de RMSSD-methode (Root Mean Square of Successive Differences).
Veronderstel dat er een hartslag gedetecteerd wordt op volgende n = 4 tijdstippen: [0, 800, 1650, 2440]. Deze tijden worden uitgedrukt in milliseconden.
n-1 = 3 intervallen tussen twee opeenvolgende hartslagen: [800, 850, 790]. Deze duur wordt uitgedrukt in milliseconden.n-2 = 2 elementen: [-50, 60]. Ook deze getallen worden uitgedrukt in milliseconden.[2500, 3600].Bereken het gemiddelde van de elementen in deze lijst:
\[\frac{2500 + 3600}{2} = 3050.\]Bereken de vierkantswortel van dit getal. De HRV van onze meting is dus gelijk aan
\[\text{HRV} = \sqrt{3050} \approx 55 \text{ ms.}\]Bereken het gemiddelde van de duur van de intervallen die je in deelopgave 1 hebt berekend:
\[\frac{800 + 850 + 790}{3} = 813.33333 \text{ ms.}\]Dit is de gemiddelde tijd tussen twee hartslagen. Op basis hiervan kan je de gemiddelde hartslag (heart rate, HR) berekenen:
\[\text{HR} = 60 \cdot \frac{1000}{813.333333} = 74 \text{ slagen per minuut.}\]Alle deelopgaves zijn perfect onafhankelijk van elkaar op te lossen. Pas bij deelopgaves 4 en 5 komt alles bij elkaar. Ook als één of meerdere van de functies uit deelopgaves 1-3 niet werken, kan je deelopgaves 4 en 5 toch schrijven. Dodona zal je code niet correct evalueren, maar ik kijk je code manueel na.
Schrijf een functie bereken_verschillen(lijst). lijst is een lijst met daarin n getallen. Je functie geeft een nieuwe lijst met n-1 getallen terug. Deze getallen komen overeen met het verschil tussen twee opeenvolgende getallen in lijst.
Merk op dat de lijst die je uitvoert, altijd exact één element minder bevat dan de lijst die je functie inleest!
Kijk naar stap 1 in het uitgewerkt voorbeeld, en naar Voorbeeld 1. Daar bevat lijst de tijdstippen waarop een hartslag wordt gemeten.
Kijk ook naar stap 2 in het uitgewerkt voorbeeld, en naar Voorbeeld 2. lijst bevat nu de duur van de intervallen tussen twee opeenvolgende hartslagen. De context is verschillend, maar wiskundig gebeurt er precies hetzelfde als in stap 1.
kwadrateer_elementen(lijst). lijst is een lijst met getallen. Je functie geeft een nieuwe lijst terug met daarin de kwadraten van de elementen in lijst. Kijk naar stap 3 in het uitgewerkt voorbeeld, en naar Voorbeeld 3.gemiddelde(lijst). lijst is een lijst met getallen. Je functie geeft het gemiddelde terug van alle getallen in lijst. Kijk naar stap 4 in het uitgewerkt voorbeeld, en naar Voorbeeld 4.HRV(hartslaglijst) te definiëren. hartslaglijst is een lijst met daarin n tijdstippen waarop een hartslag werd gedetecteerd. Deze tijdstippen worden uitgedrukt in milliseconden. Je functie geeft de HRV terug van deze meting, afgerond naar een geheel getal. Kijk naar stap 5 in het uitgewerkt voorbeeld, en naar Voorbeeld 5.HR(hartslaglijst) te definiëren. hartslaglijst is een lijst met daarin n tijdstippen waarop een hartslag werd gedetecteerd. Deze tijdstippen worden uitgedrukt in milliseconden. Je functie geeft de gemiddelde hartslag terug, afgerond naar een geheel getal. Kijk naar stap 6 in het uitgewerkt voorbeeld om deze functie te implementeren. Kijk naar stap 6 in het uitgewerkt voorbeeld, en naar Voorbeeld 6.Invoer:
> bereken_verschillen([0, 800, 1650, 2440])
Uitvoer:
[800, 850, 790]
Invoer:
> bereken_verschillen([800, 850, 790])
Uitvoer:
[-50, 60]
Invoer:
> kwadrateer_elementen([-50, 60])
Uitvoer:
[2500, 3600]
Invoer:
> gemiddelde([2500, 3600])
Uitvoer:
3050
Invoer:
> HRV([0, 800, 1650, 2440])
Uitvoer:
55
Invoer:
> HR([0, 800, 1650, 2440])
Uitvoer:
74