GRASS logo


r.series.filter - Performs filtering of raster time series X (in time domain).


raster, statistics, filter


r.series.filter --help
r.series.filter [-cu] input=string[,string,...] result_prefix=string [method=string] [winsize=integer] [order=integer] [opt_points=integer] [diff_penalty=float] [deriv_penalty=float] [iterations=integer] [--overwrite] [--help] [--verbose] [--quiet] [--ui]


Try to find optimal parameters for filtering
Fit the result curve by upper boundary
Allow output files to overwrite existing files
Print usage summary
Verbose module output
Quiet module output
Force launching GUI dialog


input=string[,string,...] [required]
Raster names of equally spaced time series
result_prefix=string [required]
Prefix for raster names of filtered X(t)
Used method
Default: savgol
Length of running window for the filter
Default: 9
Order of the Savitzky-Golay filter
Default: 2
Count of random points used for parameter optimization
Default: 50
Penalty for difference between original and filtered signals
Default: 1.0
Penalty for big derivates of the filtered signal
Default: 1.0
Number of iterations
Default: 1

Table of contents


r.series.filter is a module to filter raster time series X in time domain. It requires python-scipy (version 0.14 or later).

-c Find optimal parameters of used filter. The function to optimize depends on difference between original and filtered signals and on derivates of the filtered signal. -u Filter using upper boundary of the signal values. (Useful for vegetation indexes filtering)

input Raster names of equally spaced time series X.

result_prefix Prefix for raster names of filterd X.

method filtering method. Implemented filters are Savitzky-Golay filter savgol and median filter median.

winsize The length of the filter window. winsize must be a positive odd integer.

order The order of the polynomial used to fit the samples. order must be less than winsize. (Savitzky-Golay only)

iterations Number of filtering iterations.

opt_points If -c is specifed, then random sample opt_points and use them in parameter optimization.

diff_penalty Penalty for difference between original and filtered signals (see Notes).

deriv_penalty Penalty for derivates of filtered signal (see Notes).


X must be equally spaced time series. If the series isn't equally spaced, insert NULL raster maps into X.

There is a procedure for searching for good filtering parameters: it uses opt_points random points and perfoms filtering in that points. The result of the filtering can be tested for quality. The quality function is a trade of two features: accuracy and smoothing. Accuracy can be estimated as the (abs) difference between original and filtered data, quality of smoothing can be estimated as absalute values of the derivates. So there are two parameters diff_penalty and deriv_penalty that can ajust the trade-of.

So the optimizing procedure performs loop over filtering parameters and calculates the next penalty function:

penalty = diff_penalty * sum(abs(Xi-Fi)) + sum(abs(dFi))
where Xi are original signals in the samplig points, Fi are filtered signals in the sampling points.

The optimal parameters are used for signal filtering in the whole region.

If -u flag is specifed, then filter uses Chen's algorithm (see link bellow). The algorithm is usefull for vegetation indexes filtering. It creates a curve that flows on upper boundary of the signal.


Create test data: X = sin(t) + E, where X is raster time series, E is a error term.
for T in $(seq -w 0 10 360) 
  r.mapcalc -s "$name = sin($T) + rand(-0.3, 0.3)"

Create smooth raster series using Savitzky-Golay method:

maps=$(g.list rast patt="test_*" sep=,)
r.series.filter input=$maps result_prefix="flt." method=savgol winsize=9 order=2 --o

Look at the result (plot the curves for a pixel):

maps=$(g.list rast patt="test_*" sep=,)
fmaps=$(g.list rast patt="flt.*" sep=,)

eval $(g.region -cg)
i.spectral -g raster=$maps coor=$center_easting,$center_northing out=signal.png
i.spectral -g raster=$fmaps coor=$center_easting,$center_northing out=flt.png
Values of the time series in the central point Filtered values of the time series in the central point



r.regression.series, r.series, r.regression.line, g.list


Dmitry Kolesov

Last changed: $Date: 2016-06-14 21:46:43 +0200 (Tue, 14 Jun 2016) $


Available at: r.series.filter source code (history)

Main index | Raster index | Topics index | Keywords index | Graphical index | Full index

© 2003-2017 GRASS Development Team, GRASS GIS 7.2.3svn Reference Manual