Resampling Data using Interp1
37 次查看(过去 30 天)
显示 更早的评论
Hello!
This may be a fairly obvious answer, but I'm trying to resample some data down to 100 Hz using interp1. I load my data, and then extract the first column (which is the time series) to use in my for loop. However, I get the error "Interpolation requires at least two sample points in each dimension." I tried adjusting the code to call for a(i+1) to see if maybe I needed to start later, but I got the same error. The data itself is part of my thesis so I'm not sure if I can attach it, but I've copy and pasted my code below.
Thank you in advance for any help!
load('BNI_processed.mat')
a = Force_arr;
time_matrix =(a(1:end,1)).';
for i = 1:length(time_matrix)-2
aa = length(time_matrix(i):time_matrix(i+1));
p = 61;
Force(:,i)=interp1(a(i,2),1:aa/p:aa, 'spline');
end
1 个评论
采纳的回答
Star Strider
2020-6-30
You are doing signal processing. For that, use the resample function. It will do the interpolation, and will also use an anti-aliasing filter to remove unwanted artifacts. I am not certain what your signal is or what you want to do with it, so I cannot provide a link to the most appropriate section of the resample documentation for that.
2 个评论
Star Strider
2020-7-1
I was hoping for ‘BNI_processed.mat’. Lacking it, the resample function can do exactly what you wantpreviously, since I have done this previously.
From the documentation (there is no specific link to this line):
- y = resample(x,tx,fs) uses a polyphase antialiasing filter to resample the signal at the uniform sample rate specified in fs.
Referring to your code, this would probably be:
[force_array, p_new] = resample(a(:,2:end), p, 100);
[shoe_array, q_new] = resample(b(:,2:end), q, 100);
I cannot determine for certain that will work because I do not have ‘BNI_processed.mat’ to work with and check. I am going only by your interp1 calls.
Without ‘BNI_processed.mat’, my only option is to post this as UNTESTED CODE. It should do what you want.
.
更多回答(1 个)
Walter Roberson
2020-7-1
编辑:Walter Roberson
2020-7-1
load('BNI_processed.mat')
input_forces = Force_arr(:,2);
time_matrix = Force_arr(:,1);
Fs = 100;
last_time = ceil(time_matrix(end) / Fs) * Fs; %round UP
time_to_interp = 0 : 1/Fs : last_time;
Force = [time_to_interp; interp1(time_matrix, input_forces, time_to_interp)] .;
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!