필터 지우기
필터 지우기

how to bring 5 vectors with differing length in line and plot it

조회 수: 1 (최근 30일)
Florian
Florian 2012년 11월 21일
Hello community,
i want to bring 5 vectors wich all have different lengths in line together, so that each has the same length.
I have measured a force 5 times. each measurement was about to measure the force of a sliding part in a special movement. i pushed "start measurement" and when the movement was finished i hit "stop measurement". This caused that each measurement of the force took different time, wether i stopped or startet it later / earlier. Now i have 5 force vectors... one is 28000x1 the other is 31098x1 the third is 27001 and so on... my target is to plot all graphs over the movement. and therefore i need them to be the same length... wether i do it with interpolation, something like linspace or anything else, i dont know.
Anyone an idea?
Thanks,

답변 (2개)

Andrew
Andrew 2012년 11월 21일
Hello Florian,
if you want to bring all in one line, you can do it in this way:
a1=[1,2,3,4]; % measurement 1
a2=[5,6,7]; % measurement 2
a3=[8,9]; % measurement 3
A=[a1,a2,a3] % all in one line
  댓글 수: 1
Florian
Florian 2012년 11월 21일
sorry Andrew, this was not what i ment with "bring in line".
i want the data recorded but all vectors should be the same length.

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


Jan
Jan 2012년 11월 21일
편집: Jan 2012년 11월 21일
Why do the vectors need the same length?
x1 = 1:10;
y1 = rand(1, 10);
x2 = 1:12;
y2 = rand(1, 12) + 0.5;
plot(x1, y1, 'r');
hold on;
plot(x2, y2, 'b');
So you can draw them together with different sizes.
But if you really need an interpolation:
  • Get the size of the longest data set.
  • Interpolate the others to this length using:
yNew = interp1(xi, yi, linspace(xi(1), xi(end), lengthOfLongest));
where "xi" and "yi" are the data of the other measurements.
[maxLen, maxIndex] = max(cellfun('prodofsize', x));
y2 = cell(1, 5);
for ii = 1:5
if ii == maxIndex
y2{ii} = y{ii};
else
xi = x{ii};
y2{ii} = interp1(xi, y{ii}, linspace(xi(1), xi(end), maxLen));
end
end
Now all y2 have the same length.
  댓글 수: 2
Florian
Florian 2012년 11월 21일
Thanks so far,
I already tried your first solution. But this is not what I need. I can plot all together even if they are different in length. But I want an overlay of all graphs and compare peaks, and stuff... therefore they need the same length.
Regarding the interpolation: what do you mean with "xi(end)"
Then I ll try and let you know.
Thanks so far...
Jan
Jan 2012년 11월 21일
It would be easier if you explain, how you store the 5 data sets. Then I would not have to guess this detail. Posting some code helps to clear such details.
When I assume, that you store the values in the variables "x1,x2,x3,x4,x5" and "y1,y2,y3,y4,y5" (what is actually a bad idea, because it is so hard to expand this list to 25), and "x2" is the longest data set, then "xi(end)" means "x1(end)", "x3(end), "x4(end)", "x5(end)". Then LINSPACE creates as many data points as the longest data set from "xi(1)" to "xi(end)".
I post a method with the much smarter choice of using a cell. See [EDITED]

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

카테고리

Help CenterFile Exchange에서 Multirate Signal Processing에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by