Load-cell measurement chain
Executed calibration, filter and uncertainty analysis using declared synthetic data. No physical calibration has been performed.
Result
A 25-sample moving average at 100 Hz reduces the modeled white-noise standard deviation to 0.403 g. A noise-free 5 kg step settles within 5 g after 0.24 s.
In the baseline budget with independent temperature terms, the combined standard uncertainty at 5 kg is 1.780 g under the stated bounds. The k = 2 expanded value is 3.560 g. This is far larger than the ideal ADC code increment of 0.00233 g.
Inputs and signal chain
- 10 kg bridge, 2 mV/V sensitivity, 5 V excitation; reference 24-bit ADC with 2.5 V reference and gain 128
- 100 Hz acquisition; 2 µV RMS independent white noise; positive 0.02 g/s drift; every trace and calibration sample is synthetic
- Residual nonlinearity ±2 g, hysteresis ±1 g, temperature-zero ±1.5 g, temperature-span ±0.01% of reading over 10 °C; these are assumed uncertainty bounds
Bridge differential output → matched analog low-pass/input protection → ratiometric PGA/ADC → two-parameter calibration → causal digital filter. Excitation and reference should track; this model assumes their ideal ratio and budgets remaining span drift separately. No physical circuit is included.
| item | value | unit |
|---|---|---|
| Rated 10 kg signal | 10.0 | mV |
| 12 kg overload signal | 12.0 | mV |
| ADC positive differential full scale | 19.53125 | mV |
| Overload differential margin | 7.53125 | mV |
| Ideal code increment at nominal sensitivity | 0.0023283064365386963 | g |
| Single-reading standard uncertainty at 5 kg | 1.7800266281621322 | g |
| Expanded uncertainty, k = 2 | 3.5600532563242644 | g |
Calibration
The code fits 180 generated readings at six mass levels. The fitted sensitivity is 1.00040339 µV/g and offset is 30.02390 µV. The calibration trace contains independent white noise; the later load trace adds a separate nonlinear error and drift.
Slope and intercept covariance is propagated together through m = (V − b)/s. Treating them as independent would overstate the calibration contribution around the middle of the span.
Filter comparison
| filter | single_reading_noise_std_g | step_settling_to_5g_s | final_10s_mean_error_g | causal |
|---|---|---|---|---|
| Raw | 1.99327 | 0.0 | 3.04096 | True |
| MA 10 | 0.63328 | 0.09 | 3.04068 | True |
| MA 25 | 0.40305 | 0.24 | 3.03985 | True |
| MA 50 | 0.28809 | 0.49 | 3.03969 | True |
| EMA 0.1 s | 0.44933 | 0.69 | 3.04055 | True |
| EMA 0.3 s | 0.26251 | 2.07 | 3.03743 | True |
Noise uses 100,000 separately generated samples, excluding 1,000 startup samples. Each result describes a single filtered reading; adjacent moving-average readings are correlated. The final 10 s mean error includes systematic effects and is not a repeatability estimate.
Baseline uncertainty: independent temperature terms
| component | standard_uncertainty_g | variance_g2 | distribution | basis |
|---|---|---|---|---|
| Filtered single-reading repeatability | 0.4030533544254948 | 0.16245200651364353 | normal | Synthetic white-noise trace; not the uncertainty of the mean |
| Calibration fit (slope/intercept covariance) | 0.15343512982998966 | 0.023542339065945782 | normal | OLS covariance; correlated parameters propagated together |
| Reference masses | 0.05 | 0.0025000000000000005 | normal | Assumed standard uncertainty, not a weight certificate |
| Residual nonlinearity | 1.1547005383792517 | 1.3333333333333337 | rectangular | Assumed symmetric bound |
| Hysteresis | 0.5773502691896258 | 0.3333333333333334 | rectangular | Assumed symmetric bound |
| Temperature zero shift | 0.8660254037844387 | 0.7500000000000001 | rectangular | Assumed bound over declared temperature excursion |
| Temperature span shift | 0.2886751345948129 | 0.08333333333333336 | rectangular | Assumed fraction of reading |
| 60 s drift | 0.6928203230275509 | 0.48 | rectangular | Assumed symmetric bound; trace uses positive ramp as one stress case |
| ADC rounding | 0.0006718531532528146 | 4.513866595357499e-07 | rectangular | Quantization interval; ENOB and analog noise are separate |
Verification and limits
All 18 tests pass, including exact calibration recovery, Monte Carlo covariance propagation, filter causality, analytic EMA response, moving-average noise gain, drift preservation and zero-tracker gates.
- No physical bridge, ADC board or calibration masses were measured. These results validate the analysis code under stated synthetic conditions.
- Differential ADC headroom is calculated; common-mode input range, excitation/reference tracking, analog anti-alias filtering, EMI, mounting and overload survival need actual component and installation checks.
- The baseline budget assumes independent components except for fitted slope/intercept covariance. The separate virtual-validation report also evaluates shared temperature error; its expanded uncertainty is higher.
- k = 2 is an illustrative expanded uncertainty, not a certified 95% coverage claim. The Type B bounds must be replaced by evidence before using the budget for acceptance.
- Zero tracking is disabled in the reported measurements. The optional tracker requires external empty-pan confirmation; it cannot distinguish drift from a small real load if that confirmation is wrong.
Reproduction and method source
python -m pip install -r requirements.txt python run.py python -m unittest -v
Method: NIST TN 1297, Appendix A. It supplies the covariance propagation and rectangular-distribution treatment. The numerical bounds here are declared project assumptions. See README.md and physical_calibration.md for file details and the unexecuted hardware procedure.
Virtual validation
Executed synthetic and theoretical run-through. The report includes cases, acceptance results and model boundaries.