123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- function data=locdetrend(data,Fs,movingwin)
- % Remove running line fit (using local linear regression)-continuous
- % processes
- % Usage: data=locdetrend(data,Fs,movingwin)
- % Inputs:
- % Note that units of Fs, movinwin have to be consistent.
- % data (data as a matrix times x channels or a single vector)
- % Fs (sampling frequency) - optional. Default 1
- % movingwin (length of moving window, and stepsize) [window winstep] - optional.
- % Default. window=full length of data (global detrend).
- % winstep=window -- global detrend
- %
- % Output:
- % data: (locally detrended data)
- data=change_row_to_column(data);
- [N,C]=size(data);
- if nargin < 2 || isempty(Fs); Fs=1; end;
- if nargin < 3 || isempty(movingwin); movingwin=[N/Fs N/Fs]; end;
- Tw=movingwin(1); Ts=movingwin(2);
- if Ts>Tw; error('Use step size shorter than window size'); end;
- n=round(Fs*Tw);
- dn=round(Fs*Ts);
- if ~isreal(data)
- yr=real(data);
- yi=imag(data);
- if n==N;
- yr=detrend(yr);
- yi=detrend(yi);
- data=yr+i*yi;
- else;
- for ch=1:C
- tmp=runline(yr(:,ch),n,dn);
- yr=yr-tmp;
- tmp=runline(yi(:,ch),n,dn);
- yi=yi-tmp;
- data(:,ch)=yr+i*yi;
- end;
- end;
- else
- if n==N;
- data=detrend(data);
- else;
- for ch=1:C;
- tmp=runline(data(:,ch),n,dn);
- data(:,ch)=data(:,ch)-tmp;
- end;
- end
- end
|