非常に長いシーケンスがあると想像してください。シーケンスがすべてゼロである間隔を見つける最も効率的な方法は何ですか (より正確には、シーケンスがゼロに近い値に低下しますabs(X)<eps
):
簡単にするために、次のシーケンスを想定します。
sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0];
次の情報を取得しようとしています。
startIndex EndIndex Duration
3 6 4
12 12 1
14 16 3
25 26 2
30 30 1
次に、この情報を使用して、duration >= から指定された値 (たとえば3
) の間隔を見つけ、これらすべての間隔の値のインデックスを組み合わせて返します。
indices = [3 4 5 6 14 15 16];
その最後の部分は、前の質問に関連しています。
これは私がこれまでに持っているものです:
sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0];
len = length(sig);
thresh = 3;
%# align the signal with itself successively shifted by one
%# v will thus contain 1 in the starting locations of the zero interval
v = true(1,len-thresh+1);
for i=1:thresh
v = v & ( sig(i:len-thresh+i) == 0 );
end
%# extend the 1's till the end of the intervals
for i=1:thresh-1
v(find(v)+1) = true;
end
%# get the final indices
v = find(v);
コードのベクトル化/最適化を検討していますが、他のソリューションも受け入れています。多数の長い生体信号を処理しているため、空間と時間の効率が非常に重要であることを強調しなければなりません。