diff m-toolbox/m/sigproc/frequency_domain/phasetrack.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/m/sigproc/frequency_domain/phasetrack.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,128 @@
+function varargout = phasetrack(varargin)
+
+ALGONAME = mfilename;
+VERSION  = '$Id: phasetrack.m,v 1.1 2008/05/21 09:53:13 anneke Exp $';
+CATEGORY = 'Signal Processing';
+
+%% Check if this is a call for parameters, the CVS version string 
+% or the function category
+if nargin == 1 && ischar(varargin{1})
+  in = char(varargin{1});
+  if strcmp(in, 'Params')
+    varargout{1} = getDefaultPL();
+    return
+  elseif strcmp(in, 'Version')
+    varargout{1} = VERSION;
+    return
+  elseif strcmp(in, 'Category')
+    varargout{1} = CATEGORY;
+    return
+  end
+end
+
+
+invars = {};
+for j=1:nargin
+  invars = [invars cellstr(inputname(j))];
+end
+
+
+
+as = [];
+pl = [];
+for j=1:nargin
+  a = varargin{j};
+  if isa(a, 'plist')
+    pl = a;
+  end
+  if isa(a, 'ao')
+    for k=1:length(a)
+      ak = a(k);
+      d = ak.data;
+      if isa(d, 'tsdata')
+        as = [as ak];
+      else
+        warning('### works only for time series');
+      end
+    end
+  end
+end
+na = length(as);
+% unpack parameter list
+plo = plist();
+
+% Initialise output
+bo = [];
+
+for i=1:na
+
+  % get data out
+  a = as(i);
+  d = a.data;
+  dinfo = whos('d');
+  if ~isa(d, 'tsdata')
+    error('### I only work with time-series at the moment.');
+  end
+  if ~isreal(d.y)
+    error('### I only work with real time-series at the moment.');
+  end
+  add = 0;
+  ydata = a.data.y;
+  y = ydata;
+  
+  for i = 2:length(ydata)
+
+    diff = ydata(i)-ydata(i-1);
+    if diff > pi/2
+        add = add-pi;
+    elseif diff < -pi/2
+        add = add+pi;
+    end
+    y(i) = ydata(i) + add;  
+  end
+  % Make output analysis object
+  nameStr = sprintf('phasetrack(%s)', d.name);
+
+  % create new output data
+  data = tsdata(y, d.fs);
+  data = set(data, 'name', nameStr);
+  data = set(data, 'xunits', d.xunits);
+  data = set(data, 'yunits', d.yunits);
+
+  % create new output history
+  h = history(ALGONAME, VERSION, pl, a.hist);
+  h = set(h, 'invars', invars);
+
+  % make output analysis object
+  b = ao(data, h);
+
+  % set name
+  % name for this object
+  if isempty(invars{j})
+    n1 = a.name;
+  else
+    n1 = invars{j};
+  end
+
+  nameStr = sprintf('phasetrack(%s)', n1);
+  b = setnh(b, 'name', nameStr);
+
+  % Add to output array
+  bo = [bo b];
+
+
+end
+varargout{1} = bo;
+
+%--------------------------------------------------------------------------
+% Get default params
+function plo = getDefaultPL()
+
+disp('* creating default plist...');
+plo = plist();
+disp('* done.');
+
+
+% END
+
+