ECG lead II (SNUADC)¶
Lead II of the ECG, sampled by SNUADC at 500 Hz from the monitor's analogue output.
| Name in the dataset | SNUADC/ECG_II |
| Type | waveform |
| Device | SNUADC |
| Stamped by | Recorder PC clock |
| Spaced by | SNUADC sample clock |
| Rate | 500 Hz |
| Unit | mV |
Description¶
Samples are spaced by the SNUADC sample clock; their record stamps come from the recorder's model of that clock, so they carry the drift and resets described in SNUADC (step mode) against the recorder PC. At every step-mode reset about 18 ms of signal is not sampled, although every record still holds 100 samples (Signal lost at a SNUADC step-mode correction).
Measurement space¶
Time side (stamp-model time): the true time lies between -0.013 s and -0.0003 s from the stamp: the delay range plus the interval one value describes.
Time¶
From UTC to the stored time stamp¶
Timing¶
Against the working reference. Delay: from the end of the interval a value describes to its stamp. Interval: how wide that interval is.
| Form | Delay | Interval | Clock domain | Status | Evidence |
|---|---|---|---|---|---|
| stamp-model time (default) | 0.3 ms – 3 ms | 2 ms – 10 ms | SNUADC stamp-model time (the working reference) | estimated | stamp-model residual where corrections are seen (recordings with none can drift about +-0.1 s/h on the port's rate); 100 Hz files 10 ms |
| raw stamps | 10 ms – 480 ms | 2 ms | SNUADC raw record stamps | measured | sawtooth up to -480 ms (step mode corrections) |
Combine it with other signals in the synchronisation planner.
Value¶
Its value side is still to be described.
Parameters¶
| Parameter | Value | Status | From |
|---|---|---|---|
| Stamp shift across a recording gap | 127–149 ms early (4 gaps, 2 cases; modulo one pacing period) | measured | Paced ECG as an independent clock |
| Signal lost at a SNUADC step-mode correction | 17.7 ms (range 17.2 to 18.2; n = 3; 3 corrections in 2 paced cases; ECG–EEG bursts give 13.0 ± 1.7 ms) | measured | Paced ECG as an independent clock |
| SNUADC start after the file's first record | 1.56 s (5–95%: 0.44–4.5 s; 99th percentile 12 s; maximum 10,879 s) | measured | The vitaldb package's loading conventions |
Observations¶
| Observation | Status | Summary |
|---|---|---|
| About 20 ms of signal lost at every SNUADC reset | established | At each step-mode reset the acquisition pauses for about 20 ms inside the last record before the new timing, and that time is never sampled: 17.7 ms on the sample count (Signal lost at a SNUADC step-mode correction), once the filler sample is counted. Every record still holds 100 samples, so nothing in the file shows it. |
| All SNUADC channels share one clock | established | Every SNUADC waveform track of a case (ECG leads, ART, PLETH, CVP) has the same first stamp, the same record timing and the same corrections. They are stamped together. |
| An extra zero sample after most resets | established | Most SNUADC resets (335 of 392) contain one sample that reads 0 in every channel at once, a little after the reset. It carries no time of its own: the signal either side runs on as if it were not there. |
| Arterial timing steps cluster at line events | established | About a quarter of the steps in ECG→arterial-pressure timing fall within a minute of a line access or a cuff occlusion, against 4.5% at random times. |
| Eight recordings store whole messages twice | established | In 8 recordings 15–48% of the waveform records are byte-for-byte copies of the record before them, with the same timestamp: case 15, case 364, case 1946, case 3865, case 4857, case 5414, case 5595 and case 5619. SNUADC, Primus and BIS are affected equally, so the recorder, not a device, wrote them twice. |
| Every time is quantised, and fiducials inherit it | established | A time on a grid of step Δ carries an error of Δ/√12 (1 SD). In VitalDB that is 0.58 ms for a 500 Hz sample, 2.3 ms for BIS EEG, 0.8 ms for the arrhythmia annotations' 1/360 s grid, and up to ±17 ms for PPG fiducials taken on raw samples, which lock to the 33.3 ms frame. |
| Five records out of order at every SNUADC reset | established | At each step-mode reset the five records after it are written in the wrong order: two continue the old timing and three start the new, interleaved. Read in file order, or sorted by stamp, one second of signal is scrambled. |
| SNUADC sends no time; the recorder stamps by count | established | The SNUADC board streams samples with no time stamps. Every SNUADC time in VitalDB is the recorder's model of the board's clock: the sample count at the nominal rate, pulled back when it drifts too far. |
| Small positive SNUADC gaps are real data loss | established | Forward jumps of under a second in SNUADC stamps are missing data, not clock corrections: the beat interval across them fits the gap better than the samples butted together. |
| The EEG–ECG offset is fixed by the SNUADC correction mode | established | After the stamp model, BIS EEG still lags the SNUADC ECG by a constant: −804 ms in step mode and −660 ms in frequent-correction mode over the whole release, tight within a port or unit. The mode, a property of the setup, sets the constant. |
| Twelve recordings sample the SNUADC waveforms at 100 Hz | established | In 12 of 6,388 recordings every SNUADC waveform (ECG II, ECG V5, PLETH, and ART or CVP where present) is stored at 100 Hz instead of 500 Hz: case 299, case 803, case 1150, case 1693, case 2362, case 2920, case 4458, case 4582, case 5066, case 6119, case 6133 and case 6375. |
| SNUADC channels are read one after another | likely | The SNUADC firmware reads its 8 channels in turn, about 0.1 ms each, so within one sample the last channel is read up to about 0.8 ms after the first. The channel order is not known. |
| SNUADC values are truncated to the count below | likely | The SNUADC firmware truncates each calibrated value instead of rounding it, so every value sits half a count low on average (about 0.5 mmHg for arterial pressure). Values clamp at counts 0 and 1023. |
| Stamp-based loaders lose samples at overlaps | likely | Loaders that place samples by their stamps onto a grid overwrite samples where stamps overlap: about 0.48 s at every SNUADC reset, and one sample about every 35 minutes from the stamp arithmetic. |
| The BIS EEG carries an averaged cardiac artefact | likely | Averaged on the ECG's R peaks, the BIS EEG shows the heartbeat (median 4.3 µV), near-simultaneous with the R wave. Single beats are too weak to match one by one. |
| In some recordings two unrelated streams are interleaved in one track | open | In 7 recordings 64–95% of the records alternate between two streams: each record continues the one two before it, not the one before, and the two streams do not match each other. SNUADC and BIS in case 2219, case 2379, case 2640, case 4836, case 5327 and case 5617; SNUADC in case 1939. In case 94, case 945, case 1132, case 3195 and case 5700 4–7% of SNUADC records interleave. |
| SNUADC values are 10-bit codes, though the device is documented as 12-bit | open | Every SNUADC channel in the release stores codes 0–1023 and nothing above: 10 bits, a step of 0.0098746 V. The VitalRecorder device list describes the SNUADC as a 12-bit converter. |
Studies¶
| Study | Date | Status | Summary |
|---|---|---|---|
| The heartbeat in the Primus airway signals | 2026-10-19 | current | A pilot in 30 recordings for a heartbeat-locked route from the Primus to the SNUADC. Airway pressure shows the heartbeat in 9% of windows only. CO₂ shows a heartbeat-locked trace in 60% of windows, tight to 20 ms, but its lag does not follow the Primus drift, so it cannot time the Primus. Closed as a clock route. |
| Gaps and unbroken segments in every waveform | 2026-10-19 | draft | Every gap and every unbroken segment in the 6,388 recordings, per waveform. The curves are not smooth: a cliff at about 18 s in every device marks the recorder's pauses, SNUADC segments stop at 5 hours, Primus segments at about 2.0 hours and BIS segments at about 2.3 hours (each device's correction cycle), and BIS's short gaps grow with the time since the last one (clock resynchronisations, not lost data). |
| When each device's clock is corrected, in every recording | 2026-10-19 | draft | From the steps between records in all 6,388 recordings: the BIS is corrected every 8,192 s and the Primus every 7,230 s, on their own timers (the first correction comes at any time after the device starts); the SNUADC is reset when 0.49 s of drift has built up. With the full rerun of the correction fit, it gives each device's drift against the recorder PC in 4,728 BIS and 2,728 SNUADC recordings, and shows that the Primus's 20–23 s AWP pauses belong to its correction cycle. Every rate here is relative to the recorder PC, whose own clock drifts and is corrected. |
| Message sizes and the steps between records | 2026-10-19 | draft | Every record in every waveform: SNUADC writes messages of 100 samples (0.2 s), Primus 30 (0.48 s), BIS 16 (0.125 s), CardioQ no fixed size. Backward steps outnumber gaps by about a hundred to one and come from a few recordings with duplicated or interleaved records. Primus gaps are whole lost messages; most SNUADC and BIS gaps are not. |
| The SNUADC clock through the Solar8000 numerics, whole release | 2026-10-19 | current | On the SNUADC's own sample count, the delay from the waveform to the PC-stamped Solar8000 heart rate and mean arterial pressure ramps at the SNUADC's drift against the PC, measured without its stamps or resets. In recordings with whole reset intervals it agrees with them (−63 ppm; median difference +1.5 ppm, 581 recordings). It is too noisy per recording, and in recordings under about 4 h its rate is biased toward zero, so it cannot yet speak for recordings without resets. |
| What each break in the stamps is | 2026-10-19 | draft | Every step between waveform records in the release, sorted by mechanism: written twice, a SNUADC clock reset, interleaved streams, a pause shared by every device, whole messages, less than a message, or a fraction of a message beyond whole ones. A continuity test with controls shows which classes lose data: shared pauses and most longer SNUADC gaps do; steps under one message, and SNUADC's lone one-message steps, mostly do not. |
| Value resolution of every signal | 2026-10-19 | draft | How finely every waveform and numeric track in the release records its values. The SNUADC waveforms are 10-bit codes, though VitalRecorder's documentation describes the SNUADC as 12-bit; Primus waveforms use about 10 bits of 12; BIS EEG is a 16-bit grid of 0.05 µV. Numerics are 32-bit floats on decimal grids of 1, 0.1, 0.01 or 0.001, one per track; settings sit on coarser grids of 10 or 100. |
| One device delay for the PLETH across the release | 2026-10-18 | current | The stored ECG-to-PLETH delay was measured in 5,536 recordings, to the foot and to the steepest upstroke of each pulse. It has one peak (655 ms to the foot, 715 ms to the upstroke, in the median recording), no clusters by recording setup or SNUADC port, and no shift along the case order: one global device delay, 385 ms with an adopted R-to-foot finger PAT of 270 ms, fits the whole release, as Ruffolo et al. found in their own data. |
| How often each device is corrected | 2026-10-17 | current | The devices re-synchronise in different ways: SNUADC when its drift reaches about half a second, BIS on a fixed 8,192 s timer, and the Primus by small steps about every two hours that do not keep up with its drift (+104 ppm, measured later by breath matching). |
| Monitor clocks in the waveforms' spectral lines | 2026-10-17 | open | Differences of the raw converter counts show lines from the monitor's analogue outputs: 240 Hz in arterial pressure and plethysmogram, and a 30 Hz family in the plethysmogram alone. Each measures a monitor clock against SNUADC. |
| SNUADC against the PC-stamped heart rate | 2026-10-17 | current | The Solar8000 heart rate is stamped by the recorder on arrival, so the delay from the ECG to it, on the ECG's raw sample count, ramps at the SNUADC clock's rate: −65.3 ppm, against −66.7 ppm from the stamp model. Two independent routes agree. |
| Paced ECG as an independent clock | 2026-10-17 | current | Fixed-rate pacing gives a clock the recording chain cannot touch. Timing paced beats on three timelines shows that each SNUADC step-mode correction loses about 18 ms of signal, and that nothing else breaks the sample stream. |
| Records out of order at SNUADC resets, and where the lost time goes | 2026-10-17 | current | At every SNUADC reset the five records after it are written out of order: two continue the old timing and three start the new. Put back in order, the waveform runs on with no samples missing; the 18–20 ms lost at each reset goes missing inside the last old-timing record, and an extra zero sample follows. |
| SNUADC stamp arithmetic | 2026-10-17 | current | Between corrections the SNUADC block stamps run −0.95 ppm against the sample count: each 0.2 s increment is about 0.19 µs short. This, not clock drift, is the "about −1 ppm" seen in frequent-correction mode. |
| The vitaldb package's loading conventions | 2026-10-17 | current | The vitaldb Python package sets time zero from the tracks loaded, places waveform blocks by rounding their stamps up to a sample, and lets overlapping blocks overwrite each other. Each choice moves or loses samples. |
| Time zeros and loaded subsets | 2026-10-16 | current | A VitalDB time "from the start" depends on which tracks were loaded: loading a subset moves the zero to that subset's first record, seconds or hours later. The arrhythmia database's annotations count from the full file's zero. |
| Rare devices against SNUADC | 2026-10-13 | current | CardioQ, EV1000, Vigileo and Vigilance each get a link to the SNUADC timeline: beat matching for the CardioQ, mean arterial pressure alignment for the EV1000 and Vigileo, and a long-window fit for Vigilance's averaged heart rate. |
| The SNUADC firmware | 2026-10-13 | current | The public SNUADC firmware explains the board's timing: it sends no time stamps, samples on its 16 MHz crystal, loses time rather than bunching samples after a stall, reads its channels one after another, and truncates its values. A predicted fault at the microsecond counter's wrap was not found in the data. |
| The cardiac artefact in the BIS EEG | 2026-10-12 | current | The BIS EEG carries a weak electrical trace of every heartbeat. Too weak for beat-by-beat matching, it shows clearly when averaged on the ECG's R peaks, and gives a second SNUADC–BIS timing reference that agrees with the bursts to about 16 ms. |
| How the monitors compute their numbers | 2026-10-12 | current | Recomputing each monitor numeric from its own waveform finds a short, simple algorithm for every one (a median, an exponential average or a time mean over 3–30 s) and a delay of 2–9 s behind the newest data it uses. No value is stamped before its data exist. |
| The PPG hardware delay and the adopted pulse arrival time | 2026-10-12 | current | VitalDB's raw ECG→PPG pulse arrival time is about 0.4 s longer than physiology. Splitting it into a hardware delay (one value for the release; One device delay for the PLETH across the release) and a physiological part needs an adopted value from studies that sampled ECG and PPG on one clock: about 270 ms for anaesthetised adults. |
| Shared bursts between the ECG and the EEG | 2026-10-12 | current | Electrocautery and muscle bursts appear in both the SNUADC ECG and the BIS EEG. Cross-correlating their envelopes gives the offset between the two devices' stamps every 10 minutes: about −0.8 s, in a sawtooth that follows both clocks' corrections. |
| The stamp sawtooth model for SNUADC and BIS | 2026-10-12 | current | Fitting each track's record stamps against its sample count as a drift with corrections (a sawtooth) puts SNUADC and BIS on one timeline without any artefact. Checked against shared bursts, the EEG–ECG timing error falls from about 790 ms on the recorded stamps to 33 ms with one constant per SNUADC mode in the pilot, and 42 ms over the whole release. |
| Arterial line accesses in the pressure waveform | 2026-10-11 | current | Flushes, zeroing and blood draws leave clear signatures in the arterial pressure. A detector finds them in the waveform alone (about one access per hour) and matches 77% of lab draws to an access within 15 minutes, against 26% for random times. |
| Clock corrections in every file | 2026-10-11 | current | A scan of all 6,388 files for the jumps where the recorder re-synchronises a device's stamps. Each device type has its own correction signature; only SNUADC and BIS correct clearly enough to measure their drift. |
| Arterial pressure as a check on the PPG correction | 2026-10-11 | current | Arterial pressure is sampled by the same converter but has no frame and no sawtooth, so every PPG slip leaves ECG→ABP unchanged. Against it, detected slips are 97–100% real and tier A leaves about 2 ms of drift mid-tooth. |
| The PPG's 30 Hz frame clock | 2026-10-10 | current | ECG and PPG fiducials resolve to one 2 ms sample, but PPG fiducials taken on raw samples lock to a hidden 33.3 ms frame grid. Scanning for it finds the oximeter's frame clock to about 1 ppm, a fixed fingerprint of each recording setup. |
| The PPG sawtooth and its correction | 2026-10-10 | current | The ECG→PPG delay creeps at 18–52 ppm and jumps up by one 33.3 ms frame at each slip, every 11–31 minutes. A tooth-by-tooth model removes it; where the correction is confident it is essentially exact on injected test data. |
Worked examples¶
| Example | Side | Status | Summary |
|---|---|---|---|
| Pulse arrival time against blood pressure, before and after synchronisation | time | draft | In 3,270 recordings, PAT tracks systolic pressure only once each pulse is paired with its own beat: the hourly correlation moves from a mean of −0.04 to −0.21 (88% of recordings negative), reproducing Ruffolo et al. 2025 in a second dataset; paired naively, PAT is a heart-rate signal. |
| Pulse arrival time in two correction steps | time | draft | The time from the ECG R wave to the pulse at the finger, as stored, after the PLETH's sawtooth is removed, and after its device offset is removed, smoothed by maximum likelihood, with the arterial line as the reference. |
| Pulse pressure variation gated by ventilator breaths | time | draft | Pulse pressure variation per ventilator breath, in 3,448 recordings: the ventilator's clock sits a median 1.8 s off the arterial line's, which moves half of all breaths' values by a point or more and scatters where in the breath the pulse pressure peaks; a recording's median PPV hardly changes. |