Heart Rate Variability measurement


I would like to get a suggestion over HRV measurement.

I am using the ADPD4101 sensor where I am getting clean PPG signal using IR LED.

I have enabled FIFO Threshold Interrupt ( Watermark level = 384 bytes) to read the PPG signal from FIFO.

I am struggling to get the HRV from the Filtered PPG signal. I have gone through many references and it was saying that I have to calculate RMSSD.

Its the time difference between the successive peaks. I have calculated the time ticks of the Microcontroller which is the difference between one peak to other peak.

Its giving some wrong resultant values. when I am reducing the FIFO watermark level, the time difference also gets reduced. 

I am stuck with calculating the time difference between peak to peak

Would you please suggest any references or methods to get the HRV??  Looking ahead for helping hands.



  • I have seen some reference source code where they are just passing number of peak values of filtered ECG signal and calculating the RMSSD....Is it a right method ???

  • Hi there,

    There are a few different metrics for heart rate variability (HRV). A review paper at the link below listed some common HRV metrics: www.ncbi.nlm.nih.gov/.../

    Regardless the definition of any specific HRV metric, identifying each heart beat and calculating the beat-to-beat interval is the key for the accuracy of the HRV calculation. The peak of the PPG signal is often used for annotating each heart beat. Of course, you can explore other features on the PPG waveform to align the heart beats and calculate the intervals.

    The issue you are experiencing may related to your approach assigning each sample the correct timestamp. Depending on your FIFO watermark setting, you would need to run interpolation of the time difference between successive FIFO read. For instance, if you read FIFO 32 samples each time, you would need to use the current t(n) and previous (t(n-1) microcontroller ticks for the time  timestamp calculation. Denote delta = t(n) - t(n-1), the 32 samples should have timestamps as t(n-1), t(n-1)+delta, t(n-1)+2*delta, ..., t(n)-delta.

    Normally, the ADPD4101 has pretty stable sampling rate, meaning the delta remains constant. To reduce the computation load, you can simply find the delta with a few FIFO read and add the delta to the timestamp of previous sample for the current sample. Once you run such interpolation for timestamps, the FIFO watermark setting should have no or very low impact on the beat-to-beat interval (or NN interval in the literature) calculation and hence the HRV metric. 


    Glen B.  

  • Hi Glen,

    Thanks for your response.

    We are measuring Pulse Rate Variability with PPG signals.

    I am reading number of samples from FIFO. Let us say 50 samples. 

    After that, I am not going to use these 50 samples as such because which also will have noise data. So that, I am averaging it and passing it to LPF and storing it into a buffer and then only we will get a clean signal. (To clean up the PPG data, we are following these processes)

    After all these process, I have to detect the number of peaks. To get the peak calculation it is necessary to have buffer of data. During the number of peak calculation I will read the MCU ticks and calculating RMSSD.

    Let us say, In 10 second If I get "12 peaks" ,  the Time period will be "TS = Current tick / 12"

    In consecutive 10 second period also I will get number of peaks and I will calculate "TS= Current tick /  number of peaks

    For example, In 50 second....  We will have TS1[10 sec]  ,TS2[10 sec] , TS3[10 sec] , TS4[10 sec] TS5[10]) 

    delta = current tick - previous tick ....

    square sum root of delta and divide it by number of samples. This is how I will calculate HRV.



  • Hi Sudharsan,

    For HRV calculation, it is critical to have the correct time tick for each peak detected. I don't think it is the case if the process you described above is followed.


    Glen B. 

  • Hi Glen,

    Yes I agree with your point. 

    My approach is that...."ticks difference / number of peak detected" in a periodic interval.

    We are finding RMSSD for the above calculation.

    It might not be a perfect value...There maybe many methods but at least help me to correct the way of approach that I proposed...If its wrong. 

    If you have any way of approach...would you please suggest me ????