Re: [LAStools] full-waveform file format

172 views
Skip to first unread message

Martin Isenburg

unread,
Jul 27, 2017, 4:00:25 PM7/27/17
to LAStools - efficient command line tools for LIDAR processing, PulseWaves - no pulse left behind
Hello Dong,

A better discussion forum for this is http://pulsewaves.org. You already find some info there:


The full waveform format consisting of a pair of two files *.lgc/*.lwf is very similar to the PulseWaves format but not quite as fexible. It is a format that was created by GeoLas Consulting with the primary goal to map the full waveform content from the SDF files produced by the Q-Line of RIEGL scanners into an geo-referenced and easier to parse binary format. The software sold by GeoLas Consulting takes SDF files, trajectories, and more as input and generates a pair of two files *.lgc/*.lwf as output. In particular when the SDF file contains a segment of the waveform that was sampled by the less sensitive 8 bit receiver (i.e. a high channel segment) then their software creates a *single* waveform segment that is sampled with 16 bits from the 8 bit low channel segment(s) and the 8 bit high channel segment.

If all your scanners are RIEGL then this is an interesting alternative to PulseWaves. In fact we took a lot of ideas from that format when designing PulseWaves and it there is a straight forward mapping from a pair of two files *.lgc/*.lwf to a pair of two files *.pls/*.wvs. See for example this pulseinfo report for a pair of two files *.lgc/*.lwf:


E:\projects\pulsetools\bin>pulseinfo -i 130603_234218_L01.lgc
reporting all PULSE header entries:
  file signature:             'PulseWavesPulse'
  global parameters:          0
  file source ID:             0
  project ID GUID data 1-4:   00000000-0000-0000-0000-000000000000
  system identifier:          'created by PULSEreaderGCW'
  generating software:        'PulseWaves 0.3 r11 (150708) by rapidlasso'
  file creation day/year:     333/2012
  version major.minor:        0.3
  header size:                352
  offset to pulse data:       1488
  number of pulses:           494738
  pulse format:               0
  pulse attributes:           0
  pulse size:                 48
  pulse compression:          0
  number vlrs:                3
  number avlrs:               0
  scale factor and offset t:  1e-006 1000000000
  min max T:                  0 0
  scale factor x y z:         0.01 0.01 0.01
  offset x y z:               52700000 8500000 0
  min x y z:                  52678586.58 8540391.86 -4.01
  max x y z:                  52678960.86 8540537.42 32.13
variable length header record 1 of 3:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            100001
  length after header  248
  description          'PulseWaves 0.3 r11 (150708) by rapidlasso'
    PULSEscanner 1
      instrument:                      ''
      serial:                          ''
      wave_length:                     1064 [nanometer]
      outgoing_pulse_width:            10 [nanoseconds]
      scan_pattern:                    0 ('undefined')
      number_of_mirror_facets:         0
      scan_frequency:                  0 [hertz]
      scan_angle_min:                  0 [degree]
      scan_angle_max:                  0 [degree]
      pulse_frequency:                 0 [kilohertz]
      beam_diameter_at_exit_aperture:  0 [millimeters]
      beam_divergence:                 0 [milliradians]
      minimal_range:                   0 [meters]
      maximal_range:                   0 [meters]
      description:                     ''
variable length header record 2 of 3:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200001
  length after header  300
  description          'PulseWaves 0.3 r11 (150708) by rapidlasso'
    PULSEdescriptor 1
      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:                     'GeoLas GCW pulse (8 bit)'
        sampling[0]
          type:        1 ('outgoing')
          channel:     0
          bits_for_duration_from_anchor:             0
          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:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing at 8 bits'
        sampling[1]
          type:        2 ('returning')
          channel:     0
          bits_for_duration_from_anchor:            16
          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:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'returning at 8 bits'
variable length header record 3 of 3:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200002
  length after header  300
  description          'PulseWaves 0.3 r11 (150708) by rapidlasso'
    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:                     'GeoLas GCW pulse (16 bit)'
        sampling[0]
          type:        1 ('outgoing')
          channel:     0
          bits_for_duration_from_anchor:             0
          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:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing at 8 bits'
        sampling[1]
          type:        2 ('returning')
          channel:     0
          bits_for_duration_from_anchor:            16
          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:        'returning at 16 bits'
reporting minimum and maximum for all PULSE record entries ...
ERROR: reading wfi
  T                       0                0
  offset                  0        104715818
  anchor_X    -2128591    -2118533
  anchor_Y     4034290     4052961
  anchor_Z       30071       33101
  target_X    -2133843    -2112549
  target_Y     4034717     4054933
  target_Z       15127       19652
  first_returning_sample   240  2356
  last_returning_sample   2065  2485
  descriptor_index     1   2
  reserved             0   0
  edge_of_scan_line    0   0
  scan_direction       0   0
  mirror_facet         0   0
  intensity            0   0
  classification       0   0
re-reporting PULSE header entries populated during read pass:
  min x y z                  52678586.57 8540352.04 -32.17
  max x y z                  52678964.87 8540576.66 294.10

And attached a screenshot from running

E:\projects\pulsetools\bin>pulseview -i 130603_234218_L01.lgc

with the end-of-recording sample of the digitized part from each pulse once colored by elevation and once by pulsedescriptor (yellow = 8 bit waveform sampling, orange = 16 bit waveform sampling).

On Jul 23, 2017 12:07 PM, "dong chen" <chendon...@gmail.com> wrote:
Dear Martin,

What are differences between two types of full-waveform file format namely *lgc/*lwf and *.pls /*.wvs?
Why do we use these two kinds of full-waveform format files rather than one of them? I am looking forward to you reply thanks.

With my best regards,

Dong Chen

--
Download LAStools at
http://lastools.org
http://rapidlasso.com
Be social with LAStools at
http://facebook.com/LAStools
http://twitter.com/LAStools
http://linkedin.com/groups/LAStools-4408378
Manage your settings at
http://groups.google.com/group/lastools/subscribe


pulseview_geolas_format_1.jpg
pulseview_geolas_format_2.jpg
Reply all
Reply to author
Forward
0 new messages