Käyttäjä:NettiKirjoittaja

Wikipediasta
Siirry navigaatioon Siirry hakuun

Muokkausnäkemyksiäni

[muokkaa | muokkaa wikitekstiä]

Tässä yksi kirjoittaja matematiikasta lisää...

.....

Lähdekoodaus (informaatioteoria)

[muokkaa | muokkaa wikitekstiä]

Lähdekoodaus tarkoittaa tiedonpakkauksessa sitä, että kuhunkin lähdeaakkoston symboliin liitetään bittijono tavalla, joka mahdollistaa näin peräkkäisiksi bittijonoiksi koodattujen lähetyksessä todella peräkkäin toteutuneiden lähdesymbolien jonon yksikäsitteisen selvittämisen riippumatta siitä mikä tämä jono on. Mahdollisen jonon pituutta ei ole rajoitettu ja lähdeaakkoston symbolit saavat esiintyä jonossa useasti.

Lähdeaakkosto ja koodaus

[muokkaa | muokkaa wikitekstiä]

Tässä tarkastelussa lähdeaakkoston koko on aina äärellinen (symboleita kappaletta), eli tarkastelu on digitaalinen. Symbolien reaalinen merkitys voi olla esimerkiksi kuvan pikselien eri väriarvot. Valittu koodaus tarkoittaa funktiota , joka liittää kuhunkin symboliin tietyn bittijonon. Jatkossa merkitsee valitun koodauksen symboliin liittämän bittijonon pituutta. Esimerkiksi lähdeaakkoston koon ollessa voitaisiin koodaus valita niin, että ja , jolloin ja . Tällöin esimerkiksi lähdeaakkosten jono lähetettäisiin bittijonona .

Yksikäsitteisen purkautumisen vaatimus

[muokkaa | muokkaa wikitekstiä]

Vastaanottaja näkee vain saapuneen peräkkäisen bittijonon, ja hänen on vain sen perusteella pystyttävä dekoodaamaan eli purkamaan biteiksi koodattuna lähetetyn symbolijonon pituus ja kussakin jonon paikassa oleva symboli. Tästä vaatimuksesta seuraa se, että kaikki koodaukset eivät ole kelvollisia. Triviaali esimerkki on se, jossa koodaus liittäisi kahteen eri symboliin saman bittijonon, jolloin dekoodaaja ei tämän bittijonon vastaanottaessaan pystyisi päättelemään kumpaa symbolia sillä tarkoitettiin. Selvää on myös, että mitään symbolia ei voi koodata bittejä sisältämättömäksi tyhjäksi bittijonoksi, sillä tyhjästä bittijonosta dekoodaaja ei kykenisi päättelemään sitä kuinka monta kertaa tämä symboli on siihen koodattu. On myös monimutkaisempia esimerkkejä kuten edellisessä kappaleessa esitetty esimerkkikoodaus, sillä siinä esimerkkinä esitetty bittijono voisi olla peräisin myös symbolijonosta , sillä onhan . Toinen esimerkki saataisiin koodauksesta ja , jolloin . Huomaa, että tässä saman lähetetyn bittijonon tuottivat kaksi eri lähdesymbolijonoa, joilla oli eri pituudet. Yksikäsitteisen dekoodautuvuuden vaatimus koskee tietenkin vain niitä bittijonoja, jotka voivat koodauksessa olla peräisin ainakin yhdestä koodatusta lähdesymbolijonosta, mutta lisäksi voi olla olemassa bittijonoja, jotka eivät ole minkään lähdesymbolijonon koodauksia, mutta tällaisista bittijonoista ei tarvitse välittää. Häviöllisessä koodauksessa luovutaan yksikäsitteisen dekoodautuvuuden vaatimuksesta, mistä aiheutuvien "tietohäviöiden" mittaamista käsittelee Hävikkiteoria.

McMillanin ja Kraftin epäyhtälöt

[muokkaa | muokkaa wikitekstiä]

Oletetaan, että lähdeaakkoston koko on ja valittu koodaus liittää symboliin bittijonon, jonka pituus on . Valittu koodaus voi McMillanin epäyhtälönä tunnetun tuloksen mukaan olla yksikäsitteisesti dekoodattavissa vain silloin, kun

Jos koodaus ei toteuta kyseistä epäyhtälöä, voidaan siis löytää kaksi eri lähdesymbolijonoa, jotka koodaus koodaa samaksi lähetettäväksi bittijonoksi. Intuitiivisesti ajatellen McMillanin epäyhtälön vaatimus on, että "liian moni symboli ei saa koodautua liian lyhyeksi bittijonoksi", sillä muuten -yhteissumma sisältäisi liikaa "suuria" termejä ja ylittäisi arvon . Triviaali esimerkki tästä "liiasta lyhyydestä" on koodaus ja , joka ei toteuta epäyhtälöä (yhteissumma ), mutta joka ei toteuta yksikäsitteistä dekoodautuvuuttakaan, sillä -bitin kohdalla ei voitaisi tietää tarkoittaako se symbolia vai . Kuitenkaan tämän epäyhtälön toteutuminen ei vielä takaa yksikäsitteistä dekoodautuvuutta, sillä onhan se toteutunut edellisissä esimerkeissäkin, vaikka niissä koodaukset eivät ole olleet yksikäsitteisesti dekoodattavissa. Kraftin epäyhtälönä tunnettu tulos sanoo kuitenkin, että -arvojen toteuttaessa mainitun epäyhtälön voidaan löytää koodaus, joka koodaa lähdeaakkoston symbolit ns. prefix-koodiksi, joka on varmasti yksikäsitteisesti dekoodattavissa. Prefix-koodaus on siis yhtä hyvä kuin mikä tahansa yksikäsitteisesti dekoodattavissa oleva koodaus siinä mielessä, että luopumalla alla kuvattavasta käytetyn koodin prefix-vaatimuksesta ei saataisi hyötyä niin, että symbolit voitaisiin koodata lyhyemmiksi bittijonoiksi yksikäsitteinen dekoodautuvuus säilyttäen. Tästä syystä prefix-koodaus on suositeltava tapa, sillä prefix-koodilla on lisäksi hyödyllisiä ominaisuuksia, joita kuvataan alla.

Prefix-koodaus

[muokkaa | muokkaa wikitekstiä]

Prefix-koodi tarkoittaa koodausta, jossa minkään symbolin bittijono ei ole toisen symbolin bittijonon prefix eli alkuosa tai sama. Tästä seuraa erityisesti se, että prefix-koodauksessa mikään symboli ei voi koodautua tyhjäksi bittijonoksi. Esimerkiksi "Lähdeaakkosto ja koodaus"-kappaleessa esitetty koodaus ei ole prefix-koodaus, sillä siinä symbolin bittijono on symbolin bittijonon alkuosa. Sensijaan esimerkiksi -symbolisen lähdeaakkoston koodaus ja on prefix-koodaus. Prefix-koodi on yksikäsitteisesti purettavissa, mikä nähdään seuraavalla päättelyllä. Jos kaksi eri symbolijonoa koodautuu samaksi bittijonoksi, voidaan olettaa jo niiden ensimmäisten symbolien eroavan toisistaan (Tarvittaessa voidaan tarkastelusta poistaa alusta saman symbolijono-alkuosan tuottama sama bittijono-alku.), mutta koska koodattu bittijono on sama, toisen alku-symbolin bittijonon on pakko sisältyä toisen alku-symbolin bittijonoon (Näistä pidempi sisältää lyhyemmän tai sitten molempien pituus on sama.), mikä on vastoin prefix-koodauksen määritelmää. Tämä päättely johtaa hyvin yksinkertaiseen ja nopeaan dekoodaukseen, jossa edetään bittijonoa vasemmalta oikealle kunnes kuljettu "osabittijono" on jonkin lähdesymbolin koodaus, jolloin voidaan olla varmoja, että juuri tämän symbolin pitää olla seuraavaksi. Jatkamalla bittijonossa löydetyn seuraavan symbolin koodauksen jälkeisestä kohdasta saadaan tätä päättelyä toistamalla dekoodatuksi koko vastaanotettu bittijono. Esimerkiksi bittijono on tullut yllä olevalla prefix-koodauksella symbolijonosta , sillä jonon alussa on , joka on symbolin koodaus, minkä jälkeen loppu bittijonosta on , jonka alusta puolestaan löytyy symbolin koodaus , ja samalla tavalla nähdään, että loppu tästä bittijonosta on , joka puolestaan koostuu symbolien ja koodauksista.

Symbolijonojen todennäköisyyksien merkitys

[muokkaa | muokkaa wikitekstiä]

Lähdeaakkoston symbolien jonoihin liittyy todennäköisyys, joka kuvaa todennäköisyyttä sille, että kyseinen symbolijono todella toteutuu. Jonon eri paikkoihin toteutuvat symbolit voidaan ajatella yksinkertaisina satunnaismuuttujina , missä alaindeksi ilmaisee symbolin paikkaa jonossa ja on koodattavan jonon pituus. Tavallisesti satunnaismuuttujat saavat arvokseen reaalilukuja, mutta nyt voidaan tulkita niin, että satunnaismuuttujan toteutunut arvo ilmaisee symbolin järjestysnumeroa, jolloin esimerkiksi tarkoittaa sitä, että jonon kolmanneksi symboliksi toteutuu lähdesymboli . Symboleita ilmaisevien satunnaismuuttujien jono on stokastinen prosessi, ja yksinkertaisimmissa tarkasteluissa tehdään yleensä epärealistinen oletus siitä, että tämä satunnaismuuttujien jono olisi IID (engl. Independent and identically-distributed) eli riippumaton ja samoinjakautunut, mikä tarkoittaa sitä, että sama todennäköisyysjakauma koskee kaikkia -satunnaismuuttujia ja jonkin -pituisen jonon toteutumisen todennäköisyys saadaan yksinkertaisesti tulona yksittäisten lähdeaakkosten sattumisten todennäköisyyksistä. Todennäköisyysjakaumana voi olla esimerkiksi , jolloin -pituisia jonoja tarkasteltaessa jonon toteutumisen todennäköisyys . IID-oletuksen riippumattomuuden perusteella voidaan todeta, että toteutuneen lähdesymbolijonon biteiksi koodatun jonon pituus jaettuna toteutuneen lähdesymbolijonon pituudella on odotusarvoltaan

, missä on lähdeaakkoston symbolien määrä, on käytetyn koodauksen symboliin liittämän bittijonon pituus ja eli symbolin toteutumisen todennäköisyys, joka ei IID-oletuksen takia riipu symbolin paikasta jonossa. Selvästikin on syytä pyrkiä minimoimaan tämä odotusarvo, joka ilmaisee sen kuinka monta bittiä koodattu bittijono käyttää lähdesymbolia kohti "tyypillisesti toteutuvassa" lähdesymbolijonossa, jossa symbolin esiintymisosuus on lähellä sen todennäköisyyttä . Intuitiivisesti ajatellen tämä minimointi tapahtuu niin, että usein toistuvat korkean todennäköisyyden symbolit koodataan yksikäsitteisen dekoodautuvuuden vaatimus huomioiden mahdollisimman lyhyiksi bittijonoiksi, kun taas harvoin toistuvan symbolin kohdalla voidaan koodauksessa käyttää melko pitkääkin bittijonoa. Käytännössä tämä onnistuu käyttämällä Huffmanin koodausta, josta voidaan osoittaa, että sen tuottama koodi on prefix-koodi, joka minimoi mainitun odotusarvon kaikkien yksikäsitteisen dekoodauksen vaatimuksen toteuttavien mahdollisten koodausten joukossa. ANNA ESIMERKKI JONKIN JAKAUMAN SISÄLLÄ SEN HUFFMAN-KOODISTA JA TOISESTA PREFIX-KOODISTA JOLLA ODOTUSARVO ON AIDOSTI SUUREMPI(EHKÄ 4 SYMBOLIN JOLLA KAIKILLA 2 BITIN KOODI).










!!! Puhu lopussa yleistyksestä niin että koodiaakkostokin isompi kuin binaarinen ja siitä että puhutaan myös häiriöttömäksi koodaukseksi erotuksena kanavakoodauksesta, jossa virheiden varalle lisätään redundanssia ja siitä, että lähdesymbolien jono syntyy satunnaisprosessissa, joka harvoin IID vaan esim. Markovin on realistisempi.





Tämä käyttäjä on korkeakoulutason matemaatikko.
Tämä käyttäjä on perehtynyt matematiikkaan.