Keywords: lidar, pulse profile

Summary

This demo explains how to setup a user-defined laser pulse shape (temporal profile or waveform). A user-defined pulse shape allows the user to incorporate unique and/or non-ideal pulse shapes (waveforms) into the simulation. Depending on their nature, irregular pulse shapes can have an impact on detection statistics and introduce range errors.

Important
For the 4.5.2 release, importing a user-defined pulse shape requires hand-editing the .platform file (an XML file). A .platform file containing a user-defined pulse pulse shape cannot be loaded into the graphical user interface at this time.

Details

The DIRSIG model allows the user to configure functional pulse shapes (for example, Gaussian). However, real-world lasers may not have ideal shapes. In the cases where the user has access to measured pulse shapes, that data can be incorporated into the simulation.

This demonstration includes two simulations: (a) a "clean pulse" scenario with an ideal Gaussian pulse profile and (b) an "after pulse" scenario that features the same primary pulse but also includes a lower magnitude after pulse that is 10% of the magnitude of the primary pulse and time shifted by 5 ns.

This demo focuses on the impacts for a Geiger-mode system operating near detection limits, such that the primary pulse is not so strong that we have 100% detection and the secondary (after) pulse is not so weak that we have 0% detection.

Important Files

The following files are considered important to this simulation.

Excel File

The file pulse.xlsx is an Excel file where the "clean pulse" and "after pulse" profiles were created.

Platform File

The files clean_pulse.platform and after_pulse.platform contain a 32x32 array with the "clean pulse" and "after pulse" shapes, respectively.

Because the user-defined pulse profile cannot be imported via the graphical user interface at this time, the details of the .platform file are described here so that the user can perform the necessary edits to import a pulse shape. The user-defined pulse shape is supplied within the <temporal> element of the <source>. The <shape> element must be assigned type="user". The shape is input as two columns of data in a <datagrid> element:

  • The first column is assumed to be the "time" and the second is assumed to be the "magnitude".

  • There must be the same number of values in both columns.

  • The values in each "column" are simply comma separated. The values can be supplied in a single line or multiple lines.

  • There are no assumptions about the temporal sampling (the "time" values do not need to be regularly spaced).

  • The time of flight for arrivals is measured relative to when time equals 0. Most pulse shapes are expected to be symmetric about time = 0.

  • The magnitude will be normalized so that the <pulseenergy> is preserved.

<temporal energyunits="joules" temporalunits="seconds">
  <pulseenergy>0.000015</pulseenergy>
  <shape type="user">
    <datagrid type="double" columns="2" rows="65" delimiter="," >
       <datadescription/>
       <datamatrix label="test pulse">
         <column label="time" units="seconds">
           -8.00E-09,
           -7.75E-09,
           ...
           7.75E-09,
           8.00E-09
         </column>
         <column label="magnitude">
           1.26642E-14,
           9.06972E-14,
           ...
           9.06972E-14,
           1.26642E-14
         </column>
       </datamatrix>
     </datagrid>
  </shape>
</temporal>

Setup

Input Scene

The scene for this simulation is simply a flat plate assigned a 10% Lambertian reflector. This will allow us to explore the distribution in ranges due to the different pulse shapes interrogating the surface.

Input Pulse Shapes

The pulse profile is simply a 1D function of unnormalized magnitude vs. time. Time = 0 seconds is assumed to be the "firing" or "launch" time of the pulse, therefore most pulse shapes are expected to be nearly centered around 0 seconds.

The following plot shows the input pulse profile for the "clean pulse" case:

clean pulse input
Figure 1. Input pulse profile for the "clean pulse" scenario.

The following plot shows the input pulse profile for the "after pulse" case:

after pulse input
Figure 2. Input pulse profile for the "after pulse" scenario.
Important
The units of the pulse shape magnitude is undefined or unitless because the magnitude of the input pulse profile will be normalized during the simulation startup to ensure that the Pulse Energy provided by the user is preserved.

Results

Extracted Pulse Profiles

The output BIN file contains the temporal pulse profile for each of the 32 x 32 detectors in the receiving array. The command-line bin_analyze tool can be used to extract the average pulse profile of all the pixels using the following syntax:

$ bin_analyze --output_profiles=true clean_pulse.bin

In addition to printing the standard analysis information to the screen, it will create a file called profile_0.txt (the 0 is for the first and only pulse in the simulation) that contains the average profile for each pixel. Since the transmitted pulse was reflected off of a flat plate, we expect to see the same profile returned to the receiver. The tool needs to be run for each output BIN file to get the respective profile for each of the two scenarios.

...

Analyzing pulse #1
Pulse Header:
    Pulse time: 0
    Platform location: 0, 0, 2000
    Platform rotation: 0, 0, -0
    Mount rotation: 0, 0, -0
    Time Gate Open: 1.3e-05 [s], 1948.65 [m]
    Time Gate Close: 1.35e-05 [s], 2023.6 [m]
    Time Bin Count: 2001
    Samples Per Time Bin: 1
    Contains compressed pulse data
Pulse #1:
    Minimum total photons in a pixel = 0.734458
    Maximum total photons in a pixel = 0.734459
    Pixels with zero total photons = 0/1024 (0%)
    Average background photons per pixel = 1.52733e-05
    Average total photons per pixel = 0.734459
Important
Because the Pulse Energy is the same for both scenarios, the average photons per pixel should be the same.

The following plot shows the average pulse profile for all 32 x 32 pixels extracted from the clean_pulse.bin file created by DIRSIG for the "clean pulse" scenario:

clean pulse bin
Figure 3. Extracted pulse profile for the "clean pulse" scenario.

The following plot shows the average pulse profile for all 32 x 32 pixels extracted from the after_pulse.bin file created by DIRSIG for the "after pulse" scenario:

after pulse bin
Figure 4. Extracted pulse profile for the "after pulse" scenario.
Note
The magnitude of the primary pulse is lower for the "after pulse" case because the total Pulse Energy is the same for both scenarios. The additional photons are accounted for in the secondary pulse.

Geiger Mode Point Clouds

The resulting BIN files were then run through the Geiger-mode detection tool to produce 3D point clouds. The detector model was run with an ideal photon detection efficiency (PDE) of 1 and a dark count rate (DCR) of 0. The link budget (see the output of the bin_analyze tool was setup so that the return from the primary pulse would not be so high as to cause the detector to always trigger. The detector model was setup to produce ASCII/Text output so that the heights of the triggers could be easily plotted and the impact of the pulse shape demonstrated.

The following plot shows the height distribution for the "clean pulse" scenario extracted from the clean_pulse.bin file created by DIRSIG. Note that the vertical point distribution is centered around the altitude of 0 meters (the actual location of the 10% reflector).

clean pulse cloud
Figure 5. Extracted point cloud (2D side view) for the "clean pulse" scenario.

The following plot shows the height distribution for the "after pulse" scenario extracted from the after_pulse.bin file created by DIRSIG. Note that unlike the "clean pulse" scenario, the vertical point distribution for the "after pulse" scenario contains additional points below the ground produced by the secondary pulse triggers in pixels that did not trigger on the primary pulse.

after pulse cloud
Figure 6. Extracted point cloud (2D side view) for the "after pulse" scenario.