Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Inleiding

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.

bisectie

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).

Uitgewerkt voorbeeldje voor RMSSD

Veronderstel dat er een hartslag gedetecteerd wordt op volgende n = 4 tijdstippen: [0, 800, 1650, 2440]. Deze tijden worden uitgedrukt in milliseconden.

  1. In eerste instantie berekenen we de duur van de n-1 = 3 intervallen tussen twee opeenvolgende hartslagen: [800, 850, 790]. Deze duur wordt uitgedrukt in milliseconden.
  2. Daarna berekenen we het verschil in duur van twee opeenvolgende intervallen. Dat wordt in ons voorbeeld een lijst met n-2 = 2 elementen: [-50, 60]. Ook deze getallen worden uitgedrukt in milliseconden.
  3. Kwadrateer de elementen in deze laatste lijst: [2500, 3600].
  4. Bereken het gemiddelde van de elementen in deze lijst:

    \[\frac{2500 + 3600}{2} = 3050.\]
  5. Bereken de vierkantswortel van dit getal. De HRV van onze meting is dus gelijk aan

    \[\text{HRV} = \sqrt{3050} \approx 55 \text{ ms.}\]
  6. 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.}\]

Opgave

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.

  1. 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.

  2. Schrijf een functie 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.
  3. Schrijf een functie 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.
  4. Je hebt alle afzonderlijke kleine deeltaakjes afgewerkt. Je bent nu klaar om alles bij elkaar te brengen. Maak gebruik van alle vorige functies om de functie 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.
  5. Je kunt nu ook gemakkelijk de gemiddelde hartslag berekenen. Maak gebruik van alle vorige functies om de functie 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.

Voorbeeld 1

Invoer:

> bereken_verschillen([0, 800, 1650, 2440])

Uitvoer:

[800, 850, 790]

Voorbeeld 2

Invoer:

> bereken_verschillen([800, 850, 790])

Uitvoer:

[-50, 60]

Voorbeeld 3

Invoer:

> kwadrateer_elementen([-50, 60])

Uitvoer:

[2500, 3600]

Voorbeeld 4

Invoer:

> gemiddelde([2500, 3600])

Uitvoer:

3050

Voorbeeld 5

Invoer:

> HRV([0, 800, 1650, 2440])

Uitvoer:

55

Voorbeeld 6

Invoer:

> HR([0, 800, 1650, 2440])

Uitvoer:

74