these are the curves. Yellow is the original and purple is modified.

# Comparing curves to an original signal

27 views (last 30 days)

Show older comments

I'm trying to compare two curves. They represent the same situation. One curve is the original system and a second this system is undergoing some changes. I would like to compare them. What changes made to the second curve affect the first. And knowing these variations, is it possible for me to go back to the original curve? My curves are experimental data.

I thought about choosing an equation or model that best describes my curve and fitting it using curve fitting or optimization. But I still can't think of something to compare them

### Accepted Answer

Jon
on 15 Dec 2021

##### 9 Comments

Jon
on 17 Dec 2021

Hi,

It looks like you were able to solve your second problem.

For the future, it would be good to start a new question if you have an new unrelated, or only distant related issue. That way the answer threads stay clean, and later people can find answers if they have the same question.

### More Answers (1)

Mathieu NOE
on 15 Dec 2021

hello again

so the yellow curve can be shifted to match the purple one by using a linear equation like

y2_shifted = = y2*a+b;

the code provide some initail values for a and b but this could be refined by optimisation

a = ratio2*0.963

b = 1.4

the values 0.963 and 1.4 are my manual fine tuning , but again we could implement a more elegnat and automatic tuning.

see the results now : the yellow has been shifted as close as possible to the purple curve

I just considered that the last portion of the purple curve where the signal sinks would not be taken into account in this procedure...

code :

% extract_data_from_figures

data = extract_data_from_figures('ATE.fig');

x = data.Y(:,1);

y1 = data.Y(:,2);

y2 = data.Y(:,3);

% save amanda.mat x y1 y2 % save in case

% y ratio between the two curves - measured at first x position

ratio2 = y1(1)./y2(1);

y2_shifted = y2*ratio2*0.963+1.4;

figure(1),semilogx(x,y1,x,y2,x,y2_shifted,'r');

legend('y1','y2','y2*ratio2*0.963+1.4');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function data = extract_data_from_figures(filename)

%%

%

% Input : File name <filename.fig>

% with multiple plots in a single file

% Output : struct data

% : data.names contains names of the display object Yvalues

% : data.Y contains the actual plot values withthe first column

% containing the x-values

%

% Written by Chetanya Puri, 2019

% Last Modified: Nov 6, 2019

%

fig = openfig(filename); % Open figure and assign it to fig object

dataObjs = findobj(fig,'-property','YData'); % Find all graphic objects with YData, in our case line values

xval = dataObjs(1).XData; % Find the X-axis value

Ymat = [xval(:)]; % Create a matrix with first column of x values

for i=1:length(dataObjs)

legend_name{i,1} = dataObjs(i).DisplayName;

yval = dataObjs(i).YData;

Ymat = [Ymat yval(:)]; % Keep appending column vectors

end

close(fig); % close the figure

data.names = ['X';legend_name];

data.Y = Ymat;

end

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!