keskiviikko 25. maaliskuuta 2015

Luento 25.3: Äärellinen sananpituus


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

 
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 desibelillä.

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ä).

Toisen tunnin lopuksi 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ä. 

tiistai 17. maaliskuuta 2015

Luento 18.3: IIR-suodinten suunnittelu


Tänään luennon aluksi käytiin läpi viimeviikkoinen välikoe, minkä jälkeen tutkittiin IIR-suodatusta sekä Matlabin valmiita IIR-suodattimen suunnittelumenetelmiä.

Välikoetta ei ole vielä tarkastettu. Pyrin hoitamaan asian ensi viikkoon mennessä.

IIR-suodinten suunnittelun aluksi muisteltiin 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.
 

Menetelmä ei luonnollisestikaan ole kovin tarkka. Kappaleessa 6 esitetäänkin menetelmiä tarkempaan IIR-suodinten suunnitteluun, ja ne käydään 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ä on esim. kurssin SGN-16006 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. Harjoitustyössä on yhtenä tehtävänä ns. Goertzel-algoritmin toteutus yksittäisen taajuuden tunnistuksessa. Goertzel-algoritmi hyödyntää epästabiilia suodinta, joka vahvistaa etsittävää taajuutta äärettömän paljon. Tästä ei kuitenkaan seuraa katastrofia, jos suotimen annetaan toimia vain vähän aikaa (esim 256 näytettä). 

Luennolla kysyttiin mistä IIR-suodintyyppien nimet ovat peräisin.
  • Butterworth-suodin on nimetty fyysikko Stephen Butterworthin mukaan, joka esitteli analogisen Butterworth-suotimen 1930.
  • Chebyshev-suotimet juontavat juurensa Chebyshev-polynomeihin, joita käytetään numeerisessa approksimoinnissa: esim. Matlab saattaa laskea logaritmifunktion todellisuudessa Chebyshev-polynomin avulla, jossa kertoimet on sovitettu niin että polynomi on paikallisesti lähellä logaritmia. Chebyshev-polynomien hyvä ominaisuus on, että niillä saatava maksimivirhe on mahdollisimman pieni ("minimax criterion"; "minimal L-Infinity norm"). Tämä on sama asia kuin tasavärähtely-ominaisuus.
  • Elliptinen suodin perustuu ns. elliptisiin rationaalifunktioihin, ja yhteys on varsin matemaattinen.
Suodinsuunnittelussa on paljon yhteistä numeerisen approksimoinnin kanssa, koska sitähän suodinsuunnittelu olennaisesti onkin: pyritään löytämään suodin jonka amplitudivaste approksimoi ideaalista vastetta mahdollisimman tarkasti.

tiistai 3. maaliskuuta 2015

Luento 4.3: suodinsuunnittelu käytännössä


Tänään käsiteltiin kappale 5 loppuun. Alussa oli alla olevan kuvan mukainen demo, jossa suotimen kertoimien määrää kasvatettiin ja havaittiin ettei amplitudivastetta saa tällä keinolla tiettyjen rajojen alle.
Tämän jälkeen käytiin kappale 5 loppuun, ja todettiin että suodinsuunnittelu sisältää seuraavat vaiheet. 
  1. Valitse ikkuna vaimennusvaatimusten perusteella.
  2. Päättele tarvittava kertoimien määrä N siirtymäkaistan leveyden (delta_f) perusteella.
  3. Laske ideaalinen impulssivaste (vaatii siirtymäkaistan keskipisteen f_c laskennan).
  4. Kerro ideaalinen impulssivaste valitun ikkunafunktion lausekkeella.
Taululla ratkaistiin toukokuun 2013 tentin tehtävä 4, jossa suodinsuunnittelu tehdään alusta loppuun paperilla. Yleisiä tentissä esiintyviä virheitä ovat:
  1. Muuttujat f_c ja delta_f sekoittuvat keskenään
  2. Käytetään normalisoimattomia taajuuksia (esim. 11000 eikä 11000/32000)
  3. Rajataajuudet on laskettu väärin tai sekoitettu keskenään.
  4. Ikkuna on valittu väärin tai N on laskettu väärin.
  5. Lopputuloksessa on avoimia muuttujia (f_c, delta_f tai N).
Toisen tunnin lopuksi luotiin katsaus kahteen sovellukseen. Ensimmäinen oli Kaggle-alustalla ollut epilepsian tunnistuskilpailu, jonka olennaisena komponenttina on EEG-signaalin jako taajuuskaistoihin. Kilpailun aineisto oli huomattavan suuri, joten ennustuksen vaatimasta laskennasta valtaosa kului taajuuksien erottelussa (eli suodatuksessa). Sijoituimme kilpailussa sijalle 31.

Toisena sovelluksena mainittiin TTY-lähtöinen Yousician-yritys, joka suunnittelee akustisilla soittimilla ohjattavia pelejä. Tässä haasteena on soitetun nuotin luotettava tunnistus mikrofonisignaalista, missä suodatuksella on keskeinen rooli.