我们有一个粒子检测器硬连线到使用16位和8位缓冲器。时不时地,有一定的[预测]穿过它粒子通量的峰值;没关系。什么是好是,这些焊剂通常达到来存储它们的缓冲器的容量级以上;因此,溢出发生。在图表上,它们看起来像通量突然下降,并开始再次增长。你可以提出一个检测来自溢出患有数据的点[大多]精确的方法?

P.S。该检测器是物理上不可访问,所以通过更换缓冲液似乎并不是一种选择将其固定于“正确的方式”。

<强>更新一些澄清的要求。我们使用Python在数据处理工具;在探测器本身所采用的技术是相当模糊的(对待它,仿佛它是由一个完全不相关的第三方开发的),但它肯定是不健全的,即没有运行“真正的” OS,只是一些低层次的东西记录检测器的读数并响应等动力循环远程命令。内存损坏等问题都不是问题现在。在溢出发生仅仅是因为检测器的设计者所使用的16位缓冲器,用于计数粒子通量,有时通量超过每秒65535个颗粒。

<强>更新2:正如一些读者指出,预期的解决方案必须是与在试图分离分析通量分布来检测急剧下降(例如,通过一个数量级)他们的正常波动。另一个问题是:可以修复(其中原始通量降到低于溢流水位点)通过简单地对上述被还原的运行校正程序检测(由 X 轴)通量分布

有帮助吗?

解决方案

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

其他提示

当然,理想情况下,你会修复检测软件,最大程度的发挥65535,以防止引起你的悲伤的那种环绕。我明白,这并不总是可能的,或至少是并不总是能够迅速完成。

当粒子通量超过65535,它这样做的很快,还是通量逐渐增加然后逐渐减少?这使得你可以用什么算法来检测这种差异。例如,如果焊剂上升足够慢:

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

,那么你就往往有一个有时的的消极下降,当你已经溢出。一个更大的负面降比你必须在其他任何时间。这可以作为你已经溢出的信号。为了找到溢出时间周期结束时,你可以找一个大的跳跃的值不太远65535。

所有这些都取决于最大真实流量这是可能的,并就如何快速通量上升和下降。例如,是否有可能获得超过128K计数一个测量周期?是否有可能为一个测量是5000和下一个测量为50000?如果数据不乖巧的话,你可能能够做出关于当你只溢出统计判断。

您的问题需要提供有关实现的详细信息 - ?您正在使用什么语言/框架

数据溢出的软件(这是什么,我认为你是在谈论)是不好的做法,应该尽量避免。当你看到(奇怪的数据输出)只有一个副作用经历数据溢出时这是可能的,但它仅仅是各种各样的问题的冰山可以看到的前端。

您可以很轻松地体验到像内存损坏比较严重的问题,这些问题可能导致程序崩溃的一声,或者更糟,隐晦的。

是否有任何的验证可以做,以防止溢出从未然?

我真的不认为你可以解决它无固定基础缓冲区。你是如何应该告诉价值观的序列之间的差异(0,1,2,1,0)和(0,1,65538,1,0)?你不能。

如何其中隐藏的状态是使用HMM你是否处于溢出和排放观察粒子通量?

棘手的部分将被想出用于过渡的概率模型(其将时标峰的基本上编码)和用于排放(其如果知道磁通的行为并且可以建立如何溢出影响测量)。这些是特定于域的问题,所以有可能是没有现成的解决方案在那里。

但有你有模型,一切---适合您的数据,量化的不确定性,模拟等.---是家常便饭。

您只能这样做,如果连续值之间的实际跳跃都远小于65536,否则溢出引起的谷神器是一个真正的山谷别无二致,你只能猜测。可以尝试匹配溢出到对应的修复体,通过同时从右侧和左侧分析的信号(假设有一个可识别的基准线)。

除此之外,所有你能做的就是用不同的原始粒子流重复它来调整自己的实验,让真正的山谷不会移动,但神器的人移动到溢出的地步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top