← Eggert Gudmundsson Projects

LiDAR ranging · window transmission characterization

Window Transmission

Two 31-frame series on the same bench scene, no window vs a ZnS IR window in front of the sensor. The window cuts returned signal by roughly half at the VL53L8CX's 940 nm ranging wavelength — and the reported distance barely moves. Ranging is robust to this loss; it costs confidence, not correctness.

Part
ST VL53L8CX, 8×8 zones, SATEL-VL53L8 breakout
Device
cali.EGG68 (nRF9151), shared I²C bus with Grid-EYE
Window
UQG ZSW-132 ZnS-MS, uncoated, Ø13×2 mm
Scene
bench ceiling (~1.8 m) + nearby shelving, unchanged between runs
Frames
31 + 31 (one dropped read per series), ~0.5 s apart
Fields
distance_mm, signal_per_spad, range_sigma_mm, ambient_per_spad, reflectance

Summary

Every zone's returned signal drops with the window in place, every zone's distance-measurement noise rises with it, and every zone's reported distance stays where it was. The three move together exactly as a pure transmission loss predicts: weaker return, noisier estimate, same answer.

Signal (signal_per_spad)

−46.6%

median, all 64 zones

Distance noise (range_sigma_mm)

+44.9%

median, all 64 zones

Reflectance (estimated)

−45.2%

algorithm reads the loss as target reflectance

Reported distance

+0.4%

~16 mm — unchanged

The setup

Same bench scene both runs — the sensor faces a ceiling roughly 1.8 m away, with nearby shelving entering the field of view at an angle, so the 64 zones span both a far, uniform surface and a closer, harder edge. Nothing else in the rig changed between series: only the window, added between the first and second capture. Each series is 31 successful cal tof raw reads (one read failed per series, unrelated to the window — both series otherwise clean). Per-zone values below are the mean across the 31 frames.

The window is a ZnS disc already in service on the Grid-EYE side of this project, chosen and characterized there for its long-wave IR transmission. It was never selected for 940 nm — this run is the first direct measurement of how it performs at the LiDAR's actual wavelength.

Signal, noise, distance

Each panel plots one metric, no-window on the x-axis against with-window on the y-axis, one point per zone (mean of 31 frames). A point on the dashed line means the window changed nothing; below it means attenuation, above it means an increase.

Three scatter panels, each plotting a metric with window on the y-axis against without window on the x-axis, one point per zone, with a dashed y=x reference line. Panel a: returned signal, every point falls well below the line, roughly half. Panel b: distance noise, every point falls above the line. Panel c: reported distance, every point sits tightly on the line.
64 zones, 31-frame mean each. a. Signal drops consistently across the whole dynamic range, from the weak far-ceiling zones up to the strong near-field ones. b. Noise rises with it, same pattern. c. Distance holds — every point sits on the line from 0.5 m out to 1.8 m.

The consistency is the finding, not just the average. Every single zone moved the same direction in panels a and b — this is not a few bad readings pulling a mean around, it is the window doing the same thing everywhere in the frame.

Reading the numbers together

Signal and reflectance dropped by almost the same amount (−46.6% and −45.2%). That is not a coincidence: the ULD firmware estimates reflectance from the returned signal at a given range, and it has no way to tell “the target got less reflective” apart from “something in the path absorbed the return.” A window in front of the sensor reads as the second one but gets reported as the first. Ambient light dropped too (−21.5%), consistent with the same window attenuating background IR along with the VCSEL return, just by a smaller fraction — ambient light isn't collimated through the window on the same path the ranging return takes.

None of that moved the distance. range_sigma_mm is the sensor's own per-target noise estimate, and it rose right where the signal fell — the firmware is correctly reporting lower confidence, not silently degrading the answer. A ~50% signal loss is well inside what this sensor's ranging algorithm can absorb without the reported distance moving.

What this means for the window choice

This ZnS window is a broadband compromise: it has to work across the Grid-EYE's long-wave IR band, not just the LiDAR's single 940 nm line. Uncoated ZnS has a refractive index near 2.2, so two uncoated surfaces alone predict roughly 25–30% Fresnel reflection loss; the rest of the measured ~46% is likely bulk absorption/scattering outside the band this material was actually chosen for.

A window picked specifically for 940 nm — narrowband, ideally AR-coated for that line — could get much closer to the >95% transmission an uncoated broadband material can't reach, at the cost of no longer sharing one window across both sensors. Worth scoping once the two-sensor mechanical design is far enough along to know whether a shared window is still the plan. Whatever it ends up being, it needs to be waterproof — this is a sewer-deployment platform.

Method & caveats

  • Part: ST VL53L8CX, ULD driver, 8×8 resolution, NB_TARGET_PER_ZONE = 1. Target status read a uniform 6 across every zone in both series — the ULD header comments 5 and 9 as “OK,” not 6; not yet resolved against the fuller status-code table, but consistent and physically coherent in both runs regardless.
  • One read failed in each 32-attempt series (31/32 both times) for reasons unrelated to the window — occasional transient read failures, not a pattern tied to either condition.
  • Bench scene, not a controlled radiometric target: the ceiling and shelving are whatever reflectance they happen to be, not a calibrated reference panel. The comparison is still valid because it's the same scene, unmoved, between the two series — only the window changed.
  • Per-zone values are the 31-frame mean; no attempt yet to separate frame-to-frame noise from the window effect itself, since the noise increase (panel b) is itself part of what's being characterized here.
  • Single window sample, single distance, single incidence angle (the window sits flat against the sensor face). Angle- and distance-dependence of the transmission loss are both open.

Data: 31-frame series each, no-window and with-window, matched bench scene, 2026-09-19. Raw per-zone series (distance_mm, target_status, signal_per_spad, range_sigma_mm, ambient_per_spad, reflectance × 64 zones × 31 frames) held in the device project repository, not published here.