


fits significant sine waves to data (continuous data) using overlapping windows.
Usage: [datac,datafit]=rmlinesmovingwinc(data,movingwin,tau,params,p,plt)
Inputs:
Note that units of Fs, fpass have to be consistent.
data (data in [N,C] i.e. time x channels/trials or as a single vector) - required.
movingwin (in the form [window winstep] i.e length of moving
window and step size)
Note that units here have
to be consistent with
units of Fs - required
tau parameter controlling degree of smoothing for the amplitudes - we use the
function 1-1/(1+exp(-tau*(x-Noverlap/2)/Noverlap) in the region of overlap to smooth
the sinewaves across the overlap region. Noverlap is the number of points
in the overlap region. Increasing tau leads to greater overlap smoothing,
typically specifying tau~10 or higher is reasonable. tau=1 gives an almost
linear smoothing function. tau=100 gives a very steep sigmoidal. The default is tau=10.
params structure containing parameters - params has the
following fields: tapers, Fs, fpass, pad
tapers (parameters for calculating tapers [NW,K]) - optional. Defaults to [3 5]
Fs (sampling frequency) -- optional. Defaults to 1.
fpass (frequency band to be used in the calculation in the form
[fmin fmax])- optional.
Default all frequencies between 0 and Fs/2
pad (padding factor for the FFT) - optional (can take values -1,0,1,2...).
-1 corresponds to no padding, 0 corresponds to padding
to the next highest power of 2 etc.
e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT
to 512 points, if pad=1, we pad to 1024 points etc.
Defaults to 0.
p (P-value to calculate error bars for) - optional.
Defaults to 0.05/Nwin where Nwin is length of window which
corresponds to a false detect probability of approximately 0.05.
plt (y/n for plot and no plot respectively) - default no
plot.
f0 frequencies at which you want to remove the
lines - if unspecified the program uses the f statistic
to determine appropriate lines.
Outputs:
datafit (fitted sine waves)
datac (cleaned up data)

0001 function [datac,datafit,Amps,freqs]=rmlinesmovingwinc(data,movingwin,tau,params,p,plt,f0) 0002 % fits significant sine waves to data (continuous data) using overlapping windows. 0003 % 0004 % Usage: [datac,datafit]=rmlinesmovingwinc(data,movingwin,tau,params,p,plt) 0005 % 0006 % Inputs: 0007 % Note that units of Fs, fpass have to be consistent. 0008 % data (data in [N,C] i.e. time x channels/trials or as a single vector) - required. 0009 % movingwin (in the form [window winstep] i.e length of moving 0010 % window and step size) 0011 % Note that units here have 0012 % to be consistent with 0013 % units of Fs - required 0014 % tau parameter controlling degree of smoothing for the amplitudes - we use the 0015 % function 1-1/(1+exp(-tau*(x-Noverlap/2)/Noverlap) in the region of overlap to smooth 0016 % the sinewaves across the overlap region. Noverlap is the number of points 0017 % in the overlap region. Increasing tau leads to greater overlap smoothing, 0018 % typically specifying tau~10 or higher is reasonable. tau=1 gives an almost 0019 % linear smoothing function. tau=100 gives a very steep sigmoidal. The default is tau=10. 0020 % params structure containing parameters - params has the 0021 % following fields: tapers, Fs, fpass, pad 0022 % tapers (parameters for calculating tapers [NW,K]) - optional. Defaults to [3 5] 0023 % Fs (sampling frequency) -- optional. Defaults to 1. 0024 % fpass (frequency band to be used in the calculation in the form 0025 % [fmin fmax])- optional. 0026 % Default all frequencies between 0 and Fs/2 0027 % pad (padding factor for the FFT) - optional (can take values -1,0,1,2...). 0028 % -1 corresponds to no padding, 0 corresponds to padding 0029 % to the next highest power of 2 etc. 0030 % e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT 0031 % to 512 points, if pad=1, we pad to 1024 points etc. 0032 % Defaults to 0. 0033 % p (P-value to calculate error bars for) - optional. 0034 % Defaults to 0.05/Nwin where Nwin is length of window which 0035 % corresponds to a false detect probability of approximately 0.05. 0036 % plt (y/n for plot and no plot respectively) - default no 0037 % plot. 0038 % f0 frequencies at which you want to remove the 0039 % lines - if unspecified the program uses the f statistic 0040 % to determine appropriate lines. 0041 % 0042 % Outputs: 0043 % datafit (fitted sine waves) 0044 % datac (cleaned up data) 0045 if nargin < 2; error('Need data and window parameters'); end; 0046 if nargin < 4 || isempty(params); params=[]; end; 0047 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params); % set defaults for params 0048 clear err trialave 0049 if nargin < 6; plt='n'; end; 0050 % 0051 % Window,overlap and frequency information 0052 % 0053 data=change_row_to_column(data); 0054 [N,C]=size(data); 0055 Nwin=round(Fs*movingwin(1)); % number of samples in window 0056 Nstep=round(movingwin(2)*Fs); % number of samples to step through 0057 Noverlap=Nwin-Nstep; % number of points in overlap 0058 % 0059 % Sigmoidal smoothing function 0060 % 0061 if nargin < 3 || isempty(tau); tau=10; end; % smoothing parameter for sigmoidal overlap function 0062 x=(1:Noverlap)'; 0063 smooth=1./(1+exp(-tau.*(x-Noverlap/2)/Noverlap)); % sigmoidal function 0064 smooth=repmat(smooth,[1 C]); 0065 % 0066 % Start the loop 0067 % 0068 if nargin < 5 || isempty(p); p=0.05/Nwin; end % default for p value 0069 if nargin < 7 || isempty(f0); f0=[]; end; % empty set default for f0 - uses F statistics to determine the frequencies 0070 params.tapers=dpsschk(tapers,Nwin,Fs); % check tapers 0071 winstart=1:Nstep:N-Nwin+1; 0072 nw=length(winstart); 0073 datafit=zeros(winstart(nw)+Nwin-1,C); 0074 Amps=cell(1,nw); 0075 freqs=cell(1,nw); 0076 for n=1:nw; 0077 indx=winstart(n):winstart(n)+Nwin-1; 0078 datawin=data(indx,:); 0079 [datafitwin,as,fs]=fitlinesc(datawin,params,p,'n',f0); 0080 Amps{n}=as; 0081 freqs{n}=fs; 0082 datafitwin0=datafitwin; 0083 if n>1; datafitwin(1:Noverlap,:)=smooth.*datafitwin(1:Noverlap,:)+(1-smooth).*datafitwin0(Nwin-Noverlap+1:Nwin,:);end; 0084 datafit(indx,:)=datafitwin; 0085 end; 0086 datac=data(1:size(datafit,1),:)-datafit; 0087 if strcmp(plt,'y'); 0088 [S,f]=mtspectrumsegc(data,movingwin(1),params); 0089 [Sc,fc]=mtspectrumsegc(datac,movingwin(1),params); 0090 plot(f,10*log10(S),fc,10*log10(Sc)); 0091 end;