Hello,
it seems your PulseWaves file makes use of several different PulseDescriptors:
[...]
descriptor_index 2 5
[...]
Below we look only at number 2 and number 5 (although 3 and 4 may also be used).
You can see that they both have a digitized outgoing waveform and that will not be able to be represented in LAS FWF. But okay. This information may be used to remove possible jitter in the timing of the shots to measure the exact outgoing peak to returning peak duration for correct ranging but that could be part of the PulseWaves to LAS FWF conversion process. The intensity of the outgoing shot would be lost in case there is also a jitter in the amount of photons emitted (to normalize the returning photons by the number of emitted ones) but that may be okay to omit for your application.
The both have a digitized returning waveform and the difference between number 2 and number 5 is that this returning waveform is digitized in 1 versus 4 separate segments. The pulse descriptors with index 3 and 4 are used for waveforms that are digitized in 2 or 3 separate segment. Digitizing a waveform in multiple segments is useful when there are large empty areas between the multiple hits of a single shot of photons. For example when you hit a bird at 50 meters above the ground, and a transmission wire at 25 meters above the ground, and a branch at 15 meters above the ground and then the ground, it may make sense to *not* store the many zeroes (or the many close to zeroes noise values) of the digitization but only a few samples before and after the actual interactions of the photons with some object.
The LAS FWF format does not support this. Here we would have to merge all those segments into a single segments and fill up the empty space between them with zeroes. Because the length of each digitized waveform is specified by one of 255 Waveform Packet Descriptors in the LAS header we will also need to pad that waveform in the beginning and/or the end as LAS FWF only supports a maximum of 255 different digitization lengths.
That pulse2pulse tool that does all these things, however,
does
not readily exist and it would require some effort to create this unless someone else has already done this. Anyone?
Regards from Costa Rica,
Martin
variable length header record 4 of 7:
reserved 0
user ID 'PulseWaves_Spec'
record ID 200002
length after header 300
description 'VLR Pulse Descriptor'
PULSEdescriptor 2
optical_center_to_anchor_point: 0x0 ('coincide')
number_of_extra_waves_bytes: 0
number_of_samplings: 2
sample_units: 1 [nanoseconds]
scanner_index: 1
compression: 0
description: 'Pulse Composition'
sampling[0]
type: 1 ('outgoing')
channel: 0
bits_for_duration_from_anchor: 32
scale_for_duration_from_anchor: 1
offset_for_duration_from_anchor: 0
bits_for_number_of_segments: 0
bits_for_number_of_samples: 16
number_of_segments: 1
number_of_samples: 0
bits_per_sample: 16
lookup_table_index: 0 ('undefined')
sample_units: 1.0 [nanoseconds]
compression: 0
description: 'Sampling Descriptor'
sampling[1]
type: 2 ('returning')
channel: 0
bits_for_duration_from_anchor: 32
scale_for_duration_from_anchor: 1
offset_for_duration_from_anchor: 0
bits_for_number_of_segments: 0
bits_for_number_of_samples: 16
number_of_segments: 1
number_of_samples: 0
bits_per_sample: 16
lookup_table_index: 0 ('undefined')
sample_units: 1.0 [nanoseconds]
compression: 0
description: 'Sampling Descriptor'
variable length header record 7 of 7:
reserved 0
user ID 'PulseWaves_Spec'
record ID 200005
length after header 300
description 'VLR Pulse Descriptor'
PULSEdescriptor 5
optical_center_to_anchor_point: 0x0 ('coincide')
number_of_extra_waves_bytes: 0
number_of_samplings: 2
sample_units: 1 [nanoseconds]
scanner_index: 1
compression: 0
description: 'Pulse Composition'
sampling[0]
type: 1 ('outgoing')
channel: 0
bits_for_duration_from_anchor: 32
scale_for_duration_from_anchor: 1
offset_for_duration_from_anchor: 0
bits_for_number_of_segments: 0
bits_for_number_of_samples: 16
number_of_segments: 1
number_of_samples: 0
bits_per_sample: 16
lookup_table_index: 0 ('undefined')
sample_units: 1.0 [nanoseconds]
compression: 0
description: 'Sampling Descriptor'
sampling[1]
type: 2 ('returning')
channel: 0
bits_for_duration_from_anchor: 32
scale_for_duration_from_anchor: 1
offset_for_duration_from_anchor: 0
bits_for_number_of_segments: 0
bits_for_number_of_samples: 16
number_of_segments: 4
number_of_samples: 0
bits_per_sample: 16
lookup_table_index: 0 ('undefined')
sample_units: 1.0 [nanoseconds]
compression: 0
description: 'Sampling Descriptor'