Extracción de datos de múltiples formas de onda continuas utilizando JSLEstoy intentando extraer valores de tiempo donde los pulsos rectangulares continuos se encuentran con V0 potentail.
Aunque solo mostré 2 ciclos para 3 formas seguras, existen más ciclos y el número de formas de onda es más de 3.
El ascenso y la caída se producen en un tiempo diferente para cada forma de onda, y deseo encontrar una solución para extraer t1_rise, t1_fall, t2_rise, t2_fall ... para el conjunto de datos dado.
Si alguno de ustedes puede iluminarme, será tremendamente agradecido.
Gracias,
Pi
Re: Extracción de datos de múltiples formas de onda continuas utilizando JSLTomé el código que había incluido y solo agregué un tiempo muerto después de un cruce si se observaba, durante el cual se ignoran los cruces de sub-consulta.
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: Extracción de datos de múltiples formas de onda continuas utilizando JSL Tuve un post distante relacionado con las formas de onda de la línea eléctrica en algún momento atrás .
Incluye un gráfico de una forma de onda de 60Hz con una caída de 1/2 segundo y algunas ideas mal pensadas sobre la detección de la frecuencia contando los cruces por cero ... en particular, el cálculo de la frecuencia creó un extremo atípico cuando falló la alimentación.
Re: Extracción de datos de múltiples formas de onda continuas utilizando JSL¡¡Funcionó!!
Realmente aprecio tu ayuda, y estoy muy feliz de aprender de ti, Jim.
Después de encontrar la manera de implementar su solución en mi código jsl, de hecho, encontré otro problema.
Hay pocas detecciones falsas debido a la oscilación en la forma de onda.
Podría deshacerme de algunas detecciones falsas después del pulso eliminando puntos de datos.
Pero, para el primer pulso, varias formas de onda tienen detección múltiple en el flanco ascendente debido a un lento aumento del tiempo. (También se puede encontrar en la tabla de datos de muestra que adjunté anteriormente en este hilo).
Sé que te estoy molestando demasiado, pero no puedo pensar en cómo eliminarlos dentro del pulso.
Deseo que me puedas iluminar una forma de filtrarlos / ignorarlos.
Gracias,
Pil
Re: Extracción de datos de múltiples formas de onda continuas utilizando JSLHe reunido un pequeño script simple, que con la excepción de calcular el 90% y el 10% del máximo (un poco confundido sobre lo que quiere allí), creo que esto es algo de lo que quiere.
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: Extracción de datos de múltiples formas de onda continuas utilizando JSLRealmente aprecio tu comentario
Adjunto una tabla de datos de muestra a continuación, y realmente espero que me puedan dar una solución.
Como ha dicho, tengo marcas de tiempo espaciadas igualmente para las formas de onda que se apilan juntas en la misma columna, y el número de forma de onda se clasifica en una columna que debo mantener. (es decir No puedo dividir la columna.
Para encontrar el tiempo de subida y bajada de cada pulso rectangular, deseo encontrar el tiempo de cruce del voltaje al 10% y 90% del voltaje máximo (excluyendo los sobreimpulsos y rebajes que son aproximadamente 6 V) en cada pulso rectangular.
Si dos cruces de umbral por un borde son demasiado complicados, deseo encontrar la manera de detectar el tiempo para un solo cruce de umbral.
Espero poder encontrar la solución de la comunidad.
Gracias,
Pil
Gracias,
Pil
Re: Extracción de datos de múltiples formas de onda continuas utilizando JSLSuponiendo que cada fila tiene una marca de tiempo y un valor de voltaje, entonces es relativamente simple pasar los datos y detectar cuándo los datos cruzan un voltaje específico. Hacer esto para múltiples formas de onda sería un poco más complejo. Lo que sería útil es ver cuál es la estructura de su tabla de datos. Si pudiera proporcionar eso, estoy seguro de que alguien en la comunidad podría brindarle una solución