गोलोम्ब कोडिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Lossless data compression method}}
{{Short description|Lossless data compression method}}
गोलोम्ब कोडिंग 1960 के दशक में सोलोमन डब्ल्यू. गोलोम्ब द्वारा आविष्कृत डेटा संपीड़न कोड के परिवार का उपयोग करके [[दोषरहित डेटा संपीड़न]] विधि है। [[ज्यामितीय वितरण]] का अनुसरण करने वाले अक्षरों में इष्टतम [[उपसर्ग कोड]] के रूप में गोलोम्ब कोड होगा,<ref>{{Cite journal | last1 = Gallager | first1 = R. G. |last2 = van Voorhis |first2 = D. C.| title = ज्यामितीय रूप से वितरित पूर्णांक वर्णमाला के लिए इष्टतम स्रोत कोड| journal = [[IEEE Transactions on Information Theory]]| volume = 21 | issue = 2 | pages = 228–230 | year = 1975 | doi=10.1109/tit.1975.1055357}}</ref> गोलोम्ब कोडिंग को उन स्थितियों के लिए अत्यधिक उपयुक्त बनाना जहां इनपुट स्ट्रीम में छोटे मानों की घटना बड़े मानों की तुलना में काफी अधिक होने की संभावना है।
'''गोलोम्ब कोडिंग''' 1960 के दशक में सोलोमन डब्ल्यू. गोलोम्ब द्वारा आविष्कृत डेटा संपीड़न कोड के समूह का उपयोग करके [[दोषरहित डेटा संपीड़न]] विधि है। [[ज्यामितीय वितरण]] का अनुसरण करने वाले अक्षरों में इष्टतम [[उपसर्ग कोड]] के रूप में गोलोम्ब कोड होता है,<ref>{{Cite journal | last1 = Gallager | first1 = R. G. |last2 = van Voorhis |first2 = D. C.| title = ज्यामितीय रूप से वितरित पूर्णांक वर्णमाला के लिए इष्टतम स्रोत कोड| journal = [[IEEE Transactions on Information Theory]]| volume = 21 | issue = 2 | pages = 228–230 | year = 1975 | doi=10.1109/tit.1975.1055357}}</ref> गोलोम्ब कोडिंग को उन स्थितियों के लिए अत्यधिक उपयुक्त बनाना होता है जहां इनपुट स्ट्रीम में छोटे मानों की घटना बड़े मानों की तुलना में अधिक होने की संभावना है।


== चावल कोडिंग ==
== राइस कोडिंग ==


राइस कोडिंग (रॉबर्ट एफ. राइस द्वारा आविष्कार) सरल (लेकिन संभवतः उप-इष्टतम) उपसर्ग कोड का उत्पादन करने के लिए गोलोम्ब कोड के परिवार के सबसेट का उपयोग करने को दर्शाता है। राइस ने कोड के इस सेट का उपयोग [[अनुकूली कोडिंग]] योजना में किया; राइस कोडिंग या तो उस अनुकूली योजना को संदर्भित कर सकती है या गोलोम्ब कोड के उस सबसेट का उपयोग कर सकती है। जबकि गोलोम्ब कोड में ट्यून करने योग्य पैरामीटर होता है जो कोई भी सकारात्मक पूर्णांक मान हो सकता है, राइस कोड वे होते हैं जिनमें ट्यून करने योग्य पैरामीटर दो की शक्ति है। यह राइस कोड को कंप्यूटर पर उपयोग के लिए सुविधाजनक बनाता है क्योंकि 2 से गुणा और भाग को बाइनरी अंकगणित में अधिक कुशलता से लागू किया जा सकता है।
राइस कोडिंग (रॉबर्ट एफ. राइस द्वारा आविष्कार) सरल (किन्तु संभवतः उप-इष्टतम) उपसर्ग कोड का उत्पादन करने के लिए गोलोम्ब कोड के समूह के उपसमुच्चय का उपयोग करने को दर्शाता है। इस प्रकार राइस ने कोड के इस समुच्चय का उपयोग [[अनुकूली कोडिंग]] योजना में किया था; राइस कोडिंग या तो उस अनुकूली योजना को संदर्भित कर सकती है या गोलोम्ब कोड के उस उपसमुच्चय का उपयोग कर सकती है। जबकि गोलोम्ब कोड में ट्यून करने योग्य मापदंड होता है जो कोई भी धनात्मक पूर्णांक मान हो सकता है, इस प्रकार राइस कोड वे होते हैं जिनमें ट्यून करने योग्य मापदंड दो की शक्ति है। यह राइस कोड को कंप्यूटर पर उपयोग के लिए सुविधाजनक बनाता है क्योंकि 2 से गुणा और भाग को बाइनरी अंकगणित में अधिक कुशलता से प्रयुक्त किया जा सकता है।


राइस को इस सरल उपसमुच्चय को प्रस्तावित करने के लिए इस तथ्य के कारण प्रेरित किया गया था कि ज्यामितीय वितरण अक्सर समय के साथ भिन्न होते हैं, सटीक रूप से ज्ञात नहीं होते हैं, या दोनों, इसलिए प्रतीत होता है कि इष्टतम कोड का चयन करना बहुत फायदेमंद नहीं हो सकता है।
राइस को इस सरल उपसमुच्चय को प्रस्तावित करने के लिए इस तथ्य के कारण प्रेरित किया गया था कि ज्यामितीय वितरण अधिकांशतः समय के साथ भिन्न होते हैं, इस प्रकार स्पष्ट रूप से ज्ञात नहीं होते हैं, या दोनों, इसलिए प्रतीत होता है कि इष्टतम कोड का चयन करना बहुत लाभदायक नहीं हो सकता है।


राइस कोडिंग का उपयोग कई दोषरहित [[छवि संपीड़न]] और [[ऑडियो डेटा संपीड़न]] विधियों में [[एन्ट्रापी एन्कोडिंग]] चरण के रूप में किया जाता है।
इस प्रकार राइस कोडिंग का उपयोग कई दोषरहित [[छवि संपीड़न]] और [[ऑडियो डेटा संपीड़न]] विधियों में [[एन्ट्रापी एन्कोडिंग]] चरण के रूप में किया जाता है।


== सिंहावलोकन ==
== अवलोकन ==
[[File:Golomb code example.png|thumb|upright 1.5|पैरामीटर के साथ, ज्यामितीय वितरण के साथ स्रोत x के लिए गोलोम्ब कोडिंग उदाहरण {{math|''p''(0) {{=}} 0.2}}, गोलोम्ब कोड का उपयोग करते हुए {{math|''M'' {{=}} 3}}. 2-बिट कोड 00 का उपयोग 20% समय किया जाता है; 3-बिट कोड 010, 011, और 100 का उपयोग 38% से अधिक समय में किया जाता है; बहुत कम मामलों में 4 बिट या अधिक की आवश्यकता होती है। इस स्रोत के लिए, एन्ट्रापी = 3.610 बिट्स; इस स्रोत के साथ इस कोड के लिए, दर = 3.639 बिट्स; इसलिए अतिरेक = 0.030 बिट्स, या दक्षता = 0.992 बिट्स प्रति बिट।]]
[[File:Golomb code example.png|thumb|upright 1.5|मापदंड के साथ, ज्यामितीय वितरण के साथ स्रोत x के लिए गोलोम्ब कोडिंग उदाहरण {{math|''p''(0) {{=}} 0.2}}, गोलोम्ब कोड का उपयोग करते हुए {{math|''M'' {{=}} 3}}. 2-बिट कोड 00 का उपयोग 20% समय किया जाता है; 3-बिट कोड 010, 011, और 100 का उपयोग 38% से अधिक समय में किया जाता है; बहुत कम मामलों में 4 बिट या अधिक की आवश्यकता होती है। इस स्रोत के लिए, एन्ट्रापी = 3.610 बिट्स; इस स्रोत के साथ इस कोड के लिए, दर = 3.639 बिट्स; इसलिए अतिरेक = 0.030 बिट्स, या दक्षता = 0.992 बिट्स प्रति बिट।]]


===कोडों का निर्माण===
===कोडों का निर्माण===


गोलोम्ब कोडिंग ट्यून करने योग्य पैरामीटर का उपयोग करती है {{mvar|M}} किसी इनपुट मान को विभाजित करने के लिए {{mvar|x}}दो भागों में: {{mvar|q}}, द्वारा विभाजन का परिणाम {{mvar|M}}, और {{mvar|r}}, शेष। भागफल को [[यूनरी कोडिंग]] में भेजा जाता है, इसके बाद शेष को काटे [[संक्षिप्त बाइनरी एन्कोडिंग]] में भेजा जाता है। कब <math>M=1</math>, गोलोम्ब कोडिंग यूनरी कोडिंग के बराबर है।
गोलोम्ब कोडिंग ट्यून करने योग्य मापदंड {{mvar|M}} का उपयोग करती है इस प्रकार किसी इनपुट मान को विभाजित करने के लिए {{mvar|x}} दो भागों {{mvar|M}}, और {{mvar|r}}, शेष में {{mvar|q}}, द्वारा विभाजन का परिणाम प्राप्त करती है। भागफल को [[यूनरी कोडिंग]] में भेजा जाता है, इसके बाद शेष को [[संक्षिप्त बाइनरी एन्कोडिंग]] में भेजा जाता है। जब <math>M=1</math>, गोलोम्ब कोडिंग यूनरी कोडिंग के समान है।


गोलोम्ब-चावल कोड को ऐसे कोड के रूप में माना जा सकता है जो बिन की स्थिति के आधार पर संख्या दर्शाते हैं ({{mvar|q}}), और बिन के भीतर ऑफसेट ({{mvar|r}}). उदाहरण चित्र स्थिति दर्शाता है {{mvar|q}} और ऑफसेट {{mvar|r}} पूर्णांक की एन्कोडिंग के लिए {{mvar|x}} गोलोम्ब-राइस पैरामीटर का उपयोग करना {{math|''M'' {{=}} 3}}, ज्यामितीय वितरण के बाद स्रोत संभावनाओं के साथ {{math|''p''(0) {{=}} 0.2}}.
गोलोम्ब-राइस कोड को ऐसे कोड के रूप में माना जा सकता है जो बिन की स्थिति के आधार पर संख्या ({{mvar|q}}) दर्शाते हैं , और इस प्रकार अन्दर ऑफसेट ({{mvar|r}}). उदाहरण चित्र स्थिति {{mvar|q}} दर्शाता है और ऑफसेट {{mvar|r}} पूर्णांक की एन्कोडिंग के लिए {{mvar|x}} गोलोम्ब-राइस मापदंड {{math|''M'' {{=}} 3}} का उपयोग करता है , ज्यामितीय वितरण के बाद स्रोत संभावनाओं के साथ {{math|''p''(0) {{=}} 0.2}}. का उपयोग किया जाता है


औपचारिक रूप से, दोनों भाग निम्नलिखित अभिव्यक्ति द्वारा दिए गए हैं, जहाँ {{mvar|x}} क्या गैर-ऋणात्मक पूर्णांक को एन्कोड किया जा रहा है:
औपचारिक रूप से, दोनों भाग निम्नलिखित अभिव्यक्ति द्वारा दिए गए हैं, जहाँ {{mvar|x}} क्या गैर-ऋणात्मक पूर्णांक को एन्कोड किया जा रहा है:
Line 26: Line 26:
:<math>r = x - qM</math>.
:<math>r = x - qM</math>.


[[File:GolombCodeRedundancy.svg|thumb|upright 1.5|यह छवि, गोलोम्ब कोड की, बिट्स में, अतिरेक को दर्शाती है {{mvar|M}}के लिए इष्टतम रूप से चुना गया है {{math| 1 − ''p''(0) &ge; 0.45}}]]दोनों {{mvar|q}} और {{mvar|r}} बिट्स की परिवर्तनीय संख्याओं का उपयोग करके एन्कोड किया जाएगा: {{mvar|q}} यूनरी कोड द्वारा, और {{mvar|r}} द्वारा {{mvar|b}} राइस कोड के लिए बिट्स, या इनमें से कोई विकल्प {{mvar|b}} और {{math|{{var|b}}+1}} गोलोम्ब कोड के लिए बिट्स (अर्थात्। {{mvar|M}} 2) की घात नहीं है <math>b = \lfloor\log_2(M)\rfloor</math>. अगर <math>r < 2^{b+1} - M</math>, फिर उपयोग करें {{mvar|b}} एन्कोड करने के लिए बिट्स {{mvar|r}}; अन्यथा, उपयोग करें {{mvar|b}}+1 बिट एन्कोड करने के लिए {{mvar|r}}. स्पष्ट रूप से, <math>b=\log_2(M)</math> अगर {{mvar|M}} 2 की घात है और हम इसके सभी मानों को एन्कोड कर सकते हैं {{mvar|r}} साथ {{mvar|b}} बिट्स.
[[File:GolombCodeRedundancy.svg|thumb|upright 1.5|यह छवि, गोलोम्ब कोड की, बिट्स में, अतिरेक को दर्शाती है {{mvar|M}}के लिए इष्टतम रूप से चुना गया है {{math| 1 − ''p''(0) &ge; 0.45}}]]दोनों {{mvar|q}} और {{mvar|r}} बिट्स की परिवर्तनीय संख्याओं का उपयोग करके एन्कोड किया जाता है: इस प्रकार {{mvar|q}} यूनरी कोड द्वारा, और {{mvar|r}} द्वारा {{mvar|b}} राइस कोड के लिए बिट्स, या इनमें से कोई विकल्प {{mvar|b}} और {{math|{{var|b}}+1}} गोलोम्ब कोड के लिए बिट्स (अर्थात्। {{mvar|M}} 2) की घात <math>b = \lfloor\log_2(M)\rfloor</math> नहीं है इस प्रकार यदि <math>r < 2^{b+1} - M</math>, फिर उपयोग करें {{mvar|b}} एन्कोड करने के लिए बिट्स {{mvar|r}}; अन्यथा, {{mvar|b}}+1 उपयोग करें बिट एन्कोड करने के लिए {{mvar|r}}. स्पष्ट रूप से, <math>b=\log_2(M)</math> यदि {{mvar|M}} 2 की घात है और हम इसके सभी मानों {{mvar|r}} साथ {{mvar|b}} बिट्स को एन्कोड कर सकते हैं.


पूर्णांक {{mvar|x}} गोलोम्ब द्वारा उपचारित [[बर्नौली प्रक्रिया]] की रन लंबाई थी, जिसका ज्यामितीय वितरण 0 से शुरू होता है। पैरामीटर का सबसे अच्छा विकल्प {{mvar|M}} संगत बर्नौली प्रक्रिया का फ़ंक्शन है, जिसे पैरामीटराइज़ किया गया है <math>p = P(x=0)</math> किसी दिए गए [[बर्नौली परीक्षण]] में सफलता की संभावना। {{mvar|M}} या तो वितरण का माध्यिका है या माध्यिका ±1। इसे इन असमानताओं द्वारा निर्धारित किया जा सकता है:
पूर्णांक {{mvar|x}} गोलोम्ब द्वारा उपचारित [[बर्नौली प्रक्रिया]] की रन लंबाई थी, जिसका ज्यामितीय वितरण 0 से प्रारंभ होता है। इस प्रकार मापदंड का सबसे अच्छा विकल्प {{mvar|M}} संगत बर्नौली प्रक्रिया का फलन है, जिसे मापदंडाइज़ <math>p = P(x=0)</math> किया गया है  किसी दिए गए [[बर्नौली परीक्षण]] में सफलता की संभावना {{mvar|M}} या तो वितरण का माध्यिका है या माध्यिका ±1 इसे इन असमानताओं द्वारा निर्धारित किया जा सकता है:
: <math>(1-p)^M + (1-p)^{M+1} \leq 1 < (1-p)^{M-1} + (1-p)^M,</math>
: <math>(1-p)^M + (1-p)^{M+1} \leq 1 < (1-p)^{M-1} + (1-p)^M,</math>
जिनका समाधान किया जाता है
जिनका समाधान किया जाता है
Line 36: Line 36:
: <math>M = \left\lceil -\frac{\log(1.8)}{\log(0.8)}\right\rceil  = \left\lceil 2.634 \right\rceil = 3</math>.
: <math>M = \left\lceil -\frac{\log(1.8)}{\log(0.8)}\right\rceil  = \left\lceil 2.634 \right\rceil = 3</math>.


इस वितरण के लिए गोलोम्ब कोड समान संभावनाओं के लिए [[हफ़मैन कोड]] के बराबर है, यदि स्रोत मानों के अनंत सेट के लिए हफ़मैन कोड की गणना करना संभव हो।
इस वितरण के लिए गोलोम्ब कोड समान संभावनाओं के लिए [[हफ़मैन कोड]] के समान है, यदि स्रोत मानों के अनंत समुच्चय के लिए हफ़मैन कोड की गणना करना संभव हो जाता है।


===हस्ताक्षरित पूर्णांकों के साथ प्रयोग करें===
===हस्ताक्षरित पूर्णांकों के साथ प्रयोग करें===


गोलोम्ब की योजना गैर-नकारात्मक संख्याओं के अनुक्रमों को एन्कोड करने के लिए डिज़ाइन की गई थी। हालाँकि, इसे ओवरलैप और इंटरलीव योजना का उपयोग करके नकारात्मक संख्याओं वाले अनुक्रमों को स्वीकार करने के लिए आसानी से बढ़ाया जाता है, जिसमें सभी मानों को अद्वितीय और प्रतिवर्ती तरीके से कुछ सकारात्मक संख्या में पुन: असाइन किया जाता है। अनुक्रम शुरू होता है: 0, −1, 1, −2, 2, −3, 3, −4, 4... n-वां नकारात्मक मान (यानी, {{tmath|-n}}) को n पर मैप किया गया है<sup>वें</sup>विषम संख्या ({{tmath|2n-1}}), और उन्हें<sup>वें</sup>धनात्मक मान को एम-वें सम संख्या में मैप किया जाता है ({{tmath|2m}}). इसे गणितीय रूप से इस प्रकार व्यक्त किया जा सकता है: सकारात्मक मान {{mvar|x}} को मैप किया गया है (<math>x' = 2|x| = 2x,\ x \ge 0</math>), और नकारात्मक मान {{mvar|y}} को मैप किया गया है (<math>y' = 2|y| - 1 = -2y - 1,\ y < 0</math>). इस तरह के कोड का उपयोग सरलता के लिए किया जा सकता है, भले ही यह उप-इष्टतम हो। वास्तव में दो-तरफा ज्यामितीय वितरण के लिए इष्टतम कोड में इस सहित वितरण मापदंडों के आधार पर गोलोम्ब कोड के कई प्रकार शामिल हैं।<ref>{{Cite journal | last1 = Merhav | first1 = N. | last2 = Seroussi | first2 = G. | last3 = Weinberger | first3 = M. J. | title = दोतरफा ज्यामितीय वितरण और अज्ञात मापदंडों के साथ स्रोतों की कोडिंग| journal = [[IEEE Transactions on Information Theory]]| volume = 46 | issue = 1 | pages = 229–236 | year = 2000 | doi=10.1109/18.817520}}</ref>
गोलोम्ब की योजना गैर-ऋणात्मक संख्याओं के अनुक्रमों को एन्कोड करने के लिए डिज़ाइन की गई थी। चूँकि, इसे ओवरलैप और इंटरलीव योजना का उपयोग करके ऋणात्मक संख्याओं वाले अनुक्रमों को स्वीकार करने के लिए सरलता से बढ़ाया जाता है, इस प्रकार जिसमें सभी मानों को अद्वितीय और प्रतिवर्ती विधि से कुछ धनात्मक संख्या में पुन: असाइन किया जाता है। अनुक्रम प्रारंभ होता है: 0, −1, 1, −2, 2, −3, 3, −4, 4... n-वां ऋणात्मक मान (अर्थात, {{tmath|-n}}) को n पर मैप किया गया है विषम संख्या ({{tmath|2n-1}}), और उन्हें धनात्मक मान को m-वें सम संख्या ({{tmath|2m}}) में मैप किया जाता है . इसे गणितीय रूप से इस प्रकार व्यक्त किया जा सकता है: धनात्मक मान {{mvar|x}} को मैप (<math>x' = 2|x| = 2x,\ x \ge 0</math>) किया गया है , और ऋणात्मक मान {{mvar|y}} को मैप (<math>y' = 2|y| - 1 = -2y - 1,\ y < 0</math>) किया गया है इस प्रकार के कोड का उपयोग सरलता के लिए किया जा सकता है, तथापि यह उप-इष्टतम हो वास्तव में दो-तरफा ज्यामितीय वितरण के लिए इष्टतम कोड में इस सहित वितरण मापदंडों के आधार पर गोलोम्ब कोड के कई प्रकार सम्मिलित हैं।<ref>{{Cite journal | last1 = Merhav | first1 = N. | last2 = Seroussi | first2 = G. | last3 = Weinberger | first3 = M. J. | title = दोतरफा ज्यामितीय वितरण और अज्ञात मापदंडों के साथ स्रोतों की कोडिंग| journal = [[IEEE Transactions on Information Theory]]| volume = 46 | issue = 1 | pages = 229–236 | year = 2000 | doi=10.1109/18.817520}}</ref>




== सरल एल्गोरिथ्म ==
== सरल एल्गोरिथ्म ==


नीचे राइस-गोलोम्ब एन्कोडिंग है, जहां शेष कोड सरल ट्रंकेटेड बाइनरी एन्कोडिंग का उपयोग करता है, जिसे राइस कोडिंग भी कहा जाता है (अन्य अलग-अलग लंबाई वाली बाइनरी एन्कोडिंग, जैसे अंकगणित या हफमैन एन्कोडिंग, शेष कोड के लिए संभव हैं, यदि शेष कोड का सांख्यिकीय वितरण होता है) समतल नहीं है, और विशेष रूप से तब जब विभाजन के बाद सभी संभावित शेषफलों का उपयोग नहीं किया जाता है)। इस एल्गोरिदम में, यदि एम पैरामीटर 2 की शक्ति है, तो यह सरल चावल एन्कोडिंग के बराबर हो जाता है:
नीचे राइस-गोलोम्ब एन्कोडिंग है, जहां शेष कोड सरल ट्रंकेटेड बाइनरी एन्कोडिंग का उपयोग करता है, जिसे राइस कोडिंग भी कहा जाता है (अन्य अलग-अलग लंबाई वाली बाइनरी एन्कोडिंग, जैसे अंकगणित या हफमैन एन्कोडिंग, शेष कोड के लिए संभव हैं, यदि शेष कोड का सांख्यिकीय वितरण होता है) समतल नहीं है, और इस प्रकार विशेष रूप से तब जब विभाजन के बाद सभी संभावित शेषफलों का उपयोग नहीं किया जाता है)। इस एल्गोरिदम में, यदि m मापदंड 2 की शक्ति है, तो यह सरल राइस एन्कोडिंग के समान हो जाता है:


# पैरामीटर M को पूर्णांक मान पर ठीक करें।
# मापदंड M को पूर्णांक मान पर ठीक करें।
# N के लिए, एन्कोड किया जाने वाला नंबर ढूंढें
# N के लिए, एन्कोड किया जाने वाला नंबर खोजे
## भागफल = q = मंजिल(एन/एम)
## भागफल = q = फ्लोर(n/m)
## शेष = आर = एन मोडुलो एम
## शेष = r = n मोडुलो m
# कोडवर्ड जेनरेट करें
# कोडवर्ड जेनरेट करें
## कोड प्रारूप: <कोटिएंट कोड><शेष कोड>, कहां
## कोड प्रारूप: <कोटिएंट कोड><शेष कोड>, जहाँ
## कोटिएंट कोड (यूनरी कोडिंग में)
## कोटिएंट कोड (यूनरी कोडिंग में)
### 1 बिट्स की क्यू-लंबाई स्ट्रिंग लिखें (वैकल्पिक रूप से, 0 बिट्स की)
### 1 बिट्स की q-लंबाई स्ट्रिंग लिखें (वैकल्पिक रूप से, 0 बिट्स की)
### 0 बिट लिखें (क्रमशः, 1 बिट)
### 0 बिट लिखें (क्रमशः, 1 बिट)
## शेष कोड (काटे गए बाइनरी एन्कोडिंग में)
## शेष कोड (काटे गए बाइनरी एन्कोडिंग में)
###  होने देना <math>b = \lfloor\log_2(M)\rfloor</math>
###  माना <math>b = \lfloor\log_2(M)\rfloor</math>
####    अगर <math>r < 2^{b+1}-M</math> बी बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में कोड आर।
####    यदि <math>r < 2^{b+1}-M</math> b बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में कोड r।
####    अगर <math>r \ge 2^{b+1}-M</math> नंबर कोड करें <math>r+2^{b+1}-M</math> बी + 1 बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में।
####    यदि <math>r \ge 2^{b+1}-M</math> नंबर कोड करें <math>r+2^{b+1}-M</math> b + 1 बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में।


डिकोडिंग:
डिकोडिंग:
# q के एकल प्रतिनिधित्व को डिकोड करें (कोड की शुरुआत में 1 की संख्या गिनें)
# q के एकल प्रतिनिधित्व को डिकोड करें (कोड की प्रारंभ में 1 की संख्या गिनें)
# 0 सीमांकक छोड़ें
# 0 सीमांकक छोड़ें
# होने देना <math>b = \lfloor\log_2(M)\rfloor</math>
# माना <math>b = \lfloor\log_2(M)\rfloor</math>
## अगले बी बिट्स को बाइनरी नंबर आर' के रूप में समझें। अगर <math>r' < 2^{b+1}-M</math> रखता है, फिर अनुस्मारक <math> r = r' </math>
## अगले b बिट्स को बाइनरी नंबर r' के रूप में समझें। यदि <math>r' < 2^{b+1}-M</math> रखता है, फिर अनुस्मारक <math> r = r' </math> है
## अन्यथा b + 1 बिट्स को बाइनरी नंबर r' के रूप में समझें, अनुस्मारक द्वारा दिया गया है <math>r = r' - 2^{b+1} + M</math>
## अन्यथा b + 1 बिट्स को बाइनरी नंबर r' के रूप में समझें, अनुस्मारक <math>r = r' - 2^{b+1} + M</math> द्वारा दिया गया है
# गणना करें <math>N = q * M + r</math>
# गणना करें <math>N = q * M + r</math>


Line 72: Line 72:
== उदाहरण ==
== उदाहरण ==


तय करना {{math|''M'' {{=}} 10}}. इस प्रकार <math>b = \lfloor\log_2(10)\rfloor = 3</math>. कटऑफ है <math>2^{b+1} - M = 16 - 10 = 6</math>.
समुच्चय {{math|''M'' {{=}} 10}}. इस प्रकार <math>b = \lfloor\log_2(10)\rfloor = 3</math>. कटऑफ है <math>2^{b+1} - M = 16 - 10 = 6</math>.


{| style="margin:0"
{| style="margin:0"
|-valign="top"
|- valign="top"
|
|
{| class="wikitable" style="margin:0 1em 0 0"
{| class="wikitable" style="margin:0 1em 0 0"
|-
|-
!colspan="2"|Encoding of quotient part
! colspan="2" |भागफल भाग का एन्कोडिंग
|-
|-
!{{mvar|q}}||output bits
!{{mvar|q}}||आउटपुट बिट्स
|-
|-
|0||0
|0||0
Line 104: Line 104:
{| class="wikitable" style="margin:0"
{| class="wikitable" style="margin:0"
|-
|-
!colspan="4"|Encoding of remainder part
! colspan="4" |शेष भाग का एन्कोडिंग
|-
|-
!{{mvar|r}}||offset||binary||output bits
!{{mvar|r}}||ऑफसेट||बाइनरी||आउटपुट बिट्स
|-
|-
|0||0||0000||000
|0||0||0000||000
Line 130: Line 130:
|}
|}


उदाहरण के लिए, पैरामीटर का उपयोग करके राइस-गोलोम्ब एन्कोडिंग के साथ {{math|''M'' {{=}} 10}}, दशमलव संख्या 42 को पहले विभाजित किया जाएगा {{mvar|q}}=4 और {{mvar|r}} = 2, और qcode के रूप में एन्कोड किया जाएगा({{mvar|q}}),आरकोड({{mvar|r}}) = qcode(4),rcode(2) = 11110,010 (आपको आउटपुट स्ट्रीम में अलग करने वाले अल्पविराम को एनकोड करने की आवश्यकता नहीं है, क्योंकि के अंत में 0 है {{mvar|q}} कोड कब कहने के लिए पर्याप्त है {{mvar|q}} समाप्त होता है और {{mvar|r}} शुरू करना ; क्यूकोड और आरकोड दोनों स्व-सीमांकित हैं)।
उदाहरण के लिए, मापदंड का उपयोग करके राइस-गोलोम्ब एन्कोडिंग के साथ {{math|''M'' {{=}} 10}}, दशमलव संख्या 42 को पहले विभाजित किया जाएगा {{mvar|q}}=4 और {{mvar|r}} = 2, और qcode के रूप में एन्कोड किया जाएगा({{mvar|q}}),rकोड({{mvar|r}}) = qcode(4),rcode(2) = 11110,010 (आपको आउटपुट स्ट्रीम में अलग करने वाले अल्पविराम को एनकोड करने की आवश्यकता नहीं है, क्योंकि के अंत में 0 है {{mvar|q}} कोड कब कहने के लिए पर्याप्त है {{mvar|q}} समाप्त होता है और {{mvar|r}} प्रारंभ करना ; qकोड और rकोड दोनों स्व-सीमांकित हैं)।


== रन-लेंथ एन्कोडिंग के लिए उपयोग करें ==
== रन-लेंथ एन्कोडिंग के लिए उपयोग करें ==
Line 136: Line 136:
:ध्यान दें कि {{mvar|p}} और {{math|1 – p}} पिछले अनुभागों में उपयोग की तुलना में इस अनुभाग में उलट दिया गया है।
:ध्यान दें कि {{mvar|p}} और {{math|1 – p}} पिछले अनुभागों में उपयोग की तुलना में इस अनुभाग में उलट दिया गया है।


दो प्रतीकों की वर्णमाला, या दो घटनाओं, पी और क्यू का सेट, संभावनाओं के साथ पी और ({{math|1 &minus; ''p''}}) क्रमशः, कहाँ {{math|''p'' ≥ 1/2}}, गोलोम्ब कोडिंग का उपयोग एकल Q′s द्वारा अलग किए गए शून्य या अधिक P′s के रन को एन्कोड करने के लिए किया जा सकता है। इस एप्लिकेशन में, पैरामीटर एम की सबसे अच्छी सेटिंग निकटतम पूर्णांक है <math>- \frac{1}{\log_{2}p}</math>. जब पी = 1/2, एम = 1, और गोलोम्ब कोड यूनरी से मेल खाता है ({{math|''n'' ≥ 0}} P′s के बाद Q आता है, इसे n के रूप में एन्कोड किया जाता है जिसके बाद शून्य आता है)। यदि सरल कोड वांछित है, तो कोई गोलोम्ब-राइस पैरामीटर निर्दिष्ट कर सकता है {{mvar|b}} (यानी, गोलोम्ब पैरामीटर <math>M=2^b</math>) के निकटतम पूर्णांक तक <math>- \log_2(-\log_2 p)</math>; हालाँकि यह हमेशा सबसे अच्छा पैरामीटर नहीं होता है, यह आमतौर पर सबसे अच्छा राइस पैरामीटर होता है और इसका संपीड़न प्रदर्शन इष्टतम गोलोम्ब कोड के काफी करीब होता है। (राइस ने स्वयं ही डेटा के लिए विभिन्न कोड का उपयोग करने का प्रस्ताव दिया ताकि यह पता लगाया जा सके कि कौन सा सबसे अच्छा था। बाद में [[जेट प्रोपल्शन प्रयोगशाला]] के शोधकर्ता ने कोड पैरामीटर को अनुकूलित करने या अनुमान लगाने के विभिन्न तरीकों का प्रस्ताव दिया।<ref>{{Cite techreport | last1 = Kiely | first1 = A. | title = चावल कोडिंग में गोलोम्ब पैरामीटर का चयन करना| number = 42-159 | institution = [[Jet Propulsion Laboratory]] | year = 2004}}</ref>)
दो प्रतीकों की वर्णमाला, या दो घटनाओं, पी और q का समुच्चय, संभावनाओं के साथ पी और ({{math|1 &minus; ''p''}}) क्रमशः, कहाँ {{math|''p'' ≥ 1/2}}, गोलोम्ब कोडिंग का उपयोग एकल Q′s द्वारा अलग किए गए शून्य या अधिक P′s के रन को एन्कोड करने के लिए किया जा सकता है। इस एप्लिकेशन में, मापदंड m की सबसे अच्छी सेटिंग निकटतम पूर्णांक है <math>- \frac{1}{\log_{2}p}</math>. जब पी = 1/2, m = 1, और गोलोम्ब कोड यूनरी से मेल खाता है ({{math|''n'' ≥ 0}} P′s के बाद Q आता है, इसे n के रूप में एन्कोड किया जाता है जिसके बाद शून्य आता है)। यदि सरल कोड वांछित है, तो कोई गोलोम्ब-राइस मापदंड निर्दिष्ट कर सकता है {{mvar|b}} (अर्थात, गोलोम्ब मापदंड <math>M=2^b</math>) के निकटतम पूर्णांक तक <math>- \log_2(-\log_2 p)</math>; चूँकि यह हमेशा सबसे अच्छा मापदंड नहीं होता है, यह आमतौर पर सबसे अच्छा राइस मापदंड होता है और इसका संपीड़न प्रदर्शन इष्टतम गोलोम्ब कोड के काफी करीब होता है। (राइस ने स्वयं ही डेटा के लिए विभिन्न कोड का उपयोग करने का प्रस्ताव दिया ताकि यह पता लगाया जा सके कि कौन सा सबसे अच्छा था। बाद में [[जेट प्रोपल्शन प्रयोगशाला]] के शोधकर्ता ने कोड मापदंड को अनुकूलित करने या अनुमान लगाने के विभिन्न तरीकों का प्रस्ताव दिया।<ref>{{Cite techreport | last1 = Kiely | first1 = A. | title = चावल कोडिंग में गोलोम्ब पैरामीटर का चयन करना| number = 42-159 | institution = [[Jet Propulsion Laboratory]] | year = 2004}}</ref>)


बाइनरी भाग वाले राइस कोड का उपयोग करने पर विचार करें {{mvar|b}} बिट्स रन-लेंथ एन्कोड अनुक्रमों के लिए जहां पी की संभावना है {{mvar|p}}. अगर <math>\mathbb{P}[\text{bit is part of }k\text{-run}]</math> संभावना है कि बिट का हिस्सा होगा {{mvar|k}}-बिट रन (<math>k-1</math> पीएस और क्यू) और <math>(\text{compression ratio of }k\text{-run})</math> उस रन का संपीड़न अनुपात है, तो अपेक्षित संपीड़न अनुपात है
बाइनरी भाग वाले राइस कोड का उपयोग करने पर विचार करें {{mvar|b}} बिट्स रन-लेंथ एन्कोड अनुक्रमों के लिए जहां पी की संभावना है {{mvar|p}}. यदि <math>\mathbb{P}[\text{bit is part of }k\text{-run}]</math> संभावना है कि बिट का हिस्सा होगा {{mvar|k}}-बिट रन (<math>k-1</math> पीएस और q) और <math>(\text{compression ratio of }k\text{-run})</math> उस रन का संपीड़न अनुपात है, तो अपेक्षित संपीड़न अनुपात है


:<math>\begin{align}
:<math>\begin{align}
Line 149: Line 149:
&= (1-p) \cdot \left(b + {\left (1-p^{2^b} \right )}^{-1}\right ) \\
&= (1-p) \cdot \left(b + {\left (1-p^{2^b} \right )}^{-1}\right ) \\
\end{align}</math>
\end{align}</math>
संपीड़न को अक्सर के रूप में व्यक्त किया जाता है <math>1-\mathbb{E}[\text{compression ratio}]</math>, अनुपात संकुचित। के लिए <math>p \approx 1</math>, रन-लेंथ कोडिंग दृष्टिकोण के परिणामस्वरूप [[एन्ट्रॉपी (सूचना सिद्धांत)]] के करीब संपीड़न अनुपात होता है। उदाहरण के लिए, राइस कोड का उपयोग करना <math>b=6</math> के लिए <math>p=0.99</math> पैदावार {{val|91.89|u=%}} संपीड़न, जबकि एन्ट्रापी सीमा है {{val|91.92|u=%}}.
संपीड़न को अधिकांशतः के रूप में व्यक्त किया जाता है <math>1-\mathbb{E}[\text{compression ratio}]</math>, अनुपात संकुचित। के लिए <math>p \approx 1</math>, रन-लेंथ कोडिंग दृष्टिकोण के परिणामस्वरूप [[एन्ट्रॉपी (सूचना सिद्धांत)]] के करीब संपीड़न अनुपात होता है। उदाहरण के लिए, राइस कोड का उपयोग करना <math>b=6</math> के लिए <math>p=0.99</math> पैदावार {{val|91.89|u=%}} संपीड़न, जबकि एन्ट्रापी सीमा है {{val|91.92|u=%}}.


== अनुकूली रन-लंबाई गोलोम्ब-राइस एन्कोडिंग ==
== अनुकूली रन-लंबाई गोलोम्ब-राइस एन्कोडिंग ==


जब पूर्णांकों के लिए संभाव्यता वितरण ज्ञात नहीं होता है, तो गोलोम्ब-राइस एनकोडर के लिए इष्टतम पैरामीटर निर्धारित नहीं किया जा सकता है। इस प्रकार, कई अनुप्रयोगों में, दो-पास दृष्टिकोण का उपयोग किया जाता है: सबसे पहले, डेटा के लिए संभाव्यता घनत्व फ़ंक्शन (पीडीएफ) का अनुमान लगाने के लिए डेटा के ब्लॉक को स्कैन किया जाता है। फिर गोलोम्ब-राइस पैरामीटर उस अनुमानित पीडीएफ से निर्धारित किया जाता है। उस दृष्टिकोण का सरल बदलाव यह मान लेना है कि पीडीएफ पैरामीट्रिज्ड परिवार से संबंधित है, डेटा से पीडीएफ पैरामीटर का अनुमान लगाएं, और फिर इष्टतम गोलोम्ब-राइस पैरामीटर की गणना करें। नीचे चर्चा किए गए अधिकांश अनुप्रयोगों में यही दृष्टिकोण उपयोग किया जाता है।
जब पूर्णांकों के लिए संभाव्यता वितरण ज्ञात नहीं होता है, तो गोलोम्ब-राइस एनकोडर के लिए इष्टतम मापदंड निर्धारित नहीं किया जा सकता है। इस प्रकार, कई अनुप्रयोगों में, दो-पास दृष्टिकोण का उपयोग किया जाता है: सबसे पहले, डेटा के लिए संभाव्यता घनत्व फलन (पीडीएफ) का अनुमान लगाने के लिए डेटा के ब्लॉक को स्कैन किया जाता है। फिर गोलोम्ब-राइस मापदंड उस अनुमानित पीडीएफ से निर्धारित किया जाता है। उस दृष्टिकोण का सरल बदलाव यह मान लेना है कि पीडीएफ पैरामीट्रिज्ड समूह से संबंधित है, डेटा से पीडीएफ मापदंड का अनुमान लगाएं, और फिर इष्टतम गोलोम्ब-राइस मापदंड की गणना करें। नीचे चर्चा किए गए अधिकांश अनुप्रयोगों में यही दृष्टिकोण उपयोग किया जाता है।


पूर्णांक डेटा को कुशलतापूर्वक एनकोड करने के लिए वैकल्पिक तरीका जिसका पीडीएफ ज्ञात नहीं है, या भिन्न हो रहा है, बैकवर्ड-अनुकूली एनकोडर का उपयोग करना है। [https://www.researchgate.net/publication/4230021_Adaptive_run-lengthGolomb-Rice_encoding_of_quantized_generalized_Gaussian_sources_with_unknown_statistics run-length Golomb-Rice (RLGR) कोड] बहुत ही सरल एल्गोरिदम का उपयोग करके इसे प्राप्त करता है जो Golomb-Rice पैरामीटर को ऊपर या नीचे समायोजित करता है, जो निर्भर करता है अंतिम एन्कोडेड प्रतीक. डिकोडर एन्कोडिंग मापदंडों की भिन्नता को ट्रैक करने के लिए उसी नियम का पालन कर सकता है, इसलिए किसी भी अतिरिक्त जानकारी को प्रसारित करने की आवश्यकता नहीं है, केवल एन्कोडेड डेटा। सामान्यीकृत गॉसियन पीडीएफ को मानते हुए, जो डेटा में देखे गए आंकड़ों की विस्तृत श्रृंखला को कवर करता है जैसे कि भविष्यवाणी त्रुटियां या मल्टीमीडिया कोडेक्स में गुणांक बदलना, आरएलजीआर एन्कोडिंग एल्गोरिदम ऐसे अनुप्रयोगों में बहुत अच्छा प्रदर्शन कर सकता है।
पूर्णांक डेटा को कुशलतापूर्वक एनकोड करने के लिए वैकल्पिक तरीका जिसका पीडीएफ ज्ञात नहीं है, या भिन्न हो रहा है, बैकवर्ड-अनुकूली एनकोडर का उपयोग करना है। [https://www.researchgate.net/publication/4230021_Adaptive_run-lengthGolomb-Rice_encoding_of_quantized_generalized_Gaussian_sources_with_unknown_statistics run-length Golomb-Rice (RLGR) कोड] बहुत ही सरल एल्गोरिदम का उपयोग करके इसे प्राप्त करता है जो Golomb-Rice मापदंड को ऊपर या नीचे समायोजित करता है, जो निर्भर करता है अंतिम एन्कोडेड प्रतीक. डिकोडर एन्कोडिंग मापदंडों की भिन्नता को ट्रैक करने के लिए उसी नियम का पालन कर सकता है, इसलिए किसी भी अतिरिक्त जानकारी को प्रसारित करने की आवश्यकता नहीं है, केवल एन्कोडेड डेटा। सामान्यीकृत गॉसियन पीडीएफ को मानते हुए, जो डेटा में देखे गए आंकड़ों की विस्तृत श्रृंखला को कवर करता है जैसे कि भविष्यवाणी त्रुटियां या मल्टीमीडिया कोडेक्स में गुणांक बदलना, rएलजीr एन्कोडिंग एल्गोरिदम ऐसे अनुप्रयोगों में बहुत अच्छा प्रदर्शन कर सकता है।


== अनुप्रयोग ==
== अनुप्रयोग ==
[[File:Golomb coded Rice Algorithm experiment Compression Ratios.png|thumb|upright 1.5|गोलोम्ब-कोडित चावल एल्गोरिदम प्रयोग संपीड़न अनुपात]]कई सिग्नल कोडेक्स [[भविष्यवाणी]] अवशेषों के लिए राइस कोड का उपयोग करते हैं।
[[File:Golomb coded Rice Algorithm experiment Compression Ratios.png|thumb|upright 1.5|गोलोम्ब-कोडित राइस एल्गोरिदम प्रयोग संपीड़न अनुपात]]कई सिग्नल कोडेक्स [[भविष्यवाणी]] अवशेषों के लिए राइस कोड का उपयोग करते हैं।
भविष्य कहनेवाला एल्गोरिदम में, ऐसे अवशेष दो-तरफा ज्यामितीय वितरण में आते हैं, जिसमें छोटे अवशेष बड़े अवशेषों की तुलना में अधिक बार होते हैं, और राइस कोड हफ़मैन तालिका को प्रसारित करने के ओवरहेड के बिना इस तरह के वितरण के लिए हफ़मैन कोड का बारीकी से अनुमान लगाता है। .
भविष्य कहनेवाला एल्गोरिदम में, ऐसे अवशेष दो-तरफा ज्यामितीय वितरण में आते हैं, जिसमें छोटे अवशेष बड़े अवशेषों की तुलना में अधिक बार होते हैं, और राइस कोड हफ़मैन तालिका को प्रसारित करने के ओवरहेड के बिना इस तरह के वितरण के लिए हफ़मैन कोड का बारीकी से अनुमान लगाता है। .
एक संकेत जो ज्यामितीय वितरण से मेल नहीं खाता है वह साइन तरंग है, क्योंकि विभेदक अवशेष साइनसॉइडल सिग्नल बनाते हैं जिनके मान ज्यामितीय वितरण नहीं बना रहे हैं (उच्चतम और निम्नतम अवशेष मूल्यों में घटनाओं की समान उच्च आवृत्ति होती है, केवल औसत सकारात्मक और नकारात्मक होता है) अवशेष कम बार मिलते हैं)।
एक संकेत जो ज्यामितीय वितरण से मेल नहीं खाता है वह साइन तरंग है, क्योंकि विभेदक अवशेष साइनसॉइडल सिग्नल बनाते हैं जिनके मान ज्यामितीय वितरण नहीं बना रहे हैं (उच्चतम और निम्नतम अवशेष मूल्यों में घटनाओं की समान उच्च आवृत्ति होती है, केवल औसत धनात्मक और ऋणात्मक होता है) अवशेष कम बार मिलते हैं)।


कई दोषरहित ऑडियो डेटा संपीड़न, जैसे शॉर्टन (फ़ाइल प्रारूप),<ref>{{Cite web |url=http://www.etree.org/shnutils/shorten/support/doc/shorten.txt |title=आदमी छोटा|access-date=2008-12-07 |archive-url=https://web.archive.org/web/20140130053525/http://www.etree.org/shnutils/shorten/support/doc/shorten.txt |archive-date=2014-01-30 |url-status=dead }}</ref> [[एफएलएसी]],<ref>{{Cite web|url=https://xiph.org/flac/documentation_format_overview.html|title=एफएलएसी - प्रारूप सिंहावलोकन|website=xiph.org}}</ref> Apple लॉसलेस, और [[MPEG-4 ALS]], [[ रैखिक भविष्य कहनेवाला कोडिंग |रैखिक भविष्य कहनेवाला कोडिंग]] (Apple लॉसलेस में एडाप्टिव FIR फ़िल्टर कहा जाता है) के बाद राइस कोड का उपयोग करते हैं।
कई दोषरहित ऑडियो डेटा संपीड़न, जैसे शॉर्टन (फ़ाइल प्रारूप),<ref>{{Cite web |url=http://www.etree.org/shnutils/shorten/support/doc/shorten.txt |title=आदमी छोटा|access-date=2008-12-07 |archive-url=https://web.archive.org/web/20140130053525/http://www.etree.org/shnutils/shorten/support/doc/shorten.txt |archive-date=2014-01-30 |url-status=dead }}</ref> [[एफएलएसी]],<ref>{{Cite web|url=https://xiph.org/flac/documentation_format_overview.html|title=एफएलएसी - प्रारूप सिंहावलोकन|website=xiph.org}}</ref> Apple लॉसलेस, और [[MPEG-4 ALS]], [[ रैखिक भविष्य कहनेवाला कोडिंग |रैखिक भविष्य कहनेवाला कोडिंग]] (Apple लॉसलेस में एडाप्टिव FIR फ़िल्टर कहा जाता है) के बाद राइस कोड का उपयोग करते हैं।
राइस कोडिंग का उपयोग [[FELICS]] दोषरहित छवि कोडेक में भी किया जाता है।
राइस कोडिंग का उपयोग [[FELICS]] दोषरहित छवि कोडेक में भी किया जाता है।


गोलोम्ब-राइस कोडर का उपयोग [[चावल एल्गोरिथ्म]] आधारित दोषरहित छवि कोडेक्स के एन्ट्रापी कोडिंग चरण में किया जाता है। ऐसा ही प्रयोग दिखाया गया संपीड़न अनुपात ग्राफ़ उत्पन्न करता है।
गोलोम्ब-राइस कोडर का उपयोग [[चावल एल्गोरिथ्म|राइस एल्गोरिथ्म]] आधारित दोषरहित छवि कोडेक्स के एन्ट्रापी कोडिंग चरण में किया जाता है। ऐसा ही प्रयोग दिखाया गया संपीड़न अनुपात ग्राफ़ उत्पन्न करता है।


दोषरहित JPEG#JPEG-LS|JPEG-LS योजना पूर्वानुमान अवशेषों को एनकोड करने के लिए राइस-गोलोम्ब का उपयोग करती है।
दोषरहित JPEG#JPEG-LS|JPEG-LS योजना पूर्वानुमान अवशेषों को एनकोड करने के लिए राइस-गोलोम्ब का उपयोग करती है।

Revision as of 12:21, 16 July 2023

गोलोम्ब कोडिंग 1960 के दशक में सोलोमन डब्ल्यू. गोलोम्ब द्वारा आविष्कृत डेटा संपीड़न कोड के समूह का उपयोग करके दोषरहित डेटा संपीड़न विधि है। ज्यामितीय वितरण का अनुसरण करने वाले अक्षरों में इष्टतम उपसर्ग कोड के रूप में गोलोम्ब कोड होता है,[1] गोलोम्ब कोडिंग को उन स्थितियों के लिए अत्यधिक उपयुक्त बनाना होता है जहां इनपुट स्ट्रीम में छोटे मानों की घटना बड़े मानों की तुलना में अधिक होने की संभावना है।

राइस कोडिंग

राइस कोडिंग (रॉबर्ट एफ. राइस द्वारा आविष्कार) सरल (किन्तु संभवतः उप-इष्टतम) उपसर्ग कोड का उत्पादन करने के लिए गोलोम्ब कोड के समूह के उपसमुच्चय का उपयोग करने को दर्शाता है। इस प्रकार राइस ने कोड के इस समुच्चय का उपयोग अनुकूली कोडिंग योजना में किया था; राइस कोडिंग या तो उस अनुकूली योजना को संदर्भित कर सकती है या गोलोम्ब कोड के उस उपसमुच्चय का उपयोग कर सकती है। जबकि गोलोम्ब कोड में ट्यून करने योग्य मापदंड होता है जो कोई भी धनात्मक पूर्णांक मान हो सकता है, इस प्रकार राइस कोड वे होते हैं जिनमें ट्यून करने योग्य मापदंड दो की शक्ति है। यह राइस कोड को कंप्यूटर पर उपयोग के लिए सुविधाजनक बनाता है क्योंकि 2 से गुणा और भाग को बाइनरी अंकगणित में अधिक कुशलता से प्रयुक्त किया जा सकता है।

राइस को इस सरल उपसमुच्चय को प्रस्तावित करने के लिए इस तथ्य के कारण प्रेरित किया गया था कि ज्यामितीय वितरण अधिकांशतः समय के साथ भिन्न होते हैं, इस प्रकार स्पष्ट रूप से ज्ञात नहीं होते हैं, या दोनों, इसलिए प्रतीत होता है कि इष्टतम कोड का चयन करना बहुत लाभदायक नहीं हो सकता है।

इस प्रकार राइस कोडिंग का उपयोग कई दोषरहित छवि संपीड़न और ऑडियो डेटा संपीड़न विधियों में एन्ट्रापी एन्कोडिंग चरण के रूप में किया जाता है।

अवलोकन

मापदंड के साथ, ज्यामितीय वितरण के साथ स्रोत x के लिए गोलोम्ब कोडिंग उदाहरण p(0) = 0.2, गोलोम्ब कोड का उपयोग करते हुए M = 3. 2-बिट कोड 00 का उपयोग 20% समय किया जाता है; 3-बिट कोड 010, 011, और 100 का उपयोग 38% से अधिक समय में किया जाता है; बहुत कम मामलों में 4 बिट या अधिक की आवश्यकता होती है। इस स्रोत के लिए, एन्ट्रापी = 3.610 बिट्स; इस स्रोत के साथ इस कोड के लिए, दर = 3.639 बिट्स; इसलिए अतिरेक = 0.030 बिट्स, या दक्षता = 0.992 बिट्स प्रति बिट।

कोडों का निर्माण

गोलोम्ब कोडिंग ट्यून करने योग्य मापदंड M का उपयोग करती है इस प्रकार किसी इनपुट मान को विभाजित करने के लिए x दो भागों M, और r, शेष में q, द्वारा विभाजन का परिणाम प्राप्त करती है। भागफल को यूनरी कोडिंग में भेजा जाता है, इसके बाद शेष को संक्षिप्त बाइनरी एन्कोडिंग में भेजा जाता है। जब , गोलोम्ब कोडिंग यूनरी कोडिंग के समान है।

गोलोम्ब-राइस कोड को ऐसे कोड के रूप में माना जा सकता है जो बिन की स्थिति के आधार पर संख्या (q) दर्शाते हैं , और इस प्रकार अन्दर ऑफसेट (r). उदाहरण चित्र स्थिति q दर्शाता है और ऑफसेट r पूर्णांक की एन्कोडिंग के लिए x गोलोम्ब-राइस मापदंड M = 3 का उपयोग करता है , ज्यामितीय वितरण के बाद स्रोत संभावनाओं के साथ p(0) = 0.2. का उपयोग किया जाता है

औपचारिक रूप से, दोनों भाग निम्नलिखित अभिव्यक्ति द्वारा दिए गए हैं, जहाँ x क्या गैर-ऋणात्मक पूर्णांक को एन्कोड किया जा रहा है:

और

.
यह छवि, गोलोम्ब कोड की, बिट्स में, अतिरेक को दर्शाती है Mके लिए इष्टतम रूप से चुना गया है 1 − p(0) ≥ 0.45

दोनों q और r बिट्स की परिवर्तनीय संख्याओं का उपयोग करके एन्कोड किया जाता है: इस प्रकार q यूनरी कोड द्वारा, और r द्वारा b राइस कोड के लिए बिट्स, या इनमें से कोई विकल्प b और b+1 गोलोम्ब कोड के लिए बिट्स (अर्थात्। M 2) की घात नहीं है इस प्रकार यदि , फिर उपयोग करें b एन्कोड करने के लिए बिट्स r; अन्यथा, b+1 उपयोग करें बिट एन्कोड करने के लिए r. स्पष्ट रूप से, यदि M 2 की घात है और हम इसके सभी मानों r साथ b बिट्स को एन्कोड कर सकते हैं.

पूर्णांक x गोलोम्ब द्वारा उपचारित बर्नौली प्रक्रिया की रन लंबाई थी, जिसका ज्यामितीय वितरण 0 से प्रारंभ होता है। इस प्रकार मापदंड का सबसे अच्छा विकल्प M संगत बर्नौली प्रक्रिया का फलन है, जिसे मापदंडाइज़ किया गया है किसी दिए गए बर्नौली परीक्षण में सफलता की संभावना M या तो वितरण का माध्यिका है या माध्यिका ±1 इसे इन असमानताओं द्वारा निर्धारित किया जा सकता है:

जिनका समाधान किया जाता है

.

उदाहरण के लिए p(0) = 0.2:

.

इस वितरण के लिए गोलोम्ब कोड समान संभावनाओं के लिए हफ़मैन कोड के समान है, यदि स्रोत मानों के अनंत समुच्चय के लिए हफ़मैन कोड की गणना करना संभव हो जाता है।

हस्ताक्षरित पूर्णांकों के साथ प्रयोग करें

गोलोम्ब की योजना गैर-ऋणात्मक संख्याओं के अनुक्रमों को एन्कोड करने के लिए डिज़ाइन की गई थी। चूँकि, इसे ओवरलैप और इंटरलीव योजना का उपयोग करके ऋणात्मक संख्याओं वाले अनुक्रमों को स्वीकार करने के लिए सरलता से बढ़ाया जाता है, इस प्रकार जिसमें सभी मानों को अद्वितीय और प्रतिवर्ती विधि से कुछ धनात्मक संख्या में पुन: असाइन किया जाता है। अनुक्रम प्रारंभ होता है: 0, −1, 1, −2, 2, −3, 3, −4, 4... n-वां ऋणात्मक मान (अर्थात, ) को n पर मैप किया गया है विषम संख्या (), और उन्हें धनात्मक मान को m-वें सम संख्या () में मैप किया जाता है . इसे गणितीय रूप से इस प्रकार व्यक्त किया जा सकता है: धनात्मक मान x को मैप () किया गया है , और ऋणात्मक मान y को मैप () किया गया है इस प्रकार के कोड का उपयोग सरलता के लिए किया जा सकता है, तथापि यह उप-इष्टतम हो वास्तव में दो-तरफा ज्यामितीय वितरण के लिए इष्टतम कोड में इस सहित वितरण मापदंडों के आधार पर गोलोम्ब कोड के कई प्रकार सम्मिलित हैं।[2]


सरल एल्गोरिथ्म

नीचे राइस-गोलोम्ब एन्कोडिंग है, जहां शेष कोड सरल ट्रंकेटेड बाइनरी एन्कोडिंग का उपयोग करता है, जिसे राइस कोडिंग भी कहा जाता है (अन्य अलग-अलग लंबाई वाली बाइनरी एन्कोडिंग, जैसे अंकगणित या हफमैन एन्कोडिंग, शेष कोड के लिए संभव हैं, यदि शेष कोड का सांख्यिकीय वितरण होता है) समतल नहीं है, और इस प्रकार विशेष रूप से तब जब विभाजन के बाद सभी संभावित शेषफलों का उपयोग नहीं किया जाता है)। इस एल्गोरिदम में, यदि m मापदंड 2 की शक्ति है, तो यह सरल राइस एन्कोडिंग के समान हो जाता है:

  1. मापदंड M को पूर्णांक मान पर ठीक करें।
  2. N के लिए, एन्कोड किया जाने वाला नंबर खोजे
    1. भागफल = q = फ्लोर(n/m)
    2. शेष = r = n मोडुलो m
  3. कोडवर्ड जेनरेट करें
    1. कोड प्रारूप: <कोटिएंट कोड><शेष कोड>, जहाँ
    2. कोटिएंट कोड (यूनरी कोडिंग में)
      1. 1 बिट्स की q-लंबाई स्ट्रिंग लिखें (वैकल्पिक रूप से, 0 बिट्स की)
      2. 0 बिट लिखें (क्रमशः, 1 बिट)
    3. शेष कोड (काटे गए बाइनरी एन्कोडिंग में)
      1. माना
        1. यदि b बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में कोड r।
        2. यदि नंबर कोड करें b + 1 बिट्स का उपयोग करके बाइनरी प्रतिनिधित्व में।

डिकोडिंग:

  1. q के एकल प्रतिनिधित्व को डिकोड करें (कोड की प्रारंभ में 1 की संख्या गिनें)
  2. 0 सीमांकक छोड़ें
  3. माना
    1. अगले b बिट्स को बाइनरी नंबर r' के रूप में समझें। यदि रखता है, फिर अनुस्मारक है
    2. अन्यथा b + 1 बिट्स को बाइनरी नंबर r' के रूप में समझें, अनुस्मारक द्वारा दिया गया है
  4. गणना करें


उदाहरण

समुच्चय M = 10. इस प्रकार . कटऑफ है .

भागफल भाग का एन्कोडिंग
q आउटपुट बिट्स
0 0
1 10
2 110
3 1110
4 11110
5 111110
6 1111110
N
शेष भाग का एन्कोडिंग
r ऑफसेट बाइनरी आउटपुट बिट्स
0 0 0000 000
1 1 0001 001
2 2 0010 010
3 3 0011 011
4 4 0100 100
5 5 0101 101
6 12 1100 1100
7 13 1101 1101
8 14 1110 1110
9 15 1111 1111

उदाहरण के लिए, मापदंड का उपयोग करके राइस-गोलोम्ब एन्कोडिंग के साथ M = 10, दशमलव संख्या 42 को पहले विभाजित किया जाएगा q=4 और r = 2, और qcode के रूप में एन्कोड किया जाएगा(q),rकोड(r) = qcode(4),rcode(2) = 11110,010 (आपको आउटपुट स्ट्रीम में अलग करने वाले अल्पविराम को एनकोड करने की आवश्यकता नहीं है, क्योंकि के अंत में 0 है q कोड कब कहने के लिए पर्याप्त है q समाप्त होता है और r प्रारंभ करना ; qकोड और rकोड दोनों स्व-सीमांकित हैं)।

रन-लेंथ एन्कोडिंग के लिए उपयोग करें

ध्यान दें कि p और 1 – p पिछले अनुभागों में उपयोग की तुलना में इस अनुभाग में उलट दिया गया है।

दो प्रतीकों की वर्णमाला, या दो घटनाओं, पी और q का समुच्चय, संभावनाओं के साथ पी और (1 − p) क्रमशः, कहाँ p ≥ 1/2, गोलोम्ब कोडिंग का उपयोग एकल Q′s द्वारा अलग किए गए शून्य या अधिक P′s के रन को एन्कोड करने के लिए किया जा सकता है। इस एप्लिकेशन में, मापदंड m की सबसे अच्छी सेटिंग निकटतम पूर्णांक है . जब पी = 1/2, m = 1, और गोलोम्ब कोड यूनरी से मेल खाता है (n ≥ 0 P′s के बाद Q आता है, इसे n के रूप में एन्कोड किया जाता है जिसके बाद शून्य आता है)। यदि सरल कोड वांछित है, तो कोई गोलोम्ब-राइस मापदंड निर्दिष्ट कर सकता है b (अर्थात, गोलोम्ब मापदंड ) के निकटतम पूर्णांक तक ; चूँकि यह हमेशा सबसे अच्छा मापदंड नहीं होता है, यह आमतौर पर सबसे अच्छा राइस मापदंड होता है और इसका संपीड़न प्रदर्शन इष्टतम गोलोम्ब कोड के काफी करीब होता है। (राइस ने स्वयं ही डेटा के लिए विभिन्न कोड का उपयोग करने का प्रस्ताव दिया ताकि यह पता लगाया जा सके कि कौन सा सबसे अच्छा था। बाद में जेट प्रोपल्शन प्रयोगशाला के शोधकर्ता ने कोड मापदंड को अनुकूलित करने या अनुमान लगाने के विभिन्न तरीकों का प्रस्ताव दिया।[3])

बाइनरी भाग वाले राइस कोड का उपयोग करने पर विचार करें b बिट्स रन-लेंथ एन्कोड अनुक्रमों के लिए जहां पी की संभावना है p. यदि संभावना है कि बिट का हिस्सा होगा k-बिट रन ( पीएस और q) और उस रन का संपीड़न अनुपात है, तो अपेक्षित संपीड़न अनुपात है

संपीड़न को अधिकांशतः के रूप में व्यक्त किया जाता है , अनुपात संकुचित। के लिए , रन-लेंथ कोडिंग दृष्टिकोण के परिणामस्वरूप एन्ट्रॉपी (सूचना सिद्धांत) के करीब संपीड़न अनुपात होता है। उदाहरण के लिए, राइस कोड का उपयोग करना के लिए पैदावार 91.89% संपीड़न, जबकि एन्ट्रापी सीमा है 91.92%.

अनुकूली रन-लंबाई गोलोम्ब-राइस एन्कोडिंग

जब पूर्णांकों के लिए संभाव्यता वितरण ज्ञात नहीं होता है, तो गोलोम्ब-राइस एनकोडर के लिए इष्टतम मापदंड निर्धारित नहीं किया जा सकता है। इस प्रकार, कई अनुप्रयोगों में, दो-पास दृष्टिकोण का उपयोग किया जाता है: सबसे पहले, डेटा के लिए संभाव्यता घनत्व फलन (पीडीएफ) का अनुमान लगाने के लिए डेटा के ब्लॉक को स्कैन किया जाता है। फिर गोलोम्ब-राइस मापदंड उस अनुमानित पीडीएफ से निर्धारित किया जाता है। उस दृष्टिकोण का सरल बदलाव यह मान लेना है कि पीडीएफ पैरामीट्रिज्ड समूह से संबंधित है, डेटा से पीडीएफ मापदंड का अनुमान लगाएं, और फिर इष्टतम गोलोम्ब-राइस मापदंड की गणना करें। नीचे चर्चा किए गए अधिकांश अनुप्रयोगों में यही दृष्टिकोण उपयोग किया जाता है।

पूर्णांक डेटा को कुशलतापूर्वक एनकोड करने के लिए वैकल्पिक तरीका जिसका पीडीएफ ज्ञात नहीं है, या भिन्न हो रहा है, बैकवर्ड-अनुकूली एनकोडर का उपयोग करना है। run-length Golomb-Rice (RLGR) कोड बहुत ही सरल एल्गोरिदम का उपयोग करके इसे प्राप्त करता है जो Golomb-Rice मापदंड को ऊपर या नीचे समायोजित करता है, जो निर्भर करता है अंतिम एन्कोडेड प्रतीक. डिकोडर एन्कोडिंग मापदंडों की भिन्नता को ट्रैक करने के लिए उसी नियम का पालन कर सकता है, इसलिए किसी भी अतिरिक्त जानकारी को प्रसारित करने की आवश्यकता नहीं है, केवल एन्कोडेड डेटा। सामान्यीकृत गॉसियन पीडीएफ को मानते हुए, जो डेटा में देखे गए आंकड़ों की विस्तृत श्रृंखला को कवर करता है जैसे कि भविष्यवाणी त्रुटियां या मल्टीमीडिया कोडेक्स में गुणांक बदलना, rएलजीr एन्कोडिंग एल्गोरिदम ऐसे अनुप्रयोगों में बहुत अच्छा प्रदर्शन कर सकता है।

अनुप्रयोग

गोलोम्ब-कोडित राइस एल्गोरिदम प्रयोग संपीड़न अनुपात

कई सिग्नल कोडेक्स भविष्यवाणी अवशेषों के लिए राइस कोड का उपयोग करते हैं।

भविष्य कहनेवाला एल्गोरिदम में, ऐसे अवशेष दो-तरफा ज्यामितीय वितरण में आते हैं, जिसमें छोटे अवशेष बड़े अवशेषों की तुलना में अधिक बार होते हैं, और राइस कोड हफ़मैन तालिका को प्रसारित करने के ओवरहेड के बिना इस तरह के वितरण के लिए हफ़मैन कोड का बारीकी से अनुमान लगाता है। . एक संकेत जो ज्यामितीय वितरण से मेल नहीं खाता है वह साइन तरंग है, क्योंकि विभेदक अवशेष साइनसॉइडल सिग्नल बनाते हैं जिनके मान ज्यामितीय वितरण नहीं बना रहे हैं (उच्चतम और निम्नतम अवशेष मूल्यों में घटनाओं की समान उच्च आवृत्ति होती है, केवल औसत धनात्मक और ऋणात्मक होता है) अवशेष कम बार मिलते हैं)।

कई दोषरहित ऑडियो डेटा संपीड़न, जैसे शॉर्टन (फ़ाइल प्रारूप),[4] एफएलएसी,[5] Apple लॉसलेस, और MPEG-4 ALS, रैखिक भविष्य कहनेवाला कोडिंग (Apple लॉसलेस में एडाप्टिव FIR फ़िल्टर कहा जाता है) के बाद राइस कोड का उपयोग करते हैं। राइस कोडिंग का उपयोग FELICS दोषरहित छवि कोडेक में भी किया जाता है।

गोलोम्ब-राइस कोडर का उपयोग राइस एल्गोरिथ्म आधारित दोषरहित छवि कोडेक्स के एन्ट्रापी कोडिंग चरण में किया जाता है। ऐसा ही प्रयोग दिखाया गया संपीड़न अनुपात ग्राफ़ उत्पन्न करता है।

दोषरहित JPEG#JPEG-LS|JPEG-LS योजना पूर्वानुमान अवशेषों को एनकोड करने के लिए राइस-गोलोम्ब का उपयोग करती है।

run-length Golomb–Rice (RLGR) Golomb-Rice कोडिंग का ऊपर उल्लिखित अनुकूली संस्करण, वर्चुअल मशीनों में स्क्रीन सामग्री को एन्कोड करने के लिए उपयोग किया जाता है। माइक्रोसॉफ्ट रिमोट डेस्कटॉप प्रोटोकॉल का रिमोटएफएक्स घटक।

यह भी देखें

संदर्भ

  1. Gallager, R. G.; van Voorhis, D. C. (1975). "ज्यामितीय रूप से वितरित पूर्णांक वर्णमाला के लिए इष्टतम स्रोत कोड". IEEE Transactions on Information Theory. 21 (2): 228–230. doi:10.1109/tit.1975.1055357.
  2. Merhav, N.; Seroussi, G.; Weinberger, M. J. (2000). "दोतरफा ज्यामितीय वितरण और अज्ञात मापदंडों के साथ स्रोतों की कोडिंग". IEEE Transactions on Information Theory. 46 (1): 229–236. doi:10.1109/18.817520.
  3. Kiely, A. (2004). चावल कोडिंग में गोलोम्ब पैरामीटर का चयन करना (Technical report). Jet Propulsion Laboratory. 42-159.
  4. "आदमी छोटा". Archived from the original on 2014-01-30. Retrieved 2008-12-07.
  5. "एफएलएसी - प्रारूप सिंहावलोकन". xiph.org.


अग्रिम पठन