필터 지우기
필터 지우기

How do I compare two data sets of unequal length?

조회 수: 18 (최근 30일)
DH
DH 2018년 8월 8일
댓글: Adam Danz 2018년 8월 14일
I have two sets of data, taken on different days, from the same sensor. The temperature was swept from 26C to -30C to 80C and back to 26C. The sensor was read periodically during the temperature sweep. The data sets consist of a temperature column, and another column representing the sensor readings. I would like to take a difference between the two sets of sensor readings, generating another data set having a column of temperatures, and a column of differences between the two original sets of sensor readings. If each data set had exactly the same vector of temperatures, I could just subtract one vector of sensor readings from the other. However, the temperature vectors do not contain exactly the same temperatures, and they don't even have the same number of elements. I would like to interpolate one set of temperatures and sensor readings to match the temperatures of the other, so I have two data sets of the same size, at the same temperatures. One complicating factor is that, due to sensor hysteresis with respect to temperature, the sensor readings are different on the downward temperature ramps from those on the upward temperature ramp. Therefore I can't sort the data on temperature, because that would mix the upward and downward ramps. If I could sort the data on temperature, I could use timeseries objects, with temperature in place of time. However, that won't work in this case.
  댓글 수: 8
DH
DH 2018년 8월 9일
It would not work to average the sensor data for two identical temperatures, because the identical temperatures may not be on the same ramp - one may be as the temperature is going up, and the other as the temperature is going down. Due to hysteresis, the sensor data on the upward ramp may be different from that on the downward ramp. I need to preserve the hysteresis. However, it would be acceptable to drop one of each pair of exact duplicates - something like this:
[uniquetemps, it, iu] = unique(data.Temperature, 'stable');
datareduced = data(it,:);
This would give me a dataset with no duplicate temperatures, and the order would be preserved. However, the temperatures are still not monotonic.
DH
DH 2018년 8월 9일
I think I see how to do it. Your mention of interp1 clued me in.
data1 = readtable([tstfldr 'dataset1.csv']);
data2 = readtable([tstfldr 'dataset2.csv']);
[uniquetemps, it, iu] = unique(data1.Temperature, 'stable');
data1reduced = data1(it,:);
interpSnsr1 = interp1(data1reduced.Temperature, ...
data1reduced.SensorData, data2.Temperature);
df = interpSnsr1 - data2.SensorData;
Thank you for your help.

댓글을 달려면 로그인하십시오.

채택된 답변

DH
DH 2018년 8월 14일
Problem solved - see response from Adam Danz on 8 Aug 2018 at 20:10, and my response - DH on 9 Aug 2018 at 12:15.

추가 답변 (2개)

Yuvaraj Venkataswamy
Yuvaraj Venkataswamy 2018년 8월 8일
  댓글 수: 2
DH
DH 2018년 8월 8일
편집: DH 2018년 8월 8일
Those methods finds members of one array that are equal to members of another array, right? My two temperature arrays may not have any members that are exactly equal. I want to interpolate one to the other.
Adam Danz
Adam Danz 2018년 8월 8일
Yeah, this method won't work.

댓글을 달려면 로그인하십시오.


Yuvaraj Venkataswamy
Yuvaraj Venkataswamy 2018년 8월 8일
if true
id = ismember(dataset1', dataset2', 'rows');
X = 1:size(dataset1, 2);
Y = X(id);
end
  댓글 수: 1
Adam Danz
Adam Danz 2018년 8월 8일
This method won't work on your current data, either.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Geodesy and Mapping에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by