Sensor Event Detection, Cross-Channel Correlation, and Binary Integrity Diagnostics for Time-Series Sensor Data
| Sensor | Samples | Units | Color | Raw Int | Enabled | Hidden | Actions |
|---|---|---|---|---|---|---|---|
| No channels loaded — import data above. | |||||||
How This Tool Works
This tool runs entirely in your web browser. No data leaves your machine — everything is processed locally using JavaScript. There is no server, no upload, and no account required. Simply import your data and the tool analyzes it on the spot.
The general processing pipeline works in three stages:
- Import: Load time-series sensor data from a spreadsheet file (.xlsx/.csv) or by pasting raw binary or hex-encoded samples. Each column of data becomes a channel in the Sensor Manager.
- Detection: Once you set your detection parameters (Threshold, Min Duration, Min Height, Debounce) and click Run Detection, each enabled channel is scanned independently. Detection runs in a background Web Worker thread so the page stays responsive during computation.
- Analysis: Detected events are shown in the Event Table, summarized in the Output Properties panel, and visualized in the Spike Explorer and Time Plot tabs. For channels flagged as raw integers, the Bit Plot tab provides bit-level integrity diagnostics.
Supported Import Formats
Accepted file extensions: .xlsx, .xls, .csv. Parsing is handled by SheetJS (xlsx library), running locally in the browser.
After selecting a file, a column preview appears showing the first 10 rows. Use the dropdown above each column to assign its role:
- Timestamp — one column only; treated as the x-axis for all channels.
- Sensor Channel — any number of columns; each becomes an independent channel in the Sensor Manager.
- Ignore — column is excluded from import.
Auto-assignment applies when headers match (case-insensitive): Timestamp, Sensor A, Sensor B, Sensor C, etc. Override freely with the dropdowns. Click Confirm Import when satisfied. Importing a second file adds new channels without replacing existing ones.
Paste raw data directly into the text box. The tool auto-detects format:
- Binary string: a string of
0and1characters, e.g.0100110101100001 - Prefixed hex: hex pairs with
0xprefix, e.g.0xA2 0x3C - Bare hex: continuous hex characters (A–F, 0–9), e.g.
A23CF400
Select the data type and endianness before converting. Supported types:
uint8 — 1 byte unsigned
int8 — 1 byte signed
uint16 — 2 bytes unsigned
int16 — 2 bytes signed
uint32 — 4 bytes unsigned
int32 — 4 bytes signed
float32 — 4 bytes IEEE 754
float64 — 8 bytes IEEE 754
Set Sample Rate (Hz) to assign real timestamps (index / sampleRate seconds). Without it, samples are indexed 0, 1, 2… The sample rate is important for meaningful timing statistics in the output panel.
Event Detection Parameters Explained
The absolute sample value above which the detector is "armed." Any sample with value > Threshold is considered above the threshold. If a channel's values are all below this number, no events will be detected.
Choose a threshold by eyeballing your data in the Time Plot, or by starting with a value slightly above the typical noise floor.
The minimum number of contiguous above-threshold samples (or milliseconds if you select ms units) that must occur before the segment is recognized as an event. This filter rejects brief noise spikes that momentarily cross the threshold.
Example: if Min Duration = 3 samples, a 2-sample blip above threshold is ignored, but a 4-sample run above threshold is detected as an event.
The minimum peak value above baseline within the above-threshold region. Baseline is computed as the mean of the samples just before and just after each candidate event window (local average). Events whose peak doesn't exceed baseline + Min Height are discarded.
If two detected events are separated by fewer than this many samples (or milliseconds), they are merged into a single event. The merged event spans from the start of the first to the end of the second, and the peak is taken as the higher of the two original peaks.
This is useful when a single physical event causes brief sub-threshold dips in the middle, which would otherwise split it into two separate events.
Bit-Level Diagnostics Explained
For each bit position (bit 0 = LSB through bit N-1 = MSB, where N is the type's bit width), bit occupancy measures the fraction of samples where that bit is 1:
A healthy ADC or sensor should show occupancy near 0.5 for mid-range bits. Bits that are always 0 or always 1 may indicate a stuck bit, saturation, or a resolution problem. Very low occupancy on upper bits is expected for signals that don't use the full dynamic range.
The fraction of consecutive sample pairs where a given bit changes state:
A bit that never toggles (rate = 0) is stuck. A bit that always toggles (rate = 1) is either noise-dominated or driven by a toggle pattern. Expected rates vary by bit position — lower bits toggle more frequently in a counting sequence.
The Hamming distance between two consecutive integer samples is the number of bit positions that differ between them:
The histogram shows how often each distance (0 through bit-width) occurs across all consecutive pairs. A spike at distance 1 in otherwise large-jump data may suggest isolated bit flips. Systematic spikes at specific distances can reveal encoding artifacts.
Computes the absolute difference between each consecutive sample pair and flags any difference whose absolute value is exactly a power of two (1, 2, 4, 8, 16…):
A power-of-two jump is the direct signature of a single-bit flip in a binary-encoded value. The Bit Occupancy table shows a count of flagged jumps per bit position (a jump of 2^k flags bit k). A red badge with a non-zero count warrants investigation of that bit position.
Glossary & Formula Reference
| Field | Definition |
|---|---|
start | Timestamp of first above-threshold sample |
peak | Timestamp of maximum value within the event |
end | Timestamp of last above-threshold sample |
duration | end − start |
height | Peak value minus local baseline |
area | Trapezoidal integral over start…end, baseline-subtracted |
rise | peak − start (in same units as timestamps) |
fall | end − peak |
Where baseline is the local mean computed from samples outside the event window. If timestamps are just sample indices (no sample rate set), Δt = 1 for all pairs and area is in units of (value · samples).
Applied iteratively: after merging a pair, the result is immediately checked against the next event. This means a series of closely-spaced events can cascade-merge into one.
Where pk is the probability of value k in a rolling window. A fully random signal has maximum entropy (log2(N) for N possible values). The Entropy Monitor is scheduled for a future update.