Matlab 组合不同频率的数据矩阵
在MATLAB中,我如何组合在不同频率下测量的两个数据矩阵,以便结果在更高频率下索引?由于在较低频率下测量的数据在结果中会有许多未知值,因此我想用矩阵中最后一个已知值替换它们。有大量数据,因此首选矢量化解决方案。我在下面添加了一些示例数据 给定:Matlab 组合不同频率的数据矩阵,matlab,time-series,fill,Matlab,Time Series,Fill,在MATLAB中,我如何组合在不同频率下测量的两个数据矩阵,以便结果在更高频率下索引?由于在较低频率下测量的数据在结果中会有许多未知值,因此我想用矩阵中最后一个已知值替换它们。有大量数据,因此首选矢量化解决方案。我在下面添加了一些示例数据 给定: index1 data1 index2 data2 1 2.1 2 30.5 2 3.3 6 32.0 3 3.5 9 35
index1 data1 index2 data2
1 2.1 2 30.5
2 3.3 6 32.0
3 3.5 9 35.0
4 3.9 13 35.5
5 4.5 17 34.5
6 5.0 20 37.0
7 5.2 ... ...
8 5.7
9 6.8
10 7.9
... ...
index1 data1 data2
1 2.1 NaN
2 3.3 30.5
3 3.5 30.5
4 3.9 30.5
5 4.5 30.5
6 5.0 32.0
7 5.2 32.0
8 5.7 32.0
9 6.8 35.0
10 7.9 35.0
... ... ...
结果:
index1 data1 index2 data2
1 2.1 2 30.5
2 3.3 6 32.0
3 3.5 9 35.0
4 3.9 13 35.5
5 4.5 17 34.5
6 5.0 20 37.0
7 5.2 ... ...
8 5.7
9 6.8
10 7.9
... ...
index1 data1 data2
1 2.1 NaN
2 3.3 30.5
3 3.5 30.5
4 3.9 30.5
5 4.5 30.5
6 5.0 32.0
7 5.2 32.0
8 5.7 32.0
9 6.8 35.0
10 7.9 35.0
... ... ...
编辑:
我认为下面的文章接近我需要的,但我不确定如何转换解决方案以适应我的问题。
编辑(几个月后):
我最近遇到了一个很好的小功能,我认为它可能对任何登上这篇文章的人都有用:
function yi = interpLast(x,y,xi)
%INTERPLAST Interpolates the input data to the last known value.
% Note the index data should be input in ASCENDING order.
inds = arrayfun(@findinds, xi);
yi = y(inds);
function ind = findinds(val)
ind = find(x<=val,1,'last');
if isempty(ind)
ind = 1;
end
end
end
函数yi=interpLast(x,y,xi)
%INTERPLAST将输入数据插值为最后一个已知值。
%注:索引数据应按升序输入。
inds=arrayfun(@findinds,xi);
yi=y(inds);
函数ind=findinds(val)
ind=find(x问题在于游程解码。请参阅的第15.5.2节(这是一篇让所有Matlab爱好者大开眼界的文章)
下面将该方法与您的示例一起使用(我正在使用,但Matlab的代码是相同的):
根据需要用NaN填充开头。我最近遇到了与您相同的问题:我有数据,由不同的系统测量,这些数据必须同步和处理
我的解决方案是将测量数据和时间信息(频率、测量开始时的时间)放在a中。然后我为该类实现了乘法、加法等方法,该方法自动处理所有必要的事情,如下所示:
- 对低频信号进行上采样(使用线性插值()
- 移动其中一个信号,使数据及时对齐
- 在开始和结束时切断不重叠的数据集(对于两个不同的系统,您永远不会同时开始或停止测量,因此存在一些多余的数据)
- 实际执行乘法运算
- 将结果作为新的类对象返回
除此之外,还有其他一些函数,您可以猜测它们的作用:plot、lpf、mean、getTimeIndex、getIndexAtime
这让我可以简单地做
signalsLabview = importLabViewSignals(LabViewData);
signalsMatlab = importMatlabSignals(MatlabData, 100); %hz
hydrPower = signalsLabview.flow * signalsMatlab.pressure;
plot(hydrPower);
或者诸如此类的事情。如果你有很多这样的信号,你需要做一些数学运算,这真的很有帮助,并产生清晰的代码。否则,你有很多通用代码,只用于在每个操作中进行同步、移位、修剪。此外,快速检查也很容易
如果你必须经常做这些事情,我认为花一些时间来构建一个合适的框架是绝对值得的
不幸的是,我不认为我可以透露这段代码(IP等),但这不是火箭科学。谢谢,我相信这正是我需要的。此外,谢谢你给我指点《技巧和窍门手册》。我一定会保存它以备将来参考。