0001 function varargout = phasetrack(varargin)
0002
0003 ALGONAME = mfilename;
0004 VERSION = '$Id: phasetrack.m,v 1.1 2008/05/21 09:53:13 anneke Exp $';
0005 CATEGORY = 'Signal Processing';
0006
0007
0008
0009 if nargin == 1 && ischar(varargin{1})
0010 in = char(varargin{1});
0011 if strcmp(in, 'Params')
0012 varargout{1} = getDefaultPL();
0013 return
0014 elseif strcmp(in, 'Version')
0015 varargout{1} = VERSION;
0016 return
0017 elseif strcmp(in, 'Category')
0018 varargout{1} = CATEGORY;
0019 return
0020 end
0021 end
0022
0023
0024 invars = {};
0025 for j=1:nargin
0026 invars = [invars cellstr(inputname(j))];
0027 end
0028
0029
0030
0031 as = [];
0032 pl = [];
0033 for j=1:nargin
0034 a = varargin{j};
0035 if isa(a, 'plist')
0036 pl = a;
0037 end
0038 if isa(a, 'ao')
0039 for k=1:length(a)
0040 ak = a(k);
0041 d = ak.data;
0042 if isa(d, 'tsdata')
0043 as = [as ak];
0044 else
0045 warning('### works only for time series');
0046 end
0047 end
0048 end
0049 end
0050 na = length(as);
0051
0052 plo = plist();
0053
0054
0055 bo = [];
0056
0057 for i=1:na
0058
0059
0060 a = as(i);
0061 d = a.data;
0062 dinfo = whos('d');
0063 if ~isa(d, 'tsdata')
0064 error('### I only work with time-series at the moment.');
0065 end
0066 if ~isreal(d.y)
0067 error('### I only work with real time-series at the moment.');
0068 end
0069 add = 0;
0070 ydata = a.data.y;
0071 y = ydata;
0072
0073 for i = 2:length(ydata)
0074
0075 diff = ydata(i)-ydata(i-1);
0076 if diff > pi/2
0077 add = add-pi;
0078 elseif diff < -pi/2
0079 add = add+pi;
0080 end
0081 y(i) = ydata(i) + add;
0082 end
0083
0084 nameStr = sprintf('phasetrack(%s)', d.name);
0085
0086
0087 data = tsdata(y, d.fs);
0088 data = set(data, 'name', nameStr);
0089 data = set(data, 'xunits', d.xunits);
0090 data = set(data, 'yunits', d.yunits);
0091
0092
0093 h = history(ALGONAME, VERSION, pl, a.hist);
0094 h = set(h, 'invars', invars);
0095
0096
0097 b = ao(data, h);
0098
0099
0100
0101 if isempty(invars{j})
0102 n1 = a.name;
0103 else
0104 n1 = invars{j};
0105 end
0106
0107 nameStr = sprintf('phasetrack(%s)', n1);
0108 b = setnh(b, 'name', nameStr);
0109
0110
0111 bo = [bo b];
0112
0113
0114 end
0115 varargout{1} = bo;
0116
0117
0118
0119 function plo = getDefaultPL()
0120
0121 disp('* creating default plist...');
0122 plo = plist();
0123 disp('* done.');
0124
0125
0126
0127
0128