detrend

remove constant, linear or piecewise linear trend from a vector

Calling Sequence

y = detrend(x)
y = detrend(x,flag)
y = detrend(x,flag,bp)

Arguments

:x vector or matrix of real or complex numbers (the signal to treat) : :flag a string equal to “linear” (or “l”) for linear or piecewise

linear treatment or “constant” (or “c”) for constant treatment.
: :bp the breakpoints to provide if you want a piecewise linear
treatment.

: :y output, the signal x with the trend removed from it. :

Description

This function removes the constant or linear or piecewise linear trend from a vector x. In general this can be useful before a fourier analysis. If x is matrix this function removes the trend of each column of x.

When flag = “constant” or “c” detrend removes the constant trend (simply the mean of the signal) and when flag = “linear” or “l” the function removes the linear trend. By adding a third argument bp it is possible to remove a continuous piecewise linear trend. Note that the “instants” of the signal x goes from 0 to m-1 (m = length(x) if x is a vector and m = size(x,1) in case x is a matrix). So the breakpoints bp(i) must be reals in [0 m-1] (breakpoints outside are simply removed from bp vector).

The trend is got by a least square fit of x on the appropriate function space.

Examples

// example #1
t = `linspace`_(0,16*%pi,1000)';
x = -20 + t + 0.3*`sin`_(0.5*t) + `sin`_(t) + 2*`sin`_(2*t) + 0.5*`sin`_(3*t);
y = detrend(x);
`clf`_()
`plot2d`_(t,[x y],style=[2 5])
`legend`_(["before detrend","after detrend"]);
`xgrid`_()

// example #2
t = `linspace`_(0,32*%pi,2000)';
x = `abs`_(t-16*%pi) + 0.3*`sin`_(0.5*t) + `sin`_(t) + 2*`sin`_(2*t) + 0.5*`sin`_(3*t);
y = detrend(x,"linear",1000);
`clf`_()
`plot2d`_(t,[x y],style=[2 5])
`legend`_(["before detrend","after detrend"]);
`xgrid`_()

Table Of Contents

This Page