情况如下: 我有~20000个mat文件,每个文件包含一个模拟结果,一个时间向量和多个信号向量。时间向量包含可变步长时间戳,每个时间戳都有相应的信号值。
我尝试做的是通过从可变步骤转换为0.001秒的固定步骤来减少数据量,因为目标系统还将使用1000个样本/秒的采样率。另一个原因是下一步,我将应用机器学习技术,因此更少的数据意味着更快的结果。
我已经有了一些工作代码,但它似乎效率很低,我希望得到一些帮助以提高效率。
所以这就是我得到的:
time_vs; % Variable step timestamp vector
s1; s2; s3; % Signals corresponding to time_vs
% For each mat file I do (loading and so on omitted):
new_time = min(time_vs):0.001:max(time_vs); % Create the new fixed step time vector.
% Find indexes for nearest timestamps.
indexes = [];
for t = new_time
time_diff = abs(time_vs - t);
add_index = find(time_diff == min(time_diff));
indexes = [indexes, add_index(1)];
end
% Reduce the signals.
s1 = s1(indexes);
% and so on ...
我的方法是在变量步时间向量中搜索最接近固定步长时间戳min(time_diff)
的时间戳。收集这些时间戳的索引以减少信号s1 = s1(indexes)
。
希望有更有效的解决方案。
提前致谢。
此致 编
答案 0 :(得分:0)
由于你的循环具有二次运行时复杂度,我会考虑使用内置函数进行线性插值:
s1 = interp1(time_vs, s1, new_time);