keskiviikko 18. helmikuuta 2009

Suodinsuunnittelua

Tämänpäiväisen luennon alussa oli ilmoitusasia: kakkosharkkojen rastilistat ovat kahden harkkaryhmän kohdalta kateissa. Pisteitä puuttuu siis noin kahdeltakymmeneltä opiskelijalta. Odottelemme ensi viikkoon josko listat löytyisivät, ja jos ei löydy, niin kaikille listalla oleville tulee automaattisesti täydet viisi pistettä kakkosharkoista. Tämä ei siis ole vielä lupaus varmoista pisteistä, sillä listat saattavat vielä putkahtaa jostain esiin. Lisää aiheesta ensi viikon luentojen alussa.

Varsinaisen luennon aluksi käytiin vielä toistamiseen läpi edellisviikon Matlab-demo, jossa hiirellä voidaan sijoitella napoja ja nollia napa-nollakuvioon, ja Matlab laskee syntyneen suotimen taajuusvasteen. Uutena ominaisuutena oli testi, jossa Matlab samalla suodattaa Handel-testisignaalin kyseisellä suotimella ja näin paljastaa onko suodin stabiili. Havaittiin, että heti kun yksikin napa oli yksikköympyrän ulkopuolella, ulostulo muuttui järjettömäksi, ja näytearvot olivat suuruusluokkaa 10^50.

Kappaleessa 5 tarkastellaan kappaleen 4 ongelmaa toisin päin. Kappaleessa 4 tavoite oli selvittää annetun suotimen taajuusominaisuudet, ja kappaleessa 5 pitäisi ratkaista mikä suodin toteuttaa annetun taajuuskäyttäytymisen. 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: Suodin on lineaarinen, jos sen 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ää.

2 kommenttia:

  1. Prujun kappalessa 5.3 s. 87 on esimerkissä käytetty Hamming-ikkunaa ja laskettu kertoimien määräksi N=53. Itse ikkunassa käytetään kuitenkin arvoa 85 eli 0.54+0.46*cos(2*pi*n/85) enkä keksi mistä se on tullut. Onko se typo? Sama luku on läpi laskun. Jälkimmäisessä esimerkissä (s. 89) Hanning-ikkunan tapauksessa käytetään kertoimien lukumäärää suoraan.

    VastaaPoista
  2. Tämä on typo, ja se korjataan tulevissa painoksissa.

    VastaaPoista