Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 组合不同频率的数据矩阵_Matlab_Time Series_Fill - Fatal编程技术网

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

在MATLAB中,我如何组合在不同频率下测量的两个数据矩阵,以便结果在更高频率下索引?由于在较低频率下测量的数据在结果中会有许多未知值,因此我想用矩阵中最后一个已知值替换它们。有大量数据,因此首选矢量化解决方案。我在下面添加了一些示例数据

给定:

    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等),但这不是火箭科学。

谢谢,我相信这正是我需要的。此外,谢谢你给我指点《技巧和窍门手册》。我一定会保存它以备将来参考。