Question

on a un détecteur de particules câblé à utiliser 16 bits et des tampons à 8 bits. De temps en temps, il y a certains pics [prévu] du flux de particules passant à travers elle; c'est bon. Qu'est-ce que pas est d'accord que ces flux atteignent habituellement des grandeurs ci-dessus la capacité des tampons pour les stocker; ainsi, les débordements se produisent. Sur un tableau, ils ressemblent le flux tombe soudainement et commence à pousser. Pouvez-vous proposer une méthode précise [la plupart] de détecter les points de données qui souffrent d'un débordement?

P.S. Le détecteur est physiquement inaccessible, alors fixer la « voie droite » en remplaçant les tampons ne semble pas être une option.

Mise à jour: Quelques précisions demandées. Nous utilisons python à l'installation de traitement de données; la technologie utilisée dans le détecteur lui-même est assez obscure (traiter comme il a été développé par un tiers sans aucun rapport), mais il est certainement peu sophistiquée, c.-à-pas en cours d'exécution d'un système d'exploitation « réel », juste des choses de bas niveau pour enregistrer la les lectures du détecteur et pour répondre à des commandes à distance telles que le cycle d'alimentation. la corruption de la mémoire et d'autres problèmes ne sont pas un problème en ce moment. Les débordements se produisent simplement parce que le concepteur du détecteur utilisé des tampons de 16 bits destiné à compter le flux de particules, et parfois le flux dépasse 65535 particules par seconde.

Mise à jour 2: Comme plusieurs lecteurs l'ont souligné, la solution destinée aurait quelque chose à voir avec l'analyse du profil de flux pour détecter une forte baisse (par exemple un ordre de grandeur) pour tenter de séparer les fluctuations de normales. Un autre problème se pose: peut restaurations (points où le flux d'origine tombe en dessous du niveau de débordement) être détectés par un simple exécutant le programme de correction contre le reverted (par la x axe) profil de flux

Était-ce utile?

La solution

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

Autres conseils

Bien sûr, idéalement vous devriez fixer le logiciel de détecteur max à 65535 pour éviter ce bouclage du genre qui est la cause de votre douleur. Je comprends que ce n'est pas toujours possible, ou du moins n'est pas toujours possible de le faire rapidement.

Lorsque le flux de particules dépasse 65535, fait-elle si vite, ou ne le flux augmente progressivement puis diminuer progressivement? Cela fait une différence dans quel algorithme vous pouvez utiliser pour détecter. Par exemple, si le flux va assez lentement:

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

alors vous aurez tendance à avoir une grand baisse négatif à des moments où vous avez débordé. Une chute négative beaucoup plus grande que vous aurez à tout autre moment. Cela peut servir de signal que vous avez débordé. Pour trouver la fin de la période de temps de trop-plein, vous pouvez chercher un gros saut à une valeur pas trop loin de 65535.

Tout cela dépend du maximum de vrai flux qui est possible et sur la rapidité avec laquelle le flux monte et descend. Par exemple, est-il possible d'obtenir plus de 128k compte dans une période de mesure? Est-il possible pour une mesure soit 5000 et la mesure suivante à 50000? Si les données ne sont pas assez bien comportés, vous pourriez être en mesure de faire que le jugement statistique quand vous avez débordée.

Votre question doit fournir plus d'informations sur votre mise en œuvre - quelle langue / cadre utilisez-vous

Les données dans le logiciel déborde (qui est ce que je pense que vous parlez) sont mauvaises pratiques et doivent être évités. Pendant que vous voyez (sortie de données étrange) est seulement un effet secondaire qui est possible lorsque l'expérience déborde de données, mais il est seulement la pointe de l'iceberg des sortes de questions que vous pouvez voir.

Vous pourriez éprouver facilement des problèmes plus graves comme la corruption de mémoire, ce qui peut provoquer des programmes de tomber en panne à haute voix, ou pire, obscurément .

Y at-il validation que vous pouvez faire pour éviter les débordements de se produire en premier lieu?

Je ne pense vraiment pas que vous pouvez le fixer sans fixer les tampons sous-jacents. Comment êtes-vous censé dire la différence entre les séquences de valeurs (0, 1, 2, 1, 0) et (0, 1, 65538, 1, 0)? Vous ne pouvez pas.

Comment l'utilisation d'un HMM où l'état caché est de savoir si vous êtes dans un trop-plein et les émissions sont observées flux de particules?

La partie la plus délicate sera à venir avec les modèles de probabilité pour les transitions (qui sera essentiellement coder l'échelle de temps des pics) et les émissions (que vous pouvez construire si vous savez comment le flux se comporte et comment débordement affecte la mesure ). Ce sont des questions spécifiques au domaine, donc il n'y a probablement pas de solutions prêtes à l'emploi là-bas.

Mais celui que vous avez le modèle, tout le reste --- montage de vos données, la quantification des incertitudes, la simulation, etc .--- est routine.

Vous ne pouvez le faire si les sauts réels entre les valeurs successives sont beaucoup plus petites que 65536. Dans le cas contraire, un artefact de la vallée de débordement induite est impossible à distinguer d'une véritable vallée, vous ne pouvez deviner. Vous pouvez essayer de faire correspondre les débordements de restaurations correspondant, en analysant simultanément un signal provenant de la droite et la gauche (en supposant qu'il y ait une ligne de base reconnaissable).

En dehors de cela, tout ce que vous pouvez faire est d'ajuster votre expérience en répétant avec différents flux de particules d'origine, de sorte que les véritables vallées ne se déplacent pas, mais les artefacts se déplacent au point de trop-plein.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top