1 Answers
ডিজিটাল সিস্টেমে ত্রুটি নির্ণয় এবং ত্রুটিসমূহ সংশোধনের জন্য হ্যামিং কোড Hamming Code বিশেষ জনপ্রিয়। ১৯৫০ সালে Richard Wesley Hamming নামে একজন আমেরিকান গণিতজ্ঞ এই কোড পদ্ধতি আবিষ্কার করেন। তার নামানুসারে এর নাম হয় হ্যামিং কোড। হ্যামিং কোডের সাহায্যে কোড গ্রুপের কোন বিটটি সঠিক নয় তা বের করা যায় এবং সংশোধন করা যায়। হ্যামিং কোডে দুটি অংশ থাকে একটি মূল কোড এবং অপরটি প্যারিটি চেক কোড। হ্যামিং কোডে প্যারিটি চেক বিটের অবস্থান 2n দ্বারা নির্ধারণ করা হয়। n এর মান 0, 1, 2, 3, 4 ইত্যাদি হতে পারে। তাহলে 2n = 1, 2, 4, 8, 16 ইত্যাদি অবস্থানসমূহে প্যরিটি চেক বিটসমূহ বসাতে হবে। যেমনঃ F এর ASCII কোড 1000110 কে হ্যামিং কোডে রূপান্তর করতে হলে নির্ণীত হ্যামিং কোডের 1, 2, 4, 8 নং অবস্থানসমূহে প্যারিটি চেক বিটসমূহ h1, h2, h3, h4 বসাতে হবে। এবং বাকী অবস্থানগুলি মূল কোডের বিটসমূহ ধারাবাহিকভাবে বসাতে হবে, তাহলে হ্যামিং কোড প্যাটার্ন তৈরী হবে। নিচের চিত্রটি লক্ষ্যনীয়ঃ
এবার হ্যামিং কোড প্যাটার্নের যে সকল অবস্থানে 1 রয়েছে সেই সকল অবস্থান নম্বরসমূহের বাইনারী যোগফল নির্ণয় করতে হবে। উল্লেখ্য যে, যোগ করার সময় ক্যারি উপেক্ষা করতে হবে। যোগফলের বিটসমূহ হবে h4, h3, h2, h1 এর মান। এখন এই মানসমূহ হ্যামিং কোড প্যাটার্নের প্যারিটি চেক বিটের অবস্থানসমূহে যেমনঃ h4, h3, h2, h1 এ বসালে কাংখিত হ্যামিং কোড পাওয়া যাবে। যেমনঃ উপরোক্ত চিত্রে 11, 6 এবং 5 নং অবস্থানে 1 রয়েছে, সুতরাং 11, 6 এবং 5 এর বাইনারী যোগ করতে হবে। এখানে,
11 = (1011)2
6 = (0110)2
5 = (0101)2
অবস্থানগুলির বাইনারী যোগ (ক্যারি উপেক্ষা করে)
অর্থাত h4 = 1, h3 = 0, h2 = 0, h1 = 0, এই মানসমূহ হ্যামিং কোড প্যাটার্নে বসালে পাই 10010110000, ইহাই F এর হ্যামিং কোড। এই হ্যামিং কোডটি ট্রান্সমিশন মেডিয়ামের মধ্য দিয়ে পাঠানো হবে এবং রিসিভারে গৃহীত হবে। এখন কোডটি নয়েজ আক্রান্ত হলে তার ত্রুটি নির্ণয় এবং সংশোধন করতে হবে।
ত্রুটি নির্ণয় ও সংশোধনের পদ্ধতিঃ
রিসিভিং প্রান্তে গৃহীত কোডটির যে সকল অবস্থান নম্বরে 1 আছে সে সকল অবস্থান নম্বরের বাইনারী যোগফল 0 হলে কোডটি ত্রুটিমুক্ত অবস্থায় গৃহীত হয়েছে ধরা হবে। এবং তা না হলে গৃহীত কোডে ত্রুটি আছে ধরা হবে এবং যোগফল যে দশমিক সংখ্যা প্রকাশ করে গৃহীত কোডের উক্ত অবস্থান নম্বরের বিটে ত্রুটি ঘটেছে নির্ণীত হবে। উল্লেখ্য যে, যোগ করার সময় ক্যারি উপেক্ষা করতে হবে।
মনে করি রিসিভিং প্রান্তে 10010110000 কোডটি গৃহীত হয়েছে। আমরা জানিনা এতে ত্রুটি আছে কি-না। তাই পরীক্ষা করতে হবে। আসুন পরীক্ষা করি। নিচের চিত্রটি লক্ষ্য করুনঃ
চিত্র হতে দেখা যাচ্ছে, 11, 8, 6 এবং 5 নং অবস্থানে 1 রয়েছে। এই অবস্থান নাম্বারগুলির বাইনারী যোগফল নির্ণয় করি। উল্লেখ্য যে, যোগ করার সময় ক্যারি উপেক্ষা করতে হবে। 11 = (1011)2, 8 = (1000)2, 6 = (0110)2, 5 = (0101)2,
অতএব,1011 + 1000 + 0110 + 0101 = 0000
যেহেতু যোগফল 0 তাই কোডটি নির্ভুল ভাবে গৃহীত হয়েছে।
মনে করি নয়েজ আক্রান্ত হওয়ার কারণে 5 নং অবস্থানের বিটটি 1 হতে 0 তে রূপান্তরিত হল। এবং 10010100000 কোড রিসিভারে গৃহীত হলো। এখন পরীক্ষা করতে হবে কোডে ত্রুটি আছে কি-না।
গৃহীত কোড হতে দেখা যাচ্ছে, 11, 8, 6 নং অবস্থানে 1 রয়েছে। এই অবস্থান নাম্বারগুলির বাইনারী যোগফল নির্ণয় করি। উল্লেখ্য যে, যোগ করার সময় ক্যারি উপেক্ষা করতে হবে। 11 = (1011)2, 8 = (1000)2, 6 = (0110)2
অতএব,1011 + 1000 + 0110 = 0101 = 5
যেহেতু যোগফলটির মান 0 নয় তাই বলা যায় কোডটি নির্ভুল ভাবে গৃহীত হয়নি এবং যোগফলের মান দশমিক 5 হওয়ার কারনে বুঝা যাচ্ছে গৃহীত কোডের 5 নং বিটে ত্রুটি সংঘটিত হয়েছে। এই 5 নং বিটটিকে উল্টিয়ে দিলেই ত্রুটি সংশোধন হবে। 5 নং বিটের 0 কে উল্টিয়ে 1 বসিয়ে পাই 10010110000, সুতরাং সঠিক কোডটি হলো(10010110000)।