Recently Derek Qin of Draeger pointed out that at the end of the MEDTEQ article on ECG filters, the graph showing the effect of a 3mV/100ms impulse on a 0.05Hz high pass filter had a post impulse slope that looked more like 29µV rather than the claimed 291µV.
It turns that Derek was right, the correct answer is 29µV/s, but there’s actually a lot more to the story of this apparently simple test.
The mistake, by the way, escaped through the usual checking process of calculation by two different methods: first by excel step-wise simulation and the next with simple math for exponential decay and the derivative. Both had different errors, and by chance both errors arrived at ~291µV/s.
But perhaps it was more than a rare double mistake. Compared to actual test results, 29µV/s is far too low. And why have a limit of 300µV/s if the practical result is <10%. So it’s likely that bias played a role. In fact, when tackling this issue 10 years later, the author was convinced it was 29, and then reverted to 291, before finally settling back to 29. And this still did nothing to explain the difference with real world test results or why the limit is so high.
After throwing around a few ideas, Derek again came to the rescue by pointing out that my original calculations were based on a single, uni-polar pulse in isolation. In the case of a series of pulses (pulse train), the results can be widely different due to the waveform shifting down to accommodate the dc offset, which then dramatically increases the absolute value of the overshoot, relative to the dc level. This in turn increases the slope of the decay. This can be best seen by looking closely at the following image:
A pulse train of 3mV/100ms impulses repeated at 0.5Hz (30bpm), expanded to see the effect around the baseline. The slope of the last pulse is clearly different to the slope of the first pulse
(click on the image to expand)
It turns out that in the case of a pulse train, the results will depend on:
(a) The pulse frequency (pulse repetition rate)
(b) The time the test is run (which pulse in the sequence), and
(c) The simulator’s offset
Clearly, this is not intuitive, so let’s run through the math starting off again with a single unipolar 3mV/100ms pulse (for those not interested in the math, jump to the conclusion):
Overshoot: The initial 3mV positive edge passes through the high pass filter without distortion, and then starts to decay based on the time constant τ = 2πf = 3.18s. The decay after 100ms is D = A(1- exp(-t/τ)) = 3mV x (1- exp(-0.1/3.18)) = 0.093mV = 93µV. The 3mV negative edge at the end of the pulse also passes through the filter. Since the waveform has decayed 93µV, this decay value appears directly as an overshoot.
Slope: The slope is then calculated from the derivative of the exponential decay, using the overshoot as the starting amplitude A:
S = -A/τ = - -92.87µV / 3.183s = +29µV/s
Now let’s take a look at a pulse train, first using 1Hz frequency (60bpm), which has been allowed to “settle”. A 0.05Hz filter has a time constant of 3.18s, so it takes about 15s to 20s to stabilise after any shift in dc offset (15s = 1% error, 20s =0.2% error). A 3mV/100ms pulse repeated at 1Hz has an initial dc offset of 0.3mV and will eventually settle to a waveform with maximum +2.7mV and minimum -0.3mV relative to the dc level. We can then re-calculate using the above method, but with these settled values:
Overshoot: D = A (1- exp(-t/τ)) = 2.7mV x (1-exp(-0.1/3.18)) = 0.0825mV = 83.5µV
Slope: The new slope is calculated based on the overshoot and the -0.3mV (-300µV) offset that is the minimum of the settled waveform. Thus,
S = -A/τ = - (-300-83.5)µV / 3.183s = +121µV/s.
We can see here that the overshoot is only mildly affected, but the slope is wildly different. This explains why practical results are very different to 29µV/s predicted from a single pulse.
The result is obviously affected by the pulse frequency since this influences the max/min values of the settled waveform. For example, a 0.5Hz (30bpm) pulse train will settle to +2.85 / -0.15mV, and 2Hz (120bpm) waveform settles to 2.4 / -0.6mV.
And … if the waveform is not settled, it depends on which pulse is used. An engineer might run the test and randomly pick the 5th pulse, and later run the test again and pick the 12th pulse, and scratch their head as to why the results are different. So the test should be allowed 20s to settle in order to guarantee consistent results.
But that’s not all. It’s possible that the ECG simulator could use a -50% offset which can effectively double the range of the simulator for pulse waveforms (as used in the SECG). Instead of making a pulse using 3mV/100ms and then 0mV for 900ms, the simulator could use +1.5mV/100ms, -1.5mV/900ms. While the waveform is settling, this initial offset can dramatically influence the result, and can even exceed the 300µV/s limit for the first few pulses. Again, if the test is allowed to run for 20s this effect is eliminated.
This all explains a lot. And it turns out this issue affects any ECG testing where there is a dc offset in the test waveform and the ECGs filter goes down to 0.05Hz. Examples are such as the 200/20ms test and the CAL20160 waveform. More work is required to simulate these waveforms and determine the extent of the impact, but in the mean time, it makes sense to allow these tests 20s to stabilise and fix the test frequency.
Conclusion
Based on the above analysis, all tests involving a 0.05Hz filter should be:
allowed 20s to stabilise
be tested at 1Hz if not specified, or at least with the test frequency included in the test record to allow the test to be repeated
Ideally, future versions of ECG standards should include both the stabilisation time and test frequency for all tests.
If there are still errors in the above analysis, please feel free to report them.