Хорошо, я бы предложил найти все места, где он переключается с 0 на 1, а затем найти все места, где он переключается с 1 на 0, и использовать эти индексы, чтобы найти эти длины.Проблема возникает на краях, где, если первая запись равна 1, она не переключает на единицу с нуля, а если последняя запись равна 1, мы никогда не найдем ее, потому что в конце ничего не переключается на 0,Чтобы легко избежать этой проблемы, мы можем добавить 0 в начале и один в конце.Таким образом, мы гарантируем, что найдем каждый из этих взрывов.По сути:
b = [0 a 0];
d = diff(b);
posEdge = find(d==1);
negEdge = find(d==-1);
countOnes = negEdge - posEdge