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ä.
Tänään 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ä).
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.
Valitse ikkuna vaimennusvaatimusten perusteella.
Päättele tarvittava kertoimien määrä N siirtymäkaistan leveyden (delta_f) perusteella.
Taululla
ratkaistiin toukokuun 2013 tentin tehtävä 4, jossa suodinsuunnittelu
tehdään alusta loppuun paperilla. Yleisiä tentissä esiintyviä virheitä
ovat:
Muuttujat f_c ja delta_f sekoittuvat keskenään
Käytetään normalisoimattomia taajuuksia (esim. 11000 eikä 11000/32000)
Rajataajuudet on laskettu väärin tai sekoitettu keskenään.
Ikkuna on valittu väärin tai N on laskettu väärin.
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.