Data Acquisition Systems
From analog signals to trustworthy digital data. Learn DAQ architecture (multiplexer, PGA, sample-and-hold, ADC), resolution, LSB, quantisation noise, SNR and ENOB, sampling theorem, aliasing and anti-alias filters, multiplexed vs simultaneous sampling, single-ended vs differential inputs, triggering, buffering, timestamps, and data-logging practice — with Python for resolution, ENOB and aliasing.
A data acquisition (DAQ) system measures many channels, converts them to numbers and stores or transmits them: test benches, vibration analysers, lab experiments, SCADA RTUs and PLC analog cards are all DAQ systems.
Choosing the right resolution, sample rate and input configuration determines whether the recorded data can be trusted. Aliasing in particular silently produces signals that do not exist.
An analogy
Sampling a signal is like filming a spinning wheel: film too slowly and the wheel appears to turn backwards (aliasing). The camera's frame rate must be more than twice the fastest motion you want to see.
DAQ architecture
Signals enter through terminals and signal conditioning, then a multiplexer selects one channel at a time, a programmable-gain amplifier (PGA) scales it, a sample-and-hold freezes it, and the ADC converts it. A timing engine controls sample rate and triggers; a FIFO buffer and bus (USB, Ethernet, PCIe) move the data to a computer or controller.
Resolution vs accuracy
Resolution is the smallest step (LSB); accuracy includes offset, gain error, non-linearity (INL/DNL), noise and drift. Datasheets give accuracy as ±(% of reading + % of range). Match input range to the signal: a 0.1 V signal on a ±10 V range wastes 99% of the codes — use the PGA.
Sampling and aliasing
Frequencies above f_s/2 fold back into the band 0…f_s/2 and cannot be separated afterwards. An analog anti-aliasing low-pass filter must attenuate them before the ADC. Delta-sigma ADCs oversample and include steep digital filters, making them ideal for vibration and audio; SAR ADCs are fast and suit multiplexed control inputs.
Input configurations and system design
Wiring and timing choices:
- Single-ended (RSE/NRSE) — cheap, only for large signals near ground
- Differential — rejects ground differences, for low-level or remote signals
- Multiplexed sampling introduces inter-channel skew and settling (ghosting) errors
- Simultaneous sampling (one ADC per channel) for phase-critical measurements
- Hardware timestamps, PTP/IEEE 1588 or GPS sync across distributed systems
- Data integrity: calibration records, metadata, lossless formats (TDMS, HDF5, CSV with units)
Formulas
- LSB size:
LSB = V_range / 2ᴺ - Quantisation noise (rms):
q_rms = LSB / √12 - Ideal SNR:
SNR = 6.02·N + 1.76 dB - Effective bits:
ENOB = (SINAD − 1.76) / 6.02 - Nyquist criterion:
f_s > 2·f_max (practice: 5–10× for time-domain shape) - Alias frequency:
f_alias = |f − k·f_s| (nearest integer k) - Aperture error:
ΔV ≈ 2πf·V_pk·t_aperture
Worked example: Temperature resolution
Given: 16-bit ADC, 0–10 V = 0–500 °C
Find: °C per LSB.
- 500 / 65536
Answer: 0.0076 °C per count
Worked example: Sample rate for vibration
Given: Bearing frequencies up to 5 kHz
Find: Minimum sample rate and filter.
- f_s > 2 × 5 kHz; practical 2.56× (FFT analysers)
Answer: ≥ 12.8 kS/s with an anti-alias filter at ~5 kHz
Worked example: ENOB
Given: SINAD 84 dB
Find: ENOB.
- (84 − 1.76)/6.02
Answer: 13.66 bits
Resolution, ENOB and aliasing
import math
# ADC resolution, quantisation noise and ENOB
Vref = 10.0
for bits in (12, 16, 24):
lsb = Vref / 2**bits
print(f"{bits}-bit: LSB = {lsb*1e6:10.3f} uV, ideal SNR = {6.02*bits+1.76:.1f} dB")
sinad = 84.0
print(f"measured SINAD {sinad} dB -> ENOB = {(sinad-1.76)/6.02:.2f} bits")
# Aliasing: 60 Hz sampled at 50 S/s appears at |60 - 50| Hz
fs, f = 50, 60
alias = abs(f - round(f / fs) * fs)
print(f"{f} Hz sampled at {fs} S/s aliases to {alias} Hz")
# 12-bit: LSB = 2441.406 uV, ideal SNR = 74.0 dB
# 16-bit: LSB = 152.588 uV, ideal SNR = 98.1 dB
# 24-bit: LSB = 0.596 uV, ideal SNR = 146.2 dB
# measured SINAD 84.0 dB -> ENOB = 13.66 bits
# 60 Hz sampled at 50 S/s aliases to 10 HzA '16-bit' card with 84 dB SINAD really behaves like a 13.7-bit converter. A 24-bit converter's 0.6 µV LSB is far below real noise — its benefit is dynamic range, not accuracy. Mains hum sampled too slowly turns into a fake 10 Hz oscillation.
Common mistakes
- Wrong: Sampling without an anti-alias filter. — Right: Filter below f_s/2 before the ADC.
- Wrong: Using the ±10 V range for a 50 mV signal. — Right: Select a matching range/PGA gain.
- Wrong: Single-ended inputs on long cables. — Right: Use differential inputs.
- Wrong: Assuming bits = accuracy. — Right: Check ENOB, INL, noise and calibration.
Applications
- Test & measurement: Engine, structural and environmental test rigs.
- Condition monitoring: High-rate vibration capture.
- SCADA RTUs: Remote logging of pipelines and substations.
- Research labs: Synchronised multi-channel experiments.
Key takeaways
- LSB = range/2ᴺ; SNR = 6.02N + 1.76 dB.
- ENOB reveals real performance.
- f_s > 2f_max plus anti-alias filtering.
- Differential and simultaneous sampling where it matters.
Going further
- Oversampling & decimation: Trading rate for resolution (+1 bit per 4×).
- Dithering: Adding noise to linearise quantisation.
- Edge DAQ: Local processing and MQTT/OPC UA publishing (IIoT).