Smoothing Baselines

The contents of pybaselines.smooth contain algorithms that use smoothing to eliminate peaks and leave only the baseline.

Note

The module pybaselines.smooth was named pybaselines.window until version 0.6.0.

Note

The window size used for smoothing-based algorithms is index-based, rather than based on the units of the data, so proper conversions must be done by the user to get the desired window size.

Algorithms

noise_median (Noise Median method)

noise_median() estimates the baseline as the median value within a moving window. The resulting baseline is then smoothed by convolving with a Gaussian kernel. Note that this method does not perform well for tightly-grouped peaks.

(Source code, png, hires.png, pdf)

../_images/smooth-1.png

snip (Statistics-sensitive Non-linear Iterative Peak-clipping)

snip() iteratively takes the element-wise minimimum of each value and the average of the values at the left and right edge of a window centered at the value. The size of the half-window is incrementally increased from 1 to the specified maximum size, which should be set to approximately half of the index-based width of the largest peak or feature.

(Source code, png, hires.png, pdf)

../_images/smooth-2.png

A smoother baseline can be obtained from the snip function by setting decreasing to True, which reverses the half-window size range to start at the maximum size and end at 1. Further, smoothing can optionally be performed to make the baseline better fit noisy data. The baselines when using decreasing window size and smoothing is shown below.

(Source code, png, hires.png, pdf)

../_images/smooth-3.png

swima (Small-Window Moving Average)

swima() iteratively takes the element-wise minimum of either the data (first iteration) or the previous iteration's baseline and the data/previous baseline smoothed with a moving average. The window used for the moving average smoothing is incrementally increased to smooth peaks until convergence is reached.

(Source code, png, hires.png, pdf)

../_images/smooth-4.png

ipsa (Iterative Polynomial Smoothing Algorithm)

ipsa() iteratively smooths the input data using a second-order Savitzky–Golay filter until the exit criteria is reached.

(Source code, png, hires.png, pdf)

../_images/smooth-5.png

ria (Range Independent Algorithm)

ria() first extrapolates a linear baseline from the left and/or right edges of the data and adds Gaussian peaks to these baselines, similar to the optimize_extended_range function, and records their initial areas. The data is then iteratively smoothed using a zero-order Savitzky–Golay filter (moving average) until the area of the extended regions after subtracting the smoothed data from the initial data is close to their starting areas.

(Source code, png, hires.png, pdf)

../_images/smooth-6.png