keskiviikko 7. toukokuuta 2014

Audiokompressio ja muita sovelluksia

Tänään käsiteltiin ensimmäisellä tunnilla prujun viimeinen kappale: audiokompressio. Audiokompression ideana on tallentaa äänisignaali häviöllisesti poistaen bittejä sieltä missä kuulo ei niitä havaitse. Tässä auttaa kuulon ominaisuuksien tuntemus, joista olennaisin osa on kuulokäyrä. Kuulo havaitsee matalia ja korkeitä ääniä heikommin kuin keskiääniä. Tämän vuoksi epätarkemmin havaittavat taajuudet voidaan esittää pienemmällä bittimäärällä.

Tässä yhteydessä on hyvä muistaa että jokainen poistettu bitti lisää kvantisointikohinaa kuudella desibelillä. Kysymys voidaan siis asettaa muotoon: "montako kuuden desibelin palikkaa kuulokäyrän alle mahtuu kullakin taajuudella". Lisätilaa kuuden desibelin palikoille saadaan havaitsemalla, että äänet peittävät heikompia ääniä alleen. Tässä tapauksessa siis itse kompressoitava signaali peittää näitä heikompia kuuden desibelin palikoita.

Luennolla nähtiin myös esimerkki siitä miltä tulosmaski saattaisi näyttää yksittäisen piippauksen ympäristössä. Jotta kuulomallia voitaisiin käyttää, täytyy signaali jakaa taajuuskaistoihin. Tämä tehdään kaistanpäästösuotimilla, ja kaistoja mp3-standardissa on 32. Kukin kaista voidaan alinäytteistää kertoimella 32, jolloin dataa on saman verran kuin alun perin. Nämä kaistat voidaan sitten kvantisoida kuulomallin mukaisesti. Palautettaessa alkuperäistä näytteenottotaajuutta riittää tehdä ylinäytteistys (nollien lisääminen) kertoimella 32, jolloin havaitaan, että aiemmin laskostunut signaali pomppaakin oikealle paikalleen ja vieläpä oikein päin --- siinäkin tapauksessa, että se olisi sattunut laskostumaan peilikuvakseen.

Toisella tunnilla oli "vierailuluento", jossa kerroin itse kahdesta data-analyysikilpailusta. Ensimmäinen järjestettiin viimevuotisen MLSP-konferenssin (Machine Learning for Signal Processing) yhteydessä, ja tavoitteena oli tunnistaa audiodatasta mitkä lintulajit laulavat kussakin ääninäytteessä. Käyttämämme menetelmä (sekä kilpailijoiden vastaavat) kuvataan kilpailun foorumilla.

Parhaillaan osallistumme BioMag-konferenssin yhteydessä järjestettävään MEG-signaalien analyysikilpailuun. Koehenkilöille on näytetty kasvoja ja ei-kasvoja satunnaisessa järjestyksessä, ja osallistujien on kehitettävä algoritmi ennustamaan aivomittauksista kumpi tapaus on kyseessä. Tämänhetkinen toteutus on tehty Pythonilla ja sen sklearn-paketilla. Koodin esittelyn yhteydessä keskusteltiin mm. ennustimen hyvyyden päättelystä ristiinvalidoinnin avulla. Joukkueeseen mahtuu mukaan, joten jos kiinnostuit, ota yhteyttä.

Edit 11.5: Tunnin lopuksi lupasin lisätä linkin laitoksella tehtyihin kanditöihin. Työt löytyvät täältä. Tunnus on sgnkandi ja salasana motiivi.