質問: 二値の配列の中で、同じ値が任意の点数分、連続する位置を検出するにはどうすればいいですか? 0,1のみからなる1×n の行列 x に対して、0から1へ変化した後、1が100個以上続くような点を計算するにはどうすればよいか、教えてください。
回答: signal processing toolbox の pulsewidth 関数を用いることで計算できます。 https://jp.mathworks.com/help/signal/ref/pulsewidth.html 以下に例を示します。ここでは、1が 5点以上続くインデックスを検出しています。 入力信号を[x 0]としているのは、xの最後の要素が1の場合、最後に立ち下げておかないとパルスと判定されないためです。 >> rng(1) % reproducibility % サンプル信号の作成 >> x = rand(1,20)<0.5 x = 1×20 の logical 配列 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 >> [w,initcross] = pulsewidth([x 0]); %パルス幅を計算 >> ind = ceil(initcross(w>=5)) % 5点以上続くインデックスの開始位置を算出 ind = 3