tiistai 30. huhtikuuta 2019

Luento 25.4. Koneppiminen ja deep learning

Tämän jälkeen paneuduttiin hermoverkkoihin sekä niiden opetukseen, ja mainittiin  lyhyesti opetusalgoritmin perustuvan derivaattaan ja ketjusääntöön. Näiden avulla voidaan päätellä suunta, jossa luokitteluvirhe pienenee jyrkimmin, ja kyseiset kaavat löytyvät esim. täältä. Perus-backpropagationin lisäksi on olemassa kehittyneempiä ja nopeampia opetusalgoritmeja, ja esim. Matlabissa niitä on lähes parikymmentä. Olennaisin ero algoritmien välillä on niiden nopeudessa ja muistin tarpeessa.

Edellisviikolla opetettua verkkoa testattiin rekisterikilven tunnistuksessa esimerkkikuvilla, joista näytettiin hiirellä merkin sijainti. Testissä havaittiin luokittelun toimivan täysin oikein kun merkki oli hyvin laatikon sisällä. Jos merkin lisäksi 10x10-laatikon sisällä oli muutakin, luokittelu meni väärin.
Tavallisen hermoverkon herkkyys merkin oikealle kohdistukselle on yleinen ongelma. Tämä on saatu valtaosin ratkaistua uudemmissa ns. konvoluutioverkoissa, jotka esiteltiin alun perin jo 1980-luvulla, mutta ovat saavuttaneet valtavan suosion vasta laskentatehon lisäännyttyä 2010-luvulla. Syvät (yli 3 tasoa; jopa 1000 tasoa) konvoluutioverkot ovat aiheuttaneet läpimurron kuvan- ja puheentunnistuksessa.


Lopuksi vilkaistiin tuoreita esimerkkejä syvillä hermoverkoilla saavutetuista tuloksista:
Valitettavasti aika ei suunnitelmasta huolimatta riittänytkään audiokompression tutkimiseen. Tämä on harmi ja syy suunnitella aikataulu paremmin ensi vuonna, koska kappale yhdistää monta kurssilla tutkittua aihetta: suodinsuunnittelun, näytteenottotaajuuden muuntelun sekä kvantisointimallin. Tiivistelmä aiheesta kuitenkin alla olevassa videonpätkässä, jonka avulla järjestelmien toimintaperiaatteesta saa toivottavasti yleiskuvan.

 

keskiviikko 24. huhtikuuta 2019

Luento 16.4. Koneoppiminen



Tänään aloitimme kappaleen 11, joka käsittelee hahmontunnistusta. Hahmontunnistusjärjestelmän ideana on esittää järjestelmälle näytteitä ja opettaa se tuottamaan oikea ulostulo kun sille esitetään opetusjoukkoon kuulumaton uusi näyte. Yksi oppivien järjestelmien osajoukko ovat luokittelijat, jossa ulostulo kertoo luokan johon esitetty näyte kuuluu.

Suosittuja luokittelualgoritmeja ovat ainakin seuraavat (kasvavan monimutkaisuuden järjestyksessä):

Näistä kaksi ensimmäistä käsiteltiin luennolla. KNN on ideana yksinkertaisin: kaikki opetusdata pidetään muistissa ja uuden näytteen tullessa etsitään k samanlaisinta näytettä, ja valitaan näistä yleisin luokka. Tyypillisesti k on vajaan kymmenen luokkaa, mutta voi olla suurempikin; esim. 30. Mitä suurempi k on, sitä sileämpi luokkarajasta tulee. Vaikka KNN:n luokittelutulos onkin melko hyvä, on sen ongelmana suuri muistin tarve sekä laskennallinen kompleksisuus. Koko opetusjoukko täytyy nimittäin säilyttää muistissa, josta etsitään k lähintä naapuria jokaisen luokittelun yhteydessä. Sekä tilantarve että etsinnän vaatima aika voivat olla ongelmallisia jos opetusjoukossa on esim. 100000 alkiota.

Luentomonisteen seuraava menetelmä on Fisherin diskriminantti eli LDA. Tätä voidaan havainnollistaa alla olevalla Matlab-demolla, jossa näkyy erilaisia projektiosuoria kaksiulotteisen datan koordinaatistossa. Suoran suunta vaihtelee ja tuloksena piirretään alle näin saatavien yksiulotteisten näytteiden jakauma sekä luokitteluprosentti. Hyvillä projektiosuorilla data oli täydellisesti luokiteltavissa, mutta huonoilla joukot menivät päällekkäin projisoinnin jälkeen. Fisherin lineaarinen erottelija laskee tämän suoran automaattisesti niin että erottelu on optimaalinen. Suora ratkaistaan maksimoimalla ns. Fisherin suhde (näkyy myös kuvassa alla), joka kertoo kuinka hyvin tulosjoukot erottuvat toisistaan (isompi parempi). Oikessa tilanteessa paras suunta ratkaistaan suljetussa muodossa olevan kaavan avulla eikä kokeilemalla (mikä olisikin mahdotonta 1000-ulotteiselle datalle).

Luento 11.4. Näytteenottotaajuuden muuntelun sovelluksia



Tänään aloitettiin muistelemalla muunnosta rationaalikertoimilla (esim. 5/4). Yhdistämällä interpolointi ja desimointi päästään yksinkertaisempaan rakenteeseen huomaamalla kokonaisuudessa olevan kaksi suodatinta peräkkäin, jotka molemmat poistavat tietyn kaistan ylätaajuuksilta. Näin ollen vain toinen niistä on tarpeellinen. Piirtämällä kuva näiden suodinten amplitudivasteista voidaan päätellä kumpi on tarpeeton (aina se, jota vastaava muunnoskerroin on isompi).

Seuraavaksi tutustuttiin interpoloinnin sovellukseen D/A-muunnoksessa. Menetelmää käytettiin jo ensimmäisissä CD-soittimissa 1980-luvun alussa ja sen ideana on tehostaa nollannen asteen pitopiirin toimintaa nostamalla näytteenottotaajuus korkeammaksi ennen pitopiiriä. Tämä näkyy aikatasossa porraskuvion hienontumisena ja tätä kautta pitopiirin virheen pienenemisenä jä siirtymisenä korkeammille taajuuksille. Taajuustasossa yli 22,05 hertsin taajuuksille tulee vastaavia heijastuksia kuin interpoloinnin yhteydessäkin. Erona on, että nyt heijastumat vaimenevat sitä enemmän mitä korkeammalle mennään. Digitaalinen interpolointi helpottaa näiden heijastusten poistamista: ilman digitaalista interpolointia tarvittavan analogisen suotimen siirtymäkaistan leveys olisi 2,05 kHz (20kHz...22.05kHz), kun esim. nelinkertaisella interpoloinnilla se saadaan yli 130 kHz:n levyiseksi (väli 20kHz...154,35 kHz).

Jälkimmäisen tunnin aiheena oli 1-bittinen D/A-muunnos, jonka tavoitteena on yksinkertaistaa analogiapuolta äärimmilleen kvantisoimalla D/A-muunnettava signaali 1-bittiseksi. Ratkaisusta käytetään nimeä kohinanmuokkaus, englanniksi noise shaping tai sigma delta modulation. Kvantisointi onnistuu äänenlaatua heikentämättä, kun nostetaan näytteenottotaajuus ensin riittävän suureksi. Tällöin näytteiden suuri määrä kompensoi niiden heikkoa tarkkuutta. Pelkkä ylinäytteistys ei kuitenkaan vielä riitä: ilman muita temppuja näytteenottotaajuus pitäisi nostaa jopa miljardikertaiseksi, mikä ei käytännössä ole mahdollista. Siksi täytyy ottaa käyttöön alla olevan lohkokaavion mukainen takaisinkytkentä, joka aiheuttaa kvantisointivirheen siirtymisen korkeammille taajuuksille.



 Korkeilla taajuuksilla kohina ei haittaa, koska se voidaan erottaa hyötysignaalista analogisella alipäästösuodatuksella D/A-muunnoksen jälkeen. Jäljelle jäävän kvantisointikohinan määrä voidaan laskea, ja havaitaan että suuruusluokassa 1500 oleva muunnoskerroin riittää (miljardien sijaan). Ratkaisua voidaan edelleen tehostaa tarkastelemalla korkeampiasteisia kohinanmuokkaimia, jotka siirtävät vieläkin tehokkaammin kvantisointikohinaa korkeammalle. Jotkin audioformaatit kuten Super Audio CD tallentavat äänen suoraan yksibittisenä. Tästä on etuna se, että kohinanmuokkaus täytyy tehdä vain kerran äänitysstudiossa eikä jokaisessa kuluttajalaitteessa erikseen.

Luento 9.4. Näytteenottotaajuuden muuntelu


Tänään tutustuttiin desimointi- ja interpolointi-operaatioihin, jotka toimivat kokonaislukukertoimilla. Näitä yhdistelemällä saadaan kaikki rationaalikertoimet. Molemmat operaatiot tarvitsevat alipäästösuodattimen, joka on yleensä FIR, ja suunnitellaan normaaleilla menetelmillä. Suotimen siirtymäkaistasta todettiin, että se laitetaan aina rajataajuuden alapuolelle. Näin signaaliin tulee vähemmän virhettä kuin jos laskostumista pääsisi tapahtumaan.

Desimoinnissa tapahtuva näytteenottotaajuuden pieneminen toteutetaan yksinkertaisesti jättämällä näytteitä pois tasaisin väliajoin. Esimerkiksi kertoimella kolme jätetään vain joka kolmas näyte jäljelle. Tämä kuitenkin aiheuttaa laskostumista, koska signaalin sisältämät taajuudet pysyvät samoina mutta näytteenottotaajuus pienenee. Tämä saadaan luonnollisesti estettyä suodattamalla signaali ennen alinäytteistämistä sopivalla alipäästösuotimella.
Interpolointi puolestaan koostuu nollien lisäämisestä sekä tämän operaation tuottamien roskien poistamisesta. Nollien lisääminenhän tuottaa kopioita ja peilikuvia alkuperäisestä spektristä, jotka voidaan myös poistaa kätevästi alipäästösuodatuksella. Oikealla olevassa kuvassa on luennolla ollut esimerkki näytteenottotaajuuden kolminkertaistamisesta, jossa kahden näytteen väliin sijoitetaan aina 2 nollaa (yläkuva). Alakuvassa on tuloksen spektrogrammi, jossa näkyy selkeästi kolme versiota alkuperäisestä (kaista 0-4000 Hz) taajuuskaistasta (kopio-peilikuva-kopio).

maanantai 8. huhtikuuta 2019

Luento 4.4. Äärellisen sananpituuden vaikutukset



Tänään tarkasteltiin äärellisen sanapituuden vaikutuksia. Tarkastelimme ensin mallia, jolla johdettin arvio AD-muunnoksen kvantisointivirheen 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 9, 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ä.



keskiviikko 3. huhtikuuta 2019

Luento 2.4. IIR-suotimet


Kappaleessa 6 esitetään menetelmiä 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.

    maanantai 1. huhtikuuta 2019

    Luento 28.3. Suodinsuunnittelu


    Tänään tutustuttiin suodinsuunnitteluun ikkunamenetelmällä. 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(angle(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.

    Amplitudivasteen osalta tavoitteena on saada vaste 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. Oikealla olevan kuvan mukaisen demottiin, 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.

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

    tiistai 26. maaliskuuta 2019

    Luento 26.3. Suotimen analyysi

    Tänään käsiteltiin suotimen analyysikappale loppuun. Opimme analysoimaan FIR-suotimen taajuuskäyttäytymisen ja näimme Z-muunnoksen, taajuusvasteen, amplitudivasteen ja vaihevasteen yhteyden toisiinsa. 

    Kappaleen 4 kaksi viimeistä lukua käytiin läpi ratkaisemalla kevään 2018 toukokuun tentin tehtävä 3. Tässä tehtävässä on annettu suotimen yhtälö, josta täytyy ratkaista siirtofunktio, piirtää napa-nollakuvio sekä päätellä stabiilisuus.

    Luennolla nähtiin 2 demoa: ensimmäisessä tutkittiin napa-nollakuvion ja taajuusvasteen suhdetta. Taajuusvastehan saadaan siirtofunktiosta H(z) evaluoimalla se pisteissä z = exp(iw). Geometrisesti tämä tarkoittaa yksikköympyrän reaaliakselin yläpuolella olevia pisteitä. Jokainen napa-nollakuvion nolla laskee taajuusvastetta ja jokainen napa nostaa taajuusvastetta. Tästä nähtiin alla olevan kuvan mukainen demo, jossa hiirellä voidaan sijoitella napoja ja nollia yksikköympyrälle. Alimpaan kuvaan piirtyy jokaisen klikkauksen jälkeen suotimen amplitudi- ja taajuusvasteet.


    Toisena demona tutkittiin taajuusvasteen visualisointia alemman animaation mukaisesti. Vasemman yläkulman kuvaajassa ovat kaikki termit exp(-iwk), jotka on kerrottu suotimen kertoimilla oikean yläkulman kuvassa (siis h(k)exp(-iwk)). Näiden summa vektoriesityksenä on puolestaan vasemmassa alakulmassa, jonka etäisyys origosta (amplitudivaste) on kuvattu alaoikealla.

    Lopuksi tutustuttiin Kaggle.com-alustalla n. 4v sitten järjestettyyn epileptisen kohtauksen tunnistuskilpailuun, jossa taajudet erottavalla suodatuksella oli keskeinen rooli.



    torstai 21. maaliskuuta 2019

    Luento 21.3. Z-muunnoksen laskenta ja suotimen analyysi


    Tänään käsiteltiin suotimen analysointi (kappale 4) melkein loppuun.

    Menetelmässähän ratkaistaan ensin 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.

    tiistai 19. maaliskuuta 2019

    Luento 19.3. FFT ja Z-muunnos

    Ensimmäisellä tunnilla Fourier-muunnoksen ominaisuuksiin.

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

    Yksi tämän ominaisuuden seurauksista 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))

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

    Lisäksi tutustuttiin demoon, jossa tunnistettiin automaattisesti puheesta S-kirjaimet. Alla on luennon esimerkkikoodi S-kirjaimen tunnistuksesta.

    function vokaalin_tunnistus()
    %
    % Esimerkki vokaalin ja S-kirjaimen erottelusta äänisignaalista.
    % heikki.huttunen@tut.fi -- 4.2.2015
    %
    
    close all
    
    % Ladataan opetusaineisto:
    
    [x, Fs] = audioread('seiska.wav');
    
    [X, H, numFrames] = extractFeatures(x, Fs);
    title ('Merkitse S-kirjaimet hiirella');
    
    isConsonant = zeros(numFrames, 1);
    
    while true
        
        [x1, y1] = ginput(1);
        [x2, y2] = ginput(1);
        
        if x1 > x2
            xt = x1;
            x1 = x2;
            x2 = xt;
        end
        
        isConsonant(round(x1 * numFrames) : round(x2 * numFrames)) = 1;
        
        response = questdlg('Jatketaanko annotointia?', ...
            'Kysymys', ...
            'Kyllä', 'Ei', 'Kyllä');
        
        if strcmp(response, 'Ei')
            break
        end
        
    end
    
    [B, FitInfo] = lassoglm(X, isConsonant, 'binomial', 'CV', 5);
    B = B(:,FitInfo.IndexMinDeviance);
    B0 = FitInfo.Intercept(FitInfo.IndexMinDeviance);
    yHat = sigmoid(X*B + B0);
    
    coefficients = H * B;
    
    figure()
    subplot(211)
    plot(yHat);
    ylabel('S-kirjaimen TN')
    subplot(212)
    stem(coefficients)
    
    response = questdlg('Valmiina tunnistamaan?', ...
        'Tunnistus', ...
        'OK', 'OK');
    
    while true
        
        close all
        
        myRecObj = audiorecorder(Fs, 16, 1);
        recordblocking(myRecObj, 2);
        y = getaudiodata(myRecObj);
        
        X = extractFeatures(y, Fs);
        yHat = sigmoid(X*B + B0);
        
        figure()
        subplot(211)
        plot(yHat);
        subplot(212)
        [~,f,t,S] = spectrogram(y, 256, 128, 256, Fs, 'yaxis');
        surf(t, f, 10*log10(abs(S)), 'EdgeColor', 'none');
        axis xy; axis tight; colormap(jet); view(0,90);
        
        response = questdlg('Jatketaanko tunnistusta?', ...
            'Kysymys', ...
            'Kyllä', 'Ei', 'Kyllä');
        
        if strcmp(response, 'Ei')
            break
        end
        
    end
    
    end
    
    function [F, H, numFrames] = extractFeatures(x, Fs)
    
    [~,f,t,S] = spectrogram(x, 256, 128, 256, Fs, 'yaxis');
    surf(t, f, 10*log10(abs(S)), 'EdgeColor', 'none');
    axis xy; axis tight; colormap(jet); view(0,90);
    
    S = log10(S)';
    
    H = [];
    n = (1:size(S, 2))';
    
    for k = 0:3
        H = [H, n.^k];
    end
    
    F = S * H;
    numFrames = size(S, 1);
    
    end
    
    function y = sigmoid(x)
    
    y = 1 ./ (1 + exp(-x));
    
    end
     
    

    Toisella tunnilla johdettiin nopean Fourier-muunnoksen menetelmä (FFT), jonka jälkeen tarkasteltiin Z-muunnosta ja sen tärkeimpiä ominaisuuksia. Z-muunnoksen avulla voidaan selvittää mm. suotimen stabiilisuus: suodin on stabiili jos kaikki siirtofunktion navat ovat yksikköympyrän sisäpuolella.

    Luento 14.3. Fourier-muunnokset

     
    Tänään käsiteltiin kaikki neljä Fourier-muunnostyyppiä yksityiskohtaisesti. 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. Lopuksi esitettiin tällaisen matriisin konstruointi yksikköympyrän avulla tapaukselle N = 4.

    tiistai 12. maaliskuuta 2019

    Luento 12.3. Konvoluutio ja 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.
     
    Tarkkaan ottaen yllä olevan kuvan sinisignaalit eivät riitä esittämään kaikkia mahdollisia signaaleita: lisäksi tarvitaan mahdollisuus viivästää tai edistää eri taajuuksia. Tämä onnistuu laajentamalla taajuuksien kokoelma kompleksiksi eksponenttisignaaleiksi: exp(ix) = cos(x) + i sin(x). Kompleksinen eksponenttifunktio on oheisen kuvan mukainen, eli sen reaaliosa ja imaginaariosa värähtelevät samalla taajuudella.

    torstai 7. maaliskuuta 2019

    Luento 7.3. Konvoluutio


    Kurssin toisella luennolla luotiin ensin katsaus muutamaan signaalinkäsittelyn alan tunnettuun sovellukseen: kompressio, puheentunnistus, puheen välitys digitaalisesti, jne.

    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.

    maanantai 4. maaliskuuta 2019

    Luento 5.3.: Näytteenottoteoreema

    Kurssin SGN-11000 kulkua voi seurata luentojen ja harjoitusten lisäksi kurssiblogissa. Blogissa on kahdenlaisia merkintöjä:

    • Videoblogi, joka ilmestyy aina ennen luentoa ja esittelee tiivistelmän luennon asioista.
    • Tekstiblogi, johon täydennetään kunkin luentokerran jälkeen keskeisimmät luennolla tulleet asiat.
    Alla ensimmäinen videoblogimerkintä. 



    ---
    Tänään luennolla käsiteltiin kurssin hallinnolliset asiat sekä luentomonisteen kappaleet 1.1 ja 1.2. Ensimmäinen tunti käytettiin hallinnollisiin asioihin ja aihepiirin yleiskatsaukseen.

    Toisella tunnilla varsinaista asiaa alustettiin puhumalla A/D-muunnoksesta, digitaalisista signaaleista, digitaalisista suotimista sekä Fourier-muunnoksesta. Matlab-esimerkkinä tarkasteltiin erästä testisignaalia (seiska.wav) Matlabilla, ja todettiin, että oikealla olevassa spektrogrammissa näkyvät selvästi eri äänteet.

    Ensimmäisenä varsinaisena asiana käsiteltiin näytteenottoteoreema, jonka mukaan naytteistämisessä ei häviä informaatiota, jos näytteenottotaajuus on vähintään tuplat signaalin korkeimpaan taajuuteen nähden. Käytännössä ennen näytteistystä täytyy siis poistaa liian korkeat taajuudet analogisella suotimella (kuten tämä) ettei laskostumista pääsisi tapahtumaan.

    Audiossa tapahtuvaa laskostumista verrattiin videokuvaan, jossa esimerkiksi kärrynpyörä saattaa näyttää pyörivän väärään suuntaan. Youtubesta löytyy useita videoita hakusanalla Wagon wheel effect; esim. tämä. Sääntö on tässäkin tapauksessa sama: kuvia pitää ottaa vähintään kaksi per kierros. 

    Termi laskostuminen viittaa taajuusakselin laskostumiseen. Tässä yhteydessä kaikkien laskosten energiat summautuvat yhteen jäljelle jäävälle taajuuskaistalle. Ilmiötä voidaan havainnollistaa myös laskostamalla piirtoheitinkalvo alla olevan kuvan mukaisesti. 


    Laskostunut signaali.

    Näytteenottoteoreema liittyy myös peleissä käytettyyn ns. antialiasing-tekniikkaan. Myös tällöin lähtökohtana on äärettömän tarkka virtuaalinen malli, josta joudutaan ottamaan näytteitä esim. 1920 x 1200 monitoria varten. Tällöinkin kuvan sisältämät korkeat taajuudet laskostuvat ja muodostavat ns. Moire-ilmiön. Tästäkin päästään eroon suodattamalla signaali alipäästösuotimella ennen näytteistystä (eli poistamalla laskostuvat taajuudet).