mp3 audiopakkaus

26.11.1998

Sami Vaarala
Ti 3
Teknillinen Korkeakoulu
Sami.Vaarala@hut.fi

Tiivistelmä

mp3-audiopakkaus (tunnettu myös nimellä MPEG-1 Audio Layer III) on kehitetty pakkaamaan ääntä ihmisen kuuloaistille epäoleellista informaatiota karsien. Pakkaus perustuu syötelohkojen muuntamiseen taajuustasoon, jossa taajuuskaistat kvantisoidaan vaihtelevalla bittimäärällä. Psykoakustisen mallin avulla arvioidaan kuulokynnys eri taajuuskaistoilla, ja yritetään minimoida havaittu kvantisointikohina malliin perustuen. mp3:lla päästäänkin käytännössä jopa 12:1 pakkaussuhteeseen ilman kuultavaa häiriötä CD-ääntä pakatessa.


1. Yleistä tiedon pakkaamisesta

1.1. Mitä pakkaus on?

Tiedon pakkaamisella tarkoitetaan datalle tehtävää muunnosta, jossa jokin datasyöte muunnetaan pakattuun muotoon (joka on toivottavasti pienempi kuin alkuperäinen muoto). Purkualgoritmilla saadaan muunnetusta muodosta takaisin alkuperäinen data. Pakkauksen toimivuus perustuu siihen, että data sisältää redundanssia, ts. datassa on jotain ennustettavia piirteitä, joihin voidaan pakkausalgoritmissa tarttua.

Perinteisesti pakkausalgoritmit ovat olleet suhteellisen tyhmiä: ei olla otettu suuresti kantaa datan sisältöön, vaan ollaan kehitetty algoritmeja, jotka toimivat mahdollisimman hyvin melko yleisin oletuksin. Yleisesti mitä suurempia oletuksia tehdään datasta, jolle algoritmin tulisi toimia tehokkaasti, sen parempia pakkaussuhteita voidaan saavuttaa. Vielä suurempia pakkaussuhteita voidaan saavuttaa jos otetaan kantaa datan käyttöön, eli mikä datassa on oleellista ja mikä epäoleellista, ja sallitaan pakkausalgoritmin tuhota informaatiota pakkauksessa. Esimerkiksi kuvan pakkauksessa ei ihmiselle ole tärkeää saada jokainen pikseli tarkalleen oikein, kunhan kuva "näyttää" hyvältä katsojalle. Toisaalta jos kuvadataa käytetään tieteellisiin tarkoituksiin, voivat ihmiselle näkymättömät virheet kuvassa olla haitallisia -- täytyy siis miettiä mikä on tietyn pakkaustavan käyttötarkoitus.

1.2. Muutamia yleiskäyttöisiä peruspakkaustapoja

Hyvin naiivi algoritmi on run-length encoding, jossa bittijono tulkitaan koostuvaksi jonkinkokoisista elementeistä (esim. tavu, kuvan pikselit RGB-muodossa, tms). Mikäli datassa esiintyy sama elementti toistuvasti, pakattuun dataan merkitään toistumien määrä ja toistunut elementti, jolloin säästetään tilaa. Tämä lähestymistapa toimii erittäin hyvin esim. kokonaan pakkaamattomassa mustavalkoisessa kuvadatassa, mutta esim. toistuvissa kuvioissa (rasteroitu mustavalkoinen kuva) toimii erittäin huonosti.

Sanakirjapohjaiset pakkaukset (LZW) perustuvat siihen, että sekä pakkaaja ja purkaja keräävät ns. sanakirjaa algoritmin aikana, jolloin pakatussa datassa voidaan viitata aiemmin esiintyneeseen kuvioon. Datassa esiintyvät säännönmukaisuudet (toistuvuudet) voidaan ilmaista tehokkaasti, olivatpa toistuvuudet yksinkertaisia (sama toistuva alkio) tai monimutkaisempia (toistuva alkiojoukko). LZW ja sen johdannaiset ovat melko yksinkertaisia toteuttaa ja kohtuullisen tehokkaita, käytössä esim. GIF-formaatissa.

1.3. Häviölliset algoritmit (lossy algorithms)

Suurempia pakkaustehoja halutessa on yleisesti ottaen pakko tyytyä algoritmeihin, joista käytetään nimitystä lossy (häviöllinen). Perusideana on tällöin se, että mietitään tarkemmin datan käyttötarkoitusta: jos tarkoituksena äänenpakkaukselle on se, että sitä kuuntelee ihmiskuuntelija kotilaitteista, ei ole välttämättä järkevää pyrkiä täydellisyyteen, koska kuuntelija ei kuitenkaan huomaisi eroa. Voidaan siis harkitusti hävittää informaatiota syötteestä, jolloin pakkausalgoritmilla on huomattavasti enemmän mahdollisuuksia tuloksen suhteen.

Useimmat nykyajan tehokkaat algoritmit perustuvat häviölliseen pakkaukseen. Esimerkkinä jpeg-kuvanpakkaus, joka karsii kuvasta "pieniä" taajuuskomponentteja, joita katsoja ei välttämättä huomaisi hyvin. jpeg ei kuitenkaan toimi kovin hyvin esim. skannatuissa tekstisivuissa, koska se on tarkoitettu lähinnä "luonnollisten" kuvien pakkaukseen (maisemat yms). mpeg video-pakkaus on myös häviöllinen, ja perustuu edellisten (ja itseasiassa myös seuraavien) kuvien sisältämän kuvatiedon "kierrättämiseen" vakiokokoisia lohkoja siirrellen ja korjaillen.

Yhteistä näille algoritmeille on selkeä käyttöorientoituneisuus; mietitään mitä käyttöä varten algoritmit tehdään, ja optimoidaan pakkaus kohdekäytölle. Tällöin voidaan käyttää hyväksi erikoisalueen ominaisuuksia (esim. ihmisen aistien rajoituksia) ja hävittää alkuperäisestä datasta informaatiota. Tällaisilla algoritmeilla saavutetaan huikeita pakkaussuhteita, esimerkiksi juuri mp3:lla saavutetaan 10...12:1 pakkaussuhde 44.1kHz stereoäänessä, jonka näytteet ovat 16-bittisiä (CD-ääni), kuulijan eroa juuri huomaamatta. Tietokoneella tehdyn taajuusanalyysin kannalta mp3-ääni voi toisaalta olla hyvinkin huonoa verrattuna alkuperäiseen.

2. mp3-pakkaus

mp3 pakkaus, toisella nimellään MPEG-1 Audio Layer III, on äänen pakkausformaatti, jonka pääasiallinen tarkoitus on ihmiskuunteluun tarkoitetun äänen pakkaaminen, käyttäen hyväksi ihmisen kuuloaistin erikoisominaisuuksia. MPEG-1 puolestaan on ISO:n MPEG-ryhmän (Moving Picture Experts Group) audiovisuaalisia pakkausmenetelmiä sisältävä standardi, kuten myös MPEG-2 ja MPEG-4 (mp3 on siis täysin eri asia kuin MPEG-3, joka oli alunperin HDTV:tä varten kehitetty standardijoukko joka keskeytettiin koska vaatimukset saatiin täytettyä MPEG-2:sen avulla). [1]

MPEG-1 Audio Layer I, II ja III ovat MPEG-1:ssä määritellyt kolme äänenpakkausformaattia, jotka ovat jonkinlaisessa hierarkiassa toisiinsa nähden, mp1:sen ollessa pakkausteholtaan huonoin mutta helpoin toteuttaa, ja mp3 puolestaan hankalin toteuttaa mutta pakkausteholtaan paras. Yleisesti ottaen on helppo tehdä tuki mp1:lle ja mp2:lle mp3-dekooderiin, koska ne käyttävät samoja algoritmeja, mutta tämä ei ole sinänsä itsestäänselvää. Siirryttäessä mp1:stä mp3:een kasvaa vaadittu prosessointiteho (sekä koodaamiseen että dekoodaamiseen), dekoodausviive sekä pakkausteho. Seuraavassa on karkeat arviot pakkaustehosta CD-tasoiselle äänelle (44.1 kHz, 16 bit, stereo), jonka vaatima datavirta on karkeasti 1.4Mbps: [1]

Erikoista mp3:ssa on se, että vain dekooderi ja datan formaatti on määritelty standardissa. Enkooderia ei speksata, jolloin niitä varten voidaan kehittää monia erilaisia algoritmeja eri tarpeita varten, kunhan algoritmin tuottama tulos pysyy standardin asettaman formaatissä. Samaa periaatetta on käytetty myös MPEG videopakkauksessa. [1]

2.1. Perusajatukset

CD-tasoinen ääni vaatii n. 1.4Mbps datavirran, mikä on selvästi liikaa. Miten ääntä voitaisiin pakata järkevästi? Yksi tapa olisi kaventaa taajuusaluetta (ts. karsia signaalista valitun taajuusalueen ulkopuolinen informaatio). Tällainen pakkaus on kuitenkin selvästi kuultavaa (CD:n taajuusalueessa on hieman "ilmaa"--ei kuitenkaan riittävästi järkeviin pakkaussuhteisiin). Toinen tapa olisi karsia kvantisointitasoja yksittäisille näytteille--16 bittiä antaa n. 90dB signal-to-noise-ration, mikä on useissa tilanteissa "liian hyvä" ihmiskuulon kannalta.

Tämä perusajatus yhdistettynä ihmiskuulon heikkouksien mallintamiseen on MPEG-1 Audio pakkausmenetelmien pohja. mp3:n käyttämää pakkausta kuvatessa käytetään usein termejä "perceptual noise shaping" ja "perceptual subband/transform coding", jotka merkitsevät karkeasti sitä, että jaotellaan syötesignaali taajuuskaistoihin, ja arvioidaan kuinka paljon kohinaa kullekin kaistalle voidaan laittaa (ns. psykoakustinen malli) ilman että kuulija huomaa mitään. Tämän jälkeen yritetään minimoida kuuluva häiriö suhteessa tuotettuun datamäärään "muotoilemalla kohina" optimaalisesti kanaville, käyttäen hyväksi aiemmin arvioitua kuuluvan kohinan rajaa.

Tässä vaiheessa on vielä hyvä huomauttaa, että tässä esitetty kuvaus mp3-pakkaamisesta ei ole missään nimessä standardi: kyseessä on vain erään, hyväksi havaitun, menetelmän kuvausta puuttumatta tarkasti toteutuksen yksityiskohtiin. Toisaalta pelkän dekooderin ja tiedostoformaatin tarkasteleminen ei olisi kovin järkevää, sillä siitä ei selviäisi mp3:n vahvuudet. Enkoodausprosessiinkaan ei kovin tarkasti mennä, sillä se on varsin tekninen (etenkin mp3:n kohdalla).

2.2. Taajuuskaistoihin jako

Hyvin useat nykyajan pakkausalgoritmit perustuvat johonkin yleiseen transformaatioon, joka syötteelle voidaan tehdä. Pakkausalgoritmi voi toimia transformoidun informaation kanssa, jonka jälkeen purkualgoritmi käänteistransformoi tiedon saadakseen alkuperäisen (tai lähellä alkuperäistä olevan) informaation. Tämän lähestymistavan hyöty perustuu siihen, että transformoidusta muodosta on usein helpompi havaita säännönmukaisuuksia sekä käyttötarkoitusta ajatellen (esim. ihmiskuulo) merkityksettömiä osia. Esimerkiksi jpeg-kuvapakkauksessa kuvasta otettuja lohkoja muunnetaan taajuustasoon, jonka jälkeen taajuustason pieniamplitudisia komponentteja pudotetaan pois pakatusta signaalista.

mp1:ssa ja mp2:ssa jaetaan signaalin ihmiselle tärkeä kaista (20Hz...20kHz [2]) 32 tasalevyiseen taajuuskaistaan. Syöte ajetaan ns. filterbankin läpi, jossa jokaista taajuuskaistaa varten on oma kaistanpäästösuodin (bandpass filter), joka päästää läpi vain kaistaan kuuluvan osan signaalista [1]. Jokaista saatua kaistaa voidaan tämän jälkeen käsitellä erikseen. mp3:ssa taajuusjako on 18 kertaa tarkempi (jokainen alkuperäisestä 32 kaistasta jaetaan vielä 18 osaan). [1]

Taajuusanalyysi tehdään (yleensä) vakiomittaisissa lohkoissa, joka on mp1:ssä 8ms ja mp2:ssa sekä mp3:ssa 24ms. mp3:ssa voidaan tietyissä signaalin ongelmakohdissa käyttää lyhyempiä lohkoja (4ms) (tästä lisää myöhemmin). [1]

2.3. Psykoakustinen malli

mp3-enkooderin yksi tärkeimmistä osista on psykoakustinen malli. Tämän mallin avulla voidaan arvioida missä "tilassa" ihmisen kuuloaisti on tietyssä kohtaa syötesignaalia. Malli voi esimerkiksi arvioida kutakin analyysissä käytettävää taajuusaluetta kohti kuuluvan signaalin minimitehon. Seuraavaksi on muutamia esimerkkejä mihin ominaisuuksiin kuuloaistissa voidaan tarttua mp3 enkooderia tehdessä:

Ns. "masking effect". Jos taajuudella 1000Hz on 60dB ääni, ei esimerkiksi 40dB ääni kuulu jos sen taajuus on lähellä 1000Hz:a. Kovempi ääni on siis "maskannut" heikomman. Mitä lähemmäksi 1000Hz:ä mennään, sitä suurempi tarvitsee toisen äänen olla, jotta se erottuisi kuulijalle 60dB 1000Hz:n äänen kanssa yhtaikaa. Lisäksi masking effect tapahtuu myös ajallisesti, eli lujan äänen jälkeen on jopa 100ms ajan huonompi herkkyys äänille (sekä ajan että taajuuden suhteen). Myös lujaa ääntä ennen tapahtuu maskausta, tosin tämä aika on vain n. 2...5ms (johtunee aivojen kuuloaistiin liittyvän prosessoinnin hitaudesta). [3]

Äänen suunnan havainnointi huononee matalilla taajuuksilla, joten stereoääntä pakatessa voidaan taajuuskaistan alaosissa yhdistää oikea ja vasen kanava. Tämä vaatii tukea myös pakkausformaatilta, ja mp3 tukeekin tätä.

Psykoakustisia malleja kehitellään edelleen. Pakatun äänen laatu (laatu suhteessa kokoon) riippuu hyvin paljon psykoakustinen mallin tarkkuudesta. Ongelmana malleja muodostettaessa on se, ettei niitä voida arvioida tarkasti, vaan joudutaan käyttämään testikuulijoita ja heidän antamiaan arvosanoja. Lisäksi eri kuuntelijoilla on pieniä eroja kuuloaistin herkkyydessa, jolloin tietylle ihmisjoukolle voitaisiin ääntä pakata reilummin.

2.4. Taajuuskaistojen kvantisointi

Psykoakustisen mallin antamien tietojen perusteella mp3 enkooderi tietää jokaisesta analysoitavasta taajuuskaistasta mikä on sen tämänhetkinen juuri kuultavan äänen raja (siis myös maksimiamplitudi kuulumattomalle kohinalle). Tämän tiedon perusteella enkooderi yrittää varata bittejä eri kaistojen koodaukselle; mikäli 4 bittiä riittää tietylle kaistalle siten että aiheutuvaa kvantisointikohinaa ei kuule, voidaan käyttää 16 bitin sijasta 4:ää. [1]

Aina ei tietenkään voida saavuttaa kaikkia tavoitteita, vaan enkooderin pitää valita miten kohina jaetaan kanaville. Sen tehtävä on siis periaattessa valita sellainen kohinan muoto, joka on vähiten häiritsevä (tästä tulee termi "noise shaping").

mp3 käyttää lisäksi häviötöntä pakkausta tuotettuun bittivirtaan. Käytössä on Huffman-pakkaus. [6]

2.5. Joint stereo

Kuten aiemmin mainittu, mp3 voi yhdistellä stereoäänestä taajuuskanavia, koska kuuloaisti ei havaitse stereoefektiä matalilla taajuuksilla tarkasti. Yhdistetyn kanavan lisäksi laitetaan pakattuun dataan mukaan minimaalista äänen suuntaustietoa, jolloin oleellinen osa stereoefektistä säilyy kuulijalle. [6]

2.6. vaihteleva lohkokoko

Vakiokokoisista lohkoista (24ms) johtuen voi äkillisessä äänen amplitudin vaihdoskohdassa esiintyä "ennakkokohinaa", sillä psykoakustinen mallin avulla tehty arviointi kattaa koko lohkon (jolloin lohkon loppuosan suuri amplitudi aiheuttaa sen että analyysi ei päde kovin hyvin alkuosalle). Tätä puutetta voidaan parantaa useilla tavoilla:

Tämä valinta on tietysti vain enkooderin ongelma.

3. Hyviä ja huonoja puolia

Hyviä puolia:

Huonoja puolia:

4. Kaupallinen tilanne

mp3 on kaupalliselta ja teolliselta kannalta erittäin mielenkiintoinen ja kysymyksiä herättävä tekniikka. Mielipiteet tuntuvat jakautuvan kahtia: toisten mielestä mp3 on hyväksi esimerkiksi ääniteteollisuudelle, kun taas toisten mielestä sen mahdollistama piratismi on suuri uhka.

Seuraavassa muutamia huomioita kaupallisesta tilanteesta:

5. Tulevaisuudennäkymät

mp3 ei varmaankaan standardina tule kehittymään juurikaan edelleen, koska enkoodausta ei koskaan olla standardoitu. Sen sijaan enkooderialgoritmit tulevat varmaankin nopeutumaan ja paranemaan laadullisesti vielä jonkin aikaa, vaikkakaan kovin suuria parannuksia ei luultavasti ole tulossa.

Suunnitteilla on myös tapa levittää mp3-ääntä kontrolloidusti (MMP, Multimedia Protection Protocol). Perusajatus on kryptata osa mp3-datasta ja sisällyttää streamiin tietoa laillisesta omistajasta (ts. kuka saa kuunnella tämän mp3-tiedoston). Turvallisella MMP:n ymmärtävällä mp3-dekooderilla voidaan sitten soittaa kyseinen tiedosto. [5]. Ongelmana koko ideassa on se, että se perustuu "turvalliseen" MMP-soittimeen joka dekryptaa mp3-datan vain sisällään. Vähänkin päättäväiselle ohjelmoijalle ei ole suurikaan asia onkia mp3-data dekooderin sisältä, tai ainakin saada purettu äänidata talteen. Täydelliseen turvallisuuteen ei pyritäkään, lähinnä tekemään suojauksen kiertäminen kannattamattomaksi [5]. Tämä on minusta outo väite, sillä ei tarvita kuin yksi suojauksen kiertotapa, jota sitten levitetään ympäri maailmaa. Lisäksi suojatun MMP:tä ymmärtävän mp3-dekooderin tarve on hankaloittava tekijä, ja turhaan estää dekooderien kehittymistä (sellaisen dekooderin lähdekoodi ei tietysti voisi olla vapaata).

mp3:n seuraajaksi voisi sanoa mp4:ää (MPEG-2 AAC), joka parantaa äänenlaatua mp3:sta edelleen. Väitetään että sillä päästään 16:1 suhteeseen samalla laadulla kuin mp3:lla. mp4:ssä on uusittu osia algoritmeista, mutta perusidea on edelleen sama. Uutuutena on myös tuki useammille signaaleille (1...48 äänikanavaa), joilla voidaan pakata esim. viiden kanavan surround ääni. [7]

6. Lähteet

[1] Anon., MPEG Layer-3 (MP3), [viitattu 24.9.1998]
http://misug.csom.umn.edu/classof98/person/apark/compress.htm
[2] Anon., MPEG Informations, Questions and Answers, [viitattu 24.9.1998]
http://www.crs4.it/~luigi/MPEG/mpegfaq2.html
[3] Anon., Audio Compression, [viitattu 24.9.1998]
http://fas.sfu.ca/cs/undergrad/CourseMaterials/CMPT479/material/notes/Chap4/Chap4.3/Chap4.3.html
[4] Maciej Stachowiak, MPEG Layer 3 and Software Patents, [viitattu 24.9.1998]
http://slashdot.org/features/980412118226.shtml
[5] Fraunhofer IIS, Protection of Content Related Intellectual Property Rights (IPR), [viitattu 24.9.1998]
http://www.iis.fhg.de/amm/techinf/ipmp/mmp.html
[6] MP3' Tech, MP3' Tech, [viitattu 24.9.1998]
http://freeflight.cockpit.be/mp3tech/-1.html
[7] Fraunhofer IIS, MPEG-2 AAC, 7.9.1998
http://www.iis.fhg.de/amm/techinf/aac/-1.html

7. Lisätietoja

http://www.iis.fhg.de/amm/techinf/ipmp/water.html
Fraunhofer IIS, Watermarking - What is it all about?

http://www.iis.fhg.de/amm/techinf/aac/aacfaq/-1.html
Fraunhofer IIS, MPEG-2 AAC FAQ

http://www.iis.fhg.de/amm/techinf/layer3/-1.html
Fraunhofer IIS, MPEG Audio Layer-3

http://www.otolith.com/pub/u/howitt/sbc.tutorial.html
Wil Howitt, Sub-Band Coding

http://www.hip.atr.co.jp/~eaw/minidisc/MaskingPaper.html
Masking and Perceptual Coding

http://www.joshie.com/faq.htm
Fraunhofer-IIS, MP3 Frequently Asked Questions about MPEG Layer 3

http://www.iis.fhg.de/amm/techinf/layer3/layer3faq/-1.html
Fraunhofer-Gesellschaft, Fraunhofer IIS - Layer-3 FAQ

http://www.mp3.com/news/098.html
Justin Couch, How Open of a Standard is MP3?

http://www.cs.tut.fi/~ypsilon/80545/CodingOfAS.html
Jari Yli-Hietanen, Coding of audio signals

http://drogo.cselt.stet.it/mpeg/faq/faq_mpeg-1.htm
ISO, faq mpeg-1

http://dv.go.dlr.de:8081/info/faqs/graphics/MPEGFAQ41.html
PHADE Software, MPEG video/audio compression (FAQ)

http://www.math.jyu.fi/docs/kurssit/ohjelmistotekniikka/audioformaatit/
Jan-Markus Holm, Audioformaatit, versio 2.0, Tietotekniikan Cum Laude-harjoitustyö, Jyväskylän yliopisto, Matematiikan laitos

http://www.iocon.com/resource/docs/ps/mpegaud.ps
Davis Pan, A Tutorial on MPEG/Audio Compression

http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps
Th. Sporer & Kh. Brandenburg & B. Edler, The use of multirate Filter banks for coding of high quality digital audio

http://www.mp3.org/
Zco Inc., MP3.com - The MP3 resource on the Internet

http://www.mpeg.org/
MPEGTv, MPEG . ORG - MPEG Pointers and Resources

http://www.cs.tut.fi/~ypsilon/80545/links/links.html
Jari Yli-Hietanen, Links