Extraction de données de plusieurs formes d'onde continues à l'aide de JSLJ'essaie d'extraire des valeurs de temps où des impulsions rectangulaires continues rencontrent un potentiel V0.
Bien que je n’ai montré que 2 cycles pour 3 wafeforms, il existe plus de cycles et le nombre de formes d’ondes est supérieur à 3.
Les montées et les descentes se produisent à des moments différents pour chaque forme d'onde, et je souhaite trouver une solution pour extraire t1_rise, t1_fall, t2_rise, t2_fall ... pour un ensemble de données donné.
Si l'un de vous peut m'éclairer, ce sera extrêmement reconnaissant.
Merci,
Pi
Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSLJ'ai pris le code que j'avais inclus et juste ajouté un temps mort après un passage, si observé, pendant lequel les passages sous-requête sont ignorés.
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%";
);
)
);Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSL J’avais un post éloigné sur les formes d’ondes de lignes électriques quelque temps en arrière .
Il inclut un graphique représentant une forme d'onde de 60Hz avec une perte de 1/2 seconde et quelques idées mal pensées sur la détection de fréquence en comptant les passages à zéro ... en particulier, le calcul de fréquence a créé une valeur extrême extrême en cas de panne de courant.
Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSLÇa a marché !!
J'apprécie vraiment votre aide et je suis très heureux d'apprendre de vous, Jim.
Après avoir trouvé le moyen d’implémenter votre solution dans mon code jsl, j’ai trouvé un autre problème.
Il y a peu de fausses détections dues à une oscillation dans la forme d'onde.
Je pourrais éliminer certaines fausses détections après l'impulsion en supprimant des points de données.
Cependant, pour la première impulsion, plusieurs formes d'onde ont une détection multiple sur le front montant en raison d'un temps de montée lent. (On peut également le trouver dans la table de données exemple que j'ai incluse précédemment dans ce fil de discussion.)
Je sais que je vous dérange trop, mais je ne vois pas comment supprimer ceux qui sont dans le pouls.
J'aimerais que vous puissiez m'éclairer sur un moyen de les filtrer / les ignorer.
Merci,
Pil
Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSLJ'ai mis en place un petit script simple qui, à l'exception du calcul des 90% et 10% de max (un peu confus sur ce que vous voulez là-bas), je pense que c'est un peu ce que vous voulez.
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%";
);
)
);Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSLJ'apprécie vraiment votre commentaire
J'ai joint un exemple de tableau de données ci-dessous et j'espère vraiment que vous pourrez me donner une solution.
Comme vous l'avez dit, j'ai des horodatages équidistants pour les signaux empilés dans la même colonne, et le numéro du signal est classé dans une colonne que je dois conserver. (c'est à dire Je ne peux pas scinder la colonne.)
Pour trouver le temps de montée et de descente de chaque impulsion rectangulaire, je souhaite trouver le temps de croisement de la tension à 10% et 90% de la tension maximale (à l'exclusion des dépassements et des dépassements inférieurs qui est d'environ 6V) sur chaque impulsion rectangulaire.
Si le franchissement de deux seuils par bord est trop compliqué, je souhaite trouver le moyen de détecter le temps nécessaire pour un seul franchissement de seuil.
J'espère que je pourrai trouver la solution auprès de la communauté.
Merci,
Pil
Merci,
Pil
Re: extraction de données de plusieurs formes d'onde continues à l'aide de JSLEn supposant que chaque ligne possède un horodatage et une valeur de tension, il est relativement simple de faire transiter les données et de détecter le moment où elles franchissent une tension spécifiée. Faire cela pour plusieurs formes d'onde serait juste un peu plus complexe. Ce qui serait utile est de voir quelle est la structure de votre table de données. Si vous pouviez fournir cela, je suis sûr que quelqu'un dans la communauté serait capable de vous fournir une solution