Skip to content

Error sources and randomness control

Lukas Winiwarter edited this page Feb 10, 2022 · 3 revisions

Error sources

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

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 noise

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.

Fullwave noise

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++.

Controlling Randomness

In order to reproduce simulation runs, (pseudo)random numbers are controlled using seeds. The process for seed generation is:

  1. If the argument --seed <seed> is specified, then in it used as seed.
  2. If no --seed argument is specified, the seed attribute of the survey element at the survey XML is used.
  3. 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.