Estrazione di dati da più forme d'onda continue usando JSLSto cercando di estrarre i valori temporali in cui gli impulsi rettangolari continui incontrano V0 potenziale.
Anche se ho mostrato solo 2 cicli per 3 wafeform, esistono più cicli e il numero di forme d'onda è più di 3.
L'innalzamento e la caduta avvengono in tempi diversi per ogni forma d'onda, e desidero trovare una soluzione per estrarre t1_rise, t1_fall, t2_rise, t2_fall ... per data set di dati.
Se qualcuno di voi può illuminarmi, sarà estremamente grato.
Grazie,
Pi
Ri: Estrazione di dati da più forme d'onda continue usando JSLHo preso il codice che avevo incluso e ho aggiunto solo un tempo morto dopo un attraversamento se osservato, durante il quale vengono ignorati i passaggi successivi.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "time of crossing" );
dt << New Column( "direction", character );
dt << New Column( "Which threshold", character );
max90 = 5.6;
max10 = .6;
deadtime = .001;
lastcross = -9999999999;
timerise = Function( {MaxPercent},
:time of crossing[i] = ((MaxPercent - :voltage[i - 1]) / (:voltage[i] - :voltage[i - 1])) * (:time[i] - :time[i - 1]) + :time[i - 1]
);
timefall = Function( {MaxPercent},
:time of crossing[i] = ((:voltage[i - 1] - MaxPercent) / (:voltage[i - 1] - :voltage[i])) * (:time[i - 1] - :time[i]) + :time[i]
);
For( i = 2, i <= N Rows( dt ), i++,
If( :waveform[i - 1] != :waveform[i],
Show( i ),
If( :voltage[i] >= max10 & :voltage[i - 1] < max10 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timerise( max10 );
:direction[i] = "Rise";
:Which Threshold[i] = "10%";
);
If( :voltage[i] >= max90 & :voltage[i - 1] < max90 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timerise( max90 );
:direction[i] = "Rise";
:Which Threshold[i] = "90%";
);
If( :voltage[i] <= max10 & :voltage[i - 1] > max10 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timefall( max10 );
:direction[i] = "Fall";
:Which Threshold[i] = "10%";
);
If( :voltage[i] <= max90 & :voltage[i - 1] > max90 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timefall( max90 );
:direction[i] = "Fall";
:Which Threshold[i] = "90%";
);
)
);Ri: Estrazione di dati da più forme d'onda continue usando JSL Qualche tempo fa avevo un post relativo alle forme d'onda della linea elettrica .
Include un grafico di una forma d'onda a 60 Hz con un drop out di 1/2 secondo e alcune idee mal concepite sulla rilevazione della frequenza mediante il conteggio di zero crossing ... in particolare il calcolo della frequenza ha creato un outlier estremo quando la potenza è fallita.
Ri: Estrazione di dati da più forme d'onda continue usando JSLHa funzionato !!
Apprezzo molto il tuo aiuto e sono molto felice di imparare da te, Jim.
Dopo aver trovato il modo di implementare la tua soluzione nel mio codice jsl, in effetti, ho trovato un altro problema.
Ci sono alcuni falsi rilevamenti dovuti all'oscillazione nella forma d'onda.
Potrei sbarazzarmi di alcuni falsi rilevamenti che sono felici dopo l'impulso rimuovendo i punti dati.
Tuttavia, per il primo impulso, diverse forme d'onda hanno una rilevazione multipla sul fronte di salita a causa di un lento tempo di salita. (Può anche essere trovato nella tabella dei dati di esempio che ho allegato in questa discussione in precedenza.)
So che ti sto disturbando troppo, ma non riesco a pensare a come rimuoverli dal polso.
Spero che tu possa illuminarmi un modo per filtrarli / ignorarli.
Grazie,
Pil
Ri: Estrazione di dati da più forme d'onda continue usando JSLHo messo insieme una piccola sceneggiatura semplice, che con l'eccezione del calcolo del 90% e del 10% di max (un po 'confuso su quello che vuoi lì), penso che questo sia quello che vuoi.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "time of crossing" );
dt << New Column( "direction", character );
dt << New Column( "Which threshold", character );
max90 = 5.6;
max10 = .6;
timerise = Function( {MaxPercent},
:time of crossing[i] = ((MaxPercent - :voltage[i - 1]) / (:voltage[i] - :voltage[i - 1])) * (:time[i] - :time[i - 1]) + :time[i - 1]
);
timefall = Function( {MaxPercent},
:time of crossing[i] = ((:voltage[i - 1] - MaxPercent) / (:voltage[i - 1] - :voltage[i])) * (:time[i - 1] - :time[i]) + :time[i]
);
For( i = 2, i <= N Rows( dt ), i++,
If( :waveform[i - 1] != :waveform[i],
Show( i ),
If( :voltage[i] >= max10 & :voltage[i - 1] < max10,
x = timerise( max10 );
:direction[i] = "Rise";
:Which Threshold[i] = "10%";
);
If( :voltage[i] >= max90 & :voltage[i - 1] < max90,
x = timerise( max90 );
:direction[i] = "Rise";
:Which Threshold[i] = "90%";
);
If( :voltage[i] <= max10 & :voltage[i - 1] > max10,
x = timefall( max10 );
:direction[i] = "Fall";
:Which Threshold[i] = "10%";
);
If( :voltage[i] <= max90 & :voltage[i - 1] > max90,
x = timefall( max90 );
:direction[i] = "Fall";
:Which Threshold[i] = "90%";
);
)
);Ri: Estrazione di dati da più forme d'onda continue usando JSLApprezzo molto il tuo commento
Ho allegato una tabella di dati di esempio qui sotto, e spero davvero che tu possa darmi una soluzione.
Come hai detto, ho timestamp equamente distanziati per le forme d'onda che sono raggruppate insieme nella stessa colonna, e il numero della forma d'onda è classificato in una colonna che ho bisogno di conservare. (vale a dire Non riesco a dividere la colonna.)
Per trovare il tempo di salita e discesa di ciascun impulso rettangolare, desidero trovare il tempo di attraversamento della tensione al 10% e al 90% della tensione massima (esclusi overshoots e undershoot che è circa 6V) su ciascun impulso rettangolare.
Se due passaggi a livello per uno spigolo sono troppo complicati, desidero trovare il modo di rilevare il tempo per una sola soglia.
Spero di poter trovare la soluzione dalla comunità.
Grazie,
Pil
Grazie,
Pil
Ri: Estrazione di dati da più forme d'onda continue usando JSLPartendo dal presupposto che ogni riga ha un timestamp e un valore di tensione, allora è relativamente semplice passare attraverso i dati e rilevare quando i dati attraversano una determinata tensione. Fare questo per più forme d'onda sarebbe solo un po 'più complesso. Quello che sarebbe utile è vedere qual è la struttura della tua tabella di dati. Se potessi fornirlo, sono sicuro che qualcuno nella comunità sarebbe in grado di fornirti una soluzione