A Business and Clinical Case for Continuous Surveillance: HIMSS 2019

Presentation at HIMSS 2019:

“Increased utilization of patient-controlled analgesia (PCA) and pro re nata (PRN) opioids for post-operative pain management poses significant risk of respiratory depression, particularly in patients diagnosed with or at risk for obstructive or central sleep apnea. Current practices for monitoring opioid-induced patients are neither adequate nor comprehensive. The speakers will analyze the results of two studies on the use of continuous capnography monitoring in a medical-surgical unit at a multi-hospital health system in order to detect adverse clinical events while also mitigating artifacts related to patient movement, suspect measurements and other medical device-generated alarm signals. Combining analysis with real-time data at the point of collection creates a powerful tool for prediction and clinical decision support and has implications for achieving real-time healthcare capabilities enterprise-wide.”

Engine mounted on Designer’s Choice

As had written in reply to comment, the mounting of the engine was done empirically. I purchased an adjustable engine mount and scribed bolt hole locations roughly over the area of the existing factory bracket mounting holes. The factory bracket mounting holes I had actually created an engine mount for of my own design (out of oak) dating back to approximately 2003. The holes were in a 3-over-3 pattern with the nuts set into the fibre glass of the transom. Had originally used these until my original engine mount rotted away after many years. Instead of making a new one, I had opted for an adjustable aluminum mount (pictured).

Tanaka 3 HP outboard kicker

This allowed raising and lowering of the motor…not because the shaft was too short — a standard small outboard would work fine. The main thing was to get the engine out of the water during sailing to reduce drag.

Living on the Chesapeake Bay, there are shallows and gunk holes all over the place here. It was a great location for sailing a small boat such as this one.

Now, my preference is rowing — something I took up over 36 years ago while in school. Less paraphernalia and gets me out on the water for just enough time that it does not take away from the family.

21 ft Oxford shell – in the water awaiting the rower.

Rowing Gear

Rowing Gear Trial-and-Error.

Having been a rower / sculler for years, I have collected and tried many different types of gear pertaining to safety, gloves, monitoring and tracking. In this post I highlight the types of equipment I regularly use both for outdoor sculling and indoor ergometer rowing. I preface this post by stating that I am not advertising for a particular product and am not receiving a commission from any product in particular. I merely highlight those that I have converged on over the years.

Oxford Shell

Seat pads.

I have tried many. Those who have been rowing understand the numbness that can arise in legs related to sciatica. There are natural methods (massage, exercises) to ameliorate or rid this issue. But, what helps is a good rowing seat pad. I have found the seat pad offered by Revolution Rowing to be comfortable and durable. I have several of these, one of which I use for my Oxford Shell, one for my Concept II Model D Ergometer, and one for my Oar Board SUP rower.

Seat Pad

Oar Board Standup Paddle Board Rower


I have tried many different varieties, including sailing gloves and retail store apparel. I have converged on the CrewStop glove. I have found it to offer the most protection and most comfort, particularly for long-hauls on either water or Erg.

CrewStop Glove

Rearview Mirrors.

I have used many, and you should use what works. I have found the sculling mirror sold by Coxmate to be of superior value for me as it is a large yet light mirror and enables me to see peripherally.

Coxmate sculling mirror

Personal Flotation Device.

I wear one…most of the time. There are exceptions. The hip-surround units like the one in the photo do not get in the way of the arms, oars, or motion. I have two of them. They can be obtained through West Marine or other favorite sources, including Amazon.com.



I am into data…bigly :-). The most reliable technology I have found (…and I have tried many…) is Polar H10 heart rate sensors and chest strap together with the Polar beat app. I include the photo again which shows the seat pad and the Polar chest strap on top. I keep my iPhone in a waterproof case on-board and this allows integration of the heart rate measurements (1-second increment) with the GPS location. I know how far I row, what my heart rate is wherever I am, and I get real-time feedback audibly in the boat.

Polar Beat Chest Strap.

Peripheral Equipment and Epilogue.

I maintain an attachment for GPS (GPSMap 78sc) mounted on my outrigging together with a camera mount for photos of the scenery. These come in handy on occasion, particularly for obtaining unique shots here on the Elk River in the northern Chesapeake Bay Area.

Despite the above and the available software for rowers on iPhone, Android and iPad, I am writing my own rowing application as I have not found anything yet that meets my specific requirements. As this develops and becomes available for testing, I will write a post entry on that, as well.

Introducing the Oxford Shell

I have been a water enthusiast my entire life–from power boating with my father as a child to sailing small sailboats as a teenager and eventually owning two sailboats (one large, one small) as an adult. I have also been an avid fan of rowing & sculling since my freshman year in college some thirty…. er, ah…a long time ago.

21 foot Oxford rowing shell – view 1

I recently acquired a stick-built Oxford shell (depicted). This is a wooden vessel… weighs somewhere on the order of 50 lbs or so… and is beautifully finished by the builder with multiple layers of varnish and a professional paint job below the water line. She is approximately 21 ft in length and a joy to row.

Some other photos follow this.

21 ft Oxford shell – a view of the Pantedosi rowing drop-in.

She features a Piantedosi rowing rigging (seat, stretchers, outriggers) and I have added a few things onto her, like a holder for my Garmin GPS unit and a seat-saver seat on top of the slide.

21 ft Oxford shell – in the water awaiting the rower.

She rides true and fast. I normally pace at about 20 strokes per minute, but have sprinted up to 24-26. She has just about a 2 ft beam. The key to stability is making sure the oars are in the water on the feather when getting in and out. Stability, balance and grace are the essence of rowing and it is like meditation rowing her.

Oxford shell on the Elk River; Elkton, MD

I am developing some rowing apps in iOS and Swift to assist in guiding and tracking her motion. As these are developed and rolled out, will be writing about them and sharing, as well.

Mathematical Techniques for Mitigating Alarm Fatigue

The problem with attenuating alarm data is achieving the balance between communicating the essential, patient-safety specific information that will provide proper notification to clinical staff while minimizing the excess, spurious and non-emergent events that are not indicative of a threat to patient safety. In the absence of contextual information, the option is usually to err on the side of excess because the risk of missing an emergent alarm or notification carries with it the potential for high cost (e.g.: patient harm or death).

The purpose of this study is to look at the mathematics and some of the techniques and options available for evaluating real-time data. The objective is to suggest a dialog for further research and investigation into the use of such techniques as appropriate. Clearly, patient safety, regulatory, staff fatigue and other factors must be taken into account in terms of aligning on a best approach or practice (if one can even be identified). These aspects of alarm fatigue are intentionally omitted from the discussion at this point (to be taken up at another time) so that a pure study of the physics of the parameter data and techniques for analyzing can be explored.

A copy of the full white paper, Mathematical Techniques for Mitigating Alarm Fatigue v001, is available for download.

Haar Wavelet Transform Calculation Primer

The DWT calculation is carried out in detail for a signal vector containing 8 data elements. The first step is to compute the averages and differences (divided by two) for each of the signal components. This is shown in Figures 1-4.

Figure 1

Figure 2

Figure 3

Figure 4

The next step involves computing the averages and differences of those averages and differences just computed. This is shown in Figures 5 and 6.

Figure 5

Figure 6

Finally, the last step involved is to compute the average and difference of the previous step. This is shown in Figure 7.

Figure 7

The discrete wavelet transform vector for the signal supplied is given by the bottom row, shown in Figure A-8. The color-coding is included to indicate where each of the computed differences (and the final average) is placed in the vector.

Figure 8

As the number of signal data points increases, so does the number of computations of averages and differences. This process lends itself quite readily to automation.

Haar Wavelet Transform Calculations Using MS Excel

Background on Calculations with the DWT

The discrete wavelet transform provides a system for constructing or approximating a signal or function. Unlike Fourier series, which reflects only the frequency or spectral components of a signal, wavelets provide time and frequency localization of signal specifics, which is necessary to reconstruct time-varying, non-stationary processes [1, 2]. The discrete wavelet transform calculation is conducted with respect to a Haar basis function, in which individual averages and differences (or details, as they are sometimes referred to in the art) are computed with respect to the raw signal data. Let’s begin by considering a small sample signal of raw data collected from a patient, defined by Eq. 1:

Equation 1

The process of computing wavelet coefficients from this vector is straightforward and is as illustrated in Figure 1.

Figure 1

The signal is decomposed into a series of averages and differences, where the average is calculated according to normal convention, and the difference is actually half the difference between any two raw signal values. Thus, from Equations 2 and 3:

Equation 2

Equation 3

The computations illustrated in Figure 1 proceed as follows: the average of each raw sample is computed with respect to its immediate neighbor, together with the difference (divided by 2). Once these are computed, the average and difference of these results are then computed. This process is continued until the complete ensemble (that is, the single value and difference) corresponding to the entire signal is determined. The first wavelet coefficient is given by the ensemble average corresponding to the longest scale value over the entire interval. The next wavelet coefficient corresponds to the size of the difference of the averages at the next scale up. The remaining coefficients follow the pattern of the differences between the averages at finer and finer scale (in general). Thus, the vector of wavelet coefficients given the data sample above appears as follows, represented as Equation 4:

Equation 4

We can represent this relationship between the wavelet coefficients and the raw signal as Equation 5:

Equation 5

Where H4 represents a 4 x 4 Haar matrix having the form:

Equation 6

Alternatively, given the raw signal, the wavelet coefficients may be found directly from Equation 7:

Equation 7

The Haar matrix may be inverted using standard methods. The creation of the Haar matrix follows a predictable pattern as the number of rows and columns increases. However, by applying the Haar transform, the size of the matrix increases according to 2n scale, where n is a positive integer. Thus, in the Haar basis, the quantity of data must conform to this scale as well. We can expand this Haar basis to an H8 basis, illustrated here in Equation 8:

Equation 8

The number of rows and columns contained within a Haar Hn basis follows in accord with 2n. We can consider an example problem now to illustrate the method. Let’s first expand the original signal from four to eight elements. This larger data quantity will help to illustrate some other features of the discrete wavelet transform and why it is being considered for the specific application. The vector for this data set is given by Equation 9:

Equation 9

The vector of wavelet coefficients associated with this signal, found using the H8, is as follows:

Equation 10

Now, one of the benefits of wavelet coefficients is that they establish the relative scale of the differences with respect to the overall signal average. This is important because, in terms of reproducing the signal, the values of these wavelet coefficients establish their relative impact on the overall signal. Thus, compression of the original signal can be achieved (at a loss) by discarding certain of these coefficients based on establishing a sensitivity threshold.

Defining the statistical significance level of this threshold can be done in accord with well-documented practices, especially relative to setting confidence intervals with respect to a known distribution [3, 4, 5]. However, the discarding of coefficients is not the objective of the wavelet transform in medical applications: indeed, removing potentially important information from the raw signal can be detrimental and will provide the clinician with incomplete data on the patient. Instead, wavelet transforms provide the capability to record all of the data and to automatically filter it so that (1) communication of all data elements between the clinical environment and the health enterprise will not be overwhelmed; and, (2) the ability to retrieve any amount of the data, from an ensemble to detailed temporal changes, can be mined at will by clinicians and researchers without requiring that all data be retrieved from the data repository in any one request.

One way to illustrate these concepts is by applying an exclusion threshold on the smallest values of coefficients: the magnitude of the wavelet coefficients provides insight into the level of contribution they make to the character of the overall raw signal. Hence, by omitting certain coefficients it becomes possible to exclude noise, artifact, or other components that are judged to be of minor influence to the overall raw data sample.

Table 1

For instance, consider the table of wavelet coefficients (Table 1). The column on the left is the independent variable (time). Each subsequent set of columns defines the set of Haar-basis wavelet coefficients, and the resulting signal value, beginning with no applied threshold up to a value of 30% threshold. The threshold value is computed by multiplying the threshold percentage by the largest wavelet coefficient. For instance:  a 10% threshold multiplied by -4 yields a threshold (absolute) value of 0.4. In this case, one wavelet coefficient is discarded, given that the requirement for the 10% threshold case is that the absolute value of all coefficients is greater than 0.4.

Figure 2

At the 20% level, the threshold value is 0.8, but no other coefficients exceed this threshold, so still only one coefficient is discarded (i.e., set to zero so that its contribution will be ignored for signal reconstruction). In comparing the reconstructed signals with thresholds of 10% and 20% to the original (no threshold applied signal) one can see that there are differences in the reconstructed signal. These differences have a maximum deviation of 0.25 between the reconstructed and the original signal.

In viewing the 30% threshold columns, three coefficients are discarded. Here, the deviation between the original and reconstructed signals is no larger than 1.25. So, the general impact of discarding wavelet coefficients from the basis results in an approximation to the original signal. Thus, by discarding wavelet coefficients from the basis, the reconstructed signal approximates the original signal. As the discard threshold approaches zero, the difference between the reconstructed and original signals approaches zero. Figure 2 provides a comparative view of these data by displaying all of these signals on one overlay. To the casual observer, there does not appear to be much difference between the lossy and the lossless cases: the signal data points all appear to be close to one another.

Depending on the behavior of the original signal (that is, its shape, repetitiveness, noise content), the degree of loss vis-à-vis discarding of wavelet coefficients may or may not be acceptable to the end-user. However, in the case of a predictable or repetitive signal, the discarding of wavelet coefficients can have a trivial effect on the reconstruction of the original signal. This latter case can be illustrated effectively with the aid of a revised form of the signal data. The data are contained in Table 2, plotted in Figure 3

Table 2

In this revised case, the raw signal data follow a series of three step functions: values of 8 for three time units, 3 for three time units and –4 for three time units. The wavelet coefficients show that three values are zero. Hence, thresholds of 30% on any of these coefficients will not exceed the threshold. In this instance we are seeing another benefit of the discrete wavelet transform: the ability to “automatically” filter out repeated data. Therefore, all of the reconstructed data shown in Figure 3 overlay the raw signal data. The number of coefficients required to reconstruct this signal are three fewer than the total number of data points contained within the raw signal. Hence, the discrete wavelet transform provides a means for representing the original signal with fewer overall data points. This concept plays a role in the application of the discrete wavelet transform technique to patient vitals data.

Figure 3

[1]     C. Sidney Burrus, Ramesh A. Gopinath, Haitao Guo, Introduction to Wavelets and Wavelet Transforms—A Primer; Prentice-Hall, 1998; page 3.

[2]     Tommi Vuorenmaa, “The Discrete Wavelet Transform with Financial Time Series Applications”; Seminar on Learning Systems at the Rolf Nevanlinna Institute; University of Helsinki, April 9th 2003.

[3]     James F. Zolman, Biostatistics: Experimental Design and Statistical Inference; Oxford University Press, 1993; pp 77-99.

[4]     Christopher Torrence, Gilbert P. Compo, “A Practical Guide to Wavelet Analysis,” Bulletin of the American Meteorological Society; Vol. 79, No. 1: 69-71, January 1998.

[5]     Sheldon Ross, A First Course in Probability, 3d Ed.; Macmillan Publishing Company, 1988; pp 336-357.


Import Multiple CSV Files into a Single MS Excel Spreadsheet

The following routine reads multiple (potentially hundreds) of comma-separated-value files (CSV) and writes their content to a single MS Excel worksheet.

Original reference from ExtendOffice.com

Sub ImportCSVsWithReference()
' This macro reads in all CSV files in a directory and 
' writes them to a single new worksheet ("Sheet1")
' in a new workbook (that is, the workbook in which this 
' Macro is defined).
' The data from the separate CSV files are column-listed in' the Sheet1.
' Found at this web site: https://www.extendoffice.com/documents/excel/3388-excel-import-multiple-text-csv-xml-files.html
' Developed in this Macro 2018-01-08
' John Zaleski
' -------------------------------------------
' What follows is directly from the web site:
' UpdatebyKutoolsforExcel 2015-12-14
    Dim xSht  As Worksheet
    Dim xWb As Workbook
    Dim xStrPath As String
    Dim xFileDialog As FileDialog
    Dim xFile As String
    On Error GoTo ErrHandler
    Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    xFileDialog.AllowMultiSelect = False
    xFileDialog.Title = "Select a folder"
    If xFileDialog.Show = -1 Then
        xStrPath = xFileDialog.SelectedItems(1)
    End If
    If xStrPath = "" Then Exit Sub
    Set xSht = ThisWorkbook.ActiveSheet
    If MsgBox("Clear the existing sheet before importing?", vbYesNo, "Kutools for Excel") = vbYes Then xSht.UsedRange.Clear
    Application.ScreenUpdating = False
    xFile = Dir(xStrPath & "\" & "*.csv")
    Do While xFile <> ""
        Set xWb = Workbooks.Open(xStrPath & "\" & xFile)
        Columns(1).Insert xlShiftToRight
        Columns(1).SpecialCells(xlBlanks).Value = _
        ActiveSheet.UsedRange.Copy xSht.Range("A" _
           & Rows.Count).End(xlUp).Offset(1)
        xWb.Close False
        xFile = Dir
    Application.ScreenUpdating = True
    Exit Sub
    MsgBox "no files csv", , "Kutools for Excel"
End Sub

Creating Plots in MS Excel Using Visual Basic Code

I am frequently in need of generating scatter and line plots of measured physiological signals. To this end, I like to use many different types of software tools. The one I like the most, however, for rapid manipulation and visualization of data is Microsoft Excel.

Oftentimes I need to create charts from columnar data within Excel. Creating and formatting line plots, particularly if creating many, can be a time-consuming and tedious process. Therefore, I had decided on searching for approaches for creating automated chart plotting routines of the format I was looking for. Naturally, I turned to the Internet and to my various MS Excel textbooks.

To my disappointment, however, after spending what was perhaps a week of evenings searching, I honestly could not find anything that fit the bill on the open Internet. That is to say, it was not as if I could not find any help… simply that I could not find anything that already provided me with exactly what I was looking for or event a close template that I could pilfer and customize.

Thus, it became necessary for me to slog through the process myself. The purpose of this entry is to simply communicate what I found and did so that another wayward traveler might be saved from some time and effort… although, I can imagine that what I provide below is not precisely what someone else is looking for, either.

Nevertheless, and once you review my code, you may conclude “that really was not anything special… why did it take him so long to create that, and why so difficult to find comparable models that he could reuse?”

The answer to these questions is that oftentimes those pursuing the process need to educate themselves. Thus, it was not merely me taking another individual’s sample code…it was about me understanding that sample code. The understanding is often the hardest part of the challenge.

To begin…

The objective is to create and X-Y plot, wherein the X-data and Y-data are columns in an MS Excel Worksheet, as shown in the figure below:

Columns of data in a simple MS Excel worksheet, showing three dependent columns (y1(t), y2(t), y3(t)) and one independent column, time.

These data can be plotted either one dependent variable at a time or any combination of dependent columns versus the independent column. Accomplishing this manually using MS Excel is a straightforward task. Yet, if one wishes to develop a standardized template or create a common format, particularly if the plotting is to be repeated many times, performing this manually becomes overwhelmingly tedious.

The routine I developed creates a chart with multiple data series displayed versus the common independent axis. The plot generated by the Visual Basic code from these data is as shown below:

The code draws upon four columns of data: three dependent variables and one independent variable.

The code follows:

Sub plotData()
' Purpose: Plots 3 functions versus time in Excel using
' visual basic programming.
' 2017-12-31.
' J. Zaleski

' how many rows?

 Dim rCount As Long
 rCount = ActiveSheet.Cells(9, 10)

' axis dimensions

 Dim xaxis As Range
 Dim yaxis As Range
 Dim yaxis2 As Range
 Dim yaxis3 As Range

 Set xaxis = Range("$a$3", "$a" & rCount)
 Set yaxis = Range("$b$3", "$b" & rCount)
 Set yaxis2 = Range("$c$3", "$c" & rCount)
 Set yaxis3 = Range("$d$3", "$d" & rCount)

 ' dimension chart

 Dim c As Chart
 Set c = ActiveWorkbook.Charts.Add
 Set c = c.Location(Where:=xlLocationAsObject, Name:="test")

With c
 .ChartType = xlXYScatterLines 'A scatter plot, not a line chart!
 ' set other chart properties
 End With

' add data series to chart

With c
 ' assign x and y value ranges to series 1

 .SeriesCollection(1).Name = Worksheets("test").Cells(2, 2)
 .SeriesCollection(1).Values = yaxis
 .SeriesCollection(1).XValues = xaxis
 .SeriesCollection(1).MarkerBackgroundColor = RGB(0, 0, 0)
 .SeriesCollection(1).MarkerForegroundColor = RGB(0, 0, 0)
 .SeriesCollection(1).MarkerSize = 2
 .SeriesCollection(1).MarkerStyle = 3
 .SeriesCollection(1).Format.Line.Weight = 1#
 .SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
 .SeriesCollection(1).Format.Line.BackColor.RGB = RGB(0, 0, 0)

' assign x and y value ranges to series 2

 .SeriesCollection(2).Name = Worksheets("test").Cells(2, 3)
 .SeriesCollection(2).Values = yaxis2
 .SeriesCollection(2).XValues = xaxis
 .SeriesCollection(2).MarkerBackgroundColor = RGB(128, 0, 0)
 .SeriesCollection(2).MarkerForegroundColor = RGB(128, 0, 0)
 .SeriesCollection(2).MarkerSize = 2
 .SeriesCollection(2).MarkerStyle = 4
 .SeriesCollection(2).Format.Line.Weight = 1#
 .SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(128, 0, 0)
 .SeriesCollection(2).Format.Line.BackColor.RGB = RGB(128, 0, 0)

' assign x and y value ranges to series 3

 .SeriesCollection(3).Name = Worksheets("test").Cells(2, 4)
 .SeriesCollection(3).Values = yaxis3
 .SeriesCollection(3).XValues = xaxis
 .SeriesCollection(3).MarkerBackgroundColor = RGB(128, 128, 0)
 .SeriesCollection(3).MarkerForegroundColor = RGB(128, 128, 0)
 .SeriesCollection(3).MarkerStyle = 5
 .SeriesCollection(3).MarkerSize = 2
 .SeriesCollection(3).Format.Line.Weight = 1#
 .SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(128, 128, 0)
 .SeriesCollection(3).Format.Line.BackColor.RGB = RGB(128, 128, 0)

End With

'adjust major unit on x axis

With c.Axes(xlCategory)
 .MajorUnit = Worksheets("test").Cells(8, 10)
 End With

'adjust major unit on y axis

With c.Axes(xlValue)
 .MajorUnit = Worksheets("test").Cells(5, 10)
 End With

' find maximum y value

Dim maxY As Integer
 maxY = Worksheets("test").Cells(3, 10)

' find minimum y value

Dim minY As Integer
 minY = Worksheets("test").Cells(4, 10)

' find maximum x value

Dim maxX As Integer
 maxX = Worksheets("test").Cells(6, 10)

' find minimum x value

Dim minX As Integer
 minX = Worksheets("test").Cells(7, 10)

With c
 'locate chart

.ChartArea.Top = 50
 .ChartArea.Left = 400

'adjust width and height

.ChartArea.Width = 400
 .ChartArea.Height = 200

'adjust y-axis Scale

.Axes(xlValue).MinimumScale = minY
 .Axes(xlValue).MaximumScale = maxY

'adjust x-axis Scale

.Axes(xlCategory).MinimumScale = minX
 .Axes(xlCategory).MaximumScale = maxX

'adjust font

.ChartArea.Format.TextFrame2.TextRange.Font.Size = 8
 .ChartArea.Format.TextFrame2.TextRange.Font.Name = "Arial Narrow"

'adjust font color

.Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
 .Axes(xlValue).TickLabels.Font.Color = RGB(0, 0, 0)

'adjust decimal places on x-axis

.Axes(xlCategory).TickLabels.NumberFormat = "0.00"
 .Axes(xlValue).TickLabels.NumberFormat = "0.00"

'adjust plot labels

.Axes(xlCategory, xlPrimary).HasTitle = True
 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets("test").Cells(2, 1)
 .Axes(xlValue, xlPrimary).HasTitle = True
 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Three Functions versus Time"
 .HasLegend = True
 End With

End Sub

The code is written as a macro and the data are maintained in a worksheet called “test”.  The macro is associated with a button placed on the worksheet which, when pressed, creates a plot of the three dependent variables. The routine is not intended to be all-encompassing in terms of capability. But, to the uninitiated, the code serves as a building block for tailoring and customization. For instance, the routine requires three specific dependent columns of data. The .SeriesCollection field is specified with three indices. This can be generalized to any number of plots using a for loop indexing variable. Furthermore, the color schemes, tick labels, size, location, etc. are all customizable.

Follow-Up: Garmin Vivoactive HR & Polar H10: Which measures heart rate more accurately?

Heart Rate Measurement Using Garmin & Polar Wearables

A study was made of the Garmin Vivoactive HR and Polar H10 chest strap in terms of comparative heart rate assessments. The units are shown in Figure 1 below. The two units involved included a wrist-based sensor (Garmin Vivoactive HR) and a chest strap (Polar H10).

Polar h10 chest strap and garmin vivoactive hr smart watch were used in the comparison

This follow-up focuses on 20 minutes of water rowing using both units in an effort to assess the heart rate measurement consistency and reliability. Both watch and chest strap were properly attached with no movement between these devices and the skin. Data were collected and then downloaded and processed through a Microsoft Excel spreadsheet. The data were time-synchronized so that corresponding data points from each device were associated in time. A summary of the analysis is provided here.

Time-Based Plots of Heart Rate

Overlay scatter plots of heart rate measurements versus time were made and are as shown in Figure 2.

Figure 2: Heart rate measurement while water-rowing approximately 20 minutes. Shown are overlays of Garmin Vivoactive HR and polar h10 heart rate versus time.

A general observation from the data is that the heart rate measurements from the two devices seem to overlap reasonably well as viewed by the naked eye. But there are key drops in measurements, particularly with the wrist-based heart rate sensor, that show as deviations in the overlap of the two signals. This can be seen more readily via the correlation curve shown in Figure 3. The correlation coefficient of 0.91 was determined between the two sets of measurements. It should be noted that the wrist-based sensor was snug with no movement on the wrist. Ambient temperature was approximately 80F.

As I showed in a previous post, there was a serious issue with the wrist-based sensor in which there were data dropouts with some significant time lags between measurements. In the case of the wrist-based sensor for the associated measurements here, this was also experienced. For comparison, I show histogram plots of the time intervals between measurements for both the wrist-based sensor (Figure 4) and the chest strap (Figure 5). The wrist-based sensor experiences a significant number of events in which the time between actual measurements are greater than one second. Indeed, from the figure, only 83 measurements during this interval were obtained within one-second of one another! There were a significant number of measurements in which the interval was > 1 second, with one as high as 40 seconds. The overall quantity of measurements was thus reduced to approximately 430 during the workout. On the other hand, the chest strap consistently measured at one-second intervals for a total of approximately 1320 measurements.

Figure 3: Scatter plot of heart rate as measured between the wrist-based Garmin device and the chest-strap Polar H10. A correlation coefficient of 0.91 was determined between the measurements. Perfect correlation is shown by the diagonal line.

Figure 4: Historgram of time between measurements for Garmin wrist-based sensor. Note the significant quantities of measurements in which the interval is greater than 1 second (the advertised measurement interval). For example, there were 20 instances in which the measurement interval was 6 seconds, and one instance in which the measurement interval was 40 seconds! Note that only 83 measurements were in the one-second interval width!

Figure 5: Historgram of time between measurements for the chest strap polar H10 sensor. All measurements (of which there were more than 1300) were reliably at one-second intervals.


Chest straps are much more reliable for heart rate measurement versus wrist-based sensors. Users of wrist-based sensors for heart rate measurement should be advised that measurements can be in question, as results illustrate here. This is not to say that chest straps are the gold-standard. Clearly, ECG measurement similar to those obtained through stress-testing are of diagnostic quality. Yet, for rate measurement chest straps are quite adequate and seemingly reliable.