Wie finden Sie Nulldurchgänge mit Hysterese?

8

In wenigen Worten möchte ich die Punkte erkennen, an denen das Signal von einer bestimmten Schwelle (früher) unterschritten wird und oberhalb einer bestimmten anderen Schwelle liegt. Dies ist für Dinge wie Entprellen, oder genaue Nulldurchgänge in Gegenwart von Lärm, etc.

So:

%Vor%

Ich möchte einen Weg, dies zu tun, ohne das Array explizit zu durchlaufen: aber ich kann mir keinen Weg vorstellen, da jeder Zustandswert vom vorherigen Zustand abhängt. Ist es möglich, auf eine Schleife zu verzichten?

    
Alex I 25.04.2014, 10:03
quelle

2 Antworten

10

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:

    
Bas Swinckels 25.04.2014, 11:23
quelle
1

Änderungen, die ich für meine Arbeit machen musste, alles basierend auf der obigen Antwort von Bas Swinckels , um die Erkennung von Schwellenwertüberschreitung bei Verwendung von Standard- sowie umgekehrten -Schwellenwerten.

Ich bin nicht glücklich mit der Namensgebung, vielleicht sollte es jetzt th_hi2lo und th_lo2hi statt th_lo und th_hi lesen? Unter Verwendung der ursprünglichen Werte ist das Verhalten ähnlich schwierig.

%Vor%

Und wie oben ein Test des Codes, um zu sehen, was er tut:

%Vor%

    
AMTQ 22.02.2018 00:22
quelle

Tags und Links