Hi,
Thank you for your detailed observations. These are very relevant questions, especially when using the VL53L8CX for research or for building a more advanced application.
Based on the VL53L8CX datasheet and user manual, the different output features should not be interpreted as if they all described the same physical quantity. A better way is to group them into categories:
measurement validity / reliability: target_status, range_sigma_mm
target return / target appearance: signal, reflectance
background / environment related: ambient
multi-target structure: nb_target
spatial post-processing: sharpener
frame-to-frame variation: motion indicator
Below is a summary addressing each of your points.
1) Sigma
Your observation is generally correct.
sigma is one of the most useful indicators for filtering noisy or unstable results.
- lower sigma usually means a more stable and more reliable target
- higher sigma usually means weaker confidence, more noise, or more difficult conditions
In practice, a common approach is:
- check target_status
- then use sigma as a quality filter
So your conclusion that sigma is one of the most reliable noise filters is reasonable.
2) SPAD
number of SPADs enabled is not a direct reflectance value.
According to the user manual, a far or low-reflective target can activate more SPADs.
So SPAD count is better used as a supporting indicator, not as a direct “high reflectivity” measurement.
It may sometimes help visualize strong-return zones, but it should not be interpreted as a direct reflectivity map.
3) Reflectance and Signal
These two are related, but they are not the same:
- signal is closer to the measured return strength
- reflectance is an estimated target reflectance percentage derived by the algorithm
So:
- signal is more like return intensity
- reflectance is more like interpreted target reflectivity
This is why they are often complementary, but not always perfectly correlated.
4) Ambient
ambient should be understood mainly as a background/environment-related contribution, not as a direct target feature.
According to the manual, ambient is measured on the SPAD array without active VCSEL emission, in order to estimate background signal/noise.
Therefore:
- it is affected by ambient light and background contribution
- it can also vary with white/black objects due to scene reflectance and lighting conditions
- it will not always directly match signal or reflectance
So yes, ambient is more related to the environment and background illumination than to target reflectance alone.
5) nb_target
This is one of the most important clarifications.
nb_target does not mean that 4 signals are sent per zone.
It means that the algorithm can detect and report up to N distinct targets in the same zone, if multiple returns are separable.
According to UM3109:
- the VL53L8CX can detect up to 4 targets per zone
- this is based on histogram processing and multi-target separation
- the minimum distance between 2 targets to be detected is about 600 mm
If you configure nb_target_per_zone = 1, only one target is reported per zone, depending on the selected target order:
- closest
- strongest (default)
The other per-target outputs such as distance, signal, reflectance, sigma, and status correspond to the target(s) that are actually retained and reported.
So it is not “4 transmitted signals”, but “up to 4 detected targets in one zone”.
6) Motion
motion indicator is not a simple binary “motion / no motion” flag.
According to the manual, it is computed from sequential frame variations, and the motion field contains a motion intensity value.
This means:
- non-zero values can appear even in a static setup
- it is influenced by integration time, target distance, reflectance, and scene variation
- a constant 255 or unusual behavior on some zones does not automatically mean a faulty sensor, but it may require further investigation
Typical motion values are usually in the range of about 100 to 500 for real motion events.
So motion is better used as a context / variation indicator, not as a standalone motion truth flag.
7) Status
target_status is actually one of the most important outputs and should not be ignored.
The manual explicitly defines the meaning of the status codes. In particular:
- 5 = Range valid
- 6 or 9 = still usable with lower confidence
- 255 = No target detected
The document recommends using:
- status 5 as high confidence
- status 6 or 9 as medium confidence
- all others as lower confidence
So in a practical application, target_status should be one of the first filters applied.
8) Sharpener
sharpener is not expected to directly change all feature values in a simple way.
Its role is to reduce signal spreading across neighboring zones and improve target edge separation.
As described in the manual, returned pulses are not perfectly sharp, and the sharpener helps reduce veiling glare / edge spreading.
So, its effect is mainly visible in:
- target boundary sharpness
- reduced spreading into adjacent zones
- better spatial separation
rather than in direct one-to-one changes in signal, reflectance, or sigma.
In short:
sigma and target_status are the best filters for result quality
signal and reflectance help characterize the target
ambient is more of a background/environment feature
nb_target is about multi-target detection, not “number of emitted signals”
motion is a frame-to-frame variation indicator
sharpener is a spatial post-processing feature affecting edge separation, not a direct feature-value scaler.
Here is the user manual link that you can refer to: A guide for using the VL53L8CX, low-power, high-performance Time-of-Flight multizone ranging sensor - User manual
Best regards,
Bin FAN