Dies kann so gemacht werden:
%Vor% Erklärung: ind
sind die Indizes aller Samples, bei denen das Signal unterhalb oder oberhalb der oberen Schwelle liegt und für die die Position des 'Schalters' somit wohldefiniert ist. Mit cumsum
machen Sie eine Art Zähler, der auf den Index des letzten wohldefinierten Beispiels zeigt. Wenn der Anfang des Eingabevektors zwischen den beiden Schwellenwerten liegt, ist cnt
gleich 0. Daher müssen Sie die entsprechende Ausgabe mit der Funktion where
auf den Anfangswert setzen.
Credit: Das ist ein Trick, den ich in einem alten Post in einem Matlab-Forum gefunden habe, das ich übersetzt nach Numpy. Dieser Code ist ein wenig schwer zu verstehen und muss auch verschiedene Zwischen-Arrays zuweisen. Es wäre besser, wenn Numpy eine dedizierte Funktion enthalten würde, die Ihrer einfachen for-Schleife ähnlich ist, aber in C für Geschwindigkeit implementiert wird.
Schnelltest:
%Vor%Ergebnis: