keskiviikko 8. toukokuuta 2013

Kuvankäsittelyä ja kanditöitä

Tänään paneuduttiin kappaleeseen 6, joka tarkastelee kuvankäsittelyä. Alkuosa koostuu enimmäkseen yksiulotteisten lineaaristen järjestelmien yleistyksestä kahteen ulottuvuuteen. Fourier-muunnoksen yhteydessä todettiin, että kaksiulotteinen tapaus voidaan toteuttaa kahden yksiulotteisen FFT:n avulla, mikä mahdollistaa nopean laskennan.

Tämän jälkeen tarkasteltiin dekonvoluutiota, eli konvoluution käänteistä operaatiota. Monisteen esimerkin lisäksi esimerkkinä mainittiin Hubble-avaruusteleskoopin varhainen ongelma, joka aiheutti kuvaan jonkin verran epätarkkuutta. Ennen kuin kiertoradalle päästiin korjaamaan linssi kuntoon, täytyi linssin virhe mallintaa konvoluution avulla. Varhaisia kuvia myös korjattiin dekonvoloimalla virheelliset kuvat. Linssi kuitenkin lopulta vaihdettiin, koska dekonvoluutio ei voi tuottaa yhtä täydellistä tulosta kuin fyysinen korjaus. Tämä johtuu siitä, että PSF ei koskaan ole täysin oikea, vaan siinä on numeerista epätarkkuutta. Lisäksi informaatiota saattaa kadota konvoluution yhteydessä, jos taajuustason funktiossa H(n,m) on nollia kertoimina.

Kappaleessa 6 on myös esimerkki liike-epätarkkuuden korjauksesta. Tästä aiheesta on myös vastikään ollut hieno julkaisu hieno julkaisu SIGGRAPH-konferenssissa.

Lopuksi vilkaistiin laitoksen kanditöiden arkistoa (tunnus: sgnkandi, salasana: motiivi).

maanantai 29. huhtikuuta 2013

Suodinsuunnittelua ja rekisterikilven tunnistusta

Ensimmäisellä tunnilla opiskeltiin suodinsuunnittelua. Jos tiedetään haluttu taajuusvaste, voidaan sitä vastaava impulssivaste ratkaista käänteisellä diskreettiaikaisella Fourier-muunnoksella (jos integraali vaan saadaan ratkeamaan). Valmiit ratkaisut annetaan prujussa neljälle vastetyypille: alipäästö-, ylipäästö-, kaistanpäästö-, sekä kaistanestosuotimelle. Näistähän tosin voidaan kolme viimeistä järkeillä pelkän alipäästösuotimen avulla. Esimerkiksi ylipäästösuodin on mahdollista esittää identiteettisuotimen ja alipäästösuotimen avulla:

hyli(n) = delta(n) - hali(n)

tai toisin sanoen

(korkeat taajuudet) = (kaikki taajuudet) - (matalat taajuudet).

Ideaalisen suotimen impulssivasteen pituus on ääretön, eikä sitä voi käytännössä toteuttaa. Näin ollen impulssivaste on katkaistava, mistä seuraa vääristymä amplitudivasteeseen. Matlab-testeillä havaittiin, että tätä ei voi kompensoida esim. kertoimia lisäämällä, vaan on käytettävä ikkunaa joka pehmentää katkaisun vaikutusta. Ikkunoita on lueteltu esim. sivun 84 taulukossa, ja mitä paremmat vaimennusominaisuudet niillä on, sitä leveämpi siirtymakaistasta tulee. Onneksi tätä voidaan kuitenkin kompensoida kertoimia lisäämällä.

Luennon lopuksi käytiin taululla esimerkki ikkunamenetelmän käytöstä vuoden 2011 toukokuun tentissä. 

Luentomonisteessa on noin puolen pisteen arvoinen virhe sivulla 87. Tuon sivun tehtävässä N = 53, mutta sivun keskellä olevassa impulssivasteen ht(n) kaavassa on mystinen luku 85. Tämän kuuluisi olla 53.

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. huhtikuuta 2013

Suotimen analyysi

Tänään käytiin kappale 4 loppuun, sekä kappaleen alku pintapuolisesti.

Kappaleessa 4 pääosassa olivat IIR-suotimen siirtofunktion laskenta "näppärästi" sekä stabiilisuusehto. Molemmat asiat käsiteltiin ratkaisemalla taululla tentin 05/2011 tehtävä 3. Tehtävässä ratkaistaan ensin siirtofunktio H(z) yhtälöstä

y(n) = -1/2y(n-1) -1/8y(n-2)  + x(n) - 2x(n-1) + x(n-2)

Prujun esimerkkien mukaisesti tästä voidaan ratkaista H(z):

H(z) = (z^2 - 2z + 1) / (z^2 +1/2z + 1/8).

Tästä voidaan ratkaista osoittajan ja nimittäjän nollakohdat, joista saadaan oheisen kuvan kaltainen napa-nollakuvio (komento Matlabissa: zplane([1, -2, 1], [1, 1/2, 1/8])).
Yo. kuvasta voidaan päätellä suotimen olevan stabiili (miten?)

Toisella tunnilla tarkasteltiin suotimen suunnittelua annetuista kriteereistä lähtien. Suunnittelukriteerit ovat kahtalaiset: suotimen taajuusvasteen määräämiseksi pitää tietää millainen vaihevaste halutaan ja millainen amplitudivaste halutaan.

Vaihevasteen osalta vaaditaan että kaikkien taajuuksien tulee viivästyä yhtä paljon. Tämä toteutuu jos vaihevaste on lineaarinen. Yksinkertaisimmissa tapauksissa vaihevasteen lauseke voi olla siis esimerkiksi muotoa -2w, joka taatusti on lineaarinen. Matlabissa tällainen kuvaaja saadaan esim. komennoilla:

>> [H,W] = freqz([1, 1, 1]);
>> plot(H);
>> grid on

Freqz-funktiosta saa siis ulos taajuusvastefunktion arvoja vektorissa H. Vektorissa on lueteltu taajuusvasteen kompleksiset lukuarvon 512:ssa pisteessä taajuusakselilla. 

Vaihevasteen derivaatasta käyteään nimeä ryhmäviive, ja se ilmaisee suoraan eri taajuuksille tulevan viiveen näytteinä (miinusmerkkisenä). Lopuksi todettiin, että vaihevaste on aina lineaarinen, jos impulssivasteen termit ovat symmetrisesti keskipisteen suhteen.

Amplitudivaste täytyisi saada päästökaistalla ykköseksi ja estokaistalla nollaksi. Käytännössä tämä ei ole mahdollista, vaan suotimelle täytyy antaa hieman toleranssia ja sallia tietty määrä värähtelyä molemmilla kaistoilla. Lisäksi kaistojen väliin täytyy sallia "don't care" -alue, jossa amplitudivaste saa olla mitä vain.

Prujussa ratkaistaan mikä impulssivaste toteuttaisi ideaalisen amplitudivasteen (arvot vain nollaa tai ykköstä). Osoittautuu että impulssivasteen muoto on tuttu sinc-funktio, mutta sen pituus on ääretön. Tämän vuoksi suotimesta ei saataisi ainuttakaan vastearvoa koskaan, vaan laskentaa tarvittaisiin äärettömän paljon.

Tästä ongelmasta päästään katkaisemalla impulssivaste, mutta tämä luonnollisesti vaikuttaa amplitudivasteeseen. Todettiin, että suoralla katkaisulla ei estokaistan värähtelyä saada millään alle n. 21 desibelin, ja päästökaistallakin suurin heitto on luokkaa 0.7 dB. Ratkaisu tähän on käyttää ikkunointia, eli kertoa katkaistu impulssivaste jollain ikkunafunktiolla. Näin voidaan päästä parempiin vaimennusominaisuuksiin.

keskiviikko 17. huhtikuuta 2013

Z-muunnos, napa-nollakuvio sekä taajuusvaste

Tänään käsiteltiin kappaletta 4. Tämän ja viime viikon tavoite oli siis oppia analysoimaan annetun suotimen toiminta. Ensi viikolla käännetään ongelma toisin päin ja siirrytään suotimen synteesiin: kuinka suunnitellaan suotimen impulssivaste niin että se täyttää annetut taajuusvaatimukset.

Kaikki lähtee liikkeelle konvoluution ja z-muunnoksen yhteydestä: konvoluutio muuttuu kertolaskuksi z-muunnoksessa. Jos siis suodatus noudattaa yhtälöä

y(n) = h(n) * x(n),

on sama yhtälö voimassa myös z-tasossa:

Y(z) = H(zX(z)

Tällöin impulssivasteen h(n) muunnoksen tuloksesta käytetään nimeä siirtofunktio. Siirtofunktio on rationaalifunktio, jonka osoittajassa ja nimittäjässä on polynomi. Kun tämä lauseke tiedetään, saadaan Fourier-muunnos sijoittamalla z = exp(iw), jolloin herätteen ja vasteen välinen suhde muuttuu muotoon: 

Y(exp(iw)) = H(exp(iw)X(exp(iw))

(eli vasteen taajuudet = taajuusvaste * herätteen taajuudet).

Lauseke H(exp(iw)) on siis nimeltään taajuusvaste, ja siihen menee sisään reaaliluku w (taajuus josta ollaan kiinnostuneita), ja ulos tulee kompleksiluku. Tämän kompleksiluvun itseisarvo kertoo kuinka suuri vahvistus suotimella on kyseisellä taajuudella.

Suotimen analyysi käytiin läpi monisteen kaavan (4.3) suotimella. Ensin siitä selvitetään impulssivaste, sitten siirtofunktio ja lopuksi taajuusvaste. Taajuusvaste on kompleksifunktio, joten sitä ei voida sellaisenaan piirtää 2-ulotteiseen koordinaatistoon. Näin ollen piirretään kaksi kuvaajaa: funktion itseisarvon kuvaaja sekä sen vaihekulman kuvaaja. Näistä edellinen kertoo kuinka paljon eri taajuuksien amplitudit muuttuvat suodatuksessa ja jälkimmäinen paljonko ne viivästyvät suodatuksessa. Amplitudivaste on näistä mielenkiintoisempi, koska sen avulla taajuuksia saadaan esim. poistettua yksinkertaisesti huolehtimalla että amplitudivaste ko. taajuudella on nolla.Vaihevaste puolestaan kertoo paljonko eri taajuudet viivästyvät suodatettaessa.

Amplitudivastetta tarkasteltaessa on kätevämpi käyttää desibeliasteikkoa, joka on logaritminen. Logaritmi tekee kertolaskusta yhteenlaskua, ja korostaa lähellä nollaa olevia eroja, jotka molemmat ovat meille käteviä ominaisuuksia.

keskiviikko 10. huhtikuuta 2013

FFT ja sen sovelluksia

Tänään tarkasteltiin Fourier muunnoksen ominaisuuksia, sovelluksia sekä nopeaa toteutusta.

Luennon aluksi esiteltiin alkeellinen menetelmä puheen tunnistukseen. Kirjan Elements of statistical learning kappaleessa 5.2.3 opetetaan tietokone erottelemaan kaksi vokaalia niiden Fourier-muunnosten perusteella. Menetelmä on nimeltään logistinen regressio, joka monimutkaisista kaavoista huolimatta on varsin yksinkertainen toteuttaa: menetelmä etsii kertoimet kullekin Fourier-muunnoksen taajuudelle, ja laskee tulokset yhteen. Jos luku on positiivinen, tulkitaan äänne ä-kirjaimeksi, muutoin a-kirjaimeksi. 

Esimerkki kuvaa hyvin tämän päivän signaalinkäsittelyalgoritmia: perusmenetelmiä (Fourier-muunnos, konvoluutio, jne.) käytetään piirregeneraattoreina, jotka tuottavat hieman parempaa raakadataa kuin suora mittaussignaali (esim. taajuustietoa eikä raakaa mittausdataa). Laskettujen piirteiden perusteella sitten nostetaan tiedon abstraktiotasoa edelleen. Esimerkiksi äänteen tunnistuksessa hierarkia on esimerkiksi seuraava:

48000 aikatason näytettä -> 256 taajuustason kerrointa -> 1 bitti, joka kertoo kumpi äänne on kyseessä

Toisena esimerkkinä mainitsin tamperelaisen Visy Oy:n, jossa olen työskennellyt kymmenisen vuotta sitten automaattisen rekisterikilven tunnistuksen parissa. Tässäkin suuresta määrästä matalan tason pikselitietoa päätellään pieni määrä sovellukselle olennaista tietoa (merkkijono ABC-123).

Tämän jälkeen siirryttiin tarkastelemaan Fourier-muunnoksen ominaisuuksia. Ominaisuuksista tutustuttiin lähemmin siirtoon ajassa (esim. laske signaalin x(n+20) muunnos, kun tiedetään x(n):n muunnos) sekä konvoluution muunnokseen (DFT muuntaa konvoluution kertolaskuksi, eli x(n)*y(n) -> X(n)Y(n)). Tämä on perustana mm. dekonvoluutiolle joka on konvoluutiolle käänteinen operaatio. Menetelmää käytettiin mm. Hubble-teleskoopin alkuaikoina, jolloin yhdessä peilissä olleen hiontavirheen vuoksikuvat olivat sumuisia. Kuvantamisprosessia voidaan nimittäin mallintaa (kaksilulotteisella) konvoluutiolla

y(n,m) = h(n,m) * x(n,m),

missä x on todellinen näkymä, y on havaittu sumuinen kuva, ja h on linssin impulssivaste (nk. point spread function; PSF). Yhtälössä y ja h ovat tunnettuja, ja tehtävänä on ratkaista x. Ratkaisu löytyy taajuustasossa, koska

Y(n,m) = H(n,mX(n,m),

joten (Matlabin syntaksilla ilmaistuna):

x(n,m) = ifft (Y(n,m) ./ H(n,m)).

Toisena esimerkkinä mainittiin kappaleen 6 esimerkki kameran liikkeen aiheuttamasta epäterävyydestä, ja havaittiin terävyyden paranevan yksinkertaisellakin dekonvoluutiolla (arvaamalla).

Dekonvoluutiosta on hyötyä yleisemminkin lineaarisen kanavan aiheuttaman häiriön poistossa. Jos tiedetään signaalin x kulkeneen kanavan h läpi, voidaan vastaanotetusta mittaustuloksesta ypäätellä x, jos meillä on joku käsitys kanavasta h. Esimerkkinä tästä mainittiin langattoman tiedonsiirtokanavan estimointi ja sen aiheuttaman vääristymän kompensointi.

Toinen menetelmän tuottama etu on että Fourier-muunnoksen (käytännössä FFT:n) avulla voidaan laskea konvoluutio kaavasta (Matlabin syntaksilla ilmaistuna):

conv(x,y) = ifft(fft(x) .* fft(y))

Luennon lopuksi käsiteltiin nopeaa Fourier-muunnosta eli FFT:tä, joka on vain nopeampi tapa toteuttaa diskreetti Fourier-muunnos (DFT). FFT perustuu signaalin jakamiseen lyhyempiin pätkiin, jotka muunnetaan jakamalla ne edelleen rekursiivisesti kahtia. Rekursio päättyy, kun muunnoksen pituus on 1, jolloin muunnosta ei tarvitse enää tehdä. 1-ulotteisen vektorin tapauksessa muunnosmatriisi on yksinkertaisesti F = [1], joka tarkoittaa pelkkää ykkösellä kertomista eikä sitä tarvitse tehdä. Lyhyemmistä vektoreista saadaan koostettua pidemmät vektorit kaavoilla (3.3) ja (3.4).

keskiviikko 27. maaliskuuta 2013

Fourier-muunnos

Luennon aluksi käsiteltiin kappale 2 loppuun. Tällöin tutustuttiin konvoluution ominaisuuksiin (laskentasäännöt: a(b+c) = ab+ac, kausaalisuuden ja stabiilisuuden tunnistus impulssivasteesta, jne.). Konvoluution ominaisuuksien käsittelyn yhteydessä tuotiin esille niiden yhteys LTI-järjestelmien yhdistämiseen: peräkkäiset tai rinnakkaiset LTI-järjestelmät voidaan esittää yhtenä järjestelmänä ja toisaalta niiden järjestys ei vaikuta lopputulokseen.

Kappaleen lopussa määriteltiin FIR- ja IIR-suotimet LTI-järjestelmien alalajeina. FIR-suotimet ovat yksinkertaisuutensa vuoksi laajemmin käytettyjä, mutta IIR-suodinten ilmaisuvoima ja laskennallinen tehokkuus tekevät niistä hyödyllisiä useissa tilanteissa.

Testikysymys: onko seuraava suodin FIR vai IIR?

y(n) = 0.9 y(n-1) - y(n-2) + x(n) + 0.5 x(n-1) +2 x(n-2)

Haastavampaa on selvittää esim. se, onko yo. suodin stabiili. Tähän ratkaisu löytyy prujun sivulta 68, johon pääsemme aikanaan.

Toisella tunnilla päästiin kappaleeseen 3: Fourier-muunnos. Olennaisin asia käsitteli muunnoksen ideaa alla olevan kuvan mukaisesti. Fourier-muunnoksen idea on kysyä paljonko eri taajuuksia annetussa signaalissa on. Taululla oli alla olevan piirroksen kaltainen kuva. Kuvan "yhtälössä" vasemmalla oleva signaalin pätkä jaetaan eri taajuuksiin kysymällä paljonko tarvitaan vakiotaajuutta (0.3 kpl), paljonko kerran värähtävää siniä (0.6 kpl), jne. Sama idea on kaikkien neljän muunnostyypin takana, mutta erona on montako eri taajuutta tarvitaan muodostamaan alkuperäinen signaali. Joissain tapauksissa niitä tarvitaan äärettömän paljon, jolloin kuvan summan sijaan tarvitaan integraali.

Jatkuvat tapaukset perustuvat siis integraalin laskentaan, ja käytännössä tämä täytyy tehdä muunnostaulukoiden avulla.

Käsin laskettavien kolmen ensimmäisen muunnostyypin jälkeen tutustuttiin lopuksi diskreettiin Fourier-muunnokseen, joka voidaan esittää matriisimuunnoksena. Muunnosmatriisi muodostetaan lisäämällä rivi kerrallaan ykkösen n:nnen juuren eri potensseja. Valitettavasti emme ehtineet käsitellä muunnosmatriisin generointia, joten tähän liittyvä seuraavien viikkoharjoitusten tehtävä täytyy tehdä käyttämällä prujusta valmiina löytyvää muunnosmatriisia tapaukselle N = 4.

keskiviikko 20. maaliskuuta 2013

LTI-järjestelmät ja konvoluutio


Tänään käsiteltiin monisteen sivut 5-23. Ensimmäisena asiana vertailtiin digitaalisia suotimia vastaaviin analogisiin suotimiin. Esimerkiksi kurssilla opittava tietyn taajuuskaistan poistava suodin on mahdollista toteuttaa myös analogisesti. Kysymys kuuluukin miksi sama pitäisi tehdä digitaalisesti. Prujussa mainittujen lisäksi digitaalisuudesta on (ainakin) kolme merkittävää etua:
  1. "Digitaalinen toiminnallisuus" tarkoittaa suomeksi softaa, jonka ainutkertainen ominaisuus on että saman tuotteen voi myydä useaan kertaan. Tästä syystä myös Bill Gates on maailman rikkain ihminen. Jos myyntimäärät ovat riittävän suuria, monimutkaisenkin softan toteutuksen hinta on mitätön suhteessa siitä saatavaan hyötyyn. Kannattaa siis hyvinkin palkata 10 DI:tä tekemään softalla ratkaisu, joka laskee lopputuotteen tuotantokustannusta esim. vain 10 senttiä, jos tuotetta myydään miljoonia kappaleita.
  2. Digitaalisuunnittelu on usein helpompaa kuin analogiasuunnittelu. SDSU:n kuuluisa professori frederick j. harris vertasi puheessaan työskentelyä digitaalisessa maailmassa työskentelyyn San Diegossa ja työtä analogisella puolella työhön Minnesotassa. San Diegossa on suunnilleen Välimeren ilmasto ja Minnesotassa suunnilleen Suomen ilmasto.
  3. Softatoteutus on joustavampi. Jos syystä tai toisesta tuotteen vaatiman suotimen vaatimukset muuttuvat, analogiatoteutukseen tilatut komponentit menevät romukoppaan. Digitaalisen suotimen tapauksessa käännetään softasta uusi versio ja aloitetaan tuotanto.
Kappaleen 2 alussa käsitellään usein käytettyjen jonojen perusmääritelmät ja lohkokaavioiden perusoperaatiot: yhteenlasku, skalaarilla kertominen sekä viivästys. Näiden avulla voidaan esittää kaikki tämän kurssin suotimet. Kurssilla tarkastellaan lineaarisia ja aikainvariantteja suotimia, jotka voidaan esittää konvoluution avulla, toisin sanoen painotettuna keskiarvona N:stä viimeksi sisään tulleesta näytteestä. Konvoluutiosta nähtiin oheisen kuvan mukainen demo.



Kuvassa ylimpänä on suodatettava signaali, joka etenee vasemmalta oikealle. Jokaisen uuden näytteen saapuessa (kuvan ulkopuolelta vasemmalta) kerrotaan punaisella merkityt näytteet kuvan keskellä keskellä olevilla kertoimilla. Näin saadut tulot lasketaan yhteen ja sijoitetaan tulos alla olevan kuvan punaisella merkityksi uusimmaksi vastearvoksi.

Tämän jälkeen jatkettiin teoreettisemmalla asialla, eli kappaleen 2.2 diskreettien järjestelmien ominaisuuksilla. Näistä lineaarisuus ja aikainvarianssi ovat ne perusominaisuudet jotka otetaan myöhemmän tarkastelun lähtökohdaksi. Myös stabiilisuus on kriittinen ominaisuus, koska epästabiililla suotimella ei tee mitään.

Kappaleessa 2.3 tarkastellaan LTI-järjestelmiä, eli järjestelmiä jotka ovat lineaarisia ja aikainvariantteja. Kappaleen alussa osoitetaan, että LTI-järjestelmät voidaan esittää konvoluution avulla (josta on esimerkki yo. kuvassa). LTI-järjestelmän hieno ominaisuus on, että sen impulssivaste määrää vasteen mille tahansa herätteelle. Esimerkkinä tästä tutustuttiin demoon, jossa impulssivaste oli saatu lyömällä käsiä yhteen kirkossa (ts. generoimalla impulssi) ja mittaamalla vaste, josta kaiku oli selvästi kuultavissa. Näin saatua impulssivastetta voidaan käyttää mallina tilan akustisista ominaisuuksista, ja myös kotivahvistinten tilaefektit (hall, arena, club, jne.) on toteutettu tällä periaatteella. Mallia testattiin laskemalla konvoluutio seiska-testisignaalin ja kyseisen impulssivasteen kesken. Tulos kuulosti kuin testisignaali olisi viety kirkkoon.

Akustisen kaiun lisäksi toinen esimerkki konvoluution käytöstä reaalimaailman mallina voisi olla monitie-eteneminen tietoliikenteessä. Mielenkiintoisen tästä tekee se, että tämä ilmiö on mahdollista kompensoida ekvalisoinnilla, mikä käytännössäkin vähentää tietoliikenteessä syntyviä virheitä.

Konvoluution ominaisuuksien käsittelyn yhteydessä tuotiin esille niiden yhteys LTI-järjestelmien yhdistämiseen: peräkkäiset (tai rinnakkaiset) LTI-järjestelmät voidaan esittää yhtenä järjestelmänä ja toisaalta niiden järjestys ei vaikuta lopputulokseen.