tiistai 18. joulukuuta 2012

Tentin ja välikokeiden tulokset

Tentti ja välikokeet on nyt tarkastettu. Tulokset olivat varsin hyviä, ja eritoten välikokeilla on saatu hyviä arvosanoja. Osin tämä johtuu siitä että toinen välikoe oli helpohko, minkä lisäksi sinne oli lipsahtanut sama 5a-tehtävä kuin ensimmäisessä välikokeessakin. Tästä huolimatta esimerkiksi välikokeen tehtävä 5b oli yhteinen tentin kanssa, ja se oli osattu paljon paremmin välikokeen puolella, joten välikokeen paremmat arvosanat ovat perusteltuja.

Kysymyspaperin kuutostehtävässä pyydettiin kommentteja kurssista kehittämistä varten. Palaute oli pääosin positiivista, ja siinä kiiteltiin luentoja, prujua sekä sovellushenkisyyttä. Kurssia kommentoitiin helpohkoksi ja kaivattiin siihen korkeampaa pakollisten harjoitusten määrää sekä esimerkiksi harjoitustyötä tukemaan itsenäistä osaamista. Myös kurssiblogia sekä viikkoharjoituksia kiiteltiin. Yksi palaute totesi luennoitsijan kehittyneen opettajana vuosia sitten suoritettuun kurssiin SGN-1201 verrattuna. Ilmeisesti siis TTY:n järjestämät pedagogiset opinnot (tai joku muu syy) ovat tehneet tehtävänsä.

Kurssi luennoitiin tässä muodossa toiseksi viimeistä kertaa. Laitoksen kurssit nimittäin organisoidaan uusiksi, ja kurssit SGN-1201 ja SGN-1251 sulautetaan uuteen laajempaan Signaalinkäsittelyn perusteet -kurssiin (5 op). Tästä huolimatta kommentit sekä tenttipapereiden kautta saatu palaute (mitkä asiat ovat vaikeita) on tärkeässä osassa kehitettäessä kurssin uutta versiota keväälle 2014. Kommentteja voi siis jättää Kaiku-järjestelmään tai vaikka tämän blogin kommenttikenttään.

keskiviikko 5. joulukuuta 2012

Vierailuluennot

Tänään kurssilla oli vierailuluentoja signaalinkäsittelyn teollisista sovelluksista:
Ensimmäisen vierailuluennon aiheena oli hänen kehittämänsä ja Ovelinin tuotteistama musiikin nuotinnusjärjestelmä. Menetelmä perustuu ns. Constant-Q-muunnokseenMenetelmän perustalle on toteutettu peli "WildChords", jossa akustisen kitaran avulla voidaan ohjata pelihahmoa. Innovatiivista pelissä on se, että pelatessaan oppii samalla soittamaan kitaraakin. Esityksessä tuli hienosti vastaan kurssilla aiemmin vastaan tulleita elementtejä: (ainakin) spektrin estimointi, audion koodaus sekä koneoppiminen.

Toisella tunnilla tutustuttiin Sandvikin poralaitteisiin, ja tehtiin mielenkiintoinen ekskursio teollisuustalouden periaatteisiin: miksi ja milloin tuotekehitystä tarvitaan. Lopuksi tarkasteltiin joitakin signaalinkäsittelyn sovelluksia liittyen porausprosessin hallintaan ja ymmärtämiseen, joissa kaikissa lähtötietona on joltain anturilta kerättävä häiriöinen mittaustieto.

keskiviikko 28. marraskuuta 2012

Epälineaarinen signaalinkäsittely

Päivän aihe oli epälineaarinen signaalinkäsittely, jonka lisäksi tutkailtiin varovasti signaalin ilmaisun sekä hypoteesin testauksen aihepiirejä. 

Epälineaariset suotimet saattavat tarjota vaihtoehdon lineaarisille suotimille (FIR ja IIR) silloin kun häiriö ja signaali sijaitsevat samalla taajuusalueella. Klassisin epälineaarinen suodin on mediaanisuodin, jonka ulostulo on suuruusjärjestyksessä keskimmäinen ikkunan sisällä olevista arvoista. Tätä vertailtiin prujun esimerkissä lineaarisen suotimen kanssa. Lopuksi tarkasteltiin vielä suotimen robustisuusmittoja, ja erityisesti murtumapistettä.

Toisen tunnin loppupuolella vilkaistiin ensi viikon harjoitustehtäviä 9.4 ja 9.5, joissa toteutetaan outlier-tunnistin:
  • x(n) on outlier, jos |x(n) - m| / s > 2,
missä m on signaalin keskiarvo ja s keskihajonta. Vastaavia algoritmeja on helppo keksiä, ja niiden vertailu onkin tärkeää. Tätä varten määriteltiin ns. true-positive-rate (TPR), joka kertoo kuinka suuri osa outliereistä löydettiin, ja ns. false-positive-rate (FPR), joka kertoo paljonko tuli vääriä hälytyksiä. Yhdessä nämä piirtävät ns. ROC-käyrän, jonka alle jäävä alue on yleisesti käytetty ilmaisimen hyvyysmitta.
Ilmaisun teoria (engl. detection theory) tarjoaa myös työkalut optimaalisen aaltomuodon tunnistimen suunnitteluun. Tästä nähtiin esimerkki, joka tunnistaa sinipulssit korrelaation kautta.

Aivan lopuksi tutustutiin yleisempään hypoteesin testaukseen. Tästä esimerkkinä oli tämän vuoden Ig-Nobel-palkinnon voittaja otsikolla Dead salmon brain scan. Jutussa oli havaittu satunnaisvaihtelusta johtuvaa aktiivisuutta kuolleen lohen aivoissa, ja vitsiä jatkettiin tieteelliseksi artikkeliksi asti (jossa lohi reagoi erilaisiin psykologisiin testeihin). Virheellisesti havaitun aktiivisuuden syynä on ns. multiple comparison testing-ongelma: kun tarpeeksi monta pikseliä verrataan kynnysarvoon, joku niistä sattuu ylittämään kynnyksen.

Signaaliprosessorit

21.11 olleella luennolla käsiteltiin kappale signaaliprosessoreista. Tärkeimmät syyt niiden käyttöön ovat yksinkertaisuus, halvempi hinta sekä pienempi virrankulutus. Kuitenkin niistä saa riittävästi tehoa signaalinkäsittelyn tarpeisiin, koska alan tarvitsemat operaatiot ovat nopeita (kertolasku, yhteenlasku). Esimerkiksi FIR-suodatuksen tarvitsemat kertolaskut ja yhteenlaskut voidaan suurelta osin laskea rinnakkain ns. MAC-operaation avulla. Vastaavia operaatioita on nykyisin myös tavallisissa prosessoreissa, ja ensimmäinen tällainen laajennus oli IntelinMMX-käskykanta vuodelta 1997.

Ensi viikon viikkoharjoituksissa koodataan FIR-suodin luokan TC303 signaaliprosessoreille. Olennaisimmat vaiheet olivat:
  1. Suodin suunniteltiin Matlabin fir1-rutiinilla.
  2. Kertoimet kopioitiin C-koodiin.
  3. C-kieliseen pohjaan kirjoitettiin for-silmukka, jossa kertoimet käydään läpi.
  4. Ulostulonäyte kirjoitetaan D/A-muuntimelle.
Vaiheessa 3 on kiinnitettävä huomiota circular buffering-tekniikkaan, jotta viitataan oikeisiin aiemmin sisään tulleisiin alkioihin.

keskiviikko 14. marraskuuta 2012

Audiokompressio

Tänään käsiteltiin kappale 7: 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.

keskiviikko 7. marraskuuta 2012

Tilastollinen signaalinkäsittely

Tänään luotiin katsaus tilastolliseen signaalinkäsittelyyn ja erityisesti parametrien estimointiin. Ideana on luoda malli signaalista, joka riippuu tietyistä parametreista. Ongelmana on tämän jälkeen kehittää menetelmä näiden parametrien valintaan mitatun datan perusteella. Esimerkkinä voisi olla signaali, jonka tiedetään olevan sinimuotoinen, mutta amplitudi, vaihe sekä taajuus eivät ole tiedossa. Tähän ongelmaan esitetään prujussa kaavat, joilla voidaan arvioida optimaalisesti (suurimman uskottavuuden mielessä) kohinaisesta datasta näitä kolmea parametria.

Seuraavaksi tutustuttiin tarkemmin pienimmän neliösumman menetelmään, joka valitsee parametrit minimoimalla neliövirheen datan ja mallin ennusteen välillä. Kaavana ilmaistuna, pyritään löytämään se vektori c joka minimoi lausekkeen sum((y-Hc)^2). Voidaan osoittaa, että tämä saadaan kätevästi kaavasta

c = (HT*H)-1 * HT * y.


Seuraavaksi vilkaistiin muutamaa esimerkkisovellusta:
  • Soft sensor, jossa ennustetaan jotain hankalasti mitattavaa suuretta useiden helppojen mutta epätarkkojen mittausten avulla
  • Mikroskooppikuvan valaistuksen epätasaisuuden poisto
  • Asuntojen hinnanmuodostus ja siihen vaikuttavat tekijät Tampereen keskustassa (tällä aineistolla)
Aivan luennon lopuksi tutustuttiin lyhyesti tapaukseen, jossa muuttujia on enemmän kuin näytteitä. Tällöin vektori c ei ole yksikäsitteinen, vaan useampi kerroinvektori tuottaa yhtä hyvän tuloksen. Tällaisissa tilanteissa valitaan tavallisesti lähimpänä origoa oleva c (siis se, jonka normi ||c|| on pienin). Vaihtoehtoisesti voidaan piirteenvalinnalla valita vain osa matriisin H sarakkeista, jolloin c tulee ennen pitkää taas yksikäsitteiseksi.

torstai 1. marraskuuta 2012

Oppivat järjestelmät

Tänään jatkettiin oppivien järjestelmien opiskelua. Ensimmäisen tunnin aluksi kuitenkin käytiin läpi ensimmäisen välikokeen kysymykset ja hahmoteltiin vastauksia niihin.

Tämän jälkeen muisteltiin edellisen viikon asioita lyhyesti, ja vilkaistiin mm. Matlab-demoa, jolla voidaan piirtää hiirellä projektiosuora kaksiulotteisen datan koordinaatistoon. Kun kaksi pistettä suoralta on merkitty, Matlab-skripti projisoi datan tälle suoralle ja piirtää tuloksena saatavien yksiulotteisten näytteiden jakauman sekä luokitteluprosentin. Hyvillä projektiosuorilla data oli täydellisesti luokiteltavissa, mutta huonoilla joukot menivät päällekkäin projisoinnin jälkeen. Fisherin lineaarinen erottelija laskee tämän suoran automaattisesti niin että erottelu on optimaalinen.

Seuraavaksi palautettiin mieleen tukivektorikone, ja tarkasteltiin lähemmin kernelitemppua. Kernelitemppu kuvaa näytteet korkeampiulotteiseen avaruuteen, jossa ne toivottavasti ovat paremmin eroteltavissa. Itse kuvausta ei kuitenkaan tarvitse käytännössä tehdä, vaan riittää korvata menetelmässä jokainen vektorien välinen sisätulo <x,y> jollain muulla funktiolla k(x,y). Tiettyjen reunaehtojen vallitessa voidaan osoittaa tämän olevan sama asia kuin kuvaus tíettyyn korkeampiulotteiseen avaruuteen ennen luokittelua. Periaatteessa tämä kyseinen kuvaus voidaan laskeakin, mutta yleensä se ei sinänsä ole kovin kiinnostavaa. Sen sijaan voidaan kokeilla erilaisia kerneleitä, ja katsoa millä niistä luokittelutulos on paras. Yleisesti käytettyjä kerneleitä ovat mm. polynomikernelit k(x,y) = (<x,y>)^n ja k(x,y) = (1 + <x,y>)^n sekä ns. RBF-kerneli k(x,y) = exp(-||x-y||).

Tukivektorikoneita vertailtiin lineaariseen luokittelijaan vaihteeksi Python-kielellä ja seuraavalla skriptillä. Jos haluat tutustua Pythoniin, kätevä Windows-asennuspaketti löytyy täältä.

 # Diagnosis of ovarian cancer with several classifiers  
   
 import numpy as np  
 from sklearn import svm  
 from sklearn import cross_validation  
   
 # Read the data  
   
 filename = "ovariancancer.csv"  
   
 X = np.genfromtxt(filename, delimiter=',', skip_header = 0, dtype = np.float)  
 y = X[:,0]  
 X = X[:,1:]  
   
 # Set a range for the parameters of the classifier  
   
 pars = 10.0**(np.arange(-1,7))  
 res = np.empty(np.shape(pars))  
 kernel = 'rbf'  
   
 # Select regularization parameter  
 for i, C in enumerate(pars):  
     
   print "C = " + str(C)  
     
   classifier = svm.SVC(degree=2,C=C,kernel=kernel)  
   scores = cross_validation.cross_val_score(classifier, X, y, cv=5)     
       
   print "Accuracy: %0.2f %% (+/- %0.5f)" % (100*scores.mean(), scores.std() / 2)  
   print ""  
   
   res[i] = scores.mean()  
     
 minidx = res.argmax()  
 C = pars[minidx]  
   
 classifier = svm.SVC(C=C, kernel=kernel)  
       
 model = classifier.fit(X,y)  
   
 print "Score with param %f for all data: %f." % (C, model.score(X,y))  
   

Tämän jälkeen paneuduttiin hermoverkkojen opetukseen, ja mainittiin lyhyesti opetusalgoritmin perustuvan derivaattaan ja ketjusääntöön. Näiden avulla voidaan päätellä suunta, jossa luokitteluvirhe pienenee jyrkimmin, ja kyseiset kaavat löytyvät esim. täältä. Perus- backpropagationin lisäksi on olemassa kehittyneempiä ja nopeampia opetusalgoritmeja, ja esim. Matlabissa niitä on lähes parikymmentä. Olennaisin ero algoritmien välillä on niiden nopeudessa ja muistin tarpeessa.

Luennolla ei otettu kantaa siihen miten järjestelmä löytää verkolle syötettävät merkit, mutta joitain yleisimpiä ratkaisuja kuvaillaan wikipedian feature detection -artikkelissa. Luennon lopuksi demottiin tamperelaisen Visy Oy:n kehittämää rekisterikilven tunnistusohjelmistoa, joka on käytössä mm. raja-asemilla, satamissa ja tehtaissa ympäri maailmaa.


keskiviikko 24. lokakuuta 2012

Oppivat järjestelmät

Tänään käytiin läpi kappaleen 5 alku, nimeltään Oppivat järjestelmät.

Oppivien järjestelmien ideana on esittää järjestelmälle näytteitä ja opettaa se tuottamaan oikea ulostulo kun sille esitetään opetusjoukkoon kuulumaton uusi näyte. Yksi oppivien järjestelmien osajoukko ovat luokittelijat, jossa ulostulo kertoo luokan johon esitetty näyte kuuluu.
Ensimmäisellä tunnilla aihetta pohjustettiin esimerkeillä viimeaikaisista hahmontunnistuskilpailuista: Lisäksi vilkaistiin Kaggle.com-alustaa, johon vastaavia kilpailuja ilmestyy säännöllisesti. Toisella tunnilla tutustuttiin teoriaan. Suosittuja luokittelualgoritmeja ovat ainakin seuraavat (kasvavan monimutkaisuuden järjestyksessä):
Näistä kolme ensimmäistä käsiteltiin luennolla. KNN on ideana yksinkertaisin: kaikki opetusdata pidetään muistissa ja uuden näytteen tullessa etsitään k samanlaisinta näytettä, ja valitaan näistä yleisin luokka. Tyypillisesti k on vajaan kymmenen luokkaa, mutta voi olla suurempikin; esim. 30. Mitä suurempi k on, sitä sileämpi luokkarajasta tulee. Vaikka KNN:n luokittelutulos onkin melko hyvä, on sen ongelmana suuri muistin tarve sekä laskennallinen kompleksisuus. Koko opetusjoukko täytyy nimittäin säilyttää muistissa, josta etsitään k lähintä naapuria jokaisen luokittelun yhteydessä. Sekä tilantarve että etsinnän vaatima aika voivat olla ongelmallisia jos opetusjoukossa on esim. 100000 alkiota.

Luentomonisteen seuraava menetelmä on LDA. Ennen sitä pruju esittelee yksinkertaisemman version samasta ideasta, jossa raja piirretään luokkien keskipisteiden puoliväliin. Tämä ei kuitenkaan toimi, jos luokat ovat "limittäin". Näin päädytäänkin LDA:han, joka ottaa limittäisyyden huomioon.

LDA:ta parempi tulos saadaan (yleensä) käyttämällä SVM:ää. SVM:n ominaisuutena on luokkien välisen marginaalin maksimointi. Tästä on iloa eritoten, jos data on korkeaulotteista. Lisäksi se tarjoaa paremman vaihtoehdon haluttaessa käyttää ns.kernelitemppua, joka kuvaa datan keinotekoisesti korkeampiulotteiseen avaruuteen. Korkeampiulotteisessa avaruudessa on enemmän tilaa, ja siellä on tyypillisesti helpompi löytää lineaarinen päätöspinta joukkojen väliin. Dataa ei konkreettisesti tarvitse kuitenkaan kuvata toiseen avaruuteen, koska kernelitemppu tekee saman yksinkertaisesti korvaamalla kaikki sisätulot sopivalla kernel-funktiolla.

SVM on ollut suosituin luokittelualgoritmi tällä vuosikymmenellä, koska se ei ole herkkä ylioppimisilmiölle. Lisäksi suosion syynä on sen yksinkertainen ja laskennallisesti tehokas toteutus, mutta mukana lienee myös hypeä liittyen optimointialgoritmin syvälliseen matematiikkaan jonka vain harva ymmärtää kunnolla.

keskiviikko 10. lokakuuta 2012

Adaptiivinen suodatus

Tänään käsiteltiin monisteen kappale 4: adaptiivinen suodatus. Adaptiivisten suodinten ideana on oppia suotimen kertoimet tilanteen mukaan. Perusrakenne vaatii aina kaksi signaalia: referenssisignaalin sekä kohdesignaalin. Adaptiivinen suodin pyrkii saamaan referenssin ja suodatetun kohdesignaalin mahdollisimman lähelle toisiaan. Termi mahdollisimman lähelle määritellään täsmällisesti kustannusfunktion avulla, joka on erotuksen neliön odotusarvo. Tällöinhän täytyy enää löytää adaptiiviselle suotimelle ne kertoimet, jotka minimoivat kustannusfunktion.

Adaptiivisen suodatuksen toinen puoli on keksiä mikä olisi referenssisignaali ja mikä kohdesignaali. Toimintaperiaatteensa mukaan AS pyrkii suodattamaan kohdesignaalin niin, että se on mahdollisimman identtinen kopio referenssisignaalista (tai jostain sen osasta). Kohinanpoiston yhteydessä tilanne on yleensä sellainen, että kohdesignaali sisältää pelkkää häiriötä ja referenssi häiriön sekä etsittävän hyötysignaalin. Yksinkertaistettuna AS siis tekee vähennyslaskun:

tulos = referenssi - kohde

eli

tulos = (häiriö + hyöty) - häiriö

Koska y.o. kaavan termi häiriö ei ole sama referenssissä ja kohteessa (esim. viiveet, vaimennukset jne.), täytyy väliin heittää suodatin F:

tulos = (häiriö + hyöty) - F(häiriö),

joka muuntaa kaksi häiriökomponenttia identtisiksi.

Häiriönpoiston ja muiden sovellusesimerkkien lisäksi esiteltiin mm. esimerkki kaiunkumouksesta, sikiön sydänääntentunnistuksesta sekä yleisestä häiriönpoistosta jotka voi ratkaista adaptiivisilla suotimilla. Todettiin myös että iPhone 4:ssa on 2 mikrofonia puheäänen selkeyttämiseksi adaptiivisen suotimen avulla.

Kappaleessa 4.5 etsitään optimiratkaisu w, joka saadaan kun kohde ja referenssi on kiinnitetty. Tulos esitetäänautokorrelaatiomatriisin R ja ristikorrelaatiovektorin p avulla. Käytännön tilanteissa näiden estimointi on kuitenkin hankalaa, joten optimiratkaisun sijaan käytetään iteratiivista algoritmia, joka parantaa painokertoimia sitä mukaan kun uutta dataa tulee. LMS-algoritmi etenee aina kustannusfunktion hetkellisen gradientin suuntaan (miinusmerkkisenä). Hyppäyksen pituus määräytyy parametrin mu mukaan, jonka suuruusluokan valitsemista tarkasteltiin luennon lopuksi.

D/A-muunnos ja näytteenottotaajuuden muuntelu

Tänään (3.10.2012) käytiin kappale 3 loppuun. Aloitimme kappaleen 3.5.1 menetelmällä, jota käytettiin jo ensimmäisissä CD-soittimissa 1980-luvun alussa. Menetelmän tarkastelu aloitettiin jo keskiviikkona, ja ideana oli tehostaa nollannen asteen pitopiirin toimintaa nostamalla näytteenottotaajuus korkeammaksi ennen pitopiiriä. Tämä näkyy aikatasossa s. 36 porraskuvion hienontumisena ja tätä kautta pitopiirin virheen pienenemisenä jä siirtymisenä korkeammille taajuuksille. Taajuustasossa yli 22,05 hertsin taajuuksille tulee vastaavia heijastuksia kuin interpoloinnin yhteydessäkin. Erona on, että nyt heijastumat vaimenevat sitä enemmän mitä korkeammalle mennään. Digitaalinen interpolointi helpottaa näiden heijastusten poistamista: ilman digitaalista interpolointia tarvittavan analogisen suotimen siirtymäkaistan leveys olisi 2,05 kHz, kun esim. nelinkertaisella interpoloinnilla se saadaan yli 130 kHz:n levyiseksi.

Toinen, nykyisin yleisempi ratkaisu yksinkertaistaa analogiapuolta edelleen kvantisoimalla D/A-muunnettavan signaalin 1-bittiseksi (etupaneelissa saattaa lukea 1 bit D/A conversion, tms.). Ratkaisusta käytetään nimeäkohinanmuokkaus, englanniksi noise shaping tai sigma delta modulation. Kvantisointi onnistuu äänenlaatua heikentämättä, kun nostetaan näytteenottotaajuus ensin riittävän suureksi. Tällöin näytteiden suuri määrä kompensoi niiden heikkoa tarkkuutta. Pelkkä ylinäytteistys ei kuitenkaan vielä riitä: ilman muita temppuja näytteenottotaajuus pitäisi nostaa jopa miljardikertaiseksi, mikä ei käytännössä ole mahdollista. Siksi täytyy ottaa käyttöön sivun 39 lohkokaavion mukainen takaisinkytkentä, joka aiheuttaa kvantisointivirheen siirtymisen korkeammille taajuuksille. Siellähän kohina ei haittaa, koska se voidaan erottaa hyötysignaalista analogisella alipäästösuodatuksella D/A-muunnoksen jälkeen. Jäljelle jäävän kvantisointikohinan määrä voidaan laskea, ja havaitaan että suuruusluokassa 1500 oleva muunnoskerroin riittää (miljardien sijaan). Ratkaisua voidaan edelleen tehostaa tarkastelemalla korkeampiasteisia kohinanmuokkaimia, jotka siirtävät vieläkin tehokkaammin kvantisointikohinaa korkeammalle.

Jotkin audioformaatit kuten Super Audio CD tallentavat äänen suoraan yksibittisenä. Tästä on etuna se, että kohinanmuokkaus täytyy tehdä vain kerran äänitysstudiossa eikä jokaisessa kuluttajalaitteessa erikseen.

keskiviikko 26. syyskuuta 2012

Näytteenottotaajuuden muuntelu

Tänään luennoilla käsiteltiin alku kappaleesta "näytteenottotaajuuden muuntelu". Kappale tarkastelee menetelmiä, joilla voidaan muuntaa näytteenottotaajuus näytteistämisen jälkeen toiseksi. Perusoperaatiot ovat desimointi ja interpolointi, jotka toimivat kokonaislukukertoimilla. Näitä yhdistelemällä saadaan kaikki rationaalikertoimet. Molemmat operaatiot tarvitsevat alipäästösuodattimen, joka on yleensä FIR, ja suunnitellaan normaaleilla menetelmillä. Suotimen siirtymäkaistasta todettiin, että se laitetaan aina rajataajuuden alapuolelle. Näin signaaliin tulee vähemmän virhettä kuin jos laskostumista pääsisi tapahtumaan.

Desimoinnissa tapahtuva näytteenottotaajuuden pieneminen toteutetaan yksinkertaisesti jättämällä näytteitä pois tasaisin väliajoin. Esimerkiksi kertoimella kolme jätetään vain joka kolmas näyte jäljelle. Tämä kuitenkin aiheuttaa laskostumista, koska signaalin sisältämät taajuudet pysyvät samoina mutta näytteenottotaajuus pienenee. Tämä saadaan luonnollisesti estettyä suodattamalla signaali ennen alinäytteistämistä sopivalla alipäästösuotimella.

Desimoinnilla todettiin olevan suora yhteys esim. peleissä käytettäviin antialias-suotimiin. Tällöinkin kyse on samasta ongelmasta kuin audiosignaalin näytteistämisessä: kuinka äärettömän tarkasta vektoriesityksestä (esim. objekti "pallo", jonka keskipiste on (100,100) ja säde r=10) päästään äärelliseen resoluutioon (esim. 1024 x 768 resoluutioinen näyttö) ilman rosoisia reunoja ja muita laskostumisilmiöitä. Suoraan näytteistämällä kuvaan tulee laskostumisefekti, ja parempi tulos saadaankin poistamalla liian korkeat taajuudet ennen näytteistystä. Ongelmana on kuitenkin, ettei digitaalisille objekteille ole "analogista" suodinta. Tämän vuoksi kuva usein renderöidäänkin väliresoluutiolle (esim. 2x tai 4x lopullinen resoluutio) ja annetaan kuvan laskostua. Laskostunut kuva voidaan kuitenkin desimoida edelleen lopulliselle taajuudelle antialias-suotimen kera, jolloin laskostumiset tulevat vain korkeammalla väliresoluutiolla, eivätkä toivottavasti haittaa yhtä paljon.

Interpolointi puolestaan koostuu nollien lisäämisestä sekä tämän operaation tuottamien roskien poistamisesta. Nollien lisääminenhän tuottaa kopioita ja peilikuvia alkuperäisestä spektristä, jotka voidaan myös poistaa kätevästi alipäästösuodatuksella.

Kappaleessa luodaan myös katsaus interpoloinnin ja desimoinnin yhdistämiseen, jolloin päästään yksinkertaisempaan rakenteeseen huomaamalla kokonaisuudessa olevan kaksi suodatinta peräkkäin, jotka molemmat poistavat tietyn kaistan ylätaajuuksilta. Näin ollen vain toinen niistä on tarpeellinen. Piirtämällä kuva näiden suodinten amplitudivasteista voidaan päätellä kumpi on tarpeeton (aina se, jota vastaava muunnoskerroin on isompi).

Luennon loppupuolella vilkaistiin lyhyesti D/A-muunnoksen toteutusta. Tarkasteltavana oli kaksi ratkaisua, joista kappaleen ensimmäinen on vanhempi, ja oli käytössä esim. ensimmäisissä CD-soittimissa (etupaneelissa saattoi olla teksti 4 times oversampling tms.). Tällöin D/A-muunnos tehdään ns. nollannen asteen pitopiirillä, joka tuo signaaliin häiriöitä korkeille taajuuksille. Nämä voidaan poistaa analogisella alipäästösuotimella, mutta ongelmaksi tulee kapea siirtymäkaista (20kHz - 22,05 kHz). Analogiapuolta voidaan yksinkertaistaa siirtämällä osa toiminnallisuudesta digitaaliseksi, eli interpoloimalla signaali digitaalisesti ennen D/A-muunnosta.

keskiviikko 19. syyskuuta 2012


Tämän päivän luennon aiheena oli signaalin taajuusjakauman laskenta mahdollisimman tarkasti. Tarkkuutta tarvitaan eritoten signaalianalyysissä, jossa taajuussisällön perusteella tehdään johtopäätöksiä esimerkiksi potilaan taudin laadusta. Jakauman laskenta eli spektrin estimointi onnistuu toki normaalilla diskreetillä Fourier-muunnoksella, mutta ei tuota täysin oikeaa tulosta, jos signaalin taajuuskomponenttien jaksot eivät ole samat kuin tarkasteluikkunan pituus. Prujussa on esimerkki tilanteesta, jossa signaalin taajuus osuu juuri kahden muunnoskomponentin väliin, jolloin energia jakautuu lähellä oleville taajuuskomponenteille.

Ongelmaan on kaksi ratkaisua. Tehospektriä voidaan estimoida joko autokorrelaation kautta tai suoraan FFT:llä. Molemmat ovat likimääräisiä menetelmiä: edellinen katkaisee autokorrelaatiofunktion ja jälkimmäinen itse signaalin. Sovelluksesta sitten riippuu kumpi on haitallisempaa. Yleisesti ottaen autokorrelaatiomenetelmä on parempi satunnaisille signaaleille (esim. soinniton äänne 's' tai 'f') ja FFT deterministisille signaaleille (soinnillinen äänne: 'a', 'e'). Prujussa keskitytään FFT:n ongelmien kanssa painimiseen.

FFT:n ongelmia voidaan lähestyä kahdesta suunnasta: ensimmäinen ratkaisu on käyttää pidempää ikkunaa, jolloin kaytettävissä olevien taajuuskomponenttien määräkin kasvaa. Joissain tilanteissa pituutta ei kuitenkaan voida määrättömästi kasvattaa esim. seuraavista syistä:
  • Mittaus on hidasta tai kallista. Esimerkiksi laitoksen systeemibiologian ryhmä tarkastelee eri organismien geenien aktiivisuutta ns. microarraymenetelmällä. Vaikka mittausten hinta onkin laskenut rajusti viime vuosina, saattaa jokainen aikasarjan näyte maksaa edelleenkin tuhansia euroja. Tutkittaessa esimerkiksi eri geenien toiminnan jaksollisuutta solusyklin aikana täytyy jaksollisuuden eli taajuuksien analyysin toimia luotettavasti hyvinkin pienellä näytemäärällä.
  • Sovellus ei salli viivettä spektrin estimoinnissa, ja suuren näytemäärän kerääminen vie aikaa. Esimerkiksi moottorin tai työkoneen toiminnan optimaalisuuden tarkastelu saattaa vaatia jaksollisuuden tarkastelua vaikkapa käynnin tasaisuuden arvioinnissa. Jotta saatua tietoa voitaisiin käyttää tehokkaasti säädön apuna, täytyy viiveen olla melko lyhyt.
  • Laskenta-aika on rajallinen. Reaaliaikaisissa sovelluksissa, joissa laskentakapasiteettia ei voida lisätä rajatta, täytyy ottaa huomioon menetelmän laskennallinen kompleksisuus. Fourier-muunnoksen laskenta on kompleksisuudeltaan O(n2), eli pituuden tuplaus nostaa laskennan määrän nelinkertaiseksi. Vaikka käytettäisiinkin alempana mainittua nollien lisäystä, voidaan näistä aiheutuva pituuden lisäys optimoida osin pois laskennasta.
Spektriin saadaan lisää taajuuskomponentteja lisäämällä näytteitä keinotekoisesti. Pienimmät sivuvaikutukset saadaan kun lisätään signaalin loppuun nollia. Tämä auttaa esimerkiksi prujun kuvien mukaisesti löytämään voimakkaimman taajuuden, joka 16 pisteellä suoraan ei löytyisi.

Sivuvaikutuksena nollien lisäämisellä on spektriin ilmestyvät komponentit jota ei todellisuudessa ole. Luennolla todettiin, että yksittäisen taajuuden tapauksessa Fourier-muunnos näyttääkin ikkunan Fourier-muunnoksen siirrettynä oikeaan paikkaan. Käytettävät ikkunat ovat samoja kuin suodinsuunnittelun yhteydessäkin, ja niiden avulla voidaan poistaa spektrin sivukeiloja (lisää ikkunoita harrisin artikkelista). Sivukeilojen poistumisen sivuvaikutuksena pääkeila kuitenkin leviää, joten ikkunan valinta on aina kompromissi samalla lailla kuin suodinsuunnittelussakin. Ikkunoiden vertailun helpottamiseksi niille voidaan laskea kuvaavia tunnuslukuja, joita on taulukoitu prujussa.

Varsinaisen prujun asian lisäksi demottiin oskilloskooppia, jossa on myös spektriestimointi-toiminto. Havaittiin, että käytetyssä mallissa on mahdollista valita joko suorakulmainen ikkuna tai Hanning-ikkuna.

keskiviikko 12. syyskuuta 2012


Äärellinen sananpituus


 Tämän päivän luennolla käsiteltiin (uuden monisteen version) kappale 1, jossa tarkastellaan äärellisen sananpituuden vaikutuksia. Meidän tarkastelussamme nämä ilmenevät A/D-muunnoksen yhteydessä sekä suodatettaessa äärellisellä laskentatarkkuudella. Pääpaino on ensimmäisessä tyypissä. Luennolla käsiteltiin näytteistyksessä käytettävät kvantisointitasot: esimerkiksi (1+7) bitin esityksessä käytettävissä ovat seuraavat 256 tasoa: -128/128, -127/128, ..., 0, ..., 126/128, 127/128. 


Pyöristettäessä lähimpään lukuun syntyvä kvantisointivirhe on aina välillä -1/256...1/256. Yleisesti pyöristys (1+b) bittiin aiheuttaa enintään virheen 2^(-b) / 2 suuntaan tai toiseen. Vasemmalla olevassa kuvassa on esimerkkitapaus jossa "seiska" kvantisoidaan 1+9 bittiin. Alimmassa olevasta virhesignaalista nähdään että kaikki pyöristysvirheet tietyllä välillä vaikuttavat yhtä todennäköisiltä. 

Alempana olevassa kuvassa on lisäksi piirretty virhesignaalin taajuusjakauma sekä lukuarvojen jakauma. Molemmat jakaumat näyttävät tasaisilta.

Seuraavaksi tätä yksinkertaista virhemallia käytettiin johdettaessa arvio virheen varianssille, joka on suoraan verrannollinen syntyvän kvantisointivirheen tehoon. Tätä kautta määritellään SNR, eli signaali-kohinasuhde, eli häiriöetäisyys. Tämä suure kertoo jotain äänenlaadusta, ja saatavia tuloksia tullaan tarvitsemaan kappaleessa 6, kun päätellään montako bittiä signaalista uskalletaan poistaa kompressiossa ilman äänenlaadun havaittavaa heikkenemistä.

Jos ehtojen oletetaan olevan voimassa, voidaan osoittaa kohinan odotusarvon olevan nolla ja varianssin yhtä kuin 2^(-2b) / 12.

Yllä olevaa kaavaa voidaan edelleen jalostaa signaali-kohinasuhteen käsitteeksi (SNR), joka kertoo signaalin tehon suhteessa kohinan tehoon. Kun kaavaa pyöriteltiin, havaittiin jokaisen ylimääräisen bitin (per näyte) nostavan SNR:ää kuudella bitillä.

Lopuksi johdettiin kaava varianssille suodatuksen jälkeen ja sekä tutkittiin suotimen kertoimien pyöristämisen vaikutusta. Tämähän täytyy tehdä aina kun suodin toteutetaan huonomman tarkkuuden alustalla kuin Matlab (esim. tällä 17-bitin DSP:llä).

Luennon lopuksi kuulin että POP:issa olevat harkkaryhmät eivät ole samat kuin kurssin kotisivulla. Tarkoitus oli luoda torstaille kolme ryhmää ajalle 10-16, mutta ne ovatkin POP:issa ajalla 12-18. Torstaina 13.9 pyritään pitämään kaikki 4 ryhmää ajalla 10-18.

keskiviikko 5. syyskuuta 2012


Ensimmäisen luennon aluksi esiteltiin kurssin sisältö, läpäisyvaatimukset ym. normaalin käytännön mukaiset asiat, muisteltiin FIR- ja IIR-suodatuksen perusteita sekä tutkittiin Matlabin valmiita IIR-suodattimen suunnittelumenetelmiä.

Tässä yhteydessä tarkasteltiin ns. pole-zero-placement -suunnittelumenetelmää, jossa hiirellä sijoiteltiin napoja ja nollia yksikköympyrälle ja laskettiin näitä vastaava suodin. Alla olevassa kuvassa on eräs näin saatu napanollakuvio, jossa tavoitellaan alipäästösuodinta. Tätä vastaava amplitudivaste on seuraavassa kuvassa, jossa selvästi erottuu hyppäys ylös- tai alaspäin jokaisen lähellä kehää olevan navan tai nollan kohdalla. Alimmassa kuvassa on vielä esitetty siirtofunktion itseisarvo |H(z)|, josta saadaan keskimmäinen amplitudivasteen |H(exp(iw))| kuvaaja sijoittamalla exp(iw) lausekkeessa z:n tilalle.


Edellä kuvattu menetelmä ei luonnollisestikaan ole kovin tarkka. Toisen tunnin aihe olikin täsmällisempi IIR-suodinten suunnittelu, joka käytiin melko yleisellä Matlab-komentojen osaamisen tasolla. Kappaleen ydin on koottu monisteen taulukkoon, jossa suodintyyppejä vertaillaan amplitudivasteen ominaisuuksien ja kertoimien määrän suhteen. Kertoimia tarvitaan eri menetelmillä 29+28, 13+12 ja 8+7 kappaletta. Suurin määrä tulee Butterworth-suotimella ja pienin elliptisellä suotimella. Kahden Chebyshev-suotimen kerroinmäärä on näiden kahden ääripään välissä. Vertailun vuoksi FIR-suotimen kertoimien määrä vastaavilla vaatimuksilla olisi N = [5.5/0.035] = 159 käytettäessä Blackman-ikkunaa.

Muita luennolla esiin tulleita seikkoja olivat mm.

  • Matlabin kerroinvektorit a ja b eivät ole suoraan käytettävissä ulostulon y(n) laskennassa, vaan takaisinkytkentäkertoimien (siis esim. termin y(n-1) kertoimen) merkki täytyy vaihtaa vastakkaiseksi.
  • Elliptisellä suotimella on aina vähemmän kertoimia kuin muilla. Lisäksi tasavärähtely-ominaisuus on yleensä hyvä asia.
IIR-suotimen etuna on siis pienempi kertoimien tarve. Haittapuolina mahdollinen epästabiilisuus sekä numeeriset ongelmat toteutuksessa. Tästä esimerkkinä mainittiin kurssin SGN-1600 signaaliprosessorityö, jossa täytyy toteuttaa IIR-suodin. Käytännössä yli toisen asteen IIR-suodinta ei voi toteuttaa numeeristen ongelmien vuoksi. Sen sijaan suodin täytyy jakaa peräkkäisiin toisen asteen lohkoihin esim. Matlabin TF2SOS-funktiolla.

Luennon jälkeen kysyttiin voisiko monisteen PDF-version suojausta purkaa. Alunperin tiedosto suojattiin ettei siitä voisi suoraan kopioida pätkiä esim. opinnäytetöihin, mutta suojaus estää myös muistiinpanojen tekemisen suoraan PDF:ään. Suojauksen voi purkaa salasanalla "kkj56edsafU".
Kurssiblogi luotu. Blogin tarkoituksena on kirjata ylös kunkin luennon tärkeimmät asiat sekä tallentaa luennolla esillä olleita linkkejä ja kuvia opiskelijoiden saataville.