Gaussian Decompostion of a LiDAR Waveform
pip install gdecomp==1.0.6
This package aims at decomposing a signal (1D numpy array) into a sum of gaussian, typically used in full waveform lidar analysis. It is used in particular to process lidar simulations produced with pytools4dart. This code is inspired from C++ code developped by DART team (Jianbo Qi, Tiangang Yin), for DART radiative transfer simulator.
Package gdecomp
can be installed with:
pip install gdecomp
import gdecomp
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(100)
gaus=np.array([[130, 20, 5],
[50, 50, 10],
[10, 70, 5]])
y=np.zeros(x.shape)
for i in range(gaus.shape[0]):
y += gaus[i,0] / (np.sqrt(2 * np.pi)*gaus[i,2]) * np.exp(-(x - gaus[i,1])**2 / (2 * gaus[i,2]**2))
out = gdecomp.GaussianDecomposition(y)
out = np.reshape(out, (-1, 3))
fit = np.zeros(y.size)
for i in range(out.shape[0]):
fit += out[i,0] / (np.sqrt(2 * np.pi)*out[i,2]) * np.exp(-(x - out[i,1])**2 / (2 * out[i,2]**2))
line1 = plt.plot(x, y, color='k', label='waveform')
line2 = plt.plot(x, fit, color='r', linestyle='--', label='fit')
plt.legend(loc='upper right')
This package includes cmpfit source code of CMPFIT library, software developed by the University of Chicago, as Operator of Argonne Nationa Laboratory. See src/mpfit/DISCLAIMER for copyright details of that code.