Documentation of detrend


Global Index (all files) (short | long) | Local Index (files in subdir) (short | long)


Function Synopsis

y = detrend(x,o,bp)

Help text

DETREND Remove a linear trend from a vector, usually for FFT processing.
   Y = DETREND(X) removes the best straight-line fit linear trend from 
   the data in vector X and returns it in vector Y.  If X is a matrix,
   DETREND removes the trend from each column of the matrix.

   Y = DETREND(X,'constant') removes just the mean value from the vector X,
   or the mean value from each column, if X is a matrix.

   Y = DETREND(X,'linear',BP) removes a continuous, piecewise linear trend.
   Breakpoint indices for the linear trend are contained in the vector BP.
   The default is no breakpoints, such that one single straight line is
   removed from each column of X.

   See also MEAN

Cross-Reference Information

This function calls

Listing of function detrend

function y = detrend(x,o,bp)

%   Author(s): J.N. Little, 6-08-86
%   	   J.N. Little, 2-29-88, revised
%   	   G. Wolodkin, 2-02-98, added piecewise linear fit of L. Ljung
%   Copyright (c) 1984-98 by The MathWorks, Inc.
%   $Revision: 1.4 $  $Date: 1998/06/08 21:34:05 $

if nargin < 2, o  = 1; end
if nargin < 3, bp = 0; end

%  Reshape x if necessary, assuming the dimension to be 
%  detrended is the first

szx = size(x); ndimx = length(szx);
if ndimx > 2;
  x = reshape(x, szx(1), prod(szx(2:ndimx)));
end
 
n = size(x,1);
if n == 1,
  x = x(:);			% If a row, turn into column vector
end
N = size(x,1);

switch o
case {0,'c','constant'}
  y = x - ones(N,1)*mean(x);	% Remove just mean from each column

case {1,'l','linear'}
  bp = unique([0;bp(:);N-1]);	% Include both endpoints
  lb = length(bp)-1;
  a  = [zeros(N,lb) ones(N,1)];	% Build regressor with linear pieces + DC
  for kb = 1:lb
    M = N - bp(kb);
    a([1:M]+bp(kb),kb) = [1:M]'/M;
  end
  y = x - a*(a\x);		% Remove best fit

otherwise
  % This should eventually become an error.
  warning(['Invalid trend type ''' num2str(o) '''.. assuming ''linear''.']);
  y = detrend(x,1,bp); 

end

if n == 1
  y = y.';
end

%  Reshape output so it is the same dimension as input

if ndimx > 2;
  y = reshape(y, szx);
end