ILKKA HULKKO TAAJUUDEN MITTAUS PAINESIGNAALISTA. Kandidaatintyö

Samankaltaiset tiedostot
IIR-suodattimissa ongelmat korostuvat, koska takaisinkytkennästä seuraa virheiden kertautuminen ja joissakin tapauksissa myös vahvistuminen.

Spektri- ja signaalianalysaattorit

TL5503 DSK, laboraatiot (1.5 op) Suodatus 1 (ver 1.0) Jyrki Laitinen

Signaalit ja järjestelmät aika- ja taajuusalueissa

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

1 Vastaa seuraaviin. b) Taajuusvasteen

Digitaalinen signaalinkäsittely Desibeliasteikko, suotimen suunnittelu

Tuntematon järjestelmä. Adaptiivinen suodatin

Alipäästösuotimen muuntaminen muiksi perussuotimiksi

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Kompleksiluvut signaalin taajuusjakauman arvioinnissa

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe

Säätötekniikan ja signaalinkäsittelyn työkurssi

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe

Numeeriset menetelmät

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

3 Ikkunointi. Kuvio 1: Signaalin ikkunointi.

SGN-4010, Puheenkäsittelyn menetelmät Harjoitus 6, 18. ja

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

SIGNAALITEORIAN KERTAUSTA OSA 2

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

TL5503 DSK, laboraatiot (1.5 op) Suodatus 2 (ver 1.0) Jyrki Laitinen

T SKJ - TERMEJÄ

SEBASTIAN RINTALA SIGNAALIN DOMINOIVAN TAAJUUDEN ARVIOINTI

1 Olkoon suodattimen vaatimusmäärittely seuraava:

Signaalien datamuunnokset. Digitaalitekniikan edut

Signaalien datamuunnokset

DSP:n kertausta. 1 Spektri, DFT, DTFT ja aika-taajuusresoluutio

Laskuharjoitus 4 ( ): Tehtävien vastauksia

Signaalien generointi

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Luento 8. Suodattimien käyttötarkoitus

Tietoliikennesignaalit & spektri

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

Dynaamisten systeemien identifiointi 1/2

Organization of (Simultaneous) Spectral Components

SGN-1251 Signaalinkäsittelyn sovellukset Välikoe Heikki Huttunen

Ohjelmistoradio tehtävät 4. P1: Ekvalisointi ja demodulaatio. OFDM-symbolien generoiminen

Suodattimet. Suodatintyypit: Bessel Chebyshev Elliptinen Butterworth. Suodattimet samalla asteluvulla (amplitudivaste)

Audiosignaalin mallintaminen sineillä ja kohinalla

Missä mennään. systeemi. identifiointi. mallikandidaatti. validointi. malli. (fysikaalinen) mallintaminen. mallin mallin käyttötarkoitus, reunaehdot

Diskreetti Fourier-muunnos ja sen hyödyntäminen signaalien spektrien muodostamisessa. Pentti Romppainen

Digitaalinen signaalinkäsittely Johdanto, näytteistys

Signaalimallit: sisältö

LOPPURAPORTTI Lämpötilahälytin Hans Baumgartner xxxxxxx nimi nimi

1 Äänisignaalin tallentaminen ja analysointi... 2 Q Q Q Q Häiriönpoisto... 5 Q Q Q2.3...

5 Lineaarinen ennustus

1 PID-taajuusvastesuunnittelun esimerkki

THE audio feature: MFCC. Mel Frequency Cepstral Coefficients

Muuntavat analogisen signaalin digitaaliseksi Vertaa sisääntulevaa signaalia referenssijännitteeseen Sarja- tai rinnakkaismuotoinen Tyypilliset

Digitaalinen signaalinkäsittely Kuvankäsittely

Väliraportti: Vesipistekohtainen veden kulutuksen seuranta, syksy Mikko Kyllönen Matti Marttinen Vili Tuomisaari

Kohina. Havaittujen fotonien statistinen virhe on kääntäen verrannollinen havaittujen fotonien lukumäärän N neliö juureen ( T 1/ N)

Virheen kasautumislaki

Digitaalinen audio

SGN-4200 Digitaalinen audio

805324A (805679S) Aikasarja-analyysi Harjoitus 5 (2016)

Digitaalinen audio & video I

AS Automaatio- ja systeemitekniikan projektityöt S09-18 Langaton anturijärjestelmä rakenteiden kunnonvalvontaan

Matlab-tietokoneharjoitus

Suodinpankit ja muunnokset*

1. Määritä pienin näytelauseen ehdon mukainen näytetaajuus taajuus seuraaville signaaleille:

Taajuus-, Fourier- ja spektraalianalyysi

T Digitaalinen signaalinkäsittely ja suodatus

Dynamiikan hallinta Lähde: Zölzer. Digital audio signal processing. Wiley & Sons, Zölzer (ed.) DAFX Digital Audio Effects. Wiley & Sons, 2002.

Flash AD-muunnin. Ominaisuudet. +nopea -> voidaan käyttää korkeataajuuksisen signaalin muuntamiseen (GHz) +yksinkertainen

20 Kollektorivirta kun V 1 = 15V Transistorin virtavahvistus Transistorin ominaiskayrasto Toimintasuora ja -piste 10

SIGNAALITEORIAN KERTAUSTA 1

SMG-1100: PIIRIANALYYSI I. Verkkojen taajuusriippuvuus: suo(dat)timet

Luku 4 - Kuvien taajuusanalyysi

RYHMÄKERROIN ÄÄNILÄHDERYHMÄN SUUNTAAVUUDEN

ELEC-C Sovellettu digitaalinen signaalinkäsittely. Äänisignaalien näytteenotto ja kvantisointi Dither Oskillaattorit Digitaalinen suodatus

S Laskennallinen Neurotiede

ELEC-C7230 Tietoliikenteen siirtomenetelmät

LABORATORIOTYÖ 2 A/D-MUUNNOS

Sisältö. Työn lähtökohta ja tavoitteet Lyhyt kertaus prosessista Käytetyt menetelmät Työn kulku Tulokset Ongelmat ja jatkokehitys

Kirjoitetaan FIR-suotimen differenssiyhtälö (= suodatuksen määrittelevä kaava):

Mittalaitetekniikka. NYMTES13 Vaihtosähköpiirit Jussi Hurri syksy 2014

SGN-4200 Digitaalinen Audio Harjoitustyö-info

1 Johdanto. 2 Kriittinen näytteistys 2:lla alikaistalla. 1.1 Suodatinpankit audiokoodauksessa. Johdanto

Laskuharjoitus 2 ( ): Tehtävien vastauksia

Digitaalinen Signaalinkäsittely T0125 Luento

Puheenkoodaus. Olivatpa kerran iloiset serkukset. PCM, DPCM ja ADPCM

Jaksollisen signaalin spektri

LABORATORIOTYÖ 2 A/D-MUUNNOS

T DSP: GSM codec

Luento 2. Jaksolliset signaalit

Tilastotieteessä aikasarja tarkoittaa yleensä sarjaa, jossa peräkkäisten havaintojen aikaväli on aina sama.

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin

4.0.2 Kuinka hyvä ennuste on?

Identifiointiprosessi

FIR suodinpankit * 1 Johdanto

Taajuus-, Fourier- ja spektraalianalyysi

1 Tarkastellaan digitaalista suodatinta, jolle suurin sallittu päästökaistavärähtely on 0.05 db ja estokaistalla vaimennus on 44 db.

Numeeriset menetelmät TIEA381. Luento 14. Kirsi Valjus. Jyväskylän yliopisto. Luento 14 () Numeeriset menetelmät / 55

KON-C3004 Kone- ja rakennustekniikan laboratoriotyöt Tiedonkeruu ja analysointi Panu Kiviluoma

Taajuus-, Fourier- ja spektraalianalyysi

Tiedonkeruu ja analysointi

Transkriptio:

ILKKA HULKKO TAAJUUDEN MITTAUS PAINESIGNAALISTA Kandidaatintyö Tarkastaja: Konsta Koppinen Työ jätetty tarkastettavaksi: 8.5.2009

II TIIVISTELMÄ TAMPEREEN TEKNILLINEN YLIOPISTO Automaatiotekniikan koulutusohjelma HULKKO, ILKKA: Taajuuden mittaus painesignaalista Kandidaatintyö, 35 sivua Toukokuu 2009 Pääaine: Signaalinkäsittely ja multimedia Tarkastaja: Konsta Koppinen Avainsanat: Taajuuden estimointi, taajuusanalyysi Työssä arvioidaan mittausdatan sisältämää taajuusinformaatiota. Signaalin näytteenottotaajuus on välillä 1-20 khz ja mielenkiintoiset taajuudet sijaitsevat 10-200 Hz alueella. Signaalista otetaan myöhempää tarkastelua varten talteen myös DC komponentti. Ennen varsinaista taajuusanalyysiä tehdään datalle esikäsittely, jossa eliminoidaan DC komponentin vaikutus signaaliin. Tämän jälkeen halutun taajuuskaistan ulkopuolella sijaitsevat taajuuskomponentit suodatetaan pois. Työssä käytetään itse taajuuden arvioimiseen viittä eri tekniikkaa. Kaikki tekniikat eivät suoranaisesti tuota tuloksenaan irrotettua taajuutta, vaan lähinnä vahvistavat sitä signaalista. Tekniikoiden toteutuksen jälkeen arvioidaan niiden tehokkuutta. Tämä tehdään määrittämällä algoritmien kykyä poimia taajuuksia kiinnostavalla alueella suhteessa niiden vaatimiin resursseihin. Käytännössä resurssien käyttöä arvioidaan algoritmin suorittamien laskutoimitusten määrän perusteella. Lopuksi arvioidaan järkevin algoritmi tai algoritmien yhdistelmä, jota voidaan käyttää halutun taajuuden arviointiin mittausdatasta.

III ALKUSANAT Tämä työ toteutettiin osana Tampereen teknillisen yliopiston signaalinkäsittelyn laitoksen kandidaatintyöseminaaria keväällä 2009. Kiitokset kandidaatintyöseminaarin järjestäneille Heikki Huttuselle ja Konsta Koppiselle. Kiitos myös seminaarin opiskelijaosanottajille erittäin mielenkiintoisista esityksistä seminaarin aikana. Iso kiitos myös yrityksen edustajille mielenkiintoisesta ja käytännönläheisestä kandidaatintyöaiheesta. Odotan innolla mahdollisia projekteja tulevaisuudessa. 8. toukokuuta 2009 Ilkka Hulkko

IV SISÄLLYS Tiivistelmä... II Alkusanat... III Termit ja niiden määritelmät... V 1. Johdanto... 1 2. Taajuuden estimointi... 2 2.1. LP-suotimen käyttöön perustuvat menetelmät... 3 2.2. Autokorrelaatioon perustuvat menetelmät... 4 2.3. Nollanylitystaajuus... 5 2.4. Spektriin perustuvat menetelmät... 6 2.5. Goertzel algoritmiin perustuvat menetelmät... 7 3. Estimointialgoritmien toteutus... 9 3.1. Esikäsittely... 9 3.2. Taajuuden estimointialgoritmit... 9 3.2.1. Lineaarinen ennustus... 9 3.2.2. Autokorrelaatio... 10 3.2.3. Nollanylitys... 10 3.2.4. FFT... 10 3.2.5. Goertzel... 10 3.3. Tulosten esittäminen... 10 4. Estimoinnin suorituskyvyn määritys... 11 4.1. Simulointi... 11 4.1.1. Esikäsittely... 11 4.1.2. Lineaarinen ennustus... 13 4.1.3. Autokorrelaatio... 15 4.1.4. Nollanylitys... 16 4.1.5. FFT... 18 4.1.6. Goertzel... 20 4.2. Validointi todellisuutta vastaavalla aineistolla... 20 4.3. Johtopäätökset suorituskyvystä... 22 5. Tulosten arviointi... 23 Lähteet... 24 Liitteet... 25

V TERMIT JA NIIDEN MÄÄRITELMÄT FFT Nopea Fourier-muunnos (engl. Fast Fourier Transform) LP Lineaarinen ennustus (engl. Linear Prediction) LPC Lineaarinen ennustuskerroin (engl. Linear Prediction Coefficients) DC-komponentti Tasajännitekomponentti (engl. Direct Current Component) AR Autoregressiivinen malli Glottisheräte Lähdeääni, virtauspulssi, puhutun äänen perustaajuus Korrelaatio Kahden muuttujan välinen riippuvuus toisistaan DTMF Äänitaajuusvalintatapa (engl. Dual-tone multi-frequency) FIR-suodin Äärellisen impulssivasteen suodin (engl. Finite Impulse Response Filter)

1 1. JOHDANTO Taajuuden määritelmää on käytetty jo pitkään useiden samankaltaisten tapahtumien jaksollisuuden määritykseen. Kuitenkin vasta elektronisten komponenttien yleistyttyä taajuusanalyysin merkitys on kasvanut. Varsinkin radiotekniikan kehittyminen vauhditti erilaisten taajuutta määrittävien komponenttien kehitystä. Analogikomponenttien aikaan signaalin taajuuden määritys oli kuitenkin suhteellisen epätarkkaa. Osien suunnittelu ja valmistus oli myös suhteellisen kallista. Analogitekniikan hyödyt tulivat käytännössä ilmi vasta massatuotannon aikana valmistushinnan ja ajan tiputtua. Analogikokoonpanot eivät olleet kuitenkaan kovin geneerisiä, ja usein yhtä kokoonpanoa käytettiin ainoastaan yhden tehtävän suorittamiseen. Siirryttäessä analogisten komponenttien käytöstä digitaaliaikaan erilaiset algoritmit taajuuden määrittämiseen diskreetistä signaalista yleistyivät nopeasti. Vaikkakin signaalista osattiin jo analogitekniikalla poimia erinäisiä taajuuksia, saatiin digitaalitekniikalla huomattavasti tarkempia tuloksia. Fourier -analyysin soveltaminen digitaalitekniikkaan tarjosi mahdollisuuden tehdä tarkkaa taajuustason analyysiä aikatason signaalista. Sitä ennen analogitekniikalla oli mahdotonta saada signaalia purettua sen sinikomponentteihinsa. Fourier analyysiin perustuvat tekniikat ovat yhä käytetyimpiä signaalin taajuusanalyysissä. Nykypäivänä signaalista osataan taajuusanalyysin perusteella suodattaa hyvinkin monimutkaisia virhekomponentteja. Myös aikatason taajuusanalyysiin on tullut huomattavia parannuksia digitaalitekniikan myötä. Taajuusanalyysillä löytyy sovelluskohteita käytännössä kaikilla signaalinkäsittelyn aloilla [1] [2].

2 2. TAAJUUDEN ESTIMOINTI Taajuus kuvaa tietyssä ajassa tapahtuvaa toistojen tai värähdysten määrää aikatason signaalissa. Taajuutta voidaan mitata määrittelemällä aikaikkuna signaalista ja tämän jälkeen laskemalla kuinka monta kertaa jaksollinen ilmiö toistuu kyseisessä ikkunassa. Jakamalla kertojen lukumäärä aikavälin pituudella, saadaan ilmiön taajuus. Toisaalta voidaan myös mitata kahden samanlaisen ilmiön aikaväli, jolloin taajuus voidaan laskea jaksonajan käänteisluvusta. Yksittäinen sinisignaali voidaan esittää yleisesti muodossa: y ( t) = A*sin( ω t + θ ), (2.1) missä A on signaalin amplitudi, ω on kulmataajuus, θ on signaalin vaihe ja t on ajanhetki. Kuvassa 1 on havainnollistettu kulmataajuuden suhdetta signaalin muotoon. Käytännössä summaamalla näitä yksittäisiä sinikomponentteja yhteen voidaan muodostaa mielivaltaisen muotoinen signaali joka sisältää useita eri taajuuskomponentteja. Kuva 1: Yksittäinen sinijakso vaihekulman avulla esitettynä

3 Jaksollisen ilmiön määrittelemiseen on useita eri menetelmiä. Tässä työssä taajuuden estimointiin aikatasossa käytetään kolmea eri menetelmää; nollanylitystaajuus, lineaarinen ennustus sekä autokorrelaatio. Signaalin sisältämät taajuudet voidaan määrittää myös taajuustasossa etsimällä signaalin taajuusspektristä piikkejä spektrin eri taajuusalueilla. Tämä mahdollistaa tarkemman taajuusinformaation poimimisen signaalista [1]. Metodeista lineaarinen ennustus sekä autokorrelaatio eivät varsinaisesti tuota tuloksenaan valmista taajuuserottelua, vaan ne lähinnä vahvistavat signaalin sisältämää päätaajuuskomponenttia. Näin ollen päätaajuuden irrottaminen signaalista helpottuu. 2.1. LP-suotimen käyttöön perustuvat menetelmät Tämä menetelmä tulee puheenkäsittelyn puolelta. LP-kertoimia käytetään digitaalisen ääntöväylämallin muodostamiseen. Niitä käytetään myös paljon puheenkoodauksessa, jossa puhesignaalin kokoa saadaan pienennettyä erottamalla siitä ääntöväylämalli sekä glottisheräte. LP kertoimet ovat lineaarisia ennustuskertoimia, joiden avulla yritetään signaalista ennustaa seuraava näyte. Lineaarinen ennustus tehdään kaavalla p ŷ = a( k) y( n k) + b( k) x( n k), (2.2) k = 1 k = 0 N missä ŷ(n) tarkoittaa y(n):n ennustusta tai estimaattia ja vakiot a(k) ja b(k) pyritään valitsemaan niin että ennustusvirhe minimoituu. Kuitenkaan syötettä x(n) ei usein tiedetä. Näin ollen yleisesti käytetään yksinkertaistettua mallia äskeisestä. Tässä ulostulo ŷ(n) arvioidaan käyttämällä ainoastaan edellisiä ulostulon arvoja sekä nykyistä sisäänmenon arvoa eli b(k) = 0 kun k > 0. Näin ollen ainoastaan a(k) ja b(0) pitää määrittää. Tätä kutsutaan autoregressiiviseksi malliksi (AR). Tälle mallille LPparametrien a(k) laskeminen on tehokasta eikä syötettä x(n) tarvitse tietää. Käytännössä puheen muodostamiseen käytetään jotain tiettyä perustaajuutta (glottisheräte) johon lisätään formantteja eli puheen lyhyempiaikaisia taajuuskomponentteja. Puheen synteesiä kuvataan kaavalla X ( z) Y ( z) =, (2.3) A( z) missä Y(z) on puhekehys, X(z) on glottisheräte eli puheen perustaajuus ja LP-polynomi A(z) sisältää LP-kertoimet. Tätä voidaan myös käyttää toisinpäin, eli suodatetaan signaali käänteisellä ääntöväylämallilla. LP-mallin aste on niin matala että se ei pysty mallintamaan puheen perustaajuutta. Tällöin signaalista vaimenee kaikki muut taajuuskomponentit paitsi signaalin perustaajuus. [4]

4 2.2. Autokorrelaatioon perustuvat menetelmät Autokorrelaatio on matemaattinen työkalu, joka kuvaa aikasarjan havaintojen välistä riippuvuutta havaintojen välisen aikaeron funktiona. Käytännössä algoritmi siis etsii signaalin samankaltaisuuksia itsestään. Yleisesti autokorrelaatio määritellään kahden pisteen korrelaation todennäköisyytenä jaettuna signaalin varianssilla. Autokorrelaatiojakauma muodostuu kun näinä kahtena pisteenä käytetään kaikkia signaalin pisteitä [4][5]. Kuva 2: Autokorrelaatio useita taajuuskomponentteja sisältävästä signaalista (maksimiviive 200 näytettä) Autokorrelaatio tarkoittaa yleisessä muodossaan signaalin normalisoitua todennäköisyysjakaumaa siitä onko sigaali sama itsensä kanssa. Autokorrelaation määritelmästä [( µ )( µ )] E X τ ( τ ) = t X R t+ (2.4) 2 σ käytetään usein käytännössä diskreettiä muotoa R ˆ 1 ( k) = X t X t + k σ µ ( n k) n k 2 t= 1 [ µ ][ ] (2.5) Signaalinkäsittelyssä myöskin autokorrelaatiofunktion normalisointi on tarpeetonta, jolloin jäljelle jää ainoastaan signaalin konvoluutio itsensä kanssa tietyillä viiveillä. R ff ( τ ) = f ( τ ) * f ( τ ) = f ( t + τ ) f ( t) dt = f ( t) f ( t τ ) dt (2.6)

5 Tästä käytetään tietenkin diskreettiä muotoa R xx k ( j) = x x (2.7) n= 1 n n j Autokorrelaation perusteella voidaan haluttu taajuus arvioida hyvin, jos se on signaalissa dominoiva. Jos signaali kuitenkin sisältää useampia taajuuksia sekä kohinaa, autokorrelaatio heikkenee huomattavasti kasvatettaessa korrelaatioikkunaa (Kuva 2). 2.3. Nollanylitystaajuus Nollanylitystaajuustekniikalla voidaan signaalista erottaa eri taajuuskomponentteja aikatasossa tarkkailemalla signaalin taajuuden mukaan syntyviä nollanylityksiä. Tekniikassa signaalista mitataan nousevia tai laskevia nollanylityksiä. Käytännössä tämä tarkoittaa hetkeä, jolloin signaalin merkki muuttuu. Kahden nollanylityksen keskimääräisestä aikavälistä saadaan jaksonaika, josta voidaan laskennallisesti määrittää signaalin taajuus [2]. Kuva 3: Sinisignaali, josta on poimittu kaikki nollanylitykset Useimmiten tätä menetelmää käytetään ainoastaan tarkkailemaan yksittäisiä nollanylityksiä, eikä niinkään jaksollisia tapahtumia. Vastaavasti nollanylityksen tavoin voidaan signaalista seurata minkä tahansa raja-arvon ylittämistä. Tällöin ei kuitenkaan voida käyttää hyväksi merkin muuttumista rajapisteessä ja näin ollen algoritmista tulee hieman raskaampi.

6 Joskus on myös järkevää nollanylityksen sijaan tarkkailla muutoksen jyrkkyyttä nollan yli. Usein kohina aiheuttaa jyrkkiä pieniamplitudisia ylityksiä kun signaali on lähellä nollaa. Tällöin voidaan tarkkailla ainoastaan loivempia ylityksiä ja suodattaa jyrkemmät nousut kokonaan pois. Kohinaisen signaalin tapauksessa voidaan myös arvioida nollanylityksen amplitudia, ja suodattaa pienet nollan tuntumassa tapahtumat värähtelyt pois. Käytännössä nollanylitysmenetelmä toimii yksinkertaisessa muodossaan vain, jos signaali sisältää ainoastaan yhden taajuuden. Kuitenkin tarkastelemalla tilastollisesti nollanylitysten suhdetta aikaan voidaan signaalista erottaa useampiakin taajuuksia. Tekniikan toimivuuden kannalta on olennaista että signaali ei sisällä DC-komponenttia. DC-komponentti voi siirtää signaalin aika-akselin ylä- tai alapuolelle jolloin nollanylitykset jäävät havaitsematta. 2.4. Spektriin perustuvat menetelmät Signaalin sisältämän spektrin taajuudet voidaan esittää tarkasti Fourier muunnoksen avulla. Jatkuvassa Fourier -spektrissä näkyvät kaikki taajuudet välillä -.... Jokaisen taajuuden kohdalla on amplitudi, joka kertoo kyseisen taajuuskomponentin määrän signaalista. Digitaalitekniikassa käytetään Fourier muunnoksen diskreettiä muotoa sillä jatkuva-aikaisen signaalin tallennus ja käsittely vaatisi äärettömän paljon kapasiteettia. Diskreetissä tapauksessa signaali näytteistetään, eli siitä otetaan näytteitä tietyin väliajoin. Näytteiden oton aikavälistä muodostuu näytteenottotaajuus. Signaalin sisältämät taajuudet diskreetillä signaalilla rajoittuvat nollasta näytteenottotaajuuteen. Nyquistin teoreeman mukaan tätä suurempia taajuuksia ei voida diskreetin signaalin tapauksessa esittää[3]. Kuva 4: Aikatason signaali, jossa kahta sinikomponenttia summautuneena

7 Ylivoimaisesti yleisin metodi diskreetin Fourier muunnoksen ottamiseen signaalinkäsittelyssä on FFT (Fast Fourier Transform) [4] [5]. Diskreetti Fourier muunnos voidaan yleisesti esittää muodossa X k = N 1 n= 0 x n e n i2πk N k = 0,..., N 1 (2.8) FFT:n avulla on mahdollista selvittää signaalin dominoiva taajuus käytännössä etsimällä FFT spektrin maksimikohta. Jos signaali sisältää useita muita taajuuksia, ne näkyvät pienempinä piikkeinä spektrissä. Kuvassa 5 on esitetty Fourier spektri kuvan 4 signaalista. Kahden signaalin taajuuspiikit ovat selvästi havaittavissa spektristä. FFT muodostaa spektrin siten, että se sisältää taajuudet nollasta näytteenottotaajuuteen. Näytteenottotaajuuden puolikasta suuremmat taajuudet kuitenkin laskostuvat, ja toinen puolisko spektristä on käytännössä ensimmäisen puoliskon peilikuva. Tämä ilmiö on selvästi havaittavissa myös kuvasta 5. Kuva 5: FFT spektri kuvan 4 signaalista 2.5. Goertzel algoritmiin perustuvat menetelmät Goertzel algoritmin kehitti tohtori Gerald Goertzel vuonna 1958. Algoritmin laajin käyttökohde on puhelimien valintaäänissä. DTMF tekniikalla tuotetut matalataajuiset valintaäänet voidaan helposti tunnistaa Goertzel algoritmin avulla.

8 Goertzel algoritmi identifioi FFT:n tapaan taajuuskomponentteja signaalista. FFT:stä poiketen algoritmi etsii tiettyä ennalta määrättyä taajuutta. Goertzel algoritmi on varsinkin pienillä taajuuksilla tehokkaampi kuin FFT johtuen pienemmästä määrästä vaadittavia laskutoimituksia. FFT:n avulla voidaan esittää signaalin taajuuksia nollasta puoleen näytteenottotaajuutta. Spektriin tulee mukaan taajuuksia tältä väliltä joiden määrä on puolet alkuperäisen signaalin näytemäärästä (spektriin tulee saman verran näytteitä kuin alkuperäisessä signaalissa). Jotta Goertzel algoritmia olisi järkevä käyttää, kiinnostavan taajuuskaistan sisältämien näytteiden määrä spektrissä tulisi olla 5 < log N (2.9) 6 M 2 missä N on FFT spektrin taajuuksien (näytteiden) määrä ja M on Goertzel spektrin taajuuksien määrä. Jos taajuuksia on enemmän kuin yllä oleva kaava sallii, Goertzel algoritmi tuottaa enemmän kertolaskuja kuin FFT ja on näin ollen raskaampi toteuttaa [3]. Kuvassa 6 on esitetty Goertzel spektri kuvan 4 signaalista. Toisin kuin FFT:n tapauksessa, tässä spektri ulottuu ainoastaan rajatulle taajuuskaistalle. Jos laskennassa käytetään saman verran näytteitä kuin FFT:n laskemisessa, saadaan parempi taajuusresoluutio. Näin ollen siis yksittäisten taajuuspiikkien sijainti tarkentuu. Kuva 6: Goertzel spektri kuvan 4 signaalista

9 3. ESTIMOINTIALGORITMIEN TOTEUTUS Työn taajuusestimointialgoritmit on tehty käyttämällä hyväksi numeerisen laskentaohjelmiston Matlab:in skriptikieltä. Jokaiselle algoritmille on kirjoitettu yksi funktio. 3.1. Esikäsittely Todellinen signaali sisältää korkeataajuista kohinaa, joten ennen varsinaista taajuuden arviointia se täytyy esikäsitellä. Kohina poistuu helposti suodattamalla signaali alipäästösuotimella. Ennen suodatusta signaali täytyy ikkunoida. Koko signaali käsitellään ikkuna kerrallaan. Sopivin ikkunan haluttujen taajuuksien poimimiseen oli 100 näytettä. Näytteenottotaajuus signaaleissa on noin 2000 Hz. Tällöin pienin taajuus, joka voidaan ikkunasta vielä erottaa on 20 Hz. Haluttu taajuus kaista oli sadasta hertsistä ylöspäin, joten ikkunan koko on hyvä. Kun signaali on ikkunoitu, voidaan siitä poistaa DC-komponentti. Tämä tehdään vähentämällä jokaisesta näytteestä koko ikkunan näytteiden keskiarvo. Keskiarvo otetaan talteen myöhempää tarkastelua varten. Suodatuksen pehmentämiseksi ikkunaan voidaan käyttää ikkunafunktiota. Hanning ikkuna sopii tähän tarkoitukseen hyvin. Tämän jälkeen suunnitellaan käytettävä suodin. Tässä tapauksessa FIR-suodin on riittävä. Hyvä rajataajuus voisi olla vaikka 250 Hz, jolloin kaikki kiinnostavat taajuuden jäävät jäljelle. Itse suodatukseen löytyy valmis funktio, joka käy läpi koko signaalin käyttäen suunniteltua suodinmaskia. Tulossignaalin pitäisi olla nollan ympärille jakautunut ja sisältää ainoastaan pieniä taajuuksia. 3.2. Taajuuden estimointialgoritmit 3.2.1. Lineaarinen ennustus Lineaaristen ennustuskertoimien laskemiseen on Matlabissa myös oma valmis funktionsa. Käytännössä jokaiselle kehykselle lasketaan ennustuskertoimet, ja signaali suodatetaan kertoimista saatavalla käänteissuodattimella. Tulossignaaliin pitäisi jäädä pääosin vain perustaajuuden mukaisia arvoja ja muut arvot ovat suodatuksen jälkeen vaimentuneet pienemmiksi. Tämä helpottaa perustaajuuden irrottamista signaalista. Tämä algoritmi ei siis suoraan tuota tuloksenaan varsinaista päätaajuutta, vaan lähinnä

10 vain vahvistaa sitä signaalissa. Tämän jälkeen se pitää vielä esimerkiksi FFT:n avulla laskea. 3.2.2. Autokorrelaatio Autokorrelaation määrittämiseen löytyy myös valmis funktio Matlabista. Kuten lineaarisen ennustuksen tapauksessa, autokorrelaation käyttäminen ei sovellu signaalin taajuuden määrittämiseen suoraan. Algoritmin tuloksena saadaan signaali, josta löytyy korrelaatiopiikki päätaajuuden mukaisesti aikatasossa. Kun signaalista on muodostettu autokorrelaatiofunktio, täytyy vielä arvioida siitä erottuvien piikkien välimatka taajuuden laskemiseksi. Autokorrelaatiofunktiosta voi irrottaa dominoivan taajuuden usealla eri tavalla. Yksinkertaisin näistä on laskea taajuus suoraan kahden amplitudiltaan suurimman piikin välimatkasta. 3.2.3. Nollanylitys Nollanylitysten havaitseminen Matlabilla onnistuu kätevimmin tarkkailemalla signaalin merkin muutoksia. Tämä vaatii sen, että taajuuskomponentin amplitudi on riittävän suuri, jotta suuremmat taajuudet eivät kumoaisi sen nollanylitystä. Nollanylitysten indeksit tallennetaan vektoriin. Indeksien aikavälien perusteella voidaan arvioida signaalin taajuus. 3.2.4. FFT Taajuuden arviointi FFT:n avulla on helppoa Matlabin avulla. Ohjelmisto tarjoaa valmiin funktion FFT:n laskemiseen, ja spektristä täytyy ainoastaan arvioida voimakkain taajuuspiikki ja sitä vastaava taajuus. 3.2.5. Goertzel Goertzel algoritmin perusteella voidaan määrittää signaalin taajuus hyvin samaan tapaan kuin FFT:n tapauksessa. Poiketen FFT:n laskemisesta, tässä täytyy ensin määrittää taajuuskaista jolle algoritmia sovelletaan. Tässä tapauksessa sopiva kaista on 50-250 Hz. Tuloksena syntyy hyvin FFT spektriä vastaava taajuusspektri valitulla taajuuskaistalla. 3.3. Tulosten esittäminen Taajuusestimoinnin suorittava Matlab funktio tallentaa kullekin kehykselle löydetyt päätaajuudet vektoriin ajan suhteen. Jokaisesta kehyksestä irrotetut DC komponentit tallennetaan myös omaan vektoriinsa. Tulokset esitetään myös graafisesti. Jokaiselle metodille kuvataan samaan ikkunaan alkuperäinen signaali, irroitetut taajuudet sekä DC komponentti.

11 4. ESTIMOINNIN SUORITUSKYVYN MÄÄRITYS 4.1. Simulointi Matlabilla koodattujen algoritmien toiminnan testaukseen on laadittu testidatajoukko (F1.1), joka sisältää eritaajuuksisia sini- ja kolmioaaltoja. Taajuuskomponentteja on myös summattu keskenään ja niihin on lisätty kohinaa. 4.1.1. Esikäsittely Signaalin suodatus täytyy toteuttaa niin, että mitään taajuusinformaatiota halutulta kaistalta ei häviä. Kuitenkin epäkiinnostavat suuremmat taajuudet olisi hyvä saada eliminoitua. Signaalin rajataajuudeksi valittiin 400 Hz, joka on varmasti riittävän suuri. Suotimeen otettiin 101 kerrointa, mikä on varmasti riittävä määrä. Itse suodinkertoimet muodostettiin käyttämällä Matlabin firpm-komentoa. Tämä luo alipäästösuodattimen suodinkertoimet halutulle rajataajuudelle. Suotimen amplitudi- sekä vaihevaste on piirretty kuvaan 7. Suotimen vaihe päästökaistalla on lineaarinen ja päästökaistan amplitudivaihtelut ovat kohtalaisen pieniä. Näin ollen suodin toteuttaa riittävät vaatimukset. Kuva 7: Suunnitellun suotimen taajuusvaste (amplitudi- sekä vaihevaste)

12 Kuvassa 9 on suodatettu kuvan 8 signaali suunnitellulla suotimella. Kuvasta on helppo havaita, että suodin poistaa suurimman osan korkeammista taajuuskomponenteista. Kuvan 9 signaalissa haluttu matalampitaajuuksinen signaali on täysin dominoiva, jolloin sen taajuusarvo on myös helppo määrittää. Kuva 8: Useita taajuuskomponentteja sisältävä signaali aikatasossa Kuva 9: Halutun rajataajuuden mukaan alipäästösuodatettu signaali

13 4.1.2. Lineaarinen ennustus LP-kertoimia kannattaa olla melko vähän, jotta ennustuskertoimet eivät poimi liikaa epäkiinnostavia taajuuskomponentteja tulossignaaliin. Testisignaalit toimivat mukavasti, kun kertoimia on noin viisi. Tulossignaaliin ei jää ainoastaan haluttua taajuuskomponenttia, mutta muut komponentit vaimenevat silti melkoisesti. Kuvassa 2 näkyy selvästi miten LPkertoimilla suodatetusta signaalista on hävinnyt kohinaa sekä korkeataajuisempia komponentteja. Kuva 10: Useita taajuuksia sekä kohinaa sisältävä signaali Kuvassa 11 on suodatettu kuvan 10 signaali käyttämällä viittä signaalin avulla tuotettua LP-kerrointa. Suodatustuloksessa näkyy selvästi, miten heikompitehoiset taajuude ovat suodattuneet pois ja dominoiva taajuus on jäänyt jäljelle. Tulosta voidaan tehostaa suodattamalla tulossignaali uudestaan siitä lasketuilla LP-kertoimilla. Kuvan 11 signaalin suodatutsulos näkyy kuvassa 12. Käytännössä kaikki muut taajuuskomponentit ovat hävinneet kuvasta ja jäljellä on yksi puhdas siniaalto. Signaalissa on kuitenkin havaittavissa jo pientä vaihevääristymää joskin taajuus on alkuperäisen signaalin perustaajuus.

14 Kuva 11: Kuvan 10 signaali suodatettu käyttäen viittä LP-kerrointa Kuva 12: Kuvan 10 signaali suodatettu kahteen kertaan käyttäen viittä LP-kerrointa

15 4.1.3. Autokorrelaatio Autokorrelaation avulla saadaan kätevästi vahvistettua eniten korreloivaa eli signaalin vahvinta taajuuskomponenttia. Matlabin autokorrelaatiofunktioon voi määritellä ristikkäin verrattavien näytteiden määrän eli niinsanotun korrelaatioikkunan. Tämä kannattaa valita niin että muutama jakso haluttua tulostaajuutta mahtuu korrelaatioikkunaan. Ikkuna ei saa kuitenkaan olla liian leveä, jottei epäkiinnostavat taajuudet vaikuta korrelaatiotulokseen. Muiden taajuuskomponenttien sekä kohinan vaikutuksesta korrelaatio pienenee edettäessä ikkunan loppua kohden. Kuva 13: Autokorrelaatio kuvan 10 signaalista Kuvassa 13 näkyy hyvin miten kuvan 10 signaali korreloi itsensä kanssa. Vaikka autokorrelaatiosignaalissa ei signaalin alkuperäistä vaihe-informaatiota ole saatavilla, on dominoiva taajuus sitäkin selvemmin esillä. Kuten LP-suodatuksen tapauksessa, myös autokorrelaatiosignaalista voidaan ottaa uudestaan autokorrelaatio. Tämä täytyy tosin tehdä alkuperäisen autokorrelaatioikkunan murto-osalla signaalin ollessa ikkunan pituinen. Kuvan 14 signaali on kuvan 13 autokorrelaatiosignaali jossa autokorrelaatioikkunan pituus on yhtä pienempi kuin edellisessä tapauksessa. Jäljellä on käytännössä vain yhtä taajuutta. Koska ikkuna oli lähes alkuperäisen ikkunan kokoinen, korrelaatio pienenee nopeasti.

16 Kuva 14: Autokorrelaatio kuvan 13 signaalista 4.1.4. Nollanylitys Laskettaessa signaalin nollanylityksiä täytyy halutun taajuuskomponentin ylittää nollataso kaksi kertaa taajuusjakson aikana. Näin nousevien nollanylitysten välimatkasta saadaan perustaajuus irti. Nollanylitysten laskeminen sopii, kun signaali on yksinkertainen ja DC-taso saadaan täysin poistettua. Yksittäisen sinisignaalin tapauksessa signaalin taajuus on helppo määrittää nollanylitystaajuuden perusteella. Tämä on tehty kuvassa 15. Sinisignaalin taajuus oli 100 Hz ja tulossignaalissa on havaittavissa ainoastaan pientä poikkeamaa tästä arvosta. Käytettäessä samaa metodia hieman monimutkaisemman signaalin taajuuden määrittämiseen, tekniikan haitat tulevat selkeästi esille. Kuvassa 16 on laskettu 3 sinikomponenttia sisältävästä signaalista perustaajuutta. Tulossignaalissa on havaittavissa huomattavasti enemmän vaihtelua kuin yksinkertaisemman tapauksen kohdalla.

17 Kuva 15: Taajuus määritetty nollanylityksiä laskemalla yksittäisestä sinisignaalista Kuva 16: Taajuus määritetty laskemalla nollanylityksiä kolme sinikomponenttia sisältävästä signaalista

18 4.1.5. FFT FFT:n avulla saadaan perustaajuus signaalista helposti irroitettua. Ikkunan koko täytyy kuitenkin valita niin että riittävän monta perustaajuuden jaksoa mahtuu mukaan. Jos ikkunan koko taas on liian iso, kohinan sekä muiden heikompien taajuuskomponenttien häiriövaikutus kasvaa. Keskimääräisesti hyvä ikkunanpituus testiaineistolle oli 150 näytettä. Kuvassa 4 on käytetty ikkunanpituus on 200 näytettä, jolloin taajuusvektoriin saattaa joutua virheellisiä taajuuden arvoja (80 Hz) poiketen oikeasta taajuudesta (120 Hz). Kuva 17: Taajuus määritetty FFT:n avulla samasta lähtösignaalista kuin kuvassa 16 Kuvasta 17 huomaa selvästi FFT:n ja nollanylitysten laskemisen eron. FFT:n avulla voidaan poimia ongelmitta useamman sinin joukosta dominoiva taajuus. Kuvassa 18 on luotu hieman monimutkaisempi testisignaali, joka sisältää usean taajuuskomponentin lisäksi kohinaa sekä DC-komponentin. Kuvassa 19 on määritetty tämän signaalin päätaajuus FFT:n avulla. Tuloksessa näkyy jo hieman epätarkkuutta ja signaalin perustaajuus 100 Hz vääristyy tuloksessa hieman yli hertsin verran. Tästäkin signaalista taajuus saadaan estimoitua kohtalaisen tarkasti.

19 Kuva 18: Useita sinikomponentteja, kohinaa sekä DC-komponentin sisältävä signaali Kuva 19: Taajuus määritetty FFT:n avulla kuvan 18 signaalista

20 4.1.6. Goertzel Goertzel algoritmi toimii hyvin samaan tapaan FFT:n kanssa. Alussa täytyy vain määritellä taajuuskaista jossa kiinnostavat taajuudet sijaitsevat. Mitä paremmin taajuuskaista tiedetään, sitä tehokkaampi Goertzel-algoritmi on suhteessa FFT:n käyttöön. Algoritmi kuitenkin karsii suoraan pois kaistan ulkopuoliset taajuudet, joten kaistan täytyy olla riittävän leveä. Kuvassa 20 on analysoitu kuvan 18 perustaajuus. Virhe on hieman edellisen menetelmän virhettä pienempi, alle puoli hertsiä. Mitä tarkemmin Goertzel algoritmille annetaan haluttu taajuuskaista, sitä tarkempi tulos saadaan. Kuva 20: Taajuus määritetty Goertzel-algoritmin avulla kuvan 18 signaalista 4.2. Validointi todellisuutta vastaavalla aineistolla Tässä luvussa testaamiseen käytetään hyvin realistista testisignaalia. Signaalissa (Kuva 21) on mukana aitoa häiriöistä aiheutunutta epätasaista kohinaa sekä erittäin vahva DCkomponentti. DC-komponentti on kohtalaisen helppo irrottaa signaalista keskiarvomenetelmällä. Kuvassa 22 on alkuperäisestä irroitettu DC-komponentti. Sen muodosta näkee että keskiarvon laskeminen ikkunasta on kohtalaisen hyvä menetelmä DC-komponentin määrittämiseen.

21 Itse taajuussignaalissa (Kuva 23) on jo hieman vaihtelua. Erityisesti jyrkissä DC-tasojen vaihteluissa arvioidussa taajuudessa on huomattavia heittelyitä. Signaalin tasaannuttua tietylle tasolle myös arvioitu taajuus on kohtalaisen tarkka. Kuvasta näkyy selvästi myös aika-taajuusresoluution aiheuttama taajuusinformaation kvantisoituminen. Signaali voi saada ainoastaan tiettyjä taajuuden arvoja todellisen taajuuden arvon ollessa jossain niiden välimaastossa. Kasvattamalla ikkunan kokoa tai näytteenottotaajuutta saadaan tätä virhettä pienennettyä. Ikkunan kokoa kasvattamalla kuitenkin myös aikaresoluutio huononee. Kuva 21: Testisignaali, jossa on kiinnostavan taajuuden lisäksi DC-komponentti sekä realistista kohinaa Kuva 22: Kuvan 21 signaalista eroteltu DC-komponentti

22 Kuva 23: Kuvasta 21 irroitettu taajuusdata halutulta taajuuskaistalta 4.3. Johtopäätökset suorituskyvystä Käytettävistä algoritmeista FFT on selvästi raskain. Kun diskreetti Fourier muunnos lasketaan perinteisesti kertomalla jokainen taajuuskomponentti keskenään, vaadittavia kertolaskuja syntyy N 2 kappaletta, missä N on taajuuskomponenttien lukumäärä. Käytännössä kaikki FFT-algoritmit pystyvät supistamaan tämän N*log(N) kertolaskuun. Goertzel algoritmi on käytännössä yhtä raskas kuin FFT. Kuitenkin taajuuskaistan määrittäminen pudottaa vaadittavien laskutoimitusten määrää. Taajuuskaistan pieneneminen suhteessa näytteiden määrään on lähes suoraan verrannollinen laskutoimitusten määrään. Ehdottomasti kevyin tapa on nollanylitysten laskeminen. Optimitapauksessa signaalista täytyy ainoastaan poimia nousevia nollanylityksiä joiden perusteella perustaajuus voidaan määrittää.

23 5. TULOSTEN ARVIOINTI Paras vaihtoehto signaalin päätaajuuden määrittämiseen näyttäisi olevan arviointi suoraan signaalin Fourier-spektrin taajuuspiikkejä. Kuitenkin FFT:n laskeminen koko taajuusalueelta on raskasta. Kun kehyksiä on suuri määrä, saattaa FFT:n jatkuva laskeminen hidastaa koko järjestelmän toimintaa. Näin ollen kannattaa itse päätaajuuden laskemiseen käyttää hieman kapeampaa taajuuskaistaa. Tämä onnistuu hyvin Goertzelalgoritmin avulla. Kun kiinnostava taajuusalue rajataan alueelle 50-250 Hz, tekee Goertzel-algoritmi taajuusanalyysin huomattavasti FFT:tä nopeammin. Jos laskentanopeutta halutaan entisestään kasvattaa, voidaan taajuusanalyysi suorittaa laskemalla signaalin nollanylityksiä. Tällöin vaadittavien laskutoimituksen määrä on huomattavasti pienempi kuin taajuusanalyysiä käyttävien metodien kohdalla. Nollanylitys-metodia käytettäessä on kuitenkin riskinä heikompien amplitudipiikkien huomiotta jättäminen. Tällöin halutun taajuuden sijasta saattaa tulostaajuudeksi muodostua jokin virheellinen taajuus. Nollanylitys-metodin epävarmuutta voidaan pienentää käyttämällä päätaajuutta korostavia metodeja. Autokorrelaatiosignaalin avulla voidaan päätaajuus erottaa kahden voimakkaimman korrelaatiopiikin välimatkasta. Tarvittaessa muiden taajuuskomponenttien häiriövaikutusta voidaan vielä pienentää suodattamalla signaali LP-suodattimella.

24 LÄHTEET [1] Jaffard, Stéphane, Meyer, Yves, Ryan, Robert, Wavelets: Tools for Science & Technology, Society for Industrial and Applied Math, ISBN:9780898714487 [2] Khan, Ashfaq, 2005, Digital Signal Processing Fundamentals, Cengage Charles River Media, ISBN:9781584502814 [3] Gaydecki, Patrick, 2004, The Foundations of Digital Signal Processing: Theory, Algorithms and Hardware Design, The Institution of Electrical Engineers, London, United Kingdom, ISBN:9780852964316 [4] Byrne, Charles, 2005, Signal Processing: A Mathematical Approach, A K Peters, ISBN:9781568812427 [5] Allen, Ronald, Mills, Duncan, 2004, Signal Analysis : Time, Frequency, Scale, and Structure, John Wiley & Sons, Incorporated, ISBN:9780471234418 [6] Spanias, Andreas, Painter, Ted, Atti, Venkatraman, 2007, Audio Signal Processing and Coding, John Wiley & Sons, Inc., ISBN:9780471791478

25 LIITTEET Työssä käytetty matlab koodi. Funktio F1.1: Testisignaalin generoimiseen tarkoitettu funktio function [x,t] = annasignaali(mika) % function [x,t] = annasignaali(mika) % % Palauttaa halutun testisignaalin. "x" = näytteiden amplitudit ja "t" = % vektorin x aikavektori. Muuttujaan "mika" tulee testisignaalin tyyppi. % % Mahdollisia "mika" arvoja ovat: % 1 : Kolmioaalto % 2 : Kohinainen kolmioaalto % 3 : Siniaalto % 4 : Kohinainen siniaalto % 5 : Useita sinikomponentteja summautuneena ( vahvimman taajuus 100 Hz ) % 6 : Useita sinikomponentteja ja kohinaa % 7 : Useita sinikomponentteja summautuneena ( vahvimman taajuus 100 Hz ) % 8 : Useita sinikomponentteja ja kohinaa % 9 : Useita sinikomponentteja ja kohinaa sekä DC komponentti % Näytteenottotaajuus Fs = 2000; % Signaalin pituus (sekuntia) aika = 16; pituus = aika*fs; % näytettä % Aikavektori t = (0:1/pituus:1-1/pituus); t = t*aika; % DC -komponentti DC = ones(1,length(t)); DC(1:0.2*pituus) = 50; DC(0.2*pituus+1:0.4*pituus) = 50:50/(0.2*pituus):100-50/(0.2*pituus); DC(0.4*pituus+1:0.6*pituus) = 100; DC(0.6*pituus+1:0.8*pituus) = 100-50/(0.2*pituus):-50/(0.2*pituus):50; DC(0.8*pituus+1:pituus) = 50; % Käytettäviä taajuuksia f1 = 100; f2 = 600; f3 = 800; f4 = 1200;

26 f5 = 2200; f6 = 3000; %Käytettävä kohina s = randn(1,length(t)); s = 0.2*s; % Kolmioaalto if (mika == 1) x = sawtooth(2*pi*t*f1,0.5); end % Kohinainen kolmioaalto if (mika == 2) x = sawtooth(2*pi*t*f1,0.5); x = x+s; end % Siniaalto if (mika == 3) x = sin(2*pi*t*f1); end % Kohinainen siniaalto if (mika == 4) x = sin(2*pi*t*f1); x = x+s; end % Useita sinikomponentteja summautuneena if (mika == 5) x = 2*sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f4); end % Useita sinikomponentteja summautuneena kohinalla if (mika == 6) x = 2*sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f4); x = x+2*s; end % Useita sinikomponentteja summautuneena if (mika == 7) x = 2*sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3)+sin(2*pi*t*f4)+sin(2*pi *t*f5)+sin(2*pi*t*f6); end % Useita sinikomponentteja summautuneena kohinalla if (mika == 8) x = 2*sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3)+sin(2*pi*t*f4)+sin(2*pi *t*f5)+sin(2*pi*t*f6); x = x+3*s; end % Useita sinikomponentteja ja kohinaa sekä DC komponentti if (mika == 9) x = 4*sin(2*pi*t*f1);+0.5*sin(2*pi*t*f2)+0.5*sin(2*pi*t*f3)+... 0.5*sin(2*pi*t*f4)+0.5*sin(2*pi*t*f5)+0.5*sin(2*pi*t*f6);

27 end x = x+3*s; x = DC+x; Funktio F1.2: Funktio taajuuden analysointiin FFT:n avulla function [taajuudet,dckomponentti]=taajuus1(x,t) % FFT:n käyttöön perustuva taajuusanalyysi % % [taajuudet,dckomponentti]=taajuus1(x,t) % taajuus = signaalin vahvin sinikomponentti alueella 10-200 Hz % DCkomponentti = signaalin sisältämä DCkomponentti % % x = syötesignaali % t = syötesignaalin aikavektori % % Funktio ottaa syötteenään signaalia näytteenottotaajuudella 1-20 khz. % Se erottelee syötteestään vahvimman taajuuden, joka sijaitsee % taajuuskaistalla 0-200 Hz. Tulokseen tallennetaan myös signaalin % DC-komponentti. % Käytettävän ikkunan pituus (näytemäärän mukaan, minimi 100 ja maksimi 2000) n = floor(length(x)/30); n = max(100,n); n = min(2000,n); %Muuttujien alustusta DCkomponentti = ones(size(x)); taajuudet = ones(size(x)); %floor(length(x)/n)); x1 = x; % Näytteenottotaajuus N = length(x); T = max(t); Fs = N / T-1; % Estimoidaan taajuus joka näytteen kohdalla for i = 1:floor(length(x)/n)-1 % DC - komponentin poisto DCkomponentti(i*n-n+1:i*n) = DCkomponentti(i*n-n+1:i*n).* mean(x(i*n-n+1:i*n)); x1(i*n-n+1:i*n) = x(i*n-n+1:i*n) - mean(x(i*n-n+1:i*n)); % Ikkunointi win = hanning(n); x1(i*n-n+1:i*n) = x1(i*n-n+1:i*n).*win; % FFT X = abs(fft(x1(i*n-n+1:i*n))); X(ceil(length(X)/2):length(X)) = 0; % Tarvittaessa irrotetaan ensimmäinen taajuuspiikki % X(1) = 0; % Etsitään maksimiarvo FFT-spektristä [Fvalue,Find] = max(x); Find = (Find-1)/n*Fs;

28 % Monistetaan tulossignaaliin löydetty taajuus koko ikkunan matkalle ikkunataajuus = repmat(find,1,n); taajuudet(i*n-n+1:i*n) = ikkunataajuus; end % EOF Funktio F1.3: Funktio taajuuden analysointiin Goertzel-algoritmin avulla function [taajuudet]=taajuus2(x,t) % Goertzel algoritmiin perustuva taajuusanalyysi % %[taajuudet]=taajuus2(x,t) % taajuus = signaalin vahvin sinikomponentti alueella 10-200 Hz % x = syötesignaali % t = syötesignaalin aikavektori % % Funktio ottaa syötteenään signaalia näytteenottotaajuudella 1-20 khz. % Se erottelee syötteestään vahvimman taajuuden, joka sijaitsee % taajuuskaistalla 0-200 Hz. % Käytettävän ikkunan pituus (näytemäärän mukaan, minimi 100 ja maksimi 2000) n = floor(length(x)/30); n = max(100,n); n = min(2000,n); % Näytteenottotaajuus N = length(x); T = max(t); Fs = N / T-1; %Muuttujien alustusta taajuudet = ones(size(x)); %floor(length(x)/n)); x1 = x; % Estimoidaan taajuus joka näytteen kohdalla for i = 1:floor(length(x)/n)-1 % Ikkunan pituinen taajuusvektori N = (length(x1(i*n-n+1:i*n))+1)/2; F = (Fs/2)/N*(0:N-1); % Taajuuskaista, jossa kiinnostavat taajuudet sijaitsevat ind = find(f<200); % Goertzel-spektri taajuusalueelta X = abs(goertzel(x1(i*n-n+1:i*n), ind));% 1:n/2)); X(1) = 0; % Etsitään suurin taajuusarvo [Fvalue,Find] = max(x); Find = (Find-1)/n*Fs; % Monistetaan tulossignaaliin löydetty taajuus koko ikkunan matkalle ikkunataajuus = repmat(find,1,n); taajuudet(i*n-n+1:i*n) = ikkunataajuus; end % EOF

29 Funktio F1.4: Funktio taajuuden analysointiin nollanylityksiä tarkkailemalla function [taajuudet]=taajuus3(x,t) % Zero-crossing algoritmiin perustuva taajuusanalyysi % % [taajuudet]=taajuus3(x,t) % taajuus = signaalin vahvin sinikomponentti alueella 10-200 Hz % DCkomponentti = signaalin sisältämä DCkomponentti % % x = syötesignaali % t = syötesignaalin aikavektori % % Funktio ottaa syötteenään signaalia näytteenottotaajuudella 1-20 khz. % Se erottelee syötteestään vahvimman taajuuden, joka sijaitsee % taajuuskaistalla 0-200 Hz. Tulokseen tallennetaan myös signaalin % DC-komponentti. % Käytettävän ikkunan pituus n = floor(length(x)/30); % Näytteenottotaajuus (vakio) Fs = length(x)/max(t); %Muuttujien alustusta taajuudet = ones(1,floor(length(x)/n)); x1 = x; % Etsitään nollanylitykset ikkunasta ja estimoidaan ikkunan taajuus for i = 1:floor(length(x)/n)-1 % Nollanylitysten indeksit ind = union( find(x1(i*n-n+1:i*n)==0), find(conv(sign(x1(i*nn+1:i*n)),[1 1]) == 0) ); % Otetaan mukaan vain joka toinen ylitys (kokonainen jaksonaika) ind = ind(2:2:end); % Muodostetaan taajuusvektori nollanylitysten perusteella ind2 = zeros(1,length(ind)); ind2(2:end) = ind(1:end-1); ind2(1) = 0; ind = ind-ind2; Fsvektori = ones(1,length(ind))*fs; taajuudet(i) = Fsvektori/ind; end % EOF Funktio F1.5: Funktio autokorrelaation laskemiseen signaalista function [X]=taajuus4(x) % Funktio laskee autokorrelaation annetusta signaalista % % function [X,T]=taajuus4(x,t) % X = signaalin x autokorrelaatio % x = syötesignaali % % Funktio ottaa syötteenään signaalia näytteenottotaajuudella 1-20 khz. % Se muodostaa annetusta signaalista autokorrelaatiovektorin. % Käytettävän korrelaatioikkunan pituus (näytemäärän mukaan) n = floor(length(x)/30); % Lasketaan itse autokorrelaatio

30 X = autocorr(x,n); % EOF Funktio F1.6: Funktio signaalin suodattamiseen LP-kertoimilla function [X]=taajuus5(x) % Funktio suodattaa annetun datan lineaarisella ennustussuotimella % Käytännössä suodin heikentää kaikkia muita taajuuskomponentteja paitsi % päätaajuutta. % % function [X]=taajuus5(x) % X = LP-polynomin avulla suodatettu vektori syötesignaalista % x = syötesignaali % % Funktio ottaa syötteenään signaalia näytteenottotaajuudella 1-20 khz. % Tuloksena suodatettu signaali, jossa on enemmän tai vähemmän jäljellä % vain alkuperäisen signaalin päätaajuus. % Lineaaristen ennustuskertoimien määrä N = 5; % LP-kertoimet A = lpc(x,n); % Suodatetaan signaali lpc-kertoimilla X = filter(1,a,x); % EOF Funktio F1.7: Funktio signaalin alipäästösuodattamiseen function [X]=taajuus6(x,t) % function [X]=taajuus6(x,t) % % Funktio suorittaa annetulle datalle alipäästösuodatuksen. % Käytössä 101 pituinen ikkuna ja lineaarivaiheinen FIR suodin % Käytettävän ikkunan pituus n = 101; % Näytteenottotaajuus N = length(x); T = max(t); Fs = N / T-1; % Luodaan suodinkertoimet halutun rajataajuuden mukaan Wn = 400/(Fs*2); B = firpm(n,[0 Wn Wn+0.01 1],[1 1 0 0]); % figure % freqz(b) % Suodatetaan signaali X = filter(b,1,x); end %EOF