User:Rilind1996Maloku/sandbox/KODI I HAMINGUT

1. Hyrje

Përgjatë shekullit XX, pajisjet e telekomunikimeve përjetuan zhvillimin më të shpejtë të tyre në tërë historinë. Dihej se kjo rritje e zhvillimit nuk mund të ishte e pakufishme. Ka disa elemente që i kufizojnë sistemet e telekomunikimit. Ndër ato elemente është edhe kufiri i sipërm i kapacitetit të kanalit, i cili fillimisht nuk mund të përcaktohej. Pra, nuk dihej me saktësi se sa informacion mund të transmetohej maksimalisht nëpërmjet një kanali të dhënë. Këtë çështje arriti ta formulojë dhe ta zgjidhë saktësisht Klaud Shanoni, i cili njihet edhe si themeluesi i teorisë së informacionit. Shanoni në një publikim shkencor të vitit 1948, i dha përgjigjje kësaj çështjeje duke e dhënë modelin matematik përfundimtar për kanal transmetues.

Pothuajse në të njëjtën kohë, Riçard Heming, kolegu i Klod Shanonit në Laboratoret e Bellit, po punonte që të gjente ndonjë metodë që t’i zvogëlonte sa më shumë dëmtimet që ndodhnin gjatë transmetimit të informatave si vargje të bitëve [12].

Metoda e bitit për kontrollimin e paritetit në sekuencë tashmë përdorej për të detektuar gabimet në funksionimin e kompjuterëve dhe të makinave tjera të asaj kohe dhe Hemingu arriti ta kuptonte se ekzistonte një metodë më e sofistikuar sipas të cilës në pozita të caktuara vendosen bite shtesë dhe pastaj në marrës bëhet kontrollimi i disa pariteteve paralelisht, e kjo i jepte mundësinë që jo vetëm t’i detektojë por edhe t’i korigjojë gabimet eventuale që kishin ndodhur për ndonjë arsye gjatë transmetimit nëpër kanal. Metodat e sugjeruara nga Hamingu fillimisht [7] mundeshin që të korigjonin një gabim, apo të detektonin dy gabime në një sekuencë. Këto kode kanë rëndësi jo vetëm historike por edhe teorike e praktike edhe në ditët e sotme.

Përdorimi i këtyre kodeve për detektimin dhe korigjimin e gabimit vazhdon të jetë mjaft i gjerë. Këto përdoren në CD player, në modemë, në karta krediti etj. Kodet që ne i përmendëm korigjojnë vetëm një gabim në një sekuencë por ekzistojnë kode që korrigjojnë më shumë bitë siç janë kodet Reed Solomon të cilat përdoren në CD playerë [11], teknologjinë digital versatile disk (DVD) etj [1].

Megjithatë, bitët shtesë, në sistemet telekomunikuese në fund të fundit nënkuptojnë brez frekuencor shtesë, gjë që nuk është e mirëseardhur pasiqë e ulë efiqiencën e shfrytëzimit të resurseve të kanalit, si dhe e rrit koston e tërësishme të sistemit.

Bitët shtesë janë si një lloj ambalazhi për informacionin. Sikurse që ka nevojë malli që transportohet të ruhet me ambalazhin përkatës, ashtu ka nevojë që të ruhet edhe informacioni. Pra, që informacioni të ruhet, ia “mbështjellim” bitët e paritetit duke sakrifikuar në efiqiencë dhe kosto ashtu që informacioni të mos dëmtohet nga pengesat eventuale. Prandaj, sa më i rëndësishëm malli që transportohet, aq më e arsyeshme edhe kostoja e ambalazhit të tij.

2. Problemet gjatë komunikimeve digjitale

Është e njohur se veprimi i menjëhershëm në distancë është i pamundur. Kësisoj, edhe komunikimi në distancë (në mënyrë të menjëhershme) është i pamundur. Komunikimi bëhet i mundur nga kanali komunikues. Kanali komunikues, në secilin rast real, sinjalit që e transmeton ia bashkangjet edhe një sinjal tjetër të padëshirueshëm për ne, e që njihet si zhurmë. Është pikërisht ky sinjal i padëshirueshëm që në të shumtën e rasteve shkakton ndryshimin e vlerës së sinjaleve që përfaqësojnë njësh apo zero duke çuar në dukurinë e bitëve të gabuar.

Dhënësi si gjenerues i sinjalit të informacionit, e shfrytëzon kanalin transmetues për t’ia dërguar mesazhin marrësit. Sinjali pra, para se të arrijë në destinacionin e tij përfundimtar, kalon nëpër kanalin transmetues me ç’rast, siç thamë, logjikisht është e pritshme, dhe përvoja e vërteton, se ndodhin ndryshime të padëshirueshme në sinjal. Këto ndryshime të padëshirueshme e dëmtojnë mesazhin në kuptimin e informacionit që marrësi duhet të pranojë.

Kur flasim për sistemin digjital komunikues, e dimë se ai të gjithë informacionin e dërgon në formën e zerove dhe njësheve, kështu që të gjitha llojet e dëmtimeve të informacioneve e kanë të njëjtin karakter – shndërrimin e njësheve në zero ose shndërrimin e zerove në njëshe.

Gabimet mund të ndodhin në secilën prej pajisjeve digjitale. Së pari është mirë që gabimet t’i grupojmë në gabime transmetimi dhe gabime memorizimi. Lloji i parë i gabimeve ndodh në rastet kur sinjali deformohet apo dobësohet gjatë kalimit nëpër kanal, apo kur dhënësi dhe marrësi nuk janë të sinkronizuar, apo edhe kur kombinohen faktorët e përmendur.

Gabimet e llojit të dytë ndodhin kur elementet e memorieve dinamike me qasje të rastësishme (ang. Dynamic Random Access Memory - DRAM) e ndryshojnë gjendjen e tyre për shkak të ndonjë interference elektromagnetike, apo në pajisjet magnetike të memorieve siç janë disqet, sepse aty ndryshimet e shpejta të dendësisë së fluksit magnetik mund të shkaktojnë që ndonjë bit ose më shumë sosh të ndryshojë vlerën e tij poashtu, por dëmtimet mund të vinë edhe si pasojë e efekteve si gërrvishtjet, ndrydhjet dhe dëmtimet e ngjashme mekanike[1].

Përveç dëmtimit të informacionit që dërgohet nëpërmjet sistemit telekomunikues, dhe informacionit që ruhet nëpër pajisje memorizuese, ndryshimet e vlerave të bitëve shkaktojnë kokëçarje edhe gjatë funksionimit të pajisjeve llogaritëse. Në kompjuterët modernë të cilët funksionojnë me qarqe të integruara sipas rutinave digjitale, në qoftë se një sekuencë e rutinës dështon, mund të dështojë e tërë rutina varësisht prej ndërlidhjeve të sekuencave në algoritmin përkatës. Edhe në telekomunikime, konkretisht në centralet telefonike, ekzistojnë algoritme me shtigje (ang. path) paralele të cilat janë më shumë ose më pak të ndërvarura nga njëra-tjetra, e të cilat mund të mos rrjedhin normalisht në qoftë se ndodh ndonjë gabim gjatë procesimit. Kjo tregon se çështja e gabimit të bitëve është më e madhe sesa mund të duket në shikim të parë [7].

Që të evitohen këto probleme një qasje do të mund të ishte që të përmirësohen vetitë e kanalit transmetues. Megjithatë sado që të mund të përmirësohen vetitë e kanalit transmetues, dihet se elementet që e bartin informacionin (siç janë elektronet tek përçuesit metalikë), nëse për asnjë arsye tjetër, vetëm për shkak të lëvizjes termodinamike të tyre do t’ia “shtojnë” sinjalit të informacionit një sinjal të padëshirueshëm.

Për të qenë më preciz, nëpër kanalet që karakterizohen me zhurma me shpërndarje Gausiane, ekziston limiti që na tregon se sa është kapaciteti maksimal i kanalit për një vlerë të dhënë të raportit sinjal zhurmë (ang. Signal to Noise Ratio – SNR) si dhe të brezit frekuencor të kanalit (ang. Bandwidth B). Ky kufi njihet si kufiri i Shanonit sepse është llogaritur fillimisht nga Klod Shanoni [11].

C = B x log2 (1+SNR)

Nën këto rrethana qasja tjetër nga ajo që u përmend ishte që në vend se të merremi me kanalin (apo, më mirë thënë, përveç se të mirremi me kanalin), të merremi me gabimet eventuale që ndodhin në kanal. Ideja më e hershme për trajtimin e gabimeve në sistemet digjitale ka qenë ideja e detektimit të gabimit. Detektim i gabimit do të thotë që marrësi të jetë i vetëdijshëm që informata e pranuar, ka qenë e dërguar në tjetër formë nga forma e pranuar. Në këso raste, marrësi mund të kërkojë nga dhënësi që ai ta dërgojë përsëri informatën. Megjithatë, detektimi nuk jep rezultate të kënaqshme sepse gabimet në proçese të ndryshme programore munden që të shkaktojnë probleme serioze edhe në qoftë se ato detektohen [7].

Do të ishte mirë që edhe nëse sekuenca dëmtohet gjatë dërgimit nëpër mediumin transmetues, marrësi të jetë në gjendje që jo vetëm ta kuptojë se sekuenca është dërguar me gabim por ta dijë edhe se çfarë sekuence është dërguar në të vërtetë prej dhënësit, në mënyrë që marrësi të mos ketë nevojë që t’i kërkojë dhënësit që ta përsëritë transmetimin, dhe kështu, të mos ndërlikohen procedurat tjera. A është e mundshme një gjë e tillë? Përgjigjja është pozitive, dhe këtë e ka dëshmuar R.W.Hamming në një artikull të vitit 1950, në revistën zyrtare të laboratoreve të Bellit. Ai ka treguar në hollësi mënyrën se si gabimi i shkaktuar në sistemin komunikues mund të korigjohet [7], gjë të cilën do të orvatemi ta bëjmë edhe ne. 3. Trajtimi i bitëve të gabuar në sistemet digjitale

Që ta korigjojmë një gabim duhet që së pari ta detektojmë atë. Pra, detektimi i gabimit kushtëzon dhe në masë të madhe, mundëson  korigjimin.

Do ta fillojmë shpjegimin e zgjidhjes me një rast paksa të skajshëm në mënyrë që gradualisht të vijmë deri te zgjidhja e problemit të zakonshëm.

Supozojmë se një kod përdor vetëm dy vlera të ndryshme për kodim, 0 dhe 1. Le t’ua shtojmë këtyre bitëve nga 7 bitë shtesë ashtu që kur dëshirojmë të dërgojmë 0 dërgojmë 0000 0000 dhe kur dëshirojmë të dërgojmë 1, dërgojmë 1111 1111. Le të supozojmë tash se dhënësi dërgon 0000 0000 kurse marrësi pranon 0001 0000. Fillimisht marrësi e di se dhënësi jep vetëm 0000 0000 ose 1111 1111, kështu që vlera e pranuar, qartazi është vlerë e gabuar, prandaj ai konkludon se ka ndodhur gabim gjatë transmetimit.

Tani, në këtë situatë, a mundet marrësi ta dijë se çfarë sekuence ka dërguar në të vërtetë dhënësi? Është shumë e lehtë për marrësin që ta dijë se sekuenca e dërguar ka qenë 0000 0000 sepse është e qartë se shumë më shumë ka probabilitet që në mesin e 8 bitëve të dërguar, 1 është i ndryshuar dhe 7 të tjerë janë të saktë, sesa 1 të jetë i saktë e 7 të tjerë të jenë të ndryshuar. Përndryshe – nëse do të ishte kjo e fundit – në një kanal të tillë, diskutimi për korigjim gabimi do ta humbte të gjithë rëndësinë.

Edhe pse kjo metodë e zgjidh problemin e korrigjimit të gabimit, siç shihet, kjo metodë e tetëfishon numrin e bitëve që duhet të përdorim për ta koduar informacionin, gjë që është nën çdo kufi të pranueshëm të efiqiencës. Megjithatë, kjo metodë na jep një ide themelore teorike se si mund t’i korigjojmë gabimet në marrës.

Ideja pra është që për të arritur që ta korigjojmë sekuencën e bitëve në marrës duhet të shtojmë bite shtesë, apo bite redudante. Këta bitë shtohen asisoji që numri i sekuencave, që dhënësi mund të gjenerojë, të jetë i kufizuar. Kështu, në qoftë se në marrës pranohet një sekuencë tjetër nga sekuencat e mundshme, marrësi do të mund ta dijë fillimisht se sekuenca e dërguar është e gabuar dhe do të mund ta dijë poashtu se cila nga sekuencat është dërguar duke e krahasuar atë me sekuencat valide.

Në qoftë se fjalëkodit të të dhënave me gjatësi k bitë, ia shtojmë bitët shtesë, dhe e fitojmë fjalën me gjatësi n-bitë, raportin R=k/n e quajmë normë të kodimit. Kjo normë e karakterizon në njëfarë mënyre edhe efiqiencën e një kodi dhe mund të mendohet edhe si përqindje e kohës që shfrytëzohet në kanal për t’i dërguar bitët e të dhënave [7].

Norma e kodimit mund të rritet në qoftë të dhënat i ndajmë në blloqe me gjatësi më të mëdha, pra duke e rritur k. Megjithatë me rritjen e gjatësisë së blloqeve, nuk do të rritet edhe efiqienca e kodit sepse në të njëjtën kohë rritet edhe probabiliteti i gabimit kështu që numri më i madh i bitëve të gabuar e vështirëson kodimin dhe dekodimin. Në përgjithësi kodet lineare, tek të cilat fjalëkodet me gjatësi k, i kodojmë në fjalëkode me gjatësi n,simbolikisht i shënojmë me (n,k) [4].

Eshte e qarte se, sa më shumë bitë redudantë që të shtojmë, marrësi do ta ketë më të lehtë që të dallojë se çka ka dërguar dhënësi.

Tani, kemi arritur në një pikë ku nuk mund të mos pyesim se sa është minimumi i bitëve që duhet shtuar ashtu që të kemi korrigjimin e duhur në marrës? Përpara se t’i përgjigjemi kësaj pyetjeje, na duhet të japim një definicion.

Distancë e Hammingut quhet numri i bitëve në të cilat dy fjalë kodike dallojnë nga njëra-tjetra.

P.sh. fjalët kodike 10001001 dhe 10110001 dallojnë në tre bitë (me të kuqe) ndërmjet veti, rrjedhimisht distanca e Hammingut për këto dy fjalë kodike është 3. Në shembullin e mëhershëm distanca ndërmjet fjalëkodeve valide ishte 8.

Tek shembulli i mëhershëm ne e kemi korigjuar vetëm një gabim, por ne aty mund të korigjonim deri në 3 gabime (sepse nëse ndodhin 4 gabime atëherë kemi 4 bitë të gabuar dhe 4 të saktë që do të thotë se nuk mund ta dimë se cila sekuencë është dërguar meqenëse të dyjat kanë probabilitet të barabartë).

Duke e përcjellur këtë logjikë, edhe sikur të kishim 7 bitë distancën midis simboleve, ne do të mund t’i korigjonim 3 bitë të gabuar. Duke i analizuar rastet në mënyrë të ngjashme vijmë deri te shprehja e përgjithshme për numrin e gabimeve që do të mund t’i korigjojmë në varësi të distancës që kanë simbolet midis veti.

•	Për të detektuar n bite të gabuar nevoitet një distance minimale d = n+1. Problemi nga shembulli prej tre simbolesh (000, 001, 010, 011, 100, 101, 110, 111) qëndron në faktin se nëse ndryshon një bit për shkak të zhurmës, nuk mund të detektohet gabimi në pranim, sepse distanca minimale është 1. •	Por pasi që, për shembull, te fjalëkodet: 0000, 0011, 0101, 0110, 1001, 1010, 1100, 1111, distanca minimale është dy, nëse gabimi bëhet në një bit, në marrës mund të detektohet ai gabim, por i njëjti nuk mund të korrigjohet. •	Marrë në përgjithësi për të korrigjuar n bite të gabuar duhet distance minimale d = 2n+1. Për kodet: 01111, 10011, 01000, distanca minimale ndërmjet dy kodeve është 3, kështu që nëse ndodh që të jetë një bit i gabuar, marrësi mund ta detektojë dhe ta korrigjojë atë.

Prandaj, me anë të kodimit çdo mesazhi i dedikojmë fjalëkodin përkatës ashtu që të optimizojmë gjatësinë e tij, si dhe të kontrollojmë gjasën e gabimit ose sigurinë e mesazhit.

Sa më e madhe distanca midis fjalëve kodike, aq më i lehtë detektimi dhe poashtu korigjimi i gabimeve. Është e qartë se distancën midis simboleve e rritim duke shtuar numrin e bitëve redundant.