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:

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

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:

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:

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

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.
