1

我有一些时间序列中存在空白的数据。找到间隙的索引以及长度和所有内容。问题是我想将我的数据(列:时间和测量值)分割成几个矩阵/向量或将其分割成一个结构。我的计划是对这些小时间序列进行傅立叶变换以进行进一步比较。

让我们试着用一个例子来解释:Tdat 是时间序列,有 3825 个点

    % find number of gaps
    nogap = diff(Tdat(find(diff(Tdat)>0.051))); %20Hz measurement
    numgaps = length(nogap) %number of gaps = bumgaps+1

这里的间隙数是 8

    %indexing the gaps
    w = find(diff(Tdat)>0.51); %finding the gaps %0.051 since 1/20=0.05


    u = find(diff(Tdat)<0.51); %finding indices with data
    series = length(M)-length(u) %amount of data series without gaps

没有间隙的数据系列数为 9

    delta = diff(w) %amount of points between two gaps (constant

这些差距之间的点数是 425。

因此,我希望有 9 个不同的矩阵/向量,其中只有数据并且每个长度为 425 没有时间间隙。

有什么方法或者我没有搜索到足够好的答案吗?

4

2 回答 2

1

从我从您的示例中可以看出,差距似乎不是您要删除的数据点,而是划分数据的地方?我对吗?由于生成的数据向量的长度相同,也许你想要reshape()你的向量?如reshape(Tdat,425,9).

这是一个小例子:

>> a = [1:12]'

a =

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12

>> b = reshape(a,4,3)

b =

     1     5     9
     2     6    10
     3     7    11
     4     8    12

mat2cell()如果您希望数据作为单元格,您也可以在之后使用:

>> c = mat2cell(b,4,ones(1,3))

c = 

    [4x1 double]    [4x1 double]    [4x1 double]

>> c{2}

ans =

     5
     6
     7
     8
于 2013-04-02T14:25:55.920 回答
0

好吧,我找到了另一个答案,最终结果证明它更有用。万一有人感兴趣。

由于并非总是所有部分(没有间隙)都具有相同的长度,因此很难跟踪用零填充某些列所需的所有索引。

因为我知道所有差距从哪里开始,所以我可以使用新的索引将它们放入结构中。

gl = find(diff(Tdat)>0.051);

gaps = length(gl)-1;

for a = 1:gaps;
    Meas(a).M       = M( gl(a)+1 : gl(a+1) );
end

其中 Tdat 是我的时间向量,M 是包含数据的向量。

于 2013-04-17T13:55:08.317 回答