Using Interp1 when data has duplicates

19 views (last 30 days)
Hi,
I am working with Timeseries data. Time vs Population in a building. I have data from two different sources for the space population. The plot is shown in the image attached. I need to interpolate these two plot lines to identify Y(population) values from both sources at regular intervals of X(Time) values (i.e. Population at 1-min increment in time). I tried interp1 but both my data sources have duplicates (as my population changed multiple times within a min). The time steps for both data sources dont match in the original data. I need to keep the duplicates as they are required data points. I am not sure how to work around this issue to obtain Y values from both sources at the same time-steps.
PS: I used clear 'x' and 'y' values and then reobtain x and y values but it only gives me the same data points that I used to plot.
Thanks for the help.
  4 Comments
Kevin Phung
Kevin Phung on 4 Feb 2019
ok, but just to clarify, you want one line to describe both of those plots correct?
Krishna Chaitanya Simma
Krishna Chaitanya Simma on 4 Feb 2019
Edited: Krishna Chaitanya Simma on 4 Feb 2019
I added a picture for what I am trying to do. From the two plot lines, I want to divide the time (x-axis) into multiple equal steps and interporlate the Y values (both y1 and y2). And then, since time becomes constant for Y values from both sources, I want to plot them against each other as shown in the diagram below in the image posted. (ex: y1 vs y2).
Did I explain it clearly?

Sign in to comment.

Accepted Answer

Krishna Chaitanya Simma
Krishna Chaitanya Simma on 18 Feb 2019
The following code worked. Incase anyone has similar issues. Instead of intrerp1, I used griddedInterpolant.
M = csvread('rdata24.csv'); % Read the data file for wifi routers
x1 = M(:,1);
y1 = M(:,2);
N = csvread('cdata24.csv'); % Read the data file for people counters
x2 = N(:,1);
y2 = N(:,2);
figure(1)
plot(x1,y1,x2,y2)
[x2,al,idx] = unique(x2,'stable'); % identify the non duplicate values
y2 = y2(al);
hold on
F = griddedInterpolant(x2,y2);
G = griddedInterpolant(x1,y1);
x1q = linspace(0,1,300); % Generate points to interpolate
y1q = G(x1q);
y2q = F(x1q);
hold on
plot(x1q, y1q, '*')
plot(x1q, y2q,'ro')
hold off
figure(2)
scatter(y1q,y2q);
  1 Comment
Tehreem Syed
Tehreem Syed on 11 Aug 2022
Hey! I tried your methods but it's not working.
Attached you can see the snippet of my code.
Thank you :)

Sign in to comment.

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!