Domanda

abbiamo un rilevatore di particelle hard-wired per utilizzare buffer a 16 bit e 8 bit. Ogni tanto, ci sono alcuni [previsto] picchi di flussi di particelle che passano attraverso di esso; va bene. Ciò che è non va bene è che questi flussi di solito raggiungono grandezze sopra della capacità dei buffer per memorizzare loro; così, trabocca verificarsi. In un grafico, sembrano il flusso scende improvvisamente e comincia a crescere nuovamente. Si può proporre un metodo [principalmente] accurata di rilevare punti di dati che soffrono di un overflow?

P.S. Il rivelatore è fisicamente inaccessibile, in modo da fissare il 'modo giusto' sostituendo i buffer non sembra essere un'opzione.

Aggiornamento: Alcuni chiarimenti come richiesto. Usiamo python presso l'impianto di trattamento dei dati; la tecnologia utilizzata nel rivelatore di sé è abbastanza oscura (lo trattano come se fosse stato sviluppato da una terza parte completamente indipendenti), ma è sicuramente non sofisticato, IE non esegue un sistema operativo 'reale', solo un po 'di roba di basso livello per registrare il rivelatore letture e rispondono ai comandi remoti come ciclo di alimentazione. Memoria corruzione e altri problemi non sono un problema in questo momento. Overflow verificano semplicemente perché il progettista del rivelatore utilizzato buffer a 16 bit per contare il flusso di particelle, e talvolta il flusso supera 65535 particelle per secondo.

Aggiornamento 2: Come molti lettori hanno fatto notare, la soluzione prevista potrebbe avere qualcosa a che fare con l'analisi del profilo di flusso per rilevare cali (ad esempio un ordine di grandezza), nel tentativo di separare li dalle fluttuazioni normali. Un altro problema:? Possono restauri (punti dove il flusso originale scende sotto il livello traboccante) rilevare semplicemente eseguendo il programma di correzione contro la conversione (dalla x asse) profilo di flusso

È stato utile?

Soluzione

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

Altri suggerimenti

Naturalmente, idealmente si sarebbe risolvere il software rilevatore a massimo fuori a 65535 per evitare avvolgente del tipo che sta causando il vostro dolore. Capisco che questo non è sempre possibile, o almeno non sempre è possibile fare in fretta.

Quando il flusso di particelle superiore a 65535, fa fare così in fretta, o se il flusso di aumentare gradualmente e poi gradualmente diminuire? Questo fa la differenza in quello che l'algoritmo è possibile utilizzare per rilevare questo. Ad esempio, se il flusso va abbastanza lentamente:

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

Allora ti tendono ad avere una di grandi dimensioni goccia negativo nei momenti in cui si è traboccato. Un molto più grande calo negativo che avrete in qualsiasi altro momento. Questo può servire come un segnale che hai overflow. Per trovare la fine del periodo di tempo troppo pieno, si potrebbe cercare un grande salto per un valore non troppo lontano da 65535.

Tutto questo dipende dalla massima vero flusso che è possibile e su quanto rapidamente gli aumenti di flusso e cadute. Ad esempio, è possibile ottenere più di 128k conta in un periodo di misurazione? E 'possibile per una misurazione di essere 5000 e la misura successiva di essere 50000? Se i dati non sono abbastanza ben educati, si può essere in grado di fare solo giudizio statistiche circa quando si è in overflow.

La tua domanda ha bisogno di fornire maggiori informazioni sulla tua implementazione -? Che lingua / quadro stai usando

Dati overflow nel software (che è quello che penso tu stia parlando) sono cattiva pratica e deve essere evitato. Mentre si sta vedendo (strano output di dati) è solo un effetto collaterale che è possibile quando si verifica overflow di dati, ma è solo la punta dell'iceberg dei tipi di problemi si può vedere.

Si potrebbe facilmente verificarsi più gravi problemi come la corruzione della memoria, che possono causare crash programmi ad alta voce, o, peggio, oscuramente .

C'è una convalida che si può fare per evitare che i trabocchi si verifichi in primo luogo?

Io davvero non credo che si possa essere risolto senza fissa i buffer sottostanti. Come si fa a capire la differenza tra le sequenze di valori (0, 1, 2, 1, 0) e (0, 1, 65538, 1, 0)? Non è possibile.

Come sull'utilizzo di un HMM in cui lo stato nascosto è se ci si trova in un overflow e le emissioni sono osservate flusso di particelle?

La parte difficile sarebbe venuta su con i modelli di probabilità per le transizioni (che sarà essenzialmente codificare il tempo scala di picchi) e per le emissioni (che si può costruire se si sa come il flusso si comporta e come troppo pieno colpisce di misura ). Queste sono domande specifiche del dominio, quindi probabilmente non ci sono soluzioni preconfezionate là fuori.

Ma quello che avete il modello, tutto il resto --- fitting dei dati, quantificare l'incertezza, la simulazione, ecc .--- è di routine.

Si può solo fare questo se i salti effettive tra i valori successivi sono molto più piccoli di 65536. In caso contrario, una valle artefatto di overflow-indotta è indistinguibile da un vero e proprio valle, si può solo immaginare. È possibile cercare di abbinare overflow a corrispondenti restauri, analizzando simultaneamente un segnale da destra e sinistra (supponendo che vi sia una linea di base riconoscibile).

Oltre a questo, tutto quello che puoi fare è di regolare l'esperimento ripetendo con diversi flussi di particelle originali, in modo che i veri valli non si muove, ma quelli artefatto spostare fino al punto di troppo pieno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top