<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Ho tracce di segnali di processo e identifico tracce di impulsi contro forme di wafer casuali. Nella trama seguente, solo i valori di segnale con punti di campionamento adiacenti hanno un valore diverso da zero, ma se 1 punto di campionamento ha valori diversi da zero deve essere scartato.
In secondo luogo, devono essere contate solo le tracce di impulsi con una soglia superiore a un determinato valore, ad esempio 1,5 come qui.
Sto cercando di sviluppare un semplice script per questo. Il signalv, i campioni e le tracce sono memorizzati come colonne.

Senza dubbio ci sono modi più efficienti per farlo, ma il codice qui sotto potrebbe farti iniziare:
NamesDefaultToHere ( 1 ) ;
// Funzione per contare 'segnali' in un vettore di dati
countSignals =
Funzione ({ vec , val } , { Locale predefinito } ,
// Trova i punti sopra il valore 'val'
plusPos = Loc ( vec > val ) ;
zeroPos = Loc ( vec <= val ) ;
// Recode punti in modo appropriato
vec [ plusPos ] = 1 ;
vec [ zeroPos ] = 0 ;
// Conta il numero di segnali (corse di due o più valori di +1): Inizializza le variabili
nSignals = 0 ;
isSignal = 0 ;
precedente = vec [ 1 ] ;
// Passa sopra gli elementi di vec iniziando dal secondo. . .
Per ( e = 2 , e <= nRow ( vec ) , e ++,
Se ( ! isSignal ,
// Se non siamo già nel "mezzo" di un segnale, avvialo uno
Se ( vec [ e ] == precedente & precedente == 1 , isSignal = 1 ) ,
// Se siamo già nel "mezzo" di un segnale, è giunto al termine? In tal caso, contarlo e resettare.
Se ( vec [ e ] == 0 , nSignals ++; isSignal = 0 )
) ;
// Se siamo alla fine del vec e siamo nel mezzo di un segnale, dobbiamo ancora contarlo
Se ( e == nRow ( vec ) & isSignal , nSignals ++ ) ;
// Aggiorna il valore 'precedente' pronto per l'iterazione successiva
precedente = vec [ e ] ;
) ;
// Restituisce il numero di segnali
nSignals ;
) ;
/ *
// Questo vettore di test ha quattro esecuzioni (usando una soglia di 0,5):
v = [0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1];
Stampa (countSignals (v, 0.5));
* /
// Realizza dati fittizi. . .
n = 100 ;
dati = RandomShuffle ( J ( n / 2 , 1 , CasualeNormale ( 4 , 1 )) | / J ( n / 2 , 1 , 0 )) ;
dt = astable ( dati ) ;
dt << imposta nome ( "Dati di test per il conteggio dei segnali" ) ;
Colonna ( dt , "Col1" ) << imposta nome ( "Valore" ) ;
// compila. . .
Nuova finestra ( "Questi dati hanno" || carbonizzare ( countSignals ( dati , 1.0 )) || "Segnali" ,
dt << Costruttore di grafici (
Mostra il pannello di controllo ( 0 ) ,
Mostra leggenda ( 0 ) ,
variabili ( X ( Trasforma colonna ( "Riga" , Formula ( Riga () ) ) ) , Y ( : Valore ) ) ,
Elementi ( Linea ( X , Y , Leggenda ( 4 ) ) , Punti ( X , Y , Leggenda ( 5 ) ) ) ,
SendToReport (
Spedizione ( {} , "Valore" , scalebox , { Aggiungi linea di riferimento ( 1 , "Solido" , "Rosso" , "" , 1 )} )
)
) ;
) ;