Re: [PulseWaves] Re: Some questions about PulseWaves

111 views
Skip to first unread message

Martin Isenburg

unread,
Mar 28, 2013, 3:27:38 AM3/28/13
to pulse...@googlegroups.com
Hello Rock and Shuai,

thanks for poiting out the miss-match in byte count. I have updated the specification.

Yes, Shuai is right. The two "approximate" start and end samples of the digitized part for the returning waveform of each pulse that are stored in the Pulse file (e.g. first_returning_sample and last_returning_sample) are for the most part used to spatially visualize, manage, and index the pulsewaves in an intuitive manner. Hence, they do not even have to be 100% accurate.

The actual location (possibly with much higher precision) of each sample of the waves and their values (aka measured intensities) are stored in the Waves file. The pulseview.exe viewer will only access those if needed (i.e. for the few pulses that are selected for interactive display). Of course, a batch processing application to, for example, extract the actual returns to produce discrete return LAS/LAZ file from a PulseWaves file would read all the waves of each pulse.

Regards,

Martin

On Wed, Mar 27, 2013 at 5:02 AM, 高帅 <gaos...@gmail.com> wrote:
hi Rock Kao,

1) After check the testDLL, I found that the "pulseFormat" is in fact unsigned long (4 bytes), not unsigned short ( 2 bytes). So, I thought  Martin should update the Pulse file specification in git.

2) the intermediated points was stored in the .wvs suffix file with the same name and directory.

Regards,
Shuai Gao


On Wednesday, March 27, 2013 4:52:21 PM UTC+8, Rock Kao wrote:
Greeting everyone,

I've started a little research on PulseWaves this morning.
There're some questions I hope if any one can help me figure out.

1. In the Pulse file specification, the table shows all members in the header.
    I added all size in bytes of every member in that table, and it shows 350.
    Which is 2 bytes less than the value of Header Size.
    Is there anything I didn't noticed?

2. In the Pulse file specification, only the first and the last returning samples.
    If there's any intermediate points, where should I find those intermediate points?

Looking forward to any answers.

Thanks.

Rock Kao

--
--
Post to "PulseWaves" by email to pulse...@googlegroups.com
Unsubscribe by email to pulsewaves+...@googlegroups.com
Visit this group's message archives at http://pulsewaves.org
 
---
You received this message because you are subscribed to the Google Groups "PulseWaves - no pulse left behind" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pulsewaves+...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

高崇軒

unread,
Mar 28, 2013, 4:50:55 AM3/28/13
to pulse...@googlegroups.com
Hello Shuai and Martin

Thanks for your help, that really helped me out. But I got more questions here.

1. 
I can't seem to find the pulse descriptor in the *.pls file. 
And I'm a little bit confused. For example, in the optech_example2.pls file, Header shows that there're 5 VLRs.
VLR Header shows there're 248 bytes after the VLR header.
And the first VLR, which is a scanner VLR, has exactly 248 bytes. 
Where are the rest of VLRs?? 

Or, is the value of number of VLRs indicates that besides the scanner VLR, the rest of them are pulse descriptor and Sampling Records?

2.
Is there any time stamp for Extra Waves Bytes?

Thanks again.
Regards,

Rock


2013/3/28 Martin Isenburg <martin....@gmail.com>

Martin Isenburg

unread,
Mar 28, 2013, 5:54:31 AM3/28/13
to pulse...@googlegroups.com
Hello Rock,

I am attaching the pulseinfo output for optech_example2.pls to the end of this message. I should mention here that I have so far (unfortunately) received no assistance from optech in creating PulseWaves example files for the full waveform output form their hardware. The examples that are on the site were created by me based by "hacking" their proprietary format using on insights i got from Francesco Pirotti and Andreas Roncat about the CSD / NDF / IDX / DGT format. However, I have received verbal assurance that Optech plans to support PulseWaves in the future ... (-:

as you can see in the pulseinfo output, the total offset to the pulses is 2176 and of that 352 are the header. Hence the remaining 1824 bytes are (likely) to be the five VLRs.

  header size:                352
  offset to pulse data:       2176

the first VLR (scanner) has a payload of 248 bytes. the next VLR (descriptor 1) has a payload of 196 bytes. and the next three VLRs (descriptor 2,3,4) have payloads of 300 bytes each. Subtracting all that from 1824 leaves 480 bytes. And those are exactly the 5 VLR headers of 96 bytes each that we have not counted yet.

Cheers,

Martin @LaserPulseWaves

--

C:\pulsetools\bin>pulseinfo optech_example2.pls
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:          'PulseWaves v0.3 r0 (130201)'
  generating software:        'created by PULSEreaderCSD'
  file creation day/year:     333/2012
  version major.minor:        0.3
  header size:                352
  offset to pulse data:       2176
  number of pulses:           60000
  pulse format:               0
  pulse attributes:           0
  pulse size:                 48
  pulse compression:          0
  number vlrs:                5
  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:               4300000 800000 4600000
  min x y z:                  4291045.95 812323.42 4635352.26
  max x y z:                  4291946.58 812916.30 4635753.13
variable length header record 1 of 5:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            100001
  length after header  248
  description          'PULSEtools 0.3 (build 130201) by Martin Isenburg'
    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 5:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200001
  length after header  196
  description          'PULSEtools 0.3 (build 130201) by Martin Isenburg'
    PULSEdescriptor 1
      optical_center_to_anchor_point:  0x0 ('coincide')
      number_of_extra_waves_bytes:     0
      number_of_samplings:             1
      sample_units:                    1 [nanoseconds]
      scanner_index:                   1
      compression:                     0
      description:                     'Optech (1 outgoing only)'
        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:                0
          number_of_segments:   1
          number_of_samples:   40
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing, 40 samples, 8 bits'
variable length header record 3 of 5:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200002
  length after header  300
  description          'PULSEtools 0.3 (build 130201) by Martin Isenburg'
    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:                     'Optech (1 outgoing 1 returning)'
        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:                0
          number_of_segments:   1
          number_of_samples:   40
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing, 40 samples, 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:                8
          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, 1 seg, vary, 8 bits'
variable length header record 4 of 5:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200003
  length after header  300
  description          'PULSEtools 0.3 (build 130201) by Martin Isenburg'
    PULSEdescriptor 3
      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:                     'Optech (1 outgoing 2 returning)'
        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:                0
          number_of_segments:   1
          number_of_samples:   40
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing, 40 samples, 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:                8
          number_of_segments:   2
          number_of_samples:    0
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'returning, 2 seg, vary, 8 bits'
variable length header record 5 of 5:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200004
  length after header  300
  description          'PULSEtools 0.3 (build 130201) by Martin Isenburg'
    PULSEdescriptor 4
      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:                     'Optech (1 outgoing 3 returning)'
        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:                0
          number_of_segments:   1
          number_of_samples:   40
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'outgoing, 40 samples, 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:                8
          number_of_segments:   3
          number_of_samples:    0
          bits_per_sample:      8
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'returning, 3 seg, vary, 8 bits'
reporting minimum and maximum for all PULSE record entries ...
  T                       0                0
  offset                 60          7079595
  anchor_X     -772781     -770531
  anchor_Y     1267037     1272634
  anchor_Z     3630806     3633918
  target_X     -786086     -775497
  target_Y     1262328     1274592
  target_Z     3617565     3627307
  first_returning_sample  6632  9288
  last_returning_sample   6704  9368
  descriptor_index     1   3
  reserved             0   0
  edge_of_scan_line    0   0
  scan_direction       0   0
  mirror_facet         0   0
  intensity            0   0
  classification       0   0
  min x y z  4291045.96 812323.43 4635352.27
  max x y z  4291946.57 812916.29 4635753.12

高崇軒

unread,
Mar 28, 2013, 9:35:42 PM3/28/13
to pulse...@googlegroups.com
Hello Martin and Shuai,

Thanks again for your help,
and here're more questions.

1.
Is it possible that multiple scanner VLRs in a single *.pls file??

2.
I didn't state my second question in last post, sorry for that.
What I was trying to ask is that is there any record similar to "First Returning Sample" for Extra Waves Bytes?

Thanks!

Rock


2013/3/28 高帅 <gaos...@gmail.com>
Hello Rock,

1. In the "pulse records" of the .pls file, there is a field called "Pulse Descriptor Index", you could connect it with the exact "PulseWaves_Spec" VLR (where 200,001<= n < 200,225).
Just as Martin said, for every VLR header itself, it is 96 bytes. the field "Record Length After Header" recorded the "true data" size following each VLR.

2. i have no idea 

Martin Isenburg

unread,
Mar 30, 2013, 12:35:17 AM3/30/13
to PulseWaves - no pulse left behind
Hello Rock,

1.
Is it possible that multiple scanner VLRs in a single *.pls file?

Yes. If you are scanning simultaneous with more than one scanner and you want to store all the results into one PulseWaves file then you can include more than one scanner VLR (each with a different scanner ID). To mark which pulse is from which scanner you should use different pulsedescriptors which reference the hardware whose pulses they represent. Hence, even if the pulses are described the same way they should have different pulsedecriptors that may describe the same waves in the exact same manner but ID a different scanner.

2.
I didn't state my second question in last post, sorry for that.
What I was trying to ask is that is there any record similar to "First Returning Sample" for Extra Waves Bytes?

Not sure I understand the question well enought to answer it. Extra Waves Bytes are really a concept to be (possibly) used in the future. Do you already have the need to store a few additional bytes with every bundle of waves?

Martin
Reply all
Reply to author
Forward
0 new messages