| OpenMS 2.5.0

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
SavitzkyGolayFilter Class Reference
Analysis » SignalProcessing

Computes the Savitzky-Golay filter coefficients using QR decomposition. More...

`#include <OpenMS/FILTERING/SMOOTHING/SavitzkyGolayFilter.h>`

Inheritance diagram for SavitzkyGolayFilter:

## Public Member Functions

| SavitzkyGolayFilter ()
| Constructor. More...
| ~SavitzkyGolayFilter () override
| Destructor. More...
template<class InputIt , class OutputIt >
void | filter (InputIt first, InputIt last, OutputIt d_first)
void | filter (MSSpectrum &spectrum)
| Removed the noise from an MSSpectrum containing profile data. More...
void | filter (MSChromatogram &chromatogram)
| Removed the noise from an MSChromatogram. More...
void | filterExperiment (PeakMap &map)
| Removed the noise from an MSExperiment containing profile data. More...
Public Member Functions inherited from ProgressLogger
| ProgressLogger ()
| Constructor. More...
| ~ProgressLogger ()
| Destructor. More...
| ProgressLogger (const ProgressLogger &other)
| Copy constructor. More...
ProgressLogger & | operator= (const ProgressLogger &other)
| Assignment Operator. More...
void | setLogType (LogType type) const
| Sets the progress log that should be used. The default type is NONE! More...
LogType | getLogType () const
| Returns the type of progress log being used. More...
void | startProgress (SignedSize begin, SignedSize end, const String &label) const
| Initializes the progress display. More...
void | setProgress (SignedSize value) const
| Sets the current progress. More...
void | endProgress () const
| Ends the progress display. More...
void | nextProgress () const
| increment progress by 1 (according to range begin-end) More...
Public Member Functions inherited from DefaultParamHandler
| DefaultParamHandler (const String &name)
| Constructor with name that is displayed in error messages. More...
| DefaultParamHandler (const DefaultParamHandler &rhs)
| Copy constructor. More...
virtual | ~DefaultParamHandler ()
| Destructor. More...
virtual DefaultParamHandler & | operator= (const DefaultParamHandler &rhs)
| Assignment operator. More...
virtual bool | operator== (const DefaultParamHandler &rhs) const
| Equality operator. More...
void | setParameters (const Param &param)
| Sets the parameters. More...
const Param & | getParameters () const
| Non-mutable access to the parameters. More...
const Param & | getDefaults () const
| Non-mutable access to the default parameters. More...
const String & | getName () const
| Non-mutable access to the name. More...
void | setName (const String &name)
| Mutable access to the name. More...
const std::vector< String > & | getSubsections () const
| Non-mutable access to the registered subsections. More...

## Protected Member Functions

void | updateMembers_ () override
| This method is used to update extra member variables at the end of the setParameters() method. More...
Protected Member Functions inherited from DefaultParamHandler
void | defaultsToParam_ ()
| Updates the parameters after the defaults have been set in the constructor. More...

## Protected Attributes

std::vector< double > | coeffs_
| Coefficients. More...
UInt | frame_size_
| UInt of the filter kernel (number of pre-tabulated coefficients) More...
UInt | order_
| The order of the smoothing polynomial. More...
Protected Attributes inherited from ProgressLogger
LogType | type_
time_t | last_invoke_
ProgressLoggerImpl * | current_logger_
Protected Attributes inherited from DefaultParamHandler
Param | param_
| Container for current parameters. More...
Param | defaults_
| Container for default parameters. This member should be filled in the constructor of derived classes! More...
std::vector< String > | subsections_
| Container for registered subsections. This member should be filled in the constructor of derived classes! More...
String | error_name_
| Name that is displayed in error messages during the parameter checking. More...
bool | check_defaults_
| If this member is set to false no checking if parameters in done;. More...
bool | warn_empty_defaults_
| If this member is set to false no warning is emitted when defaults are empty;. More...

## Additional Inherited Members

Public Types inherited from ProgressLogger
enum | LogType { CMD, GUI, NONE }
| Possible log types. More...
Static Protected Member Functions inherited from ProgressLogger
static String | logTypeToFactoryName_ (LogType type)
| Return the name of the factory product used for this log type. More...
Static Protected Attributes inherited from ProgressLogger
static int | recursion_depth_

## Detailed Description

Computes the Savitzky-Golay filter coefficients using QR decomposition.

This class represents a Savitzky-Golay lowpass-filter. The idea of the Savitzky-Golay filter is to find filtercoefficients that preserve higher moments, which means to approximate the underlying function within the moving window by a polynomial of higher order (typically quadratic or quartic). Therefore we least-squares fit for each data point a polynomial to all points in the window and set to be the value of that polynomial at position . This method is superior to adjacent averaging because it tends to preserve features of the data such as peak height and width, which are usually 'washed out' by adjacent averaging.

Because of the linearity of the problem, we can reduce the work computing by fitting in advance, for fictious data consisting of all zeros except for a singe 1 and then do the fits on the real data just by taking linear combinations. There are a particular sets of filter coefficients which accomplish the process of polynomial least-squares fit inside a moving window. To get the symmetric coefficient-matrix with

The first (last) rows of we need to smooth the first (last) data points of the signal. So we use for the smoothing of the first data point the data point itself and the next future points. For the second point we take the first datapoint, the data point itself and of rightward data points... . We compute the Matrix by solving the underlying least-squares problems with the singular value decomposition. Here we demonstrate the computation of the first row of a coefficient-matrix for a Savitzky-Golay Filter of order=3 and frameSize=5: The design-matrix for the least-squares fit of a linear combination of 3 basis functions to 5 data points is:

To smooth the first data point we have to create a design-matrix with . Now we have to solve the over-determined set of linear equations

where represents the fictious data. Therefore we solve the normal equations of the least-squares problem

Now, it is possible to get

with . Because we only need one row of the inverse matrix, it is possible to use LU decomposition with only a single backsubstitution. The vector represents the wanted coefficients. Note that the solution of a least-squares problem directly from the normal equations is faster than the singular value decomposition but rather susceptible to roundoff error!

Note
  This filter works only for uniform profile data! A polynomial order of 4 is recommended. The bigger the frame size the smoother the signal (the more detail information get lost!). The frame size corresponds to the number of filter coefficients, so the width of the smoothing interval is given by frame_size*spacing of the profile data.
  The data must be sorted according to ascending m/z!

Parameters of this class are:

Name | Type | Default | Restrictions | Description
--- | --- | --- | --- | ---
frame_length | int | 11 |  | The number of subsequent data points used for smoothing. This number has to be uneven. If it is not, 1 will be added.
polynomial_order | int | 4 |  | Order or the polynomial that is fitted.

Note:

- If a section name is documented, the documentation is displayed as tooltip.
- Advanced parameter names are italic.

## Constructor & Destructor Documentation

## ◆ SavitzkyGolayFilter()

SavitzkyGolayFilter | ( |  | ) |

Constructor.

## ◆ ~SavitzkyGolayFilter()

~SavitzkyGolayFilter | ( |  | ) |

override

Destructor.

## Member Function Documentation

## ◆ filter() [1/3]

void filter | ( | InputIt | first,
|  | InputIt | last,
|  | OutputIt | d_first
| ) |  |

inline

## ◆ filter() [2/3]

void filter | ( | MSSpectrum & | spectrum | ) |

inline

Removed the noise from an MSSpectrum containing profile data.

## ◆ filter() [3/3]

void filter | ( | MSChromatogram & | chromatogram | ) |

inline

Removed the noise from an MSChromatogram.

## ◆ filterExperiment()

void filterExperiment | ( | PeakMap & | map | ) |

inline

Removed the noise from an MSExperiment containing profile data.

References MSExperiment::getChromatogram(), MSExperiment::getChromatograms(), and MSExperiment::size().

## ◆ updateMembers_()

void updateMembers_ | ( |  | ) |

override protected virtual

This method is used to update extra member variables at the end of the setParameters() method.

Also call it at the end of the derived classes' copy constructor and assignment operator.

The default implementation is empty.

Reimplemented from DefaultParamHandler.

## Member Data Documentation

## ◆ coeffs_

std::vector<double> coeffs_

protected

Coefficients.

## ◆ frame_size_

UInt frame_size_

protected

UInt of the filter kernel (number of pre-tabulated coefficients)

## ◆ order_

UInt order_

protected

The order of the smoothing polynomial.