How to make 2 data sets the same size
29 ビュー (過去 30 日間)
古いコメントを表示
Hello,
I have two data sets (Temperature over Time and Absorption over Time) over the same time interval. The problem is that one set has 6000 values(~10 per second) and the other one 900(~1.5 per second). I would like to cut down both sets to the same size, by taking the average value for each second, but I am not sure how to do this. The function I am writing is getting rather convoluted and confusing with several nested loops, so I am wondering if there is some easy way to do this that I am overlooking.
Thanks in advance for any help, Angela
採用された回答
Kevin Claytor
2014 年 6 月 17 日
Have a look at the resample function;
>> help resample
resample Change the sampling rate of a signal.
Y = resample(X,P,Q) resamples the sequence in vector X at P/Q times
the original sample rate using a polyphase implementation. Y is P/Q
times the length of X (or the ceiling of this if P/Q is not an integer).
P and Q must be positive integers.
For example you would be looking at;
time_a = linspace(1,10,900);
time_t = linspace(1,10,6000);
temp = rand(size(time_t))
absorb = rand(size(time_a));
temp_undersampled = resample(temp, length(absorb), length(temp));
size(temp_undersampled)
This is a pretty rough example, and if you want to go the other way, there's interp1 (that's a 1 not an ell) - but the usual caveats apply with interpolation.
0 件のコメント
その他の回答 (1 件)
Andrei Bobrov
2014 年 6 月 17 日
x1 = randi(500,6000,1); % your data
x2 = randi(600,900,1); %
Fx1 = griddedInterpolant(x1);
Fx2 = griddedInterpolant(x2);
out = [Fx1(linspace(1,numel(x1),600)'), Fx2(linspace(1,numel(x2),600)')];
1 件のコメント
Madina Makhmutova
2019 年 2 月 22 日
編集済み: Madina Makhmutova
2019 年 2 月 22 日
Dear Andrei,
How can I adjust this code without using for loops if instead of being a vector x1 is a matrix?
x1 = randi(500,6000,5);
Thank you.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!