تشخیص و تصحیح خطا
تشخیص و تصحیح خطا در نظریه اطلاعات، نظریه کدگذاری، علوم رایانه، مخابرات تکنیک‌هایی هستند که تحویل امن داده‌ها در کانال‌های مخابراتی ناامن را ممکن می‌کنند بسیاری از کانال‌ها در معرض نویز هستند و ممکن است اطلاعات در حین فرستاده‌شدن میان مبدأ و مقصد دچار خطا گردند. تشخیص و تصحیح خطا امکان شناسایی و ساخت مجدد اطلاعات اولیه را ممکن می‌گرداند.معروف‌ترین استفاده قاعده‌دار از تشخیص خطا توسط کاتابان یهودی در هنگام کپی‌برداری از کتاب مقدسشان بود آن هاروش‌های مختلفی داشتند از قبیل جمع کلمات در هر خط یا جمع کلمات در هر صفحه یا چک کردن یک پاراگراف (معمولاً پاراگراف میانی). در هر صفحه اگر حتی یک خطا وجود داشت کل صفحه ازبین می‌رفت، اما اگر ۳ خطا هم‌زمان دریک صفحه رخ می‌داد؛ کل صفحه رانابود می‌کردند. این روش کار بودن خود را زمانی نشان داد که طومارهای دریای مرده کشف شدند.
ایده عمومی این است که چیزی به متن اصلی افزوده گردد که دریافت‌کننده بتواند درستی متن دریافتی را بررسی نماید، اگر خطایی محرز گشت آن را تصحیح کند. طرح‌های تشخیص و تصحیح خطا می‌تواند به صورت سیستماتیک یا غیرسیستماتیک باشد. در طرح سیستماتیک فرستنده داده‌های اصلی را همراه تعداد ثابتی عدد به عنوان بیت‌های بررسی می‌فرستد، که بیت‌های بررسی از الگوریتم قطعیای به دست می‌آیند که از داده‌های اصلی استفاده می‌کنند. اگر فقط تشخیص خطا مدنظر باشد گیرنده می‌تواند الگوریتم را دوباره بر روی داده‌های اصلی اجرا و مقدار خروجی آن را با بیت‌های بررسی مقایسه کند اگر یکسان بودند خطایی رخ نداده‌است. در سامانه‌هایی که از کد غیر سیستماتیک استفاده می‌کنند، پیام اصلی تبدیل به یک پیام کد شده می‌شود. عملکرد مناسب زمانی حاصل می‌گردند که بر اساس ویژگی‌های کانال مخابراتی و طرح‌های انتقال داده انتخاب گردند. انواع معمول کانال‌های مخابراتی شامل مدل بدون حافظه که در آن خطا به صورت تصادفی و با احتمال قطعی اتفاق می‌افتد و مدل‌های پویا است. در نتیجه تشخیص و تصحیح خطا را می‌توان به و تقسیم کرد. اگر ظرفیت کانال را نتوان معین کرد یا ظرفیت بیش از حد متغیر باشد می‌توان درخواست ارسال مجدد داده‌ها را داشت که آن را به عنوان درخواست بازفرستی خودکار، می‌شناسند که به طور ویژه در اینترنت کاربرد دارد.
تشخیص و تصحیح خطا به دو صورت زیر تحقق میابد:
این دو روش ممکن است ترکیب گردند وروش دیگری به نام درخواست تکرار اتوماتیک ترکیبی بسازند.
تشخیص خطا اغلب با یک تابع درهم‌سازی مناسب صورت می‌گیرد یک تابع هش برچسب‌هایی باطول ثابت را به پیام می‌افزاید و که گیرنده را قادر می‌سازد که پیام دریافتی را با بررسی برچسب صحت آن را تأیید کند. طرح‌های بسیار زیادی برای تابع‌های هشی وجود دارد اما استفاده از آن‌ها بسته به سادگی یا مناسب بودن برای تشخیص نوع خاصی از خطاهست.
اساس این طرح این است که کد ارسالی چندین بار ارسال گردد تا از صحت آن مطمئن شویم یک کد بزرگ به چندین بلاک تقسیم می‌گردد، آنگاه هر کدام چند بار مثلاً ۳ بار ارسال می‌گردند؛ بنابراین اگر یکی از این بلاک‌ها متفاوت با دیگری باشد خطایی رخ داده هست. این طرح کارا نیست و زمان زیادی می‌گیرد، اما مزیت آن سادگی آن است.
دراین حالت یک بیت اضافه می‌شود به گونه‌ای که کل بیت‌های ارسالی دارای مجموع اعضای فرد یا زوج باشد.
چک‌سام یک پیام عبارت است از هم‌نهشتی مجموع کلمات پیام
یک تابع درهم‌ساز غیر ایمن هست که برای تشخیص خطاهایی تصادفی در شبکه ایجاد شده‌است.
تابع درهم‌سازی هست که رشته‌ای را می‌گیرد و رشته‌ای ثابت برمی‌گرداند این طرح اطمینان بالایی از لحاظ یکپارچگی داده دارد. هرگونه تغییر در داده باعث تغییر مقدار تابع درهم‌ساز شده و خطا یافته می‌شود.
، با هر الگوی اصلاح خطا روبه جلو می‌توان خطاها را یافت. با کمترین فاصله همینگ d می‌تواندتاd-1 خطا را یافت. این طرح مناسب است اگر بتوان حداقل تعداد خطاها را قبل از ارسال پیش‌بینی نمود.
یک روش کنترل خطا که از کدهای کشف خطا، قبول یا عدم قبول پیام و وقفه برای انتقال مطمئن داده‌ها استفاده می‌کند (قبول پیام یعنی گیرنده پیامی به فرستنده می‌فرستد که پیام به درستی دریافت شده‌است). فرستنده به‌طور معمول در زمان وقفه اگر پیام قبولی دریافت نکند، پیام را مجدداً می‌فرستد و این کار تا تعداد معینی بار صورت می‌پذیرد. این روش برای کانال‌های ارتباطی متغیر یا با ظرفیت ناشناخته مانند اینترنت مناسب هست.
بر این اساس افزونه‌ای به کد اضافه گشته تا دریافت‌کننده بتواند آن را حتی با وجود تعداد معینی خطا بازیابی کند. اصلاح خطا رو به جلو در مدل اتصال متقابل سامانه‌های باز کاربرد دارد.
از ترکیب دو روش قبل به دست می‌آید و دو روش اساسی دارد:
برنامه‌هایی که احتیاج به زمان تأخیر کم دارند (مانند گفتگوی تلفنی) نمی‌توان از درخواست بازفرستی خودکار استفاده کرد و باید از اصلاح خطا رو به جلو استفاده کرد. همچنین مانند مورد قبل برای برنامه‌هایی که وقتی اطلاعات را می‌فرستند دیگران را دردسترس برای ارسال مجدد ندارند نمی‌توان از درخواست باز فرستی خودکار استفاده کرد.
ارتباط تنگاتنگی میان توسعه اصلاح خطا رو به جلو و برنامه‌های فضایی بود. در فضا مسافت زیاد، قدرت سیگنال کم و نیروی مورد نیاز محدود است، پس احتیاج بود اطلاعات ارسالی اگر هم مشکل دارند در همان‌جا تصحیح و مورد استفاده قرار گیرند. برای همین هم برای مثال وویجر ۲ از تصحیح خطای رید-سالامون استفاده کرده‌است. همچنین از تشخیص و اصلاح خطا در بالابردن قابلیت اطمینان فضاهای ذخیره‌سازی داده‌ها استفاده می‌گردد برای مثال در هارد درایوهای جدید از کد افزونه‌ای چرخشی برای تشخیص و از تصحیح خطای رید-سالامون برای تصحیح خطاهای جزئی بهره می‌برند. سامانه‌های آرایه چندگانه دیسک‌های مستقل از تکنیک‌های مختلف تشخیص و تصحیح خطاها در زمانی که هارد درایو کاملاً قفل کرده‌است، استفاده می‌کنند. حافظه دسترسی تصادفی پویاها نیز از کدهای تصحیح خطا استفاده می‌کنند، تصحیح خطا در این موارد معمولاً از کدهای همینگ استفاده می‌کنند. سامانه‌های کمی هم از شستشوی حافظه استفاده می‌کنند.