<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe Prozesssignalverläufe und identifiziere Impulsverläufe gegen zufällige Waferformen. In der Abbildung unten haben nur Signalwerte mit benachbarten Abtastpunkten einen Wert ungleich Null, aber wenn ein Abtastpunkt Werte ungleich Null aufweist, ist er zu verwerfen.
Zweitens sollen nur Impulsverläufe gezählt werden, deren Schwelle oberhalb eines bestimmten Wertes liegt, beispielsweise wie hier 1,5.
Ich freue mich darauf, ein einfaches Skript dafür zu entwickeln. Das Signal, die Samples und die Spuren werden als Spalten gespeichert.

Zweifellos gibt es effizientere Möglichkeiten, dies zu tun, aber der folgende Code könnte Ihnen den Einstieg erleichtern:
NamesDefaultToHere ( 1 ) ;
// Funktion zum Zählen von 'Signalen' in einem Datenvektor
countSignals =
Funktion ({ vec . val } . { Default Local } .
// Finde Punkte über dem Wert 'val'
plusPos = Loc ( vec > val ) ;
zeroPos = Loc ( vec <= val ) ;
// Punkte entsprechend umkodieren
vec [ plusPos ] = 1 ;
vec [ zeroPos ] = 0 ;
// Zählen Sie die Anzahl der Signale (Läufe von zwei oder mehr Werten von +1): Initialisieren Sie die Variablen
nSignale = 0 ;
isSignal = 0 ;
Bisherige = vec [ 1 ] ;
// Schleife über die Elemente von vec beginnend mit dem zweiten. . .
Zum ( e = 2 . e <= NRow ( vec ) . e ++
ob ( ! isSignal .
// Wenn wir uns nicht bereits in der Mitte eines Signals befinden, starten Sie eines
ob ( vec [ e ] == Bisherige & Bisherige == 1 . isSignal = 1 ) .
// Wenn wir uns bereits in der Mitte eines Signals befinden, ist das beendet? Wenn ja, zähle es und setze es zurück.
ob ( vec [ e ] == 0 . nSignale ++; isSignal = 0 )
) ;
// Wenn wir am Ende von vec sind und sich in der Mitte eines Signals befinden, müssen wir es noch zählen
ob ( e == NRow ( vec ) & isSignal . nSignale ++ ) ;
// Aktualisieren Sie den vorherigen Wert für die nächste Iteration
Bisherige = vec [ e ] ;
) ;
// Liefert die Anzahl der Signale
nSignale ;
) ;
/ *
// Dieser Testvektor hat vier Läufe (mit einem Schwellenwert von 0,5):
v = [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
Drucken (Zählsignale (v, 0,5));
* /
// Machen Sie Dummy-Daten. . .
n = 100 ;
Daten = RandomShuffle ( J ( n / 2 . 1 . RandomNormal ( 4 . 1 )) | / J ( n / 2 . 1 . 0 )) ;
dt = AsTable ( Daten ) ;
dt << Name einsetzen ( Testdaten für die Signalzählung ) ;
Säule ( dt . "Col1" ) << Name einsetzen ( "Wert" ) ;
// Zeichne es auf. . .
Neues Fenster ( "Diese Daten haben" || Verkohlen ( countSignals ( Daten . 1,0 )) || "Signale" .
dt << Graph Builder (
Systemsteuerung anzeigen ( 0 ) .
Legende anzeigen ( 0 ) .
Variablen ( X ( Spalte transformieren ( "Reihe" . Formel ( Reihe () ) ) ) . Y ( : Wert ) ) .
Elemente ( Linie ( X . Y . Legende ( 4 ) ) . Punkte ( X . Y . Legende ( 5 ) ) ) .
SendToReport (
Versand ( {} . "Wert" . ScaleBox . { Ref Line hinzufügen ( 1 . "Solide" . "Rot" . "" . 1 )} )
)
) ;
) ;