MATLAB Answers

Aquire random sampling of plot values

2 views (last 30 days)
Baily Thomas
Baily Thomas on 22 Jul 2020
Commented: Sindar on 27 Jul 2020
I have two plots. These two plots follow the same trend but are slighly variable. The X axis denotes time for this graph. I would like to determine the minimum amount of time (number of points along the x axis) in which the %difference between the two plots is below a certain value. I would like this to be repeatable along any point along the graphs.
My thoughts are to randomly select a certain amount of points along the x axis (number of points selected determines the amount of time that is being tested (ex: 100 points = 1 second) and then check the percent difference. Then repeat that process until statistically the %difference is accturate for the plot.
Does anyone have any idea of how to randomly sample points on two graphs along the x axis, determine the percent differnce for those two points, and then average all of that together to determine the total % differnce?
I apologize if the wording is confusion and appreciate any input! thanks!


Sign in to comment.

Answers (1)

Sindar on 22 Jul 2020
Assuming your two datasets share x values and are not absurdly massive, this direct method is probably faster
% generate some sample data
x = 1:100;
y1 = rand(1,100);
y2 = rand(1,100);
% set a threshold of 5%
p_thresh = 0.05;
% calculate the percent difference between sets for each point
y_pdiff = y1./y2-1;
% calculate the cumulative mean
y_pdiff_mean = movmean(y_pdiff, [length(y_pdiff)-1 0]);
% find the first time the cumulative mean is less than your threshold
idx = find(y_pdiff_mean<p_thresh,1,'first');
% find the x-location corresponding to this point
x_thresh = x(idx);


Show 2 older comments
Sindar on 22 Jul 2020
If the plots do not share x points, check out interp1
Baily Thomas
Baily Thomas on 22 Jul 2020
The two graphs at first have an offset to each other. After determining the average differnce between the two graphs I make a correction to the offset to somewhat lay the two graphs overtop one another.
Once I have the graphs atop one another, there is still error between the two. This is where I want to find what is the smallest number of X points I can take in order to have an acceptable % difference.
One way of doing this would be to just cut out a section, check the % difference, and then increase or reduce the size of that section until i get below the desired % difference threashold. Then I would have to test to make sure that the size of the section rings true no matter what section I take.
The other way I was hoping to do is take a random sampling of X points, determine the average % difference (Betwen the two graphs) at each point, and then deterine how many points do I have to sample to repeatably stay below the % difference threashold.
To awnser you questions, I have used the fillgaps function so that each graph has a corresponding y point for each x point that may be selected.
Thank you for your assistance Sindar and hope that this helps in narrowing down my matlab delima.
Sindar on 27 Jul 2020
I'm a bit confused. Why would a larger section necessarily have a lower % difference?
(I assumed you had two signals that eventually converged)

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!