خطأ في تصحيح الرموز التي تهدف إلى إرسال وحدة المعالجة المركزية البطيئة إلى وحدات المعالجة المركزية سريعة

StackOverflow https://stackoverflow.com/questions/1876451

  •  18-09-2019
  •  | 
  •  

سؤال

أبحث عن رمز تصحيح الأخطاء الأمامي سهل نسبيا / سريع لتشفيره على ميكروكنترولر؛ سيتم فك التشفير على جهاز كمبيوتر حتى يكون الأمر أكثر تعقيدا.

لا أعرف الكثير عن رموز تصحيح الأخطاء واستثناء رموز Hamming البسيطة التي يبدو أنها أكثر تعقيدا مما يمكنني التعامل معه.

أي توصيات؟

تعديل: سأقوم بقطع الأشياء قصيرة وقبول إجابة كارل ... أعتقد أن هناك شيئان لم أذكره:

(1) أنا لا أفعل بدقة يحتاج تصحيح الخطأ، إنه مجرد مفيد بالنسبة لي، وأحسب أنه قد يكون هناك بعض خوارزمية تصحيح الأخطاء التي كانت فائدة معقولة لتكلفة ضئيلة. ربما تكون رموز Hamming حول حق المناسبة وحتى تبدو وكأنها قد تكون مكلفة للغاية لتطبيق ترميزي.

(2) ميزة أكبر من تصحيح الأخطاء نفسها هي القدرة على إعادة التعرج بشكل صحيح للحزم التي تتبع خطأ. (إذا خرجت من المزامنة لفترة طويلة، فهذا سيء) لذلك أعتقد أنه أفضل فقط إذا أبقى الأشياء بسيطة.

هل كانت مفيدة؟

المحلول

المشكلة مع الأخطاء تصحيح الرموز هي أنهم سوف يتيحونك التعافي من أخطاء بت واحد أو ربما 2 بت، ولكن عادة لا تكتشف أو تصحيح الأضرار الرئيسية.

وبالتالي، ستكون توصيتي بدلا من ذلك تقسيم تدفق بياناتك إلى كتل (1 كيلو بايت، 10 كيلو بايت، ... 1 ميغابايت على الأكثر) وحساب المجموع الاختباري لكل كتلة. بعد ذلك، عندما تصل البيانات إلى وحدة المعالجة المركزية الأخرى، يمكنك التأكد مما إذا كانت صحيحة وطلب إعادة إرسال هذه الكتلة إذا لم يكن الأمر كذلك. وبالتالي فإن الكمبيوتر الاستقبال إما أن يعترف وينتظر الكتلة التالية، أو الاعتراف السلبي ويتوقع إعادة إرسال.

نعم نحن نفذت مجموعة فرعية من TCP / IP هنا. ولكن هناك سبب نجاح هذا البروتوكول: إنه يعمل!

لميكشر، أود أن أوصي CRC-32. يتطلب جدول (أعتقد) 256 أرقام 32 بت وبعض الحسابات السهلة المعقولة (فهرسة الصفيف، أو و XOR، معظمها من السهل إلى حد ما على وحدة المعالجة المركزية "غبية" لحسابها.

نصائح أخرى

لم أحصل على المستقلة تماما مقدار النفقات العامة التي يمكنك تحملها. في تعليقك، تقول رمز اكتشاف / تصحيح الأخطاء 16 بت صحيح، لكنك لا تحدد كم من كتلة تفكر في إرفاق ذلك. أن تكون ذات مغزى، ربما يجب عليك التعبير عن النفقات العامة المسموح بها كنسبة مئوية. 16 بت تصحيح الخطأ ل 64 بت من البيانات تختلف كثيرا عن 16 بت من تصحيح الأخطاء في كيلوبايت من البيانات ..

إذا كنت تستطيع تحمل شيء مثل 15-20٪ العلامة العامة أو نحو ذلك، فربما يمكنك استخدام رمز تفاقز مع فك تشفير ViterBi. هذه غير متلمانية للغاية - المبرمج التنافيكي بسيط للغاية (أساسا سجل التحول، مع صنابير الإخراج المؤدية إلى XOR). قد يستخدم المرء الكبير حقا سجل 16 بت بنصف دزينة أو نحو ذلك XOR.

لحسن الحظ، لديك جهاز كمبيوتر أثقل للتصنيع فك التشفير، لأن فك ترميز Viterbi يمكن أن يكون وحشا مخيفا. خاصة أثناء استخدام ترميز أكبر للحد من النفقات العامة، ينفجر حجم وحدة فك الترميز. حجم وحدة فك الترميز هو الأسي فيما يتعلق بحجم مجموعة التعليمات البرمجية.

تم ذكر رموز توربو. يمكن أن تجعل هذه أفضل استخداما للنطاق الترددي المتاح من الرموز التنافيلية مع فك تشفير ViterBI - لكنها تستخدم تشفير أكثر تعقيدا بشكل كبير - لا يقل عن اثنين من المبرمجين التنافيلين من نوع معين (التشفير التنافيل المنهجي المتكرر). على هذا النحو، لا يبدو أنهم لا يناسبون مواصفاتك أيضا.

أود أن أقترح استخدام شكل قائم على الحزمة لتصحيح الأخطاء الأمامي. إذا كان عليك إرسال ستة حزم متساوية طولها، فقم بإرسال كل منها بمعلومات كافية لتحديدها ك "حزمة 1 من 6"، "2 من 6"، إلخ. إلى جانب حزمة واحدة أخرى بايت الحمولة الأولى هي XOR من أول بايت الحمائم من الحزم 1-6، الذي يقوم بايت الحمائم الثاني هو XOR من البايت الثاني من الحزمة 1-6، إلخ. التعليمات البرمجية التي تتلقى أي ستة حزم خارج المجموع السبع ستكون قادرة على إعادة بناء واحد المفقودين. كتعزيز بسيط، استخدم حزمة واحدة "التكافؤ" للحزم "المرقمة" وآخر ل "الفردية". إذا قمت بذلك، فسيكون النظام قادرا على التعافي من أي خطأ انفجار لم يعد من الحزمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top