Revision 84e69205c7694c8ac3cf820561b74a47b753b7af (click the page title to view the current version)

Staff/PhDStudents/VladIv/phaseapprox.m

function [x,fx, phasespline]=phaseapprox(varargin)
%approximate phase data by smoothing spline with parameter splinrparam


%% �������, ����� �������� �� ������ �� ���������� �� �����, �� � � ����� ��������� (x, y)

switch nargin 
    case 2;
        phasedata = varargin(1);
        phasedata = [phasedata{:}];
        splineparam = varargin(2);
        splineparam = [splineparam{:}];
    case 3;
        r = varargin(1);
        r = [r{:}];
        v = varargin(2);
        v = [v{:}];
        phasedata(1, max(size(r))) = struct('r', '', 'v', '');
        for i = 1:max(size(r))
            phasedata(i).r = r(i);
            phasedata(i).v = v(i);
        end
         splineparam = varargin(3);
         splineparam = [splineparam{:}];
         clear('r');
         clear('v');
end
%%

global APPROXPOINTSNUMBER;
APPROXPOINTSNUMBER=100;%100; %number of approximation points
%APPROXPOINTSNUMBER=length(phasedata);

%approximation
xx=linspace(phasedata(1).r,phasedata(length(phasedata)).r,APPROXPOINTSNUMBER);

%exact spline
%phasespline=csape([phasedata.r], [phasedata.v], 'variational');

%smoothing spline
%functionsplineparam=0.7;%0.15;
precision=ones(1,length([phasedata.r]));
precision(1)=1E5; 
precision(length(precision))=1E5;
phasespline=csaps([phasedata.r],[phasedata.v],splineparam,[],precision);

fxx=fnval(phasespline,xx);

if length(xx)==length(phasedata)
    xx=[phasedata.r];
    fxx=[phasedata.v];
end;
x = xx;
fx = fxx;
% 
% x_max = xx(fxx == max(fxx));
% x(1:APPROXPOINTSNUMBER/2 + 1) = linspace(xx(1), x_max, APPROXPOINTSNUMBER/2 + 1);
% x(end) = [];
% fx((1:APPROXPOINTSNUMBER/2)) = fnval(phasespline,x(1:APPROXPOINTSNUMBER/2));
% for i = APPROXPOINTSNUMBER/2 + 1:APPROXPOINTSNUMBER-1
%    fx(i) = fx(APPROXPOINTSNUMBER/2 - (i - APPROXPOINTSNUMBER/2)+1);
%    fun = @(x) fnval(phasespline, x) - fx(i);
%    x(i) = fzero(fun, [x_max, xx(end)]);
% end
% fx(APPROXPOINTSNUMBER) = 0;
% x(APPROXPOINTSNUMBER) = xx(end);
    
%plotting
% figure;
% hold on;
% plot([phasedata.r], [phasedata.v], 'ro');
% plot(x,fx,'bx-');
% plot([phasedata.r], [phasedata.v], 'ko');
% plot(x,fx,'k-');
% title('Initial phase and spline approximation');
% grid on;
% hold off;
end