Pregunta

tenemos un detector de partículas cableados utilizar tampones de 16 bits y 8 bits. De vez en cuando, hay ciertas [predijo] picos de flujos de partículas que pasan a través de él; esta bien. Lo que es no bien es que estos flujos suelen alcanzar magnitudes por encima de la capacidad de las memorias intermedias para almacenarlos; Por lo tanto, se desborda se produzca. En un gráfico, se ven como el flujo cae repentinamente y comienza a crecer de nuevo. Se puede proponer un método [sobre todo] preciso para detectar puntos de datos que sufren de un exceso de capacidad?

P.S. El detector es físicamente inaccesibles, por lo que la fijación de la forma 'correcta' sustituyendo los topes no parece ser una opción.

Actualización: Algunas aclaraciones solicitados. Utilizamos pitón en las instalaciones de procesamiento de datos; la tecnología utilizada en el detector en sí es bastante oscura (lo tratan como si fue desarrollado por un tercero sin relación), pero definitivamente es poco sofisticado, es decir, no se está ejecutando un sistema operativo 'real', sólo algunas cosas de bajo nivel para registrar el lecturas del detector y para responder a los comandos remotos como ciclo de potencia. corrupción de memoria y otros problemas no son un problema en este momento. Los desbordamientos se producen simplemente porque el diseñador del detector utilizado tampones de 16 bits para contar el flujo de partículas, y en ocasiones el flujo excede 65535 partículas por segundo.

Actualización 2: A medida que varios lectores han señalado, la solución previsto pueda tener algo que ver con el análisis del perfil de flujo para detectar fuertes caídas (por ejemplo, por un orden de magnitud) en un intento de separar de las fluctuaciones normales. Otro problema que surge es:? Pueden restauraciones (puntos donde el flujo original, cae por debajo del nivel de desbordamiento) pueden detectar simplemente ejecutando el programa de corrección en contra de la Revertidos (por el x eje) perfil del flujo

¿Fue útil?

Solución

int32[] unwrap(int16[] x)
{
   // this is pseudocode
   int32[] y = new int32[x.length];
   y[0] = x[0];
   for (i = 1:x.length-1)
   {
      y[i] = y[i-1] + sign_extend(x[i]-x[i-1]);
      // works fine as long as the "real" value of x[i] and x[i-1]
      // differ by less than 1/2 of the span of allowable values
      // of x's storage type (=32768 in the case of int16)
      // Otherwise there is ambiguity.
   }
   return y;
}

int32 sign_extend(int16 x)
{
   return (int32)x; // works properly in Java and in most C compilers
}

// exercise for the reader to write similar code to unwrap 8-bit arrays
// to a 16-bit or 32-bit array

Otros consejos

Por supuesto, lo ideal es que lo arreglaría el software detector de máximo fuera de 65535 para evitar envolvente del tipo que está causando su dolor. Yo entiendo que esto no siempre es posible, o al menos no siempre es posible hacerlo rápidamente.

Cuando el flujo de partículas es superior a 65.535, es lo que hace tan rápidamente, o no aumentar gradualmente el flujo y luego disminuir gradualmente? Esto hace una diferencia en lo algoritmo puede utilizar para detectar esto. Por ejemplo, si el flujo sube lentamente lo suficiente:

true flux     measurement  
 5000           5000
10000          10000
30000          30000
50000          50000
70000           4465
90000          24465
60000          60000
30000          30000
10000          10000

entonces te tienden a tener un grande caída negativa en momentos en los que se han desbordado. Una gota negativo mucho mayor de lo que va a tener en cualquier otro momento. Esto puede servir como una señal de que ha desbordado. Para encontrar el final del período de tiempo de desbordamiento, se podría buscar un gran salto a un valor no demasiado lejos de 65535.

Todo esto depende de la máxima cierto flujo que es posible y de la rapidez con las subidas y caídas de flujo. Por ejemplo, es posible obtener más de 128k recuentos en una periodo de medición? ¿Es posible que una medida sea 5000 y la siguiente medición sea 50000? Si los datos no están lo suficientemente comporta bien, es posible que pueda hacer sólo juicio estadística acerca de cuando se ha desbordado.

Su pregunta tiene que dar más información acerca de su aplicación -? Qué idioma / marco está usando

Los datos se desborda en el software (que es lo que creo que está hablando) son una mala práctica y debe ser evitado. Mientras que usted está viendo (salida de datos extraño) es sólo un efecto secundario que es posible cuando se experimenta desbordamientos de datos, pero es sólo la punta del iceberg de los tipos de problemas se puede ver.

Se puede experimentar con bastante facilidad los problemas más graves como la corrupción de memoria, que puede causar el programa falle en voz alta, o peor, oscuramente .

¿Hay alguna validación que puede hacer para prevenir los desbordamientos que se produzcan en el primer lugar?

Realmente no creo que se puede arreglar sin fijar los amortiguadores subyacentes. ¿Cómo se supone que debes decir la diferencia entre las secuencias de valores (0, 1, 2, 1, 0) y (0, 1, 65538, 1, 0)? No se puede.

¿Cómo sobre el uso de un HMM donde el estado oculto es si usted está en un desbordamiento y las emisiones se observó flujo de partículas?

La parte difícil se acerca con los modelos de probabilidad para las transiciones (que básicamente va a codificar la escala de tiempo de los picos) y para las emisiones (que se puede construir si usted sabe cómo se comporta el flujo y cómo desbordamiento afecta a la medición ). Estas son las preguntas específicas de dominio, por lo que probablemente no son soluciones ya hechas por ahí.

Pero uno que tiene el modelo, todo lo demás --- ajuste sus datos, la cuantificación de la incertidumbre, la simulación, etc .--- es rutina.

Sólo puede hacer esto si los saltos reales entre los sucesivos valores son mucho menores que 65536. De lo contrario, un artefacto valle desbordamiento inducido es indistinguible de un valle verdadera, sólo se puede adivinar. Se puede tratar de igualar los desbordamientos de las restauraciones correspondientes, analizando al mismo tiempo una señal desde la derecha y la izquierda (suponiendo que hay una línea de base reconocible).

Aparte de eso, todo lo que puede hacer es ajustar el experimento mediante la repetición con diferentes flujos de partículas originales, por lo que los valles reales no se moverán, pero los artefactos se mueven hasta el punto de desbordamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top