Electronic-nose lore treats the sensor as a transducer with one number per sample. The measured reality is messier: after an exposure ends, a metal-oxide array does not simply snap back. It remembers — on two timescales — and what it remembers changes the next reading. If you do not understand that memory, your baselines drift, your features lie, and your anomaly detector cries wolf on clean air.

This essay is the public record of a controlled memory audit on the dynamic-mixtures ground-truth schedule (two 12-hour files, per-second ppm labels, four TGS families). Every number below is reproducible via the open benchmark suite.

Recovery Is Bi-Exponential, Not Exponential

Given an exposure tail, which model describes the return to baseline — one exponential decay, or two? We fitted both to every air tail and selected by AIC (Gaussian-noise criterion). The result was stark: 97% of fitted tails require the two-exponential model. A single-exponential memory model is wrong for this array, by measurement.

FamilyFraction needing bi-exponentialτ_fast (median)τ_slow (median)
TGS26001.00 / 1.0015–25 s60 s
TGS26020.889 / 0.89725 s60 s
TGS26100.994 / 1.008 s45 s
TGS26201.00 / 1.0015 s45 s

Two families of timescales, consistently across files: a fast component (τ ≈ 8–25 s) that dominates the first half-minute, and a slow component (τ ≈ 45–60 s) that controls anything past a minute. This is not a curve-fitting curiosity — the slow component is exactly what sits underneath the false positives below.

A Shorter Clean Gap Lowers the Next Response

The dataset's schedule lets us hold the chemistry fixed — identical (gas, ppm), repeated — and vary only one thing: how long the clean air gap before the exposure lasted. Across configs, the response-vs-gap correlation is negative:

  • ethylene/CO file: median correlation −0.361 (75% of configs negative).
  • ethylene/methane file: median correlation −0.414 (62% of configs negative).

Meaning: the shorter the clean gap, the lower the next response, in most device families. A recorded amplitude is therefore not just "how much gas was present"; it is "how much gas, given what came before." Any feature that ignores the gap inherits that confound.

Priming Is Real but Not a Single Number

Does an exposure that follows the same exposure (A→A→A) respond differently from one that follows a different exposure (A→B→A)? Yes — the self-priming delta is +0.152 on average, and self > cross in 27 of 32 config-channel groups. One honest caveat: in the remaining groups the direction flips, so priming is gas- and device-specific. A memory-aware system must learn priming per channel; it cannot assume one global sign.

The Consequence: Most Detector False Positives Are Memory

If memory is real, then a detector that scores "how far is this from baseline" will trip on residual memory as if it were an event. We ran the production residual axes (Kalman innovation, latent-Δ, EWMA level, fused max-|z|) over the ground-truth schedule and binned every clean-air alarm by the time since the previous exposure ended.

Clean-air floorFP rate (median)
After ≥60 s of air (the "deep-clean" floor)0.36
After ≥300 s of air (truly recovered)0.054

Fused-detector memory excess: +0.216 median. In words: 62% of the residual false-positive rate is physical memory residue, not algorithm noise. And the FP-vs-gap curve peaks at 30–60 s post-exposure — exactly on the slow recovery component — before collapsing by 300 s.

The 300-Second Rule

The measured implication is a deployment rule, not a recommendation:

  • Any residual-axis detector needs a minimum inter-event spacing of 300 s of clean air, or it must down-weight alerts inside that window with a memory-confidence flag.
  • Improving the Kalman/EWMA filter further is near-payoff-less; the false positives the users actually see are physical.
  • Baselines must be recomputed per session against ≥300 s of clean air. A naive R/R₀ against a memory-corrupted R0 is the one normalization mistake that injects session noise (the topic of the session-invariance essay) — this memory audit is the root cause of that pathology.

The good news: memory is measured, bounded, and correctable. It is not a black box — it is a bi-exponential state with known τ's, a known 300 s horizon, and a known fallback (the safe-gap rule). The bad news: none of it is optional. Every deployed baseline that ignores it is quietly counting memory as signal.

Sources & Further Reading

  • benchmarks/bench_dynamic_memory.py + reports/bench_dynamic_memory.json — the W1 memory audit (gap correlation, priming, bi-exponential selection).
  • benchmarks/bench_detector_memory_fp.py + reports/bench_detector_memory_fp.json — the W2 false-positive decomposition and the two-floor measurement.
  • The interoperability-normalization-theorem essay — why naive R/R₀ fails (measured 37.5%), and what real normalization requires.
  • The evaluating-e-nose-models essay — how honesty rules keep baseline claims testable.