Some checks failed
CI / lint-and-test (push) Has been cancelled
Move content to correct locations: - AGENTS.md → .agents/AGENTS.md (with orchestrator reference update) - third_party/docs/ (8 reference docs) → wiki/concepts/ - manuals/ (12 Node-RED docs) → wiki/manuals/ Delete 23 unreferenced one-off scripts from scripts/ (keeping 5 active). Delete stale Dockerfile.e2e, docker-compose.e2e.yml, test/e2e/. Remove empty third_party/ directory. Root is now: README, CLAUDE.md, LICENSE, package.json, Makefile, Dockerfile, docker-compose.yml, docker/, scripts/ (5), nodes/, wiki/, plus dotfiles (.agents, .claude, .gitea). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.8 KiB
5.8 KiB
Sensor Signal Conditioning & Data Quality
Used by:
instrumentation-measurementagent,measurementnode Validation: Verified against IEC 61298, sensor manufacturer literature, and signal processing references
Signal Conditioning Pipeline
Raw Signal → Scaling → Filtering → Outlier Rejection → Quality Flagging → Output
Scaling: Engineering Unit Conversion
4-20 mA Standard
value = range_min + (I - 4) / (20 - 4) · (range_max - range_min)
Where I is the measured current in mA.
Key Rules
- 0 mA = wire break (fault condition)
- < 4 mA = under-range or fault
- 4 mA = range minimum (0%)
- 20 mA = range maximum (100%)
-
20 mA = over-range or fault
- NAMUR NE43 recommends 3.8 mA and 20.5 mA as fault thresholds
Filtering Methods
Moving Average
y[k] = (1/N) · Σ x[k-i] for i = 0 to N-1
- Simple, effective for white noise
- Introduces phase lag proportional to (N-1)/2 samples
- Good for steady-state signals, poor for fast transients
Exponential Moving Average (EMA)
y[k] = α · x[k] + (1-α) · y[k-1]
Where α = 2/(N+1) or α = Δt/(τ + Δt) for time-constant-based tuning.
- Less memory than moving average
- Equivalent to first-order low-pass filter
- τ (time constant) sets the cutoff frequency: f_c = 1/(2π·τ)
Savitzky-Golay Filter
- Fits a polynomial to a window of data points, uses the polynomial value as the filtered output
- Preserves higher-order moments (peaks, edges) better than moving average
- Configurable by window size and polynomial order
- Typical: window = 5-11 points, order = 2-3
Outlier Detection
Z-Score Method
z = |x - μ| / σ
outlier if z > threshold (typically 3.0)
- Assumes normal distribution
- Sensitive to the outliers themselves (they inflate σ)
Modified Z-Score (MAD-based)
MAD = median(|x_i - median(x)|)
modified_z = 0.6745 · (x - median(x)) / MAD
outlier if |modified_z| > threshold (typically 3.5)
- Robust to outliers (uses median instead of mean)
- Recommended for process measurements where occasional spikes are common
- 0.6745 is the 75th percentile of the standard normal distribution
IQR Method
Q1 = 25th percentile, Q3 = 75th percentile
IQR = Q3 - Q1
outlier if x < Q1 - 1.5·IQR or x > Q3 + 1.5·IQR
- Non-parametric, no distribution assumption
- Common in exploratory data analysis
- Less suitable for real-time streaming (needs window of data)
NRMSE for Drift Detection
Normalized Root Mean Square Error compares a recent measurement window against a reference window to detect sensor drift.
Calculation
RMSE = √(Σ(x_i - x_ref_i)² / N)
NRMSE = RMSE / (x_max - x_min) or RMSE / x_mean
Thresholds (typical for process sensors)
| NRMSE Range | Quality | Action |
|---|---|---|
| 0 – 0.05 | Good | Normal operation |
| 0.05 – 0.15 | Uncertain | Flag for review, increase monitoring |
| 0.15 – 0.30 | Poor | Alarm, reduce weight in control loops |
| > 0.30 | Bad | Remove from control, maintenance required |
Reference Window Selection
- Calibration data (gold standard)
- Post-maintenance baseline
- Rolling reference from a known-good period
- Multi-sensor cross-validation
Sensor Accuracy Classes
IEC 61298 Framework
IEC 61298 "Process measurement and control devices — General methods and procedures for evaluating performance" defines standardized test methods for evaluating sensor accuracy under reference and influence conditions.
Key Performance Metrics
- Accuracy: Closeness of measured value to true value (includes systematic and random errors)
- Repeatability: Closeness of successive measurements under identical conditions
- Hysteresis: Maximum difference between upscale and downscale readings
- Linearity: Maximum deviation from a straight line between zero and span
- Deadband: Smallest change in input that produces a detectable output change
Common Accuracy Specifications
| Sensor Type | Typical Accuracy | Response Time |
|---|---|---|
| Pressure transmitter | ±0.04 – 0.1% FS | < 100 ms |
| Flow meter (electromagnetic) | ±0.2 – 0.5% of reading | 1-3 s |
| Temperature (RTD/Pt100) | ±0.1 – 0.3°C | 5-30 s (depends on housing) |
| Level (ultrasonic) | ±0.25% FS | 1-5 s |
| pH | ±0.02 – 0.1 pH | 10-60 s |
| Dissolved oxygen | ±1-2% of reading | 30-90 s (membrane) |
| Turbidity (nephelometric) | ±2% of reading | 5-15 s |
| Ammonia (ion-selective) | ±5-10% of reading | 60-180 s |
Sensor States and Warmup
State Machine
Maintenance → Warmup → Active → Cooldown → Maintenance
Warmup Behavior
- Duration: Varies by sensor type (seconds for pressure, minutes for pH, hours for dissolved oxygen)
- During warmup: Measurements flagged as "uncertain" quality
- Completion criterion: Readings stabilize within defined tolerance for a minimum duration
- EVOLV convention: Warmup state prevents measurements from propagating to control loops
Stabilization Detection
stable if std_dev(last_N_readings) < threshold for T_stable seconds
Authoritative References
- IEC 61298 series (2008). "Process measurement and control devices — General methods and procedures for evaluating performance"
- IEC 61326-2-3. "Electrical equipment for measurement, control and laboratory use — EMC requirements — Part 2-3: Particular requirements — Transducers with integrated or remote signal conditioning"
- NAMUR NE43 (2003). "Standardization of the Signal Level for the Failure Information of Digital Transmitters"
- Bently Nevada / Baker Hughes. "Fundamentals of Rotating Machinery Diagnostics"
- Oppenheim, A.V. & Willsky, A.S. (1997). "Signals & Systems" 2nd ed., Prentice Hall
- Press, W.H. et al. (2007). "Numerical Recipes" 3rd ed., Chapter 14 (Savitzky-Golay filters)