MICHAEL SITTIG ÄÄNEN HÄVIÖTÖN PAKKAAMINEN. Kandidaatintyö

Samankaltaiset tiedostot
Puheenkoodaus. Olivatpa kerran iloiset serkukset. PCM, DPCM ja ADPCM

AV-muotojen migraatiotyöpaja - ääni. KDK-pitkäaikaissäilytys seminaari / Juha Lehtonen

Ongelma 1: Onko datassa tai informaatiossa päällekkäisyyttä?

Matias Sumanen Mittaussignaalin häviötön pakkaaminen. Kandidaatintyö

puheen laatu kärsii koodauksesta mahdollisimman vähän. puhe pakkautuu mahdollisimman pieneen määrään bittejä.

T DSP: GSM codec

JUHO BLANKENSTEIN MITTAUSSIGNAALIN PAKKAAMINEN, SELVITYS PAKKAUSALGORITMEISTA

Juha Henriksson. Digitaalinen äänentallennus Dr. Juha Henriksson Finnish Jazz & Pop Archive

Avainsanat ja sanonnat: Tiedonpakkaus, algoritmit, Huffmanin koodaus, aritmeettinen koodaus, sanakirjat, informaatioteoria. CR luokat: E.

LARI KUMPU ADPCM:N KÄYTTÖ ÄÄNEN HÄVIÖTTÖMÄSSÄ PAKKAUKSESSA

Algoritmit 2. Luento 9 Ti Timo Männikkö

Digitaalitekniikan matematiikka Luku 13 Sivu 1 (10) Virheen havaitseminen ja korjaus

811120P Diskreetit rakenteet

Kuvan pakkaus JPEG (Joint Photographic Experts Group)

Alla olevassa kuvassa on millisekunnin verran äänitaajuisen signaalin aaltomuotoa. Pystyakselilla on jännite voltteina.

Signaalien datamuunnokset. Digitaalitekniikan edut

Signaalien datamuunnokset

SGN-1251 Signaalinkäsittelyn sovellukset Välikoe Heikki Huttunen

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

TL5503 DSK, laboraatiot (1.5 op) Audiosignaalit (ver 1.0) Jyrki Laitinen

Matlab-tietokoneharjoitus

Digitaalinen audio & video I

Dynamiikan hallinta Lähde: Zölzer. Digital audio signal processing. Wiley & Sons, Zölzer (ed.) DAFX Digital Audio Effects. Wiley & Sons, 2002.

ELEC-C5070 Elektroniikkapaja (5 op)

Häviötön tiedon pakkaaminen

Laskuharjoitus 4 ( ): Tehtävien vastauksia

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe

T Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti , 8:30-10:00 Kollokaatiot, Versio 1.1

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Harjoitus 7: NCSS - Tilastollinen analyysi

Shannonin ensimmäinen lause

5 Lineaarinen ennustus

ELEC-C7230 Tietoliikenteen siirtomenetelmät

Digitaalinen audio

2. TILASTOLLINEN TESTAAMINEN...

SGN-4200 Digitaalinen Audio Harjoitustyö-info

805306A Johdatus monimuuttujamenetelmiin, 5 op

SGN-4200 Digitaalinen audio

Algebralliset menetelmät virheenkorjauskoodin tunnistamisessa

Digitaalinen audio & video, osa I. Johdanto. Digitaalisen audion sovellusalueet. Johdanto. Taajuusalue. Psykoakustiikka. Johdanto Digitaalinen audio

Tilastollinen testaus. Vilkkumaa / Kuusinen 1

Laskuharjoitus 2 ( ): Tehtävien vastauksia

Tilastollisen analyysin perusteet Luento 8: Lineaarinen regressio, testejä ja luottamusvälejä

Kompleksiluvut signaalin taajuusjakauman arvioinnissa

Luku- ja merkkikoodit. Digitaalitekniikan matematiikka Luku 12 Sivu 1 (15)

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

Tehtävä 2: Tietoliikenneprotokolla

Matematiikan tukikurssi

Matematiikan tukikurssi

Algoritmit 2. Luento 13 Ti Timo Männikkö

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Digitaalinen audio & video, osa I

Tietoliikenteen fyysinen kerros. Tietoliikenne kohtaa todellisuuden Kirja sivut 43-93

Algoritmit 2. Luento 10 To Timo Männikkö

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Bayesin pelit. Kalle Siukola. MS-E2142 Optimointiopin seminaari: Peliteoria ja tekoäly

esimerkkejä erilaisista lohkokoodeista

TAMPEREEN TEKNILLINEN YLIOPISTO

Mallin arviointi ja valinta. Ennustevirhe otoksen sisällä, parametrimäärän valinta, AIC, BIC ja MDL

Datatähti 2019 loppu

TAMPEREEN TEKNILLINEN YLIOPISTO

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

Mitä on konvoluutio? Tutustu kuvankäsittelyyn

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Johdanto tieto- viestintäteknologian käyttöön: Äänitystekniikka. Vfo135 ja Vfp124 Martti Vainio

Virheen kasautumislaki

Matematiikan tukikurssi

Sovellettu todennäköisyyslaskenta B

Algoritmit 1. Demot Timo Männikkö

6. laskuharjoitusten vastaukset (viikot 10 11)

KAISTANLEVEYDEN JA TEHON KÄYTÖN KANNALTA OPTIMAALINEN MODULAATIO TRELLISKOODATTU MODULAATIO (TCM)

Tehtävät. 1. Ratkaistava epäyhtälöt. a) 2(4 x) < 12, b) 5(x 2 4x + 3) < 0, c) 3 2x 4 > 6. 1/10. Sukunimi (painokirjaimin)

Ohjelmistoradio tehtävät 4. P1: Ekvalisointi ja demodulaatio. OFDM-symbolien generoiminen

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Harmaasävykuvien häviöttömästä tiivistyksestä

T Luonnollisten kielten tilastollinen käsittely

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Algoritmit 2. Luento 6 To Timo Männikkö

Ongelma(t): Miten digitaalista tietoa voidaan toisintaa ja visualisoida? Miten monimutkaista tietoa voidaan toisintaa ja visualisoida?

Alkulukujen harmoninen sarja

Algoritmit 2. Luento 12 To Timo Männikkö

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Tietotekniikan valintakoe

Algoritmit 2. Luento 3 Ti Timo Männikkö

Matematiikan tukikurssi

4.1. Olkoon X mielivaltainen positiivinen satunnaismuuttuja, jonka odotusarvo on

Algoritmit 2. Luento 3 Ti Timo Männikkö

TL5503 DSK, laboraatiot (1.5 op) Suodatus 2 (ver 1.0) Jyrki Laitinen

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

Nopea kertolasku, Karatsuban algoritmi

Tiedonsiirron perusteet ja fyysinen kerros. Tietoliikenne kohtaa todellisuuden OSI-mallin alimmainen kerros Kirja sivut 43-93

LIITE 1 VIRHEEN ARVIOINNISTA

4 Tehokkuus ja algoritmien suunnittelu

Puhetie, PCM järjestelmä, johtokoodi

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo Ratkaisut ja pisteytysohjeet

Ohjelmoinnin perusteet Y Python

Transkriptio:

MICHAEL SITTIG ÄÄNEN HÄVIÖTÖN PAKKAAMINEN Kandidaatintyö Tarkastaja: lehtori Konsta Koppinen Työ jätetty tarkastettavaksi 24. toukokuuta 2010

II TIIVISTELMÄ TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan koulutusohjelma SITTIG, MICHAEL: Äänen häviötön pakkaaminen Kandidaatintyö, 25 sivua, 1 liitesivu Toukokuu 2010 Pääaine: Signaalinkäsittely Tarkastaja: lehtori Konsta Koppinen Avainsanat: Äänen häviötön pakkaaminen, häviötön pakkaus, Jakson pituuden koodaus, RLC, Entropiakoodaus, Linear Predictive Coding, LPC, Huffman koodaus, Lempel- Ziv-Welch, LZW, Golomb-Rice koodaus, Rice koodaus, Free Lossless Audio Coding, FLAC Häviöttömät pakkausmenetelmät juontavat juurensa Claude E. Shannonin entropiakoodausteoriaan, jonka hän esitti vuonna 1948. Monia algoritmeja on sittemmin esitetty suorittamaan tämän teorian mukaista datan tiivistämistä, mutta pakkaussuhdetta ei audion osalta ole pystytty parantamaan kovinkaan merkittävästi mikäli kaikki tieto halutaan säilyttää. Tämä työ luo katsauksen niin tunnetuimpien häviöttömien pakkausmenetelmien teorioihin kuin niiden todellisiin tehokkuuksiin audiosignaalien tapauksessa. Työ pyrkii selventämään mikä tekee häviöttömästä audiopakkauksesta haasteellista verrattuna kuvien tai tekstitiedostojen vastaavaan. Lisäksi työssä esitellään tämän hetken käyttökelpoisimpiin koodekkeihin lukeutuvan Free Losslss Audio Codec:n eli FLAC:n toimintaa. Huomataan miksi se käyttää lineaarista ennustavaa koodausta ja Golomb- Rice -algoritmia hyödykseen.

III ALKUSANAT Häviöttömään audiokoodaukseen tutustuminen näin intensiivisesti on ollut erittäin mielenkiintoinen ja opettavainen kokemus. Kandidaatintyö tehtiin osana Tampereen teknillisen yliopiston signaalinkäsittelyn laitoksen kandidaatintyö seminaaria keväällä 2010. Kiitokseni esitän työn ohjaajalle, lehtori Konsta Koppiselle, hyvistä ohjeista työn eri vaiheissa sekä innostavasta asenteesta läpi seminaarin.

SISÄLLYS Tiivistelmä... II Alkusanat... III Termit ja niiden määritelmät... V 1. Johdanto... 1 2. Häviöttömän enkoodauksen taustaa... 3 2.1. Entropiakoodaus... 3 2.2. Lineaarinen ennustava koodaus ja residuaalisignaali... 4 3. Yleisimpien menetelmien esittely... 5 3.1. Jakson pituuden koodaus... 5 3.2. Lempel-Ziv-Welch -koodaus... 6 3.3. Huffman-koodaus... 7 3.4. Golomb-Rice -koodaus... 8 3.5. FLAC Free Lossless Audio Codec... 10 4. algoritmien testaaminen... 11 4.1. Testausympäristö ja lähdekoodit... 11 4.2. Testattavat algoritmit... 11 4.3. Otos... 12 4.4. Testitulokset... 14 5. Tulosten arviointi... 15 6. Päätelmät... 17 Lähteet... 18 Liite 1 Testitulokset... 20 IV

V TERMIT JA NIIDEN MÄÄRITELMÄT enkooderi dekooderi koodekki PCM-signaali kvantisointi LPC VLC Laite, piiri, ohjelma tai algoritmi, joka muuttaa tietoa muodosta toiseen pienentämällä sen kokoa (engl. encoder) Käänteinen käsite enkooderille (engl. decoder) Enkooderin ja dekooderin yhdistelmä (engl. codec) Analogisesta signaalista pulssimoduloitu digitaalinen signaali (engl. Pulse Code Modulation) Reaalilukuarvojen tai suuren lukujoukon arvojen likimääräistämistä pienempään lukujoukkoon Lineaarinen ennustava koodaus (engl. Linear Predictive Coding) Vaihtuvanmittainen koodaus (engl. Variable-Length Coding)

1 1. JOHDANTO Datan pakkauksen ideana on kaikessa yksinkertaisuudessaan sen enkoodaus erilaisia algoritmeja käyttäen muotoon, jossa tarvittava siirto- tai tallennuskapasiteetti on alkuperäistä pienempi (Kuva 1.1). Mikäli pakkaus on häviötöntä, data voidaan dekoodata täydellisesti alkuperäiseen muotoonsa. Nämä kaksi osaa enkooderi ja dekooderi muodostavat yhdessä niin sanotun koodekin. Kooditaulukko Viesti: tuli,maa,ilma,vesi. Pakattu viesti: t,m,i,v. Kuva 1.1 Yksinkertaistettu häviöttömän koodekin toiminta Tämä työ käsittelee erityisesti PCM-muotoisen audiosignaalin häviötöntä pakkausta. Muutettaessa analogisesta signaalista digitaalinen, häviää kvantisoinnin yhteydessä jo osa tiedosta. Tämä työ ei kuitenkaan keskity tuohon epäkohtaan vaan nimenomaan algoritmeihin, jotka on luotu pakkaamaan jo valmiiksi digitaalisessa muodossa olevaa informaatiota. Puhdas audiosignaali sisältää paljon ihmiskorvan kuuloalueen ulkopuolista dataa. Täten selkeästi tehokkaampiin pakkaussuhteisiin päästään käyttämällä häviöllisiä pakkausmenetelmiä, jossa informaation kannalta merkityksettömät taajuudet hylätään. Mikäli kyseessä on kuitenkin referenssisignaali, kuten masternauha, ei datan tallennusvaiheessa voida olla vielä täysin varmoja, onko sivuutettu data tulevaisuudessa täysin hyödytöntä. Täten audiosignaalien tapauksessa käyttämällä koodekkeja, jotka on suunniteltu erityisesti häviöttömään audiosignaalin pakkaamiseen, saadaan siirto- ja tallennuskapasiteettia rajoitettua tällaiseen tarkoitukseen mahdollisimman tehokkaasti.

Työssä esitellään ensin yleisimpiä häviöttömiä pakkausalgoritmeja. Tämän jälkeen tutustutaan näitä algoritmeja hyväksi käyttäviin koodekkeihin ja erityisesti niiden audiopakkausominaisuuksiin. Teoriaosuuden päättää Free Lossless Audio Codec, jonka tuottama formaatti flac lukeutuu nykyisin asiayhteydessään käytetyimpien joukkoon. Lopuksi testataan esiteltyjen pakkausalgoritmien vaikutusta tallennuskapasiteettiin erityyppisten audiosignaalien avulla ja verrataan tuloksia FLAC:n tuottamiin tuloksiin. 2

3 2. HÄVIÖTTÖMÄN ENKOODAUKSEN TAUSTAA Tässä luvussa esitellään häviöttömän enkoodauksen taustalla esiintyvä entropiankoodauksen teoria sekä nykyisin monessa audiokoodekissa hyväksi käytetyn lineaarisen ennustavan koodauksen periaate. 2.1. Entropiakoodaus Claude E. Shannonin vuonna 1948 esittelemä informaatioteoriaa koskeva artikkeli, [13], vaikuttaa vielä suuresti nykyaikaisiin pakkausmenetelmiin. Siinä esitelty entropia, satunnaismuuttujan epävarmuus, viestille X on muotoa: n H( X ) p( x )log p( x ). (2.1) i 1 i b i Kaavassa x i on satunnaismuuttuja, joka voi saada arvon välillä 1 n; p(x i ) on todennäköisyys arvolle x i ; b on logaritmin kantaluku, joka binäärilukujen ollessa kyseessä saa arvon 2. Entropiakoodausta voidaan kutsua häviöttömän pakkauksen kulmakiveksi. Se perustuu tosiasialle, että informaatio sisältää redundanssia, jonka absoluuttinen arvo saadaan määriteltyä seuraavanlaisen esityksen avulla. Keskimääräinen entropia per symboli on muotoa: 1 r lim H( X ). (2.2) n n Absoluuttinen entropia per symboli on muotoa: R log M. (2.3) Kaavassa M on symbolin esitykseen käytettävien merkkien määrä. Edellisiä kaavoja hyväksi käyttäen voidaan laskea viestin absoluuttisen redundanssin arvo D: D R r. (2.4) Käytännön enkoodauksessa viestin redundanssi saatetaan mahdollisimman pieneksi entropiakoodausalgoritmien avulla. Tällöin pakatun viestin koodisymbolien keskimääräinen bittiesityksen pituus saatetaan lyhyemmäksi kuin alkuperäisten symbolien vastaava. Entropiakoodaus perustuu symbolin esiintymisen tilastolliseen todennäköisyyteen, jolloin suurimman todennäköisyyden omaava symboli pyritään esittämään lyhimmällä koodisymbolilla. b

4 2.2. Lineaarinen ennustava koodaus ja residuaalisignaali Edistyneet koodekit kuten FLAC käyttävät enkoodausvaiheessa jopa neljää erilaista ennustusmenetelmää [1]. Tässä tutustutaan niistä yhteen nimeltä Lineaarinen ennustava koodaus, joka lyhennetään jatkossa muotoon LPC. LPC perustuu lineaarisen järjestelmän sisääntulon ennustamiseen matemaattisin menetelmin. Siinä tuleva sisääntulo x(n) pyritään estimoimaan edellisten sisääntulojen x(n-1), x(n-2),, x(n-k) ja niille ominaisten kertoimien a(1) a(k) avulla kaavan (2.5) mukaisesti. Ongelmana ennustuksessa on ennen kaikkea kertoimien a(1) a(k) määrittäminen. p xˆ( n) a( k) x( n k) (2.5) k 1 Käytännön entropiakoodauksessa lineaarista ennustavaa koodausta ei voida käyttää hyväksi sellaisenaan, koska se on häviöllistä. LPC on kuitenkin toimiva menetelmä tehostamaan Golomb-Rice -koodausta (Kappale 3.4). Seuraavassa on esitetty LPC-rutiini, jota hyväksi käyttäen esimerkiksi FLAC-koodekin ennustuslohko pyrkii löytämään täydellisesti tulevan osan signaalista. Ennustettujen ja todellisten arvojen välille päästään muodostamaan matalaamplitudisia residuaalisignaaleja e(n) kaavan (2.6) mukaisesti. [7] p e( n) x( n) x( n) x( n) a( k) x( n k) (2.6) k 1 LPC:n avulla pyritään löytämään sellaiset kertoimet a(1), a(2),, a(k), joilla residuaalisignaalin neliövirheen summa on mahdollisimman pieni. Residuaalisignaalin energia E(n) määräytyy kaavan (2.7) mukaisesti. 2 e n (2.7) E( n) ( ) n Laskutoimitusta helpottamaan on määritelty a(0)=1, jolloin kaava (2.7) saadaan muotoon: p E( n) a( k) x( n k) n k 0. Kertoimien a(k) optimaalisuuden ehtona on, että funktion E(n) osittaisderivaattojen täytyy olla nolla a(k):n suhteen. Kun derivoinnin ja ryhmittelyn jälkeen asetetaan derivaattojen arvot nolliksi, saadaan yhtälöryhmä, joka tuottaa symmetrisen Toeplizmatriisin: R x y (2.8) Siinä R on autokorrelaatiomatriisi ja y ristikorrelaatiovektori. Yhtälöstä (2.8) saadaan Levinson-Durbin -rekursion avulla ratkaistua nyt optimaaliset kertoimet a(k). [7] 2

5 3. YLEISIMPIEN MENETELMIEN ESITTELY Esiteltävät neljä erilaista koodausmenetelmää jakson pituuden-, Huffman-, Lempel- Ziv-Welch- ja Golomb-Rice -koodaus ovat kaikki häviöttömiä. Niitä voidaan käyttää kolmella eri tavalla: staattisesti, puoliadaptiivisesti tai adaptiivisesti. Staattisessa menetelmässä sekä lähettäjä että vastaanottaja tuntevat etukäteen niin käytettävän mallin kuin kooditaulukon rakenteen. Täten koodausmenetelmä käyttää koodattavasta aineistosta riippumatonta symbolirakennetta. Puoliadaptiivisessa menetelmässä käydään ensin läpi siirrettävä aineisto, ja lasketaan aineiston merkkien todellinen esiintymisjakauma. Kun jakauma on valmis, se siirretään vastaanottajalle, ja vasta sen jälkeen ryhdytään varsinaiseen tiedonsiirtoon. Adaptiivisessa menetelmässä mallia korjataan siirron aikana datan rakenteen mukaisesti. [9] 3.1. Jakson pituuden koodaus Perimmäinen tarkoitus on, että peräkkäin toistuvien symbolien lukumäärää seurataan. Alla olevassa kuvassa, (Kuva 3.1), on esitetty kuinka viestin sisältämät viisi peräkkäistä symbolia 15 saadaan pakattua koodisymboleiksi 5 ja 15. Dekooderi saa, tässä tapauksessa, tiedon tällaisen toistuvan ryhmän olemassaolosta merkkibitin 0 ansiosta. [3] alkuperäinen: 10 11 12 13 14 15 15 15 15 15 16 17 18 19 20 enkoodaus 10 11 12 13 14 0 5 15 16 17 18 19 20 Kuva 3.1 Jaksonpituuden enkoodaus Menetelmä on hyvin nopea, mutta sen käyttökelpoisuutta huonontaa sen alhainen tiivistyskerroin audiosignaalien tapauksessa, johtuen kovasti vaihtelevista näytearvoista. Jakson pituuden koodaus on tehokkaimmillaan kuvanpakkauksessa sellaisten kuvien kohdalla, joista löytyy suuria yhtä väriä sisältäviä alueita. Audiopakkauksen tapauksessa

6 menetelmä sopii nollaa sisältävien kohtien koodaukseen, kuten audiosignaalin alkuun ja loppuun. 3.2. Lempel-Ziv-Welch -koodaus LZW-algoritmi lukee pakkaamatonta dataa bitti kerrallaan, ja mikäli uusia symboleita esiintyy, ne lisätään kooditaulukkoon tässä asiayhteydessä sanakirjaan. Mikäli symboli esiintyy jo taulukossa, algoritmi korvaa ulostulon pakatun datan seuraavan merkin kooditaulukon indeksillä. Täten toistetut symbolit saadaan esitettyä lyhyemmässä muodossa pelkän indeksin avulla. [10] Sisäänmenon puskuri Löytyikö symboli kooditaulusta? Koodisymbolin indeksi Ulostulo (LZW-koodi) v kyllä(166) - - ve ei 256 166(v) es ei 257 e si ei 258 s ih ei 259 i hi ei 260 h ii ei 261 i is ei 262 i si kyllä(258) - si/ ei 263 258(si) /s ei 264 / si kyllä(258) - sih ei 265 258(si) hi kyllä(260) - his ei 266 260(hi) si kyllä(258) - si/ kyllä(263) - si/h ei 267 263(si/) hi kyllä(260) - his kyllä(266) - hiss ei 268 266(his) si kyllä(258) - sis ei 269 258(si) ss ei 270 s sä ei 271 ä Taulukko 3.1 LZW-algoritmin toiminta pakatessa syötettä: Vesihiisi/sihisi/hississä

7 Algoritmin tuottama koodi voi sisältää minkä pituisia bittijonoja tahansa, mutta jotta pakkausta tapahtuisi, ulostulon on mahdollistettava pidempi bittiesitys kuin yksittäisen merkin vaatima. Terry Welch:n 1984 esittelemään alkuperäiseen LZWkooditaulukkoon, 0, muodostetaan 12-bittisiä, määrätyn pituisia, arvoja. Taulukko 3.1, demonstroi tämän algoritmin toimintaa lauseen vesihiisi/sihisi/hississä pohjalta. Kooditaulukon ensimmäiset indeksit 0 255 on varattu 8-bittisille ASCII-merkeille [1]. Tästä eteenpäin indeksit 256 4095 varataan yhdistelmille, jotka voivat sisältää kuinka pitkiä merkkijonoja sisältäviä symboleja tahansa. [10] Tällä tavoin esimerkin kooditaulun (Taulukko 3.1) indeksiin 265 viittaava symboli sih voidaan esittää 12 bitin avulla. ASCII-merkeillä esitettynä se veisi 8 bittiä 3 merkkiä = 24 bittiä. LZW-algoritmi koodaa siis tässä lyhyessä esimerkissä 8 bittiä 25 merkkiä = 200 bittiä muotoon, jonka esitykseen tarvitaan 12 bittiä 16 koodisymbolia = 192bittiä. Vuodesta 1984 tähän päivään algoritmi on kehitetty käyttämään vaihtuvanmittaista koodausta. Kooditaulu on myös lisätty käyttämään koodisymbolia, joka kertoo kooditaulukon tyhjentämisestä clear code sekä symbolia, joka kertoo viestin päättymisestä stop code. Clear code tulee tarpeen kun kooditaulukko täyttyy, mutta samalla se tehostaa pakkaamista sopeutumalla paremmin uusiin alueisiin pitkissä viesteissä. Älykkäät enkooderit tyhjentävät kooditaulun silloin, kun pakkaussuhde laskee alle määritellyn tason. [18] 3.3. Huffman-koodaus Huffman-koodauksessa koodinsanat ovat vaihtuvanmittaisia. Viesti jaetaan aluksi osiin, joista muodostetaan symboleja. Symbolien esiintymistodennäköisyyksien perusteella luodaan Huffman-kooditaulukko Huffman-puu jossa suurimman todennäköisyyden saanut symboli saa pienimmän määrän bittejä Huffman-koodiinsa. Keskimääräinen Huffman-koodin bittiesityksen pituus viestissä voidaan laskea kaavalla (3.1). Siinä N on erilaisten symbolien määrä koko viestissä, P(i) on todennäköisyys i:nnelle symbolille ja L(i) tiettyyn Huffman-koodiin käytettyjen bittien määrä. [6] L av N P( i) L( i) (3.1) i 1 Huffman-koodauksen ydin on sen käyttämä puu-rakenne (Kuva 3.2). Huffman-puuta luetaan ylhäältä alaspäin; siirryttäessä oikeaan haaraan Huffman-koodiin lisätään 1; siirryttäessä vasempaan haaraan siihen lisätään 0. [6] Esimerkkinä on satunnaisesti 38 a-, b-, c-, d-, e- tai f-symbolia sisältävä viesti. Lasketaan todennäköisyys P(i) jokaisen symbolin esiintymiselle ja luodaan Huffmankooditaulukko (Taulukko 3.2). Huomataan, että symboli a on esiintynyt useimmin, joten se saa Huffman-koodin, joka sisältää vain kaksi bittiä. Symboli d sijoittuu Huffman-

8 puussa vastakkaiselle puolelle sillä se on esiintynyt koodissa toiseksi eniten; myös sen Huffman-koodi on kaksibittinen. i symboli esiintymiskerrat viestissä P(i) Huffman-koodi L(i) 1 a 11 0,289 10 2 2 b 3 0,079 000 3 3 c 4 0,105 001 3 4 d 9 0,237 01 2 5 e 7 0,184 111 3 6 f 4 0,105 110 3 Taulukko 3.2 Huffman-koodin muodostuminen 0 1 1 0,421 1 0,579 1 0,184 d 0,237 a 0,2895 0 0,2895 b 0,079 c 0,105 f 0,105 e 0,184 Kuva 3.2 Huffman-puu a-, b-, c-, d-, e- ja f-symboleja sisältävälle viestille Mikäli vastaanottopäässä saadaan datavirta 11001, edetään Huffman-puussa ensin kohtaan 110. Tällöin jolloin päädytään symboliin f. Tämän jälkeen aloitetaan lukeminen taas ylhäältä, ja siirrytään datavirran 01 osoittamaa reittiä kohtaan d. Dekoodattu Huffman-koodi antoi siis tulokseksi kirjainyhdistelmän fd. 3.4. Golomb-Rice -koodaus Golomb-Rice-koodaus on Solomon W. Golombin 1960-luvulla kehittämän koodausalgoritmin muunnelma, jota Robert F. Ricen paranteli sopivammaksi tietokoneille käyttäen kahden potenssia kantalukuna [16]. Menetelmää kutsutaan usein alan asiakirjoissa myös pelkäksi Rice koodaukseksi, ja se soveltuu parhaiten käytettäväksi datalle, joka sisältää matalia arvoja, jotka on esitetty suurella bittimäärällä

9 16- tai 32 bittiä. Audiosignaalin residuaalisignaali (2.6) on tyypillisimmillään juuri tällainen. [11] Idea on hyvin samankaltainen kuin Huffman-koodauksessa lyhimmän koodin saavat ne symbolit, jotka esiintyvät viestissä useimmin. Golomb-Rice koodaus ei kuitenkaan käytä hyväkseen koko viestin sisältämien symbolien todennäköisyyksiä kuten Huffman-koodaus vaan oletusta siitä, että nollan lähellä olevia pieniä arvoja on viestissä enemmän kuin suuria. Sen toiminta perustuu jatkuvaan parametrien korjaukseen sisääntulon mukaan. Golomb-Rice menetelmän ydin on sen käyttämä arvo a λ,α, joka on Laplacen tiheysjakaumasta saatu satunnaisen näytteen odotusarvo. [5] Laplacen tiheysjakauman L α,λ todennäköisyys residuaalisignaalille e(n) on muotoa: ( ) ( ) e P e p0 exp, e 1. (3.2) 2 2 Arvon a λ,α avulla saadaan laskettua halutulle määrälle peräkkäisiä syötteitä kooditaulukon cutoff-arvo seuraavanlaisesti: k log 2 [ a, ] cutoff 2 k a,. Esimerkkinä Golomb-Rice kooditaulukon muodostumisesta toimii Taulukko 3.2, jossa a 10,, k log 2[10] 4, cutoff 4 2 10 6 osamäärän enkoodaus jakojäännöksen enkoodaus q ulostulo r offset binääriarvo ulostulo 0 0 0 0 0000 000 1 10 1 1 0001 001 2 110 2 2 0010 010 3 1110 3 3 0011 011 4 11110 4 4 0100 100 5 111110 5 5 0101 101 6 1111110 6 12 1100 1100 7 11111110 7 13 1101 1101 : : 8 14 1110 1110 N N*1+0 9 15 1111 1111 Taulukko 3.3 Golomb-Rice kooditaulukon muodostuminen cutoff-arvon ollessa 6 Golomb-Rice -koodi muodostuu seuraavanlaisesti; ensimmäinen osa koodisymbolista on yksittäinen bitti, joka osoittaa symbolin merkin nollana tai ykkösenä; toiseen osaan

10 tulee unaarinen esitys osamäärästä; kolmanteen osaan tulee binääriesitys jakojäännöksestä. Edellisen esimerkin perusteella luku 38 saa siis esityksen q(3) = 1110 ja r(8) = 1110. 0 1110 1110 merkkibitti osamäärä jakojäännös Kuva 3.3 Esimerkki Golomb-Rice -koodin muodostumisesta Taulukon 3.3 perusteella 3.5. FLAC Free Lossless Audio Codec Koodekin kehitys alkoi vuonna 2000 Josh Coalsonin toimesta. Perustana toimi A.J. Robinsonin työ Shorten-formaatin parissa, LPC-koodaus sekä Golomb-Rice -koodaus. Vuonna 2003 alkoi yhteistyö, tunnetun, pakkausformaatteihin erikoistuneen nettibrändi Xiph.org:n kanssa. Nimensä mukaan FLAC on sekä vapaa maksuista, että myös vapaasti kaikkien kehiteltävissä. Koodi on kirjoitettu käyttäen C++ -kieltä. [2] FLAC tukee vain kokonaislukuja sisältäviä näytteitä, jolla on haluttu varmistaa, että enkoodaus on täysin häviötöntä. Enkooderi jakaa bittivirran vaihtuvanmittaisiin osiin jotka viedään aluksi ennustuslohkon LPC (Kappale 2.2) läpi. Mikäli ennustuslohko ei pysty ennustamaan signaalia täydellisesti, koodataan alkuperäisen- ja ennustussignaalin erotus eli residuaalisignaali häviöttömästi käyttäen Golomb-Rice - koodausta (Kappale 3.4). Audiopakkausominaisuutta parantamassa on myös koodekin, kaistojen välistä korrelointia vähentävä, tuki monikanavaiselle äänelle. [2] Tällä hetkellä on olemassa muutama häviöttömään audiopakkaukseen erikoistunut koodekki, joka kilpailee FLAC:n kanssa tehokkuudellaan. Varteenotettavia kilpailijoita ovat muun muassa Apple Lossless, MPEG-4 ALS, Monkey s Audio, OptimFROG, Tak ja WavPack. [2]

11 4. ALGORITMIEN TESTAAMINEN Käytännön osuutena tässä työssä testattiin teoriaosuudessa esiteltyjen pakkausalgoritmien vaikutusta audiosignaaleihin. Otos koski 30 erityyppistä audiosignaalia ja testejä tehtiin viidellä eri menetelmällä. 4.1. Testausympäristö ja lähdekoodit Teoriakappaleessa 3 esiteltyjen algoritmien testaus päätettiin toteuttaa suurelta osin valmiita lähdekoodeja hyväksi käyttäen. Tähän ratkaisuun päädyttiin, koska koodit olivat hyvin muodostettuja, jolloin otannan testaaminen saatiin käytyä läpi inhimillisellä nopeudella. Testit suoritettiin Windows-ympäristössä Matlab-ohjelmaa hyväksi käyttäen. Avoimen lähdekoodin omaava Basic Compression Library v.1.2.0 tarjosi mahdollisuuden jakson pituuden-, Huffman- ja Golomb-Rice -koodaukseen. Toteutukset näihin oli kirjoittanut Marcus Geelnard ANSI C kielellä [4]. LZW-koodin oli kirjoittanut Giuseppe Ridinò matlabilla [12]. FLAC-enkoodauksen, joka toimi vertailukohtana testeissä, lähdekoodi oli kirjoitettu ANSI C++ -kielellä. ANSI C++-koodit toimivat erittäin hyvin. Niiden suorittama enkoodaus antoi tuloksen jopa 40MB kokoisille tiedostoille muutamassa sekunnissa. Ongelmaksi muodostui kuitenkin Matlabilla kirjoitettu LZW-enkoodausalgoritmi, jota tietokone käänsi ajonaikaisesti. Koodauksen rakenne sanakirjanmuodostuksineen aiheutti suurta hitautta isompia tiedostoja pakatessa, joten LZW-koodaus päätettiin suorittaa vain alle 1,5 MB kokoisille tiedostoille. 4.2. Testattavat algoritmit Testattavat algoritmit on esitelty seuraavalla sivulla (Taulukko 4.1). Jakson pituuden- ja Lempel-Ziv-Welch -koodaus otettiin mukaan testeihin vertailun vuoksi. Tiedossa tosin oli, etteivät ne ole optimaalisia koodausmenetelmiä audiosignaalien tapauksessa (Kappaleet 3.1 ja 3.2).

12 Enkoodausalgoritmi 1 Jakson pituus 2 Lempel-Ziv-Welch 3 Huffman 4 Golomb-Rice 5 FLAC Taulukko 4.1 Testeissä käytetyt koodausalgoritmit 4.3. Otos Otos on esitelty alla (Taulukko 4.2). Kaikki tiedostot oli lähtöarvoisesti WAVmuodossa. Niistä ensimmäinen on pelkkää puhetta sisältävä kappale. Numerot 2-6 sisältävät erityyppistä musiikkia, ja neljä viimeistä ovat Matlab-ohjelmalla luotuja signaaleja. kappaleen nimi koko (MB) 1 Outkast - I'm Cool 3,6 2 Beastie Boys - Live At PJ's 17 3 The Roots - Mellow My Man 24,3 4 Chemical Brothers - Believe 36,3 5 RATM - Bulls On Parade 12,9 6 Pearl Jam - Go 16,6 7 Harmoninen aalto 0,173 8 Kohinainen signaali 0,173 9 Hamoninen+Kohinainen 0,173 10 Harmoninen ja Kohinainen 0,345 Taulukko 4.2 Otoksen 44,1kHz näytteenottotaajuudella tallennetut tiedostot ja niiden alkuperäiset koot Kaikki tiedostot tallennettiin käyttämällä 16-bittistä esitystä. Koko otanta käsitti yllä olevan taulukon kappaleet kolmella eri näytteenottotaajuudella: 16kHz, 22,05kHz ja 44,1kHz. Harmoninen aalto, joka luotiin Matlabilla, sisälsi taajuudet 60Hz ja 6000Hz. Sen amplitudiksi asetettiin 1V ja pituudeksi 2s. Sitä käytettiin yhdessä satunnaisista arvoista koostuvan kohinaisen, yhtä pitkän ja saman amplitudin omaavan signaalin kanssa. Näin saatiin luotua signaalit, joiden näytearvojen toistuvuus oli helpommin seurattavissa kuin normaalien musiikkinäytteiden, ja täten testitulosten arviointi helpottui. Kuva 4.1 sekä Kuva 4.2 esittävät näiden kahden signaalin käytöksen amplitudi- ja taajuustasossa näytteenottotaajuudella 44,1kHz.

13 Kuva 4.1 Harmonisen aallon amplitudi aikatasossa sekä sen taajuusspektri näytteenottotaajuudella 44,1kHz Kuva 4.2 Kohinaisen signaalin amplitudi aikatasossa sekä sen taajuusspektri Harmonista värähtelyä ja kohinaa yhdistelemällä saatiin vielä luotua kaksi mielenkiintoista signaalia. Signaali nimeltä Harmoninen+Kohinainen koostui näiden kahden summauksesta. Harmoninen ja Kohinainen -niminen signaali taasen muodostettiin peräkkäisistä signaaleista, jolloin kohina alkoi harmonisen aallon jälkeen kohdasta 2s jatkuen kohtaan 4s. Kuva 4.3 sekä Kuva 4.4 esittävät näiden kahden signaalin amplitudit aikatasossa sekä niiden taajuusspektrit.

14 Kuva 4.3 Harmoninen+Kohinainen -signaalin amplitudi aikatasossa sekä sen taajuusspektri Kuva 4.4 Harmoninen ja Kohinainen -signaalin amplitudi aikatasossa sekä sen taajuusspektri 4.4. Testitulokset Testeissä vertailtiin eri enkoodausmenetelmien vaikutusta pakkaussuhteeseen, joka ilmoitettiin yksinkertaisesti pakattu pakkassuhde *100%. alkuperäinen Testitulokset on esitetty Liitteessä 1.

15 5. TULOSTEN ARVIOINTI Taulukko 5.1 kertoo koko otannan pakkauksien keskiarvot per menetelmä. Sen avulla saadaan hyvä yleiskuva siitä, että häviötön audiokoodaus perinteisin menetelmin ei juuri tuota tulosta. Jakson pituus LZW Huffman Golomb-Rice FLAC Keskiarvo 100,00 % 91,7 % 95,77 % 91,02 % 73,33 % Taulukko 5.1 Koodausmenetelmien tuottamat pakkaussuhteiden keskiarvot Tarkastellaan seuraavaksi tuloksia lähemmin Liitteen 1 pohjalta. Huomataan, että Matlabilla luodut signaalit (Kuvat 5.1 5.4) toimivat teoriakappaleessa 3 esiteltyjen periaatteiden mukaisesti. Tämä tulos antaa vahvistuksen sille, että lähdekoodit [4] ja [12] toimivat niin kuin niiden pitääkin. Jakson pituuden koodaus antaa poikkeuksetta, signaalin näytteiden arvojen vaihdellessa, pakkaussuhteen, joka on 100 prosenttia alkuperäisen signaali koosta. Tämä tulos oli odotettavissa teoriakappaleen 3.1 perusteella. Lempel-Ziv-Welck -koodaus toimi hyvin vain harmonisen aallon tapauksessa. Muulloin tämä tuotti jopa selkeästi suurempia tiedostoja kuin mitä alkuperäiset olivat. Tämä on selitettävissä sen sanakirjaluonteesta, jolloin sen kooditaulukko kasvoi aina, kun sieltä ei löytynyt vastinetta sisään tulevalle uudelle arvolle. Tulos oli odotettavissa teoriakappaleen 3.2 perusteella. Huffman-koodauksen tuloksista on vaikeampi ottaa selvää sillä se toimi melko huonosti jokaisen testisignaalin kanssa kuitenkin pakaten jokaista hieman. Se toimi parhaiten puhetta sisältäneen signaalin tapauksessa, josta voidaan päätellä, että signaali on sisältänyt samankaltaisia äänteitä useaan otteeseen. Koodausmenetelmä tuotti huonoimman pakkaussuhteensa harmoniselle aallolle, joka kertookin teoriaosuuden 3.3 mukaisesti, että mikäli signaalissa on yhtä paljon kaikkia symboleita, ei pakkausta juurikaan tapahdu. Golomb-Rice -menetelmää testattiin suoraan WAV-muotoisiin testitiedostoihin ilman, että signaaleista olisi tehty teoriakappaleessa 3.4 mainittuja residuaalisignaaleja. Tämä ei kuitenkaan laskenut koodausmenetelmää testiryhmän hännille vaan esimerkiksi

16 puhesignaalin tapauksessa se toimi suhteellisen hyvin. Siinä missä tämä signaali sisälsi samankaltaisia äänteitä, oli se myös sisältänyt eniten hiljaisia kohtia. Näissä hiljaisissa kohdissa signaalin amplitudi on lähimpänä nollaa, jolloin Laplacen tiheysjakauman mukaisesti koodaava Golom-Rice -koodaus tuottaa lyhimmät koodisymbolinsa. Mainittakoon että Golomb-Rice -koodaus suoritti enkoodauksen testiryhmästä nopeimmin ja silti sen antamat pakkaussuhteet ovat suurelta osin selkeästi parempia kuin jakson pituuden-, LZW- tai Huffman -koodauksen. Täten on perusteltua, että tehokkaimmat häviöttömät audiokoodekit perustuvat juuri Golomb-Rice -koodaukseen. FLAC-enkoodaus tuotti keskimäärin testiryhmän parhaat pakkaussuhteet. Tulos oli odotettu, ja samankaltainen kuin FLAC:n nettisivut, [2], antavat olettaa. Sen heikoin kohta oli signaalit, joiden musiikillinen dynamiikka ei muuttunut tai muuttui hyvin vähän. Tämä antaa viitteen hiljaisten kohtien tärkeydestä FLAC:n enkooderille. Ennustuslohkon toiminta on oletettavasti helpompaa kohdissa, joissa soittimia on vähän.

17 6. PÄÄTELMÄT Edellä testattiin viittä erityyppistä häviötöntä audiopakkausmenetelmää 30 erilaista signaalia vasten. Otanta sisälsi systemaattisuuden piirteet ja tulokset, joita erilaiset menetelmät antoivat, olivat teoriaan tutustumisen myötä ennustettavissa. Työ tekeminen antoi hyvän perehdytyksen häviöttömän pakkauksen menetelmiin niin yleisellä tasolla kuin erityisesti audion kohdalla. Tutustuessa aihealueeseen kävi nopeasti selväksi miksi häviötön audiokoodaus on suhteellisen tehotonta verrattuna häviölliseen. Itse testausmenetelmä olisi ollut LZW-koodauksen osalta tehokkaampi, mikäli lähdekoodi olisi ollut valmiiksi käännetty. Tämä olisi onnistunut esimerkiksi C++ohjelmointikielellä, mutta se jäi tekemättä priorisoidessa ajankäyttöä ja tuntiessa LZWkoodauksen tehottomuuden audiosignaalien tapauksessa. Nykyään häviöttömän pakkauksen kysyntää heikentää oletettavasti tietoliikenneverkkojen tarjoamien kaistannopeuksien hitaus. Häviötön pakkaus jää vielä tämän vuoksi selkeästi häviöllisen jalkoihin.

18 LÄHTEET [1] American Standard Code for Information Interchange; nettisivut, Saatavilla osoitteesta: http://www.asciitable.com/ [2] FLAC, nettisivut: http://flac.sourceforge.net/index.html [3] Geelnard, M., Basic Compression Library Manual, API version 1.2, July 2006; Saatavilla osoitteessa: http://bcl.comli.eu/index.php?media=manual [4] Geelnard, M., Basic Compression Library Download, API version 1.2.0, Saatavilla osoitteesta: http://bcl.comli.eu/download-en.html [5] Hans, M., Schafer, R.W., Lossless Compression of Digital Audio, Signal Processing Magazine IEEE, Jul 2001; Rajoitettu saatavuus osoitteessa: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=939834&usertype= inst [6] Huffman, D.A., A Method for the Construction of Minimum-Redundancy Codes, Proceedings of the I.R.E., September 1952, pp 1098 1102; Saatavilla osoitteesta: http://compression.ru/download/articles/huff/huffman_1952_minimumredundancy-codes.pdf [7] Koppinen, K., SGN-4010 Puheenkäsittelyn menetelmät, luentomoniste, s. 53 60, Joulukuu 2006; Saatavilla osoitteesta: http://www.cs.tut.fi/kurssit/sgn-4010/sgn4010.pdf [8] Ladino, J. N., Data Compression Algorithms, nettisivut; Saatavilla osoitteesta: http://www.ccs.neu.edu/home/jnl22/oldsite/cshonor/jeff.html#huffman [9] Mynttinen, T., Entropiakoodaus, luentomoniste, Mikkelin Ammattikorkeakolu; Saatavilla osoitteesta: http://cna.mikkeliamk.fi/public/mynttinentimo/modulaatio ja koodaus/lähdekoodaus/entropiakoodaus.ppt [10] Nelson, M., LZW Data Compression, nettisivut; Saatavilla osoitteesta: http://marknelson.us/1989/10/01/lzw-data-compression/ [11] Reznik, Y.A., Coding of prediction residual in MPEG-4 standard for lossless audio coding (MPEG-4 ALS), IEEE Acoustics, Speech, and Signal Processing,

19 2004; Rajoitettu saatavuus osoitteessa: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1326722 [12] Ridinò, G., LZW Compression Algorithm, May 2004; Saatavilla osoitteesta: http://www.mathworks.com/matlabcentral/fileexchange/4899-lzwcompression-algorithm [13] Shannon, C. E., A Mathematical Theory of Communication, October 1948; Saatavilla osoitteesta: http://cm.bell-labs.com/cm/ms/what/shannonday/shannon1948.pdf [14] Welch, T.A., A Technique for High-Performance Data Compression, Computer, vol. 17, no. 6, pp. 8-19, June 1984; Rajoitettu saatavuus osoitteessa: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1659158 [15] Wikipedia, Free Lossless Audio Codec: http://en.wikipedia.org/wiki/free_lossless_audio_codec [16] Wikipedia, Golomb coding; http://en.wikipedia.org/wiki/golomb_coding [17] Wikipedia, Run length encoding; http://en.wikipedia.org/wiki/run-length_encoding [18] Wikipedia, Lempel-Ziv-Welch -encoding; http://en.wikipedia.org/wiki/lempel%e2%80%93ziv%e2%80%93welch#enc oding

LIITE 1 TESTITULOKSET Kappale Fs(Hz) Jakson pituus Enkoodausalgoritmit: (pakattu/alkuperäinen)*100 LZW Huffman Golomb- Rice FLAC Outkast - I'm Cool 16000 100,0 % 98,2 % 84,3 % 73,4 % 55,3 % Puhetta 22050 100,0 % 97,1 % 84,3 % 73,4 % 52,7 % 44100 100,0 % - 84,3 % 73,1 % 44,0 % Beastie Boys - Live At PJ's 16000 100,0 % - 95,0 % 87,8 % 75,0 % Rap/Funk 22050 100,0 % - 95,0 % 87,6 % 72,4 % 44100 100,0 % - 95,0 % 87,1 % 62,5 % The Roots - Mellow My Man 16000 100,0 % - 93,9 % 85,6 % 72,0 % Hip-Hop 22050 100,0 % - 93,9 % 85,4 % 70,0 % 44100 100,0 % - 93,9 % 85,0 % 62,2 % Chemical Brothers - Believe 16000 100,0 % - 97,3 % 92,2 % 79,6 % Electronic 22050 100,0 % - 97,3 % 92,1 % 76,8 % 44100 100,0 % - 97,3 % 91,7 % 65,9 % RATM - Bulls On Parade 16000 100,0 % - 96,1 % 90,0 % 82,3 % Hard Rock 22050 100,0 % - 96,1 % 89,9 % 80,1 % 44100 100,0 % - 96,1 % 89,7 % 68,8 % Pearl Jam - Go 16000 100,0 % - 97,3 % 92,4 % 82,2 % Rock 22050 100,0 % - 97,3 % 92,4 % 80,0 % 44100 100,0 % - 97,3 % 92,3 % 71,0 % Harmoninen aalto 16000 100,0 % 32,8 % 99,1 % 100,0 % 46,8 % sisältää taajuudet: 60Hz ja 6kHz 22050 100,0 % 27,3 % 98,8 % 100,0 % 46,7 % 44100 100,0 % 21,0 % 98,6 % 100,0 % 38,6 % Kohinainen aalto 16000 100,0 % 128,1 % 97,3 % 93,8 % 105,8 % satunnaisista arvoista koostuva signaali 22050 100,0 % 127,3 % 97,4 % 94,6 % 103,0 % 44100 100,0 % 122,2 % 97,5 % 95,0 % 98,8 % Hamoninen+Kohinainen 16000 100,0 % 134,4 % 98,8 % 96,9 % 103,9 % signaalit summattu yhteen 22050 100,0 % 130,7 % 98,8 % 97,3 % 99,4 % 44100 100,0 % 125,0 % 98,8 % 97,4 % 95,3 % Harmoninen ja Kohinainen 16000 100,0 % 85,9 % 99,2 % 98,6 % 72,0 % signaalit yhdistetty peräkkäin 22050 100,0 % 80,7 % 98,6 % 98,0 % 70,4 % 44100 100,0 % 73,6 % 98,6 % 97,9 % 66,4 % KESKIARVOT: 100,00 % 91,7 % 95,77 % 91,02 % 73,33 %