-
Notifications
You must be signed in to change notification settings - Fork 44
Error sources and randomness control
HELIOS++
supports different sources of error in geometry and radiometry. They correspond to simple models of reality, where noise is introduced at platform, leg and ranging levels. These noise types influence the geometry of the resulting point cloud in systematic or random fashion.
Additionally, fullwave noise adds noise to the bins of the fullwave measurements prior to export. It can be enabled by using the --fullwaveNoise
parameter.
Platform noise concerns the position and the attitude, and is specified in the platform XML file.
<positionXNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.02"/>
<positionYNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.02"/>
<positionZNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.02"/>
<attitudeXNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.001"/>
<attitudeYNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.001"/>
<attitudeZNoise
clipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"
type="NORMAL" mean="0.0" stdev="0.001"/>
It can be sampled from a normal distribution (type="NORMAL"
) with a given mean
and standard deviation (stdev
) or from a uniform distribution (type="UNIFORM"
) with a given min
and max
.
It is possible to clip sampled noise values by setting clipEnabled="true"
inside the noise tag. The clip values can then be specified using clipMin
and clipMax
.
If fixedLifespan=="0"
, a computed noise value will be computed one time and used for consecutive noise values. If fixedLifespan="1"
, the value does not behave like a fixed value and will be renewed between each pair of consecutive uses. Having fixed enabled (fixedLifespan > "1"
) means a noise value will be computed one time and whenever the next noise value is requested the previously computed fixed value will be returned, as long as its lifespan has not expired yet.
To disable platform noise even if specified in the XML file, use the --disablePlatformNoise
flag when calling a simulation.
Ranging measurements are subject to noise due to detector accuracy, resolution and sensitivity. The scanner XML file supports the attribute accuracy_m
, which corresponds to the standard deviation of the ranging measurement. If no accuracy_m
is specified, a default value of 0.003 m
is used.
Noise to the full waveform can be enabled using the --fullwaveNoise
argument. Noise values are sampled from a normal distribution with mean = 0.0 and a standard deviation of half of the scanners ranging accuracy. The noise is only added to the exported waveform data, and does not influence the peak detection or echo width determination within HELIOS++
.
In order to reproduce simulation runs, (pseudo)random numbers are controlled using seeds. The process for seed generation is:
- If the argument
--seed <seed>
is specified, then in it used as seed. - If no
--seed
argument is specified, the seed attribute of the survey element at the survey XML is used. - If no seed is specified through XML either, the simulation is using a randomly computed seed.
The seed can be an integer number, a decimal number or a string timestamp with format "YYYY-MM-DD hh:mm:ss"
Despite controlling the seed for random numbers, the concurrent nature of the simulation still generates output with no guaranteed order. By limiting the number of jobs to 1, the order is guaranteed and the output should be exactly the same for different executions. The number of jobs can be specified using -j
or the equivalents --njobs
or --nthreads
. If no -j
argument is specified or if it is set to 0, all possible threads are used.