keskiviikko 9. toukokuuta 2012

Suodinsuunnittelun loppu sekä kuvankäsittelyä ja kanditöitä

Voit antaa palautetta kurssista TTY:n palautejärjestelmässä (tai POP -> Omat opinnot -> SGN-1201 -> Palaute). Erityisesti kiinnostaa käyttääkö kurssiblogia kukaan. Myös tieto siitä ettet ole käyttänyt on tärkeä.

Tämän viikon luennolla käsiteltiin suodinsuunnittelu loppuun, vilkaistiin kappaleita 6-7 sekä katseltiin vanhoja kanditöitä.

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.
Toisella tunnillta 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.

Seuraavaksi perehdyttiin kuvien piste-ehostukseen. Tähän alueeseen kuuluvat menetelmät käsittelevät kuvaa piste kerrallaan ajamalla kunkin harmaasävyarvon tietyn funktion läpi. Funktio määräytyy tilanteen mukaan, ja gamma-korjauksen tapauksessa se on muotoa

y = x^gamma

(sopivilla skaalauksilla varustettuna, jolloin väli [0,255] kuvautuu väliksi [0,255]). Histogrammin ekvalisoinnin tapauksessa funktio lasketaan kuvasta niin, että histogrammin massa jakautuu suunnilleen tasaisesti. Tämä saadaan aikaiseksi kaavalla 6.1. 
Kappale 7 käsittelee tiedon pakkaamista. Häviöttömistä menetelmistä vilkaistiin Huffman-koodausta, joka perustuu koodipuun generointiin symbolien todennäköisyyksien mukaan. Harvinaisemmille symboleille annetaan pidempi koodisana, mikä mahdollistaa lyhyemmän koodisanan antamisen yleisemmille symboleille. Huffmanin pakkaustehokkuutta voidaan verrata entropiaan, joka antaa alaraja mille tahansa häviöttömälle pakkausmenetelmälle. Todettiin Huffmanin pääsevän melko lähelle alarajaa prujun esimerkissä. Entropiarajaa voidaan pudottaa erilaisilla tempuilla, kuten tallentamalla ns. erotuskuva.
Lopuksi vilkaistiin laitoksen kanditöiden arkistoa (tunnus: sgnkandi, salasana: motiivi).

keskiviikko 2. toukokuuta 2012

Suotimen analyysi ja synteesi

Tänään käytiin kappale 4 loppuun, sekä kappale 5 hieman 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. Havaittiin kuitenkin, että vaihevasteessa tapaa olla 180 asteen hyppäyksiä, ja silti vaihevaste voi olla lineaarinen. Tällainen hyppäys tulee tilanteessa jossa taajuusvastefunktio menee kompleksitason origon läpi. 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. Kun kuvaaja plotataan ruudulle, on tuloksessa yksi nollakohta, jossa kompleksifunktion vaihe hyppää 180 astetta (ts. funktio vaihtaa merkkiä). Näistä nollakohdista huolimatta suodin voi olla lineaarivaiheinen, ja näin ollen lineaarisuus kannattaakin määritellä näin: Vaihevaste on lineaarinen, jos vaihevasteen derivaatta on vakio aina kun se on määritelty. 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. Tämä kuitenkin kostautuu siirtymäkaistan levenemisenä: esim. Hamming-ikkunan siirtymäkaista on aina n. 3,5-kertainen suoraan katkaisuun verrattuna. Tämä voidaan kuitenkin kompensoida nostamalla kertoimien määrää.