سؤال

لدينا مجموعة مكشاف الجسيمات من الصعب السلكية باستخدام 16 بت و 8 بت المخازن المؤقتة.كل الآن وبعد ذلك ، هناك بعض [توقع] قمم الجسيمات تدفقات تمر من خلال ذلك ؛ لا بأس.ما هو لا حسنا هو أن هذه التدفقات عادة ما تصل إلى مقادير فوق قدرة مخازن لتخزين ؛ وهكذا تجاوزات تحدث.على الرسم البياني ، فإنها تبدو مثل الجريان يسقط فجأة و يبدأ في النمو مرة أخرى.يمكنك أن تقترح [في الغالب] طريقة دقيقة من الكشف عن نقاط البيانات يعانون من تجاوز?

P. S.كاشف جسديا لا يمكن الوصول إليها ، وبالتالي تحديد ذلك "الطريق الصحيح" طريق استبدال مخازن لا يبدو أن يكون خيارا.

تحديث: بعض التوضيحات المطلوبة.ونحن استخدام الثعبان في معالجة البيانات المرفق ؛ التكنولوجيا المستخدمة في الجهاز نفسه غامض جدا (التعامل معها كما لو كانت وضعتها لا علاقة لها تماما طرف ثالث) ، لكنها بالتأكيد غير متطورة ، أيلا يعمل 'حقيقية' نظام التشغيل, فقط يوتيوب لتسجيل كاشف قراءات الاستجابة إلى الأوامر عن بعد مثل دورة الطاقة.الذاكرة الفساد وغيرها من المشاكل ليست مشكلة الآن.على تجاوزات تحدث ببساطة لأن مصمم للكشف المستخدمة 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