कोडिंग थ्योरी: Difference between revisions

From Vigyanwiki
No edit summary
 
(27 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Short description|Study of the properties of codes and their fitness}}
[[File:Hamming.jpg|thumb|[[हैमिंग दूरी]] का द्वि-आयामी दृश्य, कोडिंग सिद्धांत में एक महत्वपूर्ण उपाय।]]'''कोडिंग थ्योरी''' विशिष्ट अनुप्रयोगों के लिए कोड के गुणों और उनकी उपयुक्तता का अध्ययन है। कोड का उपयोग डेटा संपीड़न, [[क्रिप्टोग्राफी]], त्रुटि का पता लगाने और सुधार, [[डेटा ट्रांसमिशन]] और डेटा [[आधार सामग्री भंडारण|भंडारण]] के लिए किया जाता है। कुशल और विश्वसनीय डेटा ट्रांसमिशन विधियों की रचना करने के उद्देश्य से विभिन्न वैज्ञानिक विषयों जैसे [[सूचना सिद्धांत]], [[विद्युत अभियन्त्रण]], गणित, [[भाषा विज्ञान]] और [[कंप्यूटर विज्ञान]] द्वारा कोड का अध्ययन किया जाता है। इसमें आमतौर पर अतिरेक को हटाना और संचरित डेटा में त्रुटियों का सुधार या पता लगाना सम्मिलित है।
[[File:Hamming.jpg|thumb|[[हैमिंग दूरी]] का द्वि-आयामी दृश्य, कोडिंग सिद्धांत में एक महत्वपूर्ण उपाय।]][[कोड]]िंग सिद्धांत विशिष्ट अनुप्रयोगों के लिए कोड के गुणों और उनकी उपयुक्तता का अध्ययन है। कोड का उपयोग डेटा संपीड़न, [[क्रिप्टोग्राफी]], त्रुटि का पता लगाने और सुधार, [[डेटा ट्रांसमिशन]] और [[आधार सामग्री भंडारण]] के लिए किया जाता है। कुशल और विश्वसनीय डेटा ट्रांसमिशन विधियों को डिजाइन करने के उद्देश्य से विभिन्न वैज्ञानिक विषयों-जैसे [[सूचना सिद्धांत]], [[विद्युत अभियन्त्रण]], गणित, [[भाषा विज्ञान]] और [[कंप्यूटर विज्ञान]] द्वारा कोड का अध्ययन किया जाता है। इसमें आमतौर पर अतिरेक को हटाना और संचरित डेटा में त्रुटियों का सुधार या पता लगाना शामिल है।


कोडिंग चार प्रकार की होती है:<ref>{{cite book  
कोडिंग चार प्रकार की होती है:<ref>{{cite book  
Line 11: Line 10:
</ref>
</ref>
# डेटा संपीड़न (या स्रोत कोडिंग)
# डेटा संपीड़न (या स्रोत कोडिंग)
# त्रुटि का पता लगाने और सुधार (या चैनल कोडिंग)
# त्रुटि नियंत्रण (या माध्यम कोडिंग)
# क्रिप्टोग्राफी
# क्रिप्टोग्राफी
# [[लाइन कोड]]
# [[लाइन कोड]]


डेटा कंप्रेशन किसी स्रोत से डेटा को अधिक कुशलता से प्रसारित करने के लिए अवांछित अतिरेक को हटाने का प्रयास करता है। उदाहरण के लिए, [[ज़िप (फ़ाइल स्वरूप)]] इंटरनेट ट्रैफ़िक को कम करने जैसे उद्देश्यों के लिए डेटा फ़ाइलों को छोटा बनाता है। डेटा संपीड़न और त्रुटि सुधार [[संयुक्त स्रोत और चैनल कोडिंग]] हो सकता है।
डेटा संपीड़न किसी स्रोत से डेटा को अधिक कुशलता से प्रसारित करने के लिए अवांछित अतिरेक को हटाने का प्रयास करता है। उदाहरण के लिए, [[ज़िप (फ़ाइल स्वरूप)|ज़िप डेटा संपीड़न]] इंटरनेट ट्रैफ़िक को कम करने जैसे उद्देश्यों के लिए डेटा फ़ाइलों को छोटा बनाता है। डेटा संपीड़न और त्रुटि सुधार का संयोजन में अध्ययन किया जा सकता है।


त्रुटि का पता लगाने और सुधार ट्रांसमिशन चैनल पर मौजूद गड़बड़ी के लिए ट्रांसमिशन को अधिक मजबूत बनाने के लिए स्रोत से डेटा में उपयोगी [[अतिरेक (सूचना सिद्धांत)]] जोड़ता है। त्रुटि सुधार का उपयोग करने वाले कई अनुप्रयोगों के बारे में सामान्य उपयोगकर्ता को पता नहीं हो सकता है। एक विशिष्ट [[कॉम्पैक्ट डिस्क डिजिटल ऑडियो]] (सीडी) खरोंच और धूल को ठीक करने के लिए रीड-सोलोमन कोड का उपयोग करता है। इस एप्लिकेशन में ट्रांसमिशन चैनल सीडी ही है। उच्च आवृत्ति रेडियो प्रसारण के लुप्त होने और शोर को ठीक करने के लिए सेल फोन भी कोडिंग तकनीकों का उपयोग करते हैं। डेटा मोडेम, टेलीफोन प्रसारण, और [[नासा डीप स्पेस नेटवर्क]] सभी बिट्स प्राप्त करने के लिए चैनल कोडिंग तकनीकों को नियोजित करते हैं, उदाहरण के लिए [[टर्बो कोड]] और [[एलडीपीसी कोड]]।<!--Kvng RTH-->
त्रुटि का पता लगाने और सुधार ट्रांसमिशन माध्यम पर मौजूद गड़बड़ी के लिए ट्रांसमिशन को अधिक मजबूत बनाने के लिए स्रोत से डेटा में उपयोगी [[अतिरेक (सूचना सिद्धांत)|अतिरेक]] जोड़ता है। त्रुटि सुधार का उपयोग करने वाले कई अनुप्रयोगों के बारे में सामान्य उपयोगकर्ता को पता नहीं हो सकता है। एक विशिष्ट म्यूजिक [[कॉम्पैक्ट डिस्क डिजिटल ऑडियो|कॉम्पैक्ट डिस्क]] (सीडी) खरोंच और धूल को ठीक करने के लिए रीड-सोलोमन कोड का उपयोग करता है। इस एप्लिकेशन में ट्रांसमिशन माध्यम सीडी ही है। उच्च आवृत्ति रेडियो प्रसारण के लुप्त होने और शोर को ठीक करने के लिए सेल फोन भी कोडिंग तकनीकों का उपयोग करते हैं। डेटा मोडेम, टेलीफोन प्रसारण, और [[नासा डीप स्पेस नेटवर्क]] सभी बिट्स प्राप्त करने के लिए माध्यम कोडिंग तकनीकों को नियोजित करते हैं, उदाहरण के लिए [[टर्बो कोड]] और [[एलडीपीसी कोड]]।
 
== कोडिंग थ्योरी का इतिहास ==
 
1948 में, [[क्लाउड शैनन]] ने बेल सिस्टम टेक्निकल जर्नल के जुलाई और अक्टूबर के अंक में दो भागों में एक लेख, [[संचार का एक गणितीय सिद्धांत]] प्रकाशित किया। यह कार्य इस समस्या पर केंद्रित है कि एक प्रेषक जिस सूचना को संचारित करना चाहता है, उसे कैसे सर्वोत्तम तरीके से एन्कोड किया जाए। इस मूलभूत कार्य में उन्होंने [[नॉर्बर्ट वीनर]] द्वारा विकसित संभाव्यता सिद्धांत के साधनों का उपयोग किया, जो उस समय संचार सिद्धांत लागू होने के अपने शुरुआती चरणों में थे। शैनन ने सूचना सिद्धांत के क्षेत्र का अनिवार्य रूप से आविष्कार करते हुए संदेश में अनिश्चितता के उपाय के रूप में [[सूचना एन्ट्रापी]] विकसित की।
== कोडिंग सिद्धांत का इतिहास ==
1948 में, [[क्लाउड शैनन]] ने बेल सिस्टम टेक्निकल जर्नल के जुलाई और अक्टूबर के अंक में दो भागों में एक लेख, [[संचार का एक गणितीय सिद्धांत]] प्रकाशित किया। यह कार्य इस समस्या पर केंद्रित है कि एक प्रेषक जिस सूचना को संचारित करना चाहता है, उसे कैसे सर्वोत्तम तरीके से एन्कोड किया जाए। इस मूलभूत कार्य में उन्होंने [[नॉर्बर्ट वीनर]] द्वारा विकसित संभाव्यता सिद्धांत में उपकरणों का उपयोग किया, जो उस समय संचार सिद्धांत पर लागू होने के अपने शुरुआती चरणों में थे। शैनन ने सूचना सिद्धांत के क्षेत्र का अनिवार्य रूप से आविष्कार करते हुए एक संदेश में अनिश्चितता के उपाय के रूप में [[सूचना एन्ट्रापी]] विकसित की।


[[बाइनरी भाषा में कोड]] 1949 में विकसित किया गया था। यह एक त्रुटि-सुधार कोड है जो प्रत्येक 24-बिट शब्द में तीन त्रुटियों को ठीक करने और चौथे का पता लगाने में सक्षम है।
[[बाइनरी भाषा में कोड]] 1949 में विकसित किया गया था। यह एक त्रुटि-सुधार कोड है जो प्रत्येक 24-बिट शब्द में तीन त्रुटियों को ठीक करने और चौथे का पता लगाने में सक्षम है।
Line 27: Line 24:
[[रिचर्ड हैमिंग]] ने 1968 में [[बेल लैब्स]] में संख्यात्मक तरीकों, स्वचालित कोडिंग सिस्टम, और त्रुटि-पता लगाने और त्रुटि-सुधार कोड में अपने काम के लिए [[ट्यूरिंग अवार्ड]] जीता। उन्होंने [[हैमिंग कोड]], [[हैमिंग विंडो]], [[हैमिंग नंबर]] और हैमिंग दूरी के रूप में जानी जाने वाली अवधारणाओं का आविष्कार किया।
[[रिचर्ड हैमिंग]] ने 1968 में [[बेल लैब्स]] में संख्यात्मक तरीकों, स्वचालित कोडिंग सिस्टम, और त्रुटि-पता लगाने और त्रुटि-सुधार कोड में अपने काम के लिए [[ट्यूरिंग अवार्ड]] जीता। उन्होंने [[हैमिंग कोड]], [[हैमिंग विंडो]], [[हैमिंग नंबर]] और हैमिंग दूरी के रूप में जानी जाने वाली अवधारणाओं का आविष्कार किया।


1972 में, एन. अहमद ने असतत कोज्या परिवर्तन (DCT) का प्रस्ताव रखा, जिसे उन्होंने 1973 में टी. नटराजन और के.आर. राव के साथ विकसित किया।<ref name="Ahmed">{{cite web|url=https://www.scribd.com/doc/52879771/DCT-History|title=मैं असतत कोसाइन परिवर्तन के साथ कैसे आया|author=Nasir Ahmed|publisher = Digital Signal Processing, Vol. 1, Iss. 1, 1991, pp. 4-5|author-link=N. Ahmed}}</ref> डीसीटी सबसे व्यापक रूप से इस्तेमाल किया जाने वाला हानिकारक संपीड़न एल्गोरिदम है, जो [[जेपीईजी]], [[बेचा]]ईजी और एमपी 3 जैसे मल्टीमीडिया प्रारूपों का आधार है।
1972 में, एन. अहमद ने असतत कोज्या परिवर्तन (डीसीटी) का प्रस्ताव रखा, जिसे उन्होंने 1973 में टी. नटराजन और के.आर. राव के साथ विकसित किया।<ref name="Ahmed">{{cite web|url=https://www.scribd.com/doc/52879771/DCT-History|title=मैं असतत कोसाइन परिवर्तन के साथ कैसे आया|author=Nasir Ahmed|publisher = Digital Signal Processing, Vol. 1, Iss. 1, 1991, pp. 4-5|author-link=N. Ahmed}}</ref> डीसीटी सबसे व्यापक रूप से इस्तेमाल किया जाने वाला लॉसी संपीड़न एल्गोरिदम है, जो [[जेपीईजी]], एमपीईजी और एमपी3 जैसे मल्टीमीडिया प्रारूपों का आधार है।


== स्रोत कोडिंग ==
== स्रोत कोडिंग ==
{{main|Data compression}}
{{main|आधार - सामग्री संकोचन}}[[बेचा]]{{main|आधार - सामग्री संकोचन}}
स्रोत कोडिंग का उद्देश्य स्रोत डेटा लेना और उसे छोटा करना है।
स्रोत कोडिंग का उद्देश्य स्रोत डेटा लेना और उसे छोटा करना है।


=== परिभाषा ===
=== परिभाषा ===
डेटा को एक यादृच्छिक चर के रूप में देखा जा सकता है <math>X:\Omega\to\mathcal{X}</math>, कहाँ पे <math>x \in \mathcal{X}</math> संभावना से प्रकट होता है <math>\mathbb{P}[X=x]</math>.
डेटा को एक यादृच्छिक चर के रूप में देखा जा सकता है <math>X:\Omega\to\mathcal{X}</math>, जहाँ पे <math>x \in \mathcal{X}</math> संभावना <math>\mathbb{P}[X=x]</math> से प्रकट होता है|


डेटा एक [[वर्णमाला (कंप्यूटर विज्ञान)]] पर स्ट्रिंग्स (शब्दों) द्वारा एन्कोड किया गया है <math>\Sigma</math>.
डेटा [[वर्णमाला (कंप्यूटर विज्ञान)|वर्णमाला <math>\Sigma</math>]] पर स्ट्रिंग्स (शब्दों) द्वारा एन्कोड किया गया है|


एक कोड एक कार्य है
कोड एक फलन है


:<math>C:\mathcal{X}\to\Sigma^*</math> (या <math>\Sigma^+</math> अगर खाली स्ट्रिंग वर्णमाला का हिस्सा नहीं है)।
:<math>C:\mathcal{X}\to\Sigma^*</math> (या <math>\Sigma^+</math> अगर खाली स्ट्रिंग वर्णमाला का हिस्सा नहीं है)।


<math>C(x)</math> से जुड़ा कोड वर्ड है <math>x</math>.
<math>C(x)</math> से जुड़ा कोड वर्ड <math>x</math> है |


कूट शब्द की लंबाई के रूप में लिखा जाता है
कूट शब्द की लंबाई इस रूप में लिखी जाती है


:<math>l(C(x)).</math>
:<math>l(C(x)).</math>
एक कोड की अपेक्षित लंबाई है
कोड की अपेक्षित लंबाई है


:<math>l(C) = \sum_{x\in\mathcal{X}}l(C(x))\mathbb{P}[X=x] .</math>
:<math>l(C) = \sum_{x\in\mathcal{X}}l(C(x))\mathbb{P}[X=x] .</math>
Line 55: Line 52:


:<math>C(\epsilon) = \epsilon</math>
:<math>C(\epsilon) = \epsilon</math>
=== गुण ===
=== गुण ===
# <math>C:\mathcal{X}\to\Sigma^*</math> चर-लंबाई कोड है # गैर-एकवचन कोड | गैर-एकवचन अगर [[इंजेक्शन समारोह]]
# <math>C:\mathcal{X}\to\Sigma^*</math> गैर-एकवचन अगर [[इंजेक्शन समारोह|अंत:क्षेपक है।]]
# <math>C:\mathcal{X}^*\to\Sigma^*</math> विशिष्ट रूप से डिकोड करने योग्य कोड है # विशिष्ट रूप से डिकोड करने योग्य कोड यदि इंजेक्टिव है।
# <math>C:\mathcal{X}^*\to\Sigma^*</math>विशिष्ट रूप से डिकोड करने योग्य कोड यदि अंत:क्षेपक है।
# <math>C:\mathcal{X}\to\Sigma^*</math> चर-लंबाई कोड है # उपसर्ग कोड यदि <math>C(x_1)</math> का उपसर्ग नहीं है <math>C(x_2)</math> (और इसके विपरीत)।
# <math>C:\mathcal{X}\to\Sigma^*</math> तात्कालिक यदि <math>C(x_1)</math>, <math>C(x_2)</math>का उपसर्ग नहीं है (और इसके विपरीत भी)।


=== सिद्धांत ===
=== थ्योरी ===
किसी स्रोत की एन्ट्रापी (सूचना सिद्धांत) सूचना का माप है। मूल रूप से, स्रोत कोड स्रोत में मौजूद अतिरेक को कम करने का प्रयास करते हैं, और कम बिट्स वाले स्रोत का प्रतिनिधित्व करते हैं जो अधिक जानकारी रखते हैं।
किसी स्रोत की एन्ट्रापी सूचना का माप है। मूल रूप से, स्रोत कोड स्रोत में मौजूद अतिरेक को कम करने का प्रयास करते हैं, और स्रोत का प्रतिनिधित्व कम से कम  बिट्स में करते हैं जो अधिक जानकारी रखते हैं।


डेटा संपीड़न जो स्पष्ट रूप से एक विशेष अनुमानित संभाव्यता मॉडल के अनुसार संदेशों की औसत लंबाई को कम करने की कोशिश करता है, [[एन्ट्रापी एन्कोडिंग]] कहलाता है।
डेटा संपीड़न जो स्पष्ट रूप से एक विशेष अनुमानित संभाव्यता मॉडल के अनुसार संदेशों की औसत लंबाई को कम करने की कोशिश करता है, [[एन्ट्रापी एन्कोडिंग]] कहलाता है।
Line 70: Line 65:


=== उदाहरण ===
=== उदाहरण ===
[[फैक्स]] ट्रांसमिशन एक साधारण [[रन-लेंथ एन्कोडिंग]] का उपयोग करता है। स्रोत कोडिंग ट्रांसमीटर की आवश्यकता के लिए अनावश्यक सभी डेटा को हटा देता है, जिससे ट्रांसमिशन के लिए आवश्यक बैंडविड्थ कम हो जाती है।
[[फैक्स]] ट्रांसमिशन एक साधारण [[रन-लेंथ एन्कोडिंग|रन-लेंथ कोड]] का उपयोग करता है। स्रोत कोडिंग ट्रांसमीटर की आवश्यकता के लिए अनावश्यक सभी डेटा को हटा देता है, जिससे ट्रांसमिशन के लिए आवश्यक बैंडविड्थ कम हो जाती है।


== चैनल कोडिंग ==
== माध्यम कोडिंग ==
{{main|Error detection and correction}}
{{main|त्रुटि का पता लगाना और सुधार}}
चैनल कोडिंग सिद्धांत का उद्देश्य उन कोडों को खोजना है जो जल्दी से प्रसारित होते हैं, जिनमें कई मान्य [[कोड शब्द]] होते हैं और कम से कम त्रुटि का पता लगाने में कई त्रुटियों को ठीक कर सकते हैं। जबकि परस्पर अनन्य नहीं है, इन क्षेत्रों में प्रदर्शन एक समझौता है। इसलिए, अलग-अलग अनुप्रयोगों के लिए अलग-अलग कोड इष्टतम हैं। इस कोड के आवश्यक गुण मुख्य रूप से संचरण के दौरान होने वाली त्रुटियों की संभावना पर निर्भर करते हैं। एक विशिष्ट सीडी में, हानि मुख्य रूप से धूल या खरोंच होती है।
माध्यम कोडिंग थ्योरी का उद्देश्य उन कोडों का पता लगाना है जो शीघ्रता से प्रसारित होते हैं, जिनमें कई मान्य [[कोड शब्द]] होते हैं और कम से कम त्रुटि का पता लगाने में कई त्रुटियों को ठीक कर सकते हैं। जबकि परस्पर अनन्य नहीं है, इन क्षेत्रों में प्रदर्शन एक समझौता है। इसलिए, अलग-अलग अनुप्रयोगों के लिए अलग-अलग कोड इष्टतम हैं। इस कोड के आवश्यक गुण मुख्य रूप से संचरण के दौरान होने वाली त्रुटियों की संभावना पर निर्भर करते हैं। एक विशिष्ट सीडी में, हानि मुख्य रूप से धूल या खरोंच होती है।


डिस्क पर डेटा को फैलाने के लिए सीडी क्रॉस-इंटरलीव्ड रीड-सोलोमन कोडिंग का उपयोग करती हैं।<ref>
डिस्क पर डेटा को लिखने के लिए सीडी क्रॉस-इंटरलीव्ड रीड-सोलोमन कोडिंग का उपयोग करती हैं।<ref>
Todd Campbell.
Todd Campbell.
[https://abcnews.go.com/Technology/story?id=119305&page=1 "Answer Geek: Error Correction Rule CDs"].
[https://abcnews.go.com/Technology/story?id=119305&page=1 "Answer Geek: Error Correction Rule CDs"].
</ref>
</ref>
हालांकि एक बहुत अच्छा कोड नहीं है, एक साधारण दोहराव वाला कोड समझने योग्य उदाहरण के रूप में काम कर सकता है। मान लीजिए हम डेटा बिट्स (ध्वनि का प्रतिनिधित्व) का एक ब्लॉक लेते हैं और इसे तीन बार भेजते हैं। रिसीवर पर हम तीन दोहरावों की बिट दर बिट जांच करेंगे और बहुमत वोट लेंगे। इसमें ट्विस्ट यह है कि हम केवल बिट्स को क्रम में नहीं भेजते हैं। हम उन्हें इंटरलीव करते हैं। डेटा बिट के ब्लॉक को पहले 4 छोटे ब्लॉक में बांटा जाता है। फिर हम ब्लॉक के माध्यम से साइकिल चलाते हैं और पहले से एक बिट भेजते हैं, फिर दूसरा, आदि। यह डिस्क की सतह पर डेटा को फैलाने के लिए तीन बार किया जाता है। सरल दोहराने वाले कोड के संदर्भ में, यह प्रभावी प्रतीत नहीं हो सकता है। हालांकि, अधिक शक्तिशाली कोड ज्ञात हैं जो इस इंटरलीविंग तकनीक का उपयोग करते समय खरोंच या धूल के धब्बे की फट त्रुटि को ठीक करने में बहुत प्रभावी होते हैं।


अन्य कोड विभिन्न अनुप्रयोगों के लिए अधिक उपयुक्त हैं। गहरे अंतरिक्ष संचार रिसीवर के [[थर्मल शोर]] से सीमित होते हैं जो एक फटने वाली प्रकृति की तुलना में निरंतर प्रकृति का अधिक होता है। इसी तरह, नैरोबैंड मोडेम टेलीफोन नेटवर्क में मौजूद शोर से सीमित होते हैं और निरंतर गड़बड़ी के रूप में भी बेहतर तरीके से तैयार किए जाते हैं।{{Citation needed|date=July 2008}} सेल फोन तेजी से लुप्त होती के अधीन हैं। उपयोग की जाने वाली उच्च आवृत्तियाँ सिग्नल के तेजी से लुप्त होने का कारण बन सकती हैं, भले ही रिसीवर कुछ इंच आगे बढ़ जाए। फिर से चैनल कोड का एक वर्ग है जो लुप्त होती का मुकाबला करने के लिए डिज़ाइन किया गया है।{{Citation needed|date=July 2008}}
हालांकि यह बहुत अच्छा कोड नहीं है, एक साधारण दोहराव वाला कोड समझने योग्य उदाहरण के रूप में काम कर सकता है। मान लीजिए हम डेटा बिट्स का एक ब्लॉक लेते हैं और इसे तीन बार भेजते हैं। रिसीवर पर हम तीन दोहरावों की बिट दर बिट जांच करते हैं और बहुमत वोट लेते हैं। इसमें समस्या यह है कि हम केवल बिट्स को क्रम में नहीं भेजते हैं बल्कि हम उन्हें निकालते भी हैं। डेटा बिट समूह को पहले 4 छोटे समूहों में बांटा जाता है। फिर हम समूह के बिट भेजने का सिलसिला शुरू करते हैं और पहले एक बिट भेजते हैं, फिर दूसरा, आदि। यह डिस्क की सतह पर डेटा को लिखने के लिए तीन बार किया जाता है। सरल दोहराने वाले कोड के संदर्भ में, यह प्रभावी प्रतीत नहीं हो सकता है। हालांकि, अधिक शक्तिशाली कोड ज्ञात हैं जो इस इंटरलीविंग तकनीक का उपयोग करते समय खरोंच या धूल के धब्बे की बौछार त्रुटि को ठीक करने में बहुत प्रभावी होते हैं।


अन्य कोड विभिन्न अनुप्रयोगों के लिए अधिक उपयुक्त हैं। गहन अंतरिक्ष संचार, रिसीवर के [[थर्मल शोर]] से सीमित होते हैं जो बौछार वाली प्रकृति की तुलना में निरंतर प्रकृति का होता है। इसी तरह, नैरोबैंड मोडेम टेलीफोन नेटवर्क में मौजूद शोर से सीमित होते हैं और निरंतर गड़बड़ी के रूप में भी बेहतर तरीके से तैयार किए जाते हैं। सेल फोन रैपिड फेडिंग के अधीन होते हैं। उच्च आवृत्तियाँ का उपयोग, सिग्नल के रैपिड फेडिंग होने का कारण बन सकती हैं, भले ही रिसीवर कुछ इंच आगे बढ़ जाए। फिर से  माध्यम कोड का एक वर्ग है जो कॉम्बैट फेडिंग के लिए डिज़ाइन किया गया है।
=== रैखिक कोड ===
{{Main|रैखिक कोड}}
बीजगणितीय कोडिंग थ्योरी शब्द कोडिंग थ्योरी के उप-क्षेत्र को दर्शाता है जहां कोड के गुणों को बीजगणितीय पदों में व्यक्त किया जाता है और फिर आगे शोध किया जाता है।


=== रैखिक कोड ===
बीजगणितीय कोडिंग थ्योरी को मूल रूप से दो प्रमुख प्रकार के कोड में विभाजित किया गया है:
{{Main|Linear code}}
बीजगणितीय कोडिंग सिद्धांत शब्द कोडिंग सिद्धांत के उप-क्षेत्र को दर्शाता है जहां कोड के गुणों को बीजगणितीय शब्दों में व्यक्त किया जाता है और फिर आगे शोध किया जाता है।{{Citation needed|date=July 2008}}
बीजगणितीय कोडिंग सिद्धांत को मूल रूप से दो प्रमुख प्रकार के कोड में विभाजित किया गया है:{{Citation needed|date=July 2008}}
* रैखिक ब्लॉक कोड
* रैखिक ब्लॉक कोड
* संवादात्मक कोड
* कोंवोलुशनल कोड


यह कोड के निम्नलिखित तीन गुणों का विश्लेषण करता है - मुख्य रूप से:{{Citation needed|date=July 2008}}
यह कोड के निम्नलिखित तीन गुणों का विश्लेषण करता है - मुख्य रूप से:
* कोड शब्द की लंबाई
* कोड शब्द की लंबाई
* मान्य कोड शब्दों की कुल संख्या
* मान्य कोड शब्दों की कुल संख्या
* मुख्य रूप से हैमिंग [[दूरी]] का उपयोग करते हुए दो वैध कोड शब्दों के बीच न्यूनतम दूरी, कभी-कभी [[ली दूरी]] जैसी अन्य दूरी भी
* मुख्य रूप से हैमिंग [[दूरी]] का उपयोग करते हुए दो वैध कोड शब्दों के बीच न्यूनतम दूरी, कभी-कभी [[ली दूरी|ली-दूरी]] जैसी अन्य दूरी भी


==== रैखिक ब्लॉक कोड ====
==== रैखिक ब्लॉक कोड ====
{{Main|Block code}}
{{Main|ब्लॉक कोड}}
रैखिक ब्लॉक कोड में [[रैखिकता]] का गुण होता है, अर्थात किन्हीं दो कोडवर्ड का योग भी एक कोड शब्द होता है, और उन्हें ब्लॉक में स्रोत बिट्स पर लागू किया जाता है, इसलिए नाम रैखिक ब्लॉक कोड होता है। ऐसे ब्लॉक कोड हैं जो रैखिक नहीं हैं, लेकिन यह साबित करना मुश्किल है कि इस संपत्ति के बिना एक कोड अच्छा है।<ref name=terras/>
रैखिक ब्लॉक कोड में [[रैखिकता]] का गुण होता है, अर्थात किन्हीं दो कोडवर्ड का योग भी एक कोड शब्द होता है, और उन्हें ब्लॉक में स्रोत बिट्स पर लागू किया जाता है, इसलिए नाम रैखिक ब्लॉक कोड होता है। ऐसे ब्लॉक कोड भी हैं जो रैखिक नहीं हैं, लेकिन यह साबित करना मुश्किल है कि इस विशेषता के बिना कोई कोड अच्छा है या नहीं।<ref name=terras/>


रेखीय ब्लॉक कोड को उनके प्रतीक अक्षर (जैसे, बाइनरी या टर्नरी) और पैरामीटर (एन, एम, डी) द्वारा संक्षेपित किया जाता है<sub>min</sub>)<ref name=blahut/>कहाँ पे
रेखीय ब्लॉक कोड को उनके प्रतीक अक्षर (जैसे, बाइनरी या टर्नरी) और पैरामीटर (''n'',''m'',''d<sub>min</sub>'') द्वारा संक्षेपित किया जाता है <ref name=blahut/> जहाँ पर


# n कोडवर्ड की लंबाई है, प्रतीकों में,
# n कोडवर्ड की लंबाई है, प्रतीकों में,
# एम स्रोत प्रतीकों की संख्या है जो एक बार में एन्कोडिंग के लिए उपयोग की जाएगी,
# m स्रोत प्रतीकों की संख्या है जो एक बार में एन्कोडिंग के लिए उपयोग की जाएगी,
# डी<sub>min</sub>कोड के लिए न्यूनतम हैमिंग दूरी है।
# ''d<sub>min</sub>'' कोड के लिए न्यूनतम हैमिंग दूरी है।


कई प्रकार के रैखिक ब्लॉक कोड हैं, जैसे
कई प्रकार के रैखिक ब्लॉक कोड हैं, जैसे
Line 111: Line 106:
# [[चक्रीय कोड]] (जैसे, हैमिंग कोड)
# [[चक्रीय कोड]] (जैसे, हैमिंग कोड)
# पुनरावृत्ति कोड
# पुनरावृत्ति कोड
# [[समता द्वियक]]
# [[समता द्वियक|समतुल्य कोड]]
# [[बहुपद कोड]] (जैसे, BCH कोड)
# [[बहुपद कोड]] (जैसे, बीसीएच कोड)
# रीड-सोलोमन त्रुटि सुधार|रीड-सोलोमन कोड
# रीड-सोलोमन कोड
# [[बीजगणितीय ज्यामितीय कोड]]
# [[बीजगणितीय ज्यामितीय कोड]]
# रीड-मुलर कोड
# रीड-मुलर कोड
# [[हैमिंग बाध्य]]
# [[हैमिंग बाध्य|संपन्न कोड]]


ब्लॉक कोड [[गोलाकार पैकिंग]] समस्या से जुड़े हैं, जिस पर पिछले कुछ वर्षों में कुछ ध्यान दिया गया है। दो आयामों में, कल्पना करना आसान है। टेबल पर पेनीज़ का एक गुच्छा लें और उन्हें एक साथ धकेलें। नतीजा मधुमक्खी के घोंसले की तरह एक हेक्सागोन पैटर्न है। लेकिन ब्लॉक कोड अधिक आयामों पर निर्भर करते हैं जिन्हें आसानी से नहीं देखा जा सकता है। गहरे अंतरिक्ष संचार में प्रयुक्त शक्तिशाली (24,12) बाइनरी गोले कोड 24 आयामों का उपयोग करता है। यदि एक बाइनरी कोड के रूप में उपयोग किया जाता है (जो कि यह आमतौर पर होता है) तो आयाम कोडवर्ड की लंबाई को संदर्भित करते हैं जैसा कि ऊपर परिभाषित किया गया है।
ब्लॉक कोड [[गोलाकार पैकिंग|स्फीयर पैकिंग]] समस्या से जुड़े हैं, जिस पर पिछले कुछ वर्षों में कुछ ध्यान दिया गया है। दो आयामों में, कल्पना करना आसान है। टेबल पर सिक्कों का गुच्छा लें और उन्हें एक साथ बिखेर दें। नतीजा मधुमक्खी के घोंसले की तरह एक हेक्सागोन पैटर्न है। लेकिन ब्लॉक कोड अधिक आयामों पर निर्भर करते हैं जिन्हें आसानी से नहीं देखा जा सकता है। गहरे अंतरिक्ष संचार में प्रयुक्त शक्तिशाली (24,12) बाइनरी गोले कोड 24 आयामों का उपयोग करता है। यदि एक बाइनरी कोड के रूप में उपयोग किया जाता है (जो कि यह आमतौर पर होता है) तो आयाम कोडवर्ड की लंबाई को संदर्भित करते हैं जैसा कि ऊपर परिभाषित किया गया है।


कोडिंग का सिद्धांत एन-आयामी क्षेत्र मॉडल का उपयोग करता है। उदाहरण के लिए, टेबलटॉप पर एक सर्कल में कितने पैसे पैक किए जा सकते हैं, या 3 आयामों में कितने मार्बल्स ग्लोब में पैक किए जा सकते हैं। अन्य विचार एक कोड की पसंद दर्ज करते हैं। उदाहरण के लिए, एक आयताकार बॉक्स की बाधा में हेक्सागोन पैकिंग कोनों पर खाली जगह छोड़ देगी। जैसे-जैसे आयाम बड़े होते जाते हैं, रिक्त स्थान का प्रतिशत छोटा होता जाता है। लेकिन कुछ आयामों पर, पैकिंग सभी जगह का उपयोग करती है और ये कोड तथाकथित सही कोड होते हैं। पैरामीटर संतोषजनक (2<sup>आर</सुप> - 1, 2<sup>r</sup> - 1 - r, 3), और [23,12,7] बाइनरी और [11,6,5] टर्नरी गोले कोड।<ref name=terras>
कोडिंग का सिद्धांत N-आयामी गोलाकार मॉडल का उपयोग करता है। उदाहरण के लिए, टेबलटॉप पर एक सर्कल में कितने सिक्के पैक किए जा सकते हैं, या 3 आयामों में कितने कंचे ग्लोब में पैक किए जा सकते हैं। अन्य विचार एक कोड की पसंद दर्शाते करते हैं। उदाहरण के लिए, आयताकार बॉक्स की सीमा में हेक्सागोन पैकिंग कोनों पर खाली जगह छोड़ देगी। जैसे-जैसे आयाम बड़े होते जाते हैं, रिक्त स्थान का प्रतिशत छोटा होता जाता है। लेकिन कुछ आयामों पर, पैकिंग सभी जगह का उपयोग करती है और ये कोड तथाकथित [[हैमिंग बाध्य|संपन्न]] कोड होते हैं। केवल अतुच्छ और उपयोगी [[हैमिंग बाध्य|संपन्न]] कोड दूरी -3 हैमिंग कोड हैं जो पैरामीटर संतोषजनक (2r - 1, 2r - 1 - r, 3), और [23,12,7] बाइनरी और [11,6,5] टर्नरी गोले-कोड के साथ हैं।<sup><ref name="terras">
{{cite book | title = Fourier Analysis on Finite Groups and Applications |first=Audrey |last=Terras |author-link=Audrey Terras| publisher = [[Cambridge University Press]] | year = 1999 | isbn = 978-0-521-45718-7 | url = https://archive.org/details/fourieranalysiso0000terr | url-access = registration | page = [https://archive.org/details/fourieranalysiso0000terr/page/195 195] }}</ref><ref name=blahut>{{cite book |title = डेटा ट्रांसमिशन के लिए बीजगणितीय कोड|first=Richard E. |last=Blahut | publisher = Cambridge University Press | year = 2003 | isbn = 978-0-521-55374-2 | url = https://books.google.com/books?id=n0XHMY58tL8C&pg=PA60}}
{{cite book | title = Fourier Analysis on Finite Groups and Applications |first=Audrey |last=Terras |author-link=Audrey Terras| publisher = [[Cambridge University Press]] | year = 1999 | isbn = 978-0-521-45718-7 | url = https://archive.org/details/fourieranalysiso0000terr | url-access = registration | page = [https://archive.org/details/fourieranalysiso0000terr/page/195 195] }}</ref><ref name="blahut">{{cite book |title = डेटा ट्रांसमिशन के लिए बीजगणितीय कोड|first=Richard E. |last=Blahut | publisher = Cambridge University Press | year = 2003 | isbn = 978-0-521-55374-2 | url = https://books.google.com/books?id=n0XHMY58tL8C&pg=PA60}}
</ref>
</ref>
एक अन्य कोड गुण पड़ोसियों की संख्या है जो एक एकल कोडवर्ड हो सकता है।<ref name=schlegel>
 
<sup><big>एक अन्य कोड गुण पड़ोसियों की संख्या है जो एक एकल कोडवर्ड हो सकता है।<ref name="schlegel">
{{cite book
{{cite book
  | title = Trellis and turbo coding
  | title = Trellis and turbo coding
Line 131: Line 127:
  | page = 73
  | page = 73
  | url = https://books.google.com/books?id=9wRCjfGAaEcC&pg=PA73
  | url = https://books.google.com/books?id=9wRCjfGAaEcC&pg=PA73
  }}</ref>
  }}</ref><sup>एक उदाहरण के रूप में फिर से सिक्कों पर विचार करें। पहले हम सिक्के को एक आयताकार ग्रिड में पैक करते हैं। प्रत्येक सिक्के में 4 निकटवर्ती पड़ोसी होंगे (और 4 कोनों पर जो दूर हैं)। एक षट्भुज में, प्रत्येक सिक्के में 6 निकट पड़ोसी होंगे। जब हम आयाम बढ़ाते हैं तो निकट पड़ोसियों की संख्या बहुत तेजी से बढ़ती है। नतीजा यह है कि रिसीवर को पड़ोसी चुनने के लिए शोर के तरीकों की संख्या (इसलिए एक त्रुटि) भी बढ़ती है। यह ब्लॉक कोड और वास्तव में सभी कोड की मूलभूत सीमा है। किसी एक पड़ोसी के लिए त्रुटि करना कठिन हो सकता है, लेकिन पड़ोसियों की संख्या काफी बड़ी हो सकती है, इसलिए कुल त्रुटि संभावना वास्तव में समस्या होती है।<ref name="schlegel" /></big>
एक उदाहरण के रूप में फिर से पेनीज़ पर विचार करें। पहले हम पैसे को एक आयताकार ग्रिड में पैक करते हैं। प्रत्येक पेनी में 4 निकटवर्ती पड़ोसी होंगे (और 4 कोनों पर जो दूर हैं)। एक षट्भुज में, प्रत्येक पैसे में 6 निकट पड़ोसी होंगे। जब हम आयाम बढ़ाते हैं तो निकट पड़ोसियों की संख्या बहुत तेजी से बढ़ती है। नतीजा यह है कि रिसीवर को पड़ोसी चुनने के लिए शोर के तरीकों की संख्या (इसलिए एक त्रुटि) भी बढ़ती है। यह ब्लॉक कोड और वास्तव में सभी कोड की मूलभूत सीमा है। किसी एक पड़ोसी के लिए त्रुटि करना कठिन हो सकता है, लेकिन पड़ोसियों की संख्या काफी बड़ी हो सकती है, इसलिए कुल त्रुटि संभावना वास्तव में पीड़ित होती है।<ref name=schlegel/>


कई अनुप्रयोगों में रैखिक ब्लॉक कोड के गुणों का उपयोग किया जाता है। उदाहरण के लिए, रेखीय ब्लॉक कोड के सिंड्रोम-कोसेट विशिष्टता गुण का उपयोग ट्रेलिस को आकार देने में किया जाता है,<ref>{{cite journal |first=G.D. Jr. |last=Forney |author-link=Dave Forney |title=ट्रेलिस को आकार देना|journal=IEEE Transactions on Information Theory |volume=38 |issue=2 Pt 2 |pages=281–300 |date=March 1992 |doi=10.1109/18.119687 |s2cid=37984132 }}</ref> सबसे प्रसिद्ध [[आकार देने वाले कोड]]ों में से एक।
कई अनुप्रयोगों में रैखिक ब्लॉक कोड के गुणों का उपयोग किया जाता है। उदाहरण के लिए, रेखीय ब्लॉक कोड के सिंड्रोम-कोसेट विशिष्टता गुण का उपयोग ट्रेलिस शेपिंग, सबसे प्रचलित [[आकार देने वाले कोड]] में से एक, में किया जाता है,<ref>{{cite journal |first=G.D. Jr. |last=Forney |author-link=Dave Forney |title=ट्रेलिस को आकार देना|journal=IEEE Transactions on Information Theory |volume=38 |issue=2 Pt 2 |pages=281–300 |date=March 1992 |doi=10.1109/18.119687 |s2cid=37984132 }}</ref>


==== संवादात्मक कोड ====
==== कोंवोलुशनल कोड ====
{{Main|Convolutional code}}
{{Main|कोंवोलुशनल कोड}}
कनवल्शनल कोड के पीछे का विचार यह है कि प्रत्येक कोडवर्ड प्रतीक को विभिन्न इनपुट संदेश प्रतीकों का भारित योग बनाया जाए। जब आप इनपुट और आवेग प्रतिक्रिया जानते हैं, तो यह सिस्टम के आउटपुट को खोजने के लिए [[रैखिक समय अपरिवर्तनीय]] प्रणालियों में उपयोग किए जाने वाले कनवल्शन की तरह है।


इसलिए हम आम तौर पर सिस्टम कन्वेन्शनल एनकोडर का