Code Monkey home page Code Monkey logo

taajuustane's Introduction

TaajuusTane

Yksinkertaista taajuusanalyysia, Tiralabra II/2020.

Projektin ytimessä on ymmärtää paremmin signaaliprosessointia Fourier-muunnosten avulla, toteuttaen samalla yleisesti käytetty radix-2 DIT versio Cooley-Tukey FFT-algoritmista. Se on käyttöömme riittävän nopea, yleisesti tunnettu ja sen pseudokoodi sekä optimointi-ideoita on helposti saatavilla.

Sovellus analysoi lyhyitä äänitallenteita ja palauttaa signaalin perustaajuuden, eli dominantin aallonpituuden hertseinä. Tallenteen tulee olla 16bit mono WAV-tiedosto näytteenottotaajuudella 44100 Hz.

Käyttö

Ohjelman JAR-tiedosto löytyy ./gradlew build komennon suorittamisen jälkeen polusta app/build/libs, tai voit ladata sen Githubista kuten tämän dokumentin "Artefaktit Githubissa" -osiossa neuvotaan.

Ohjelma lukee annetun Wav(RIFF)-muotoisen, yksikanavaisen signed 16bit PCM-muotoisen tallenteen. Toteutusta ei ole suunniteltu yli 5 sekunnin mittaisille tallenteille, eikä analyysi välttämättä ota huomioon koko tallennetta. Ohjelma ilmoittaa mahdollisesti sivuutettujen näytteiden määrän suorituksen yhteydessä.

Esimerkiksi seuraavan komennon pitäisi antaa perustaajuudeksi 440 Hz:

java -jar app/build/libs/app.jar app/src/test/resources/440hz.wav

Lisää äänitiedostoja voi generoida ottamalla mallia esimerkiksi tästä python skriptistä tai käyttämällä saatavilla olevia äänen muokkamiseen soveltuvia ohjelmia.

Dokumentaatio

Edistyminen

Artefaktit Githubissa

Versionhallinnan main-haarasta tehdään automaattisesti ajo, jossa:

  • käännetään projekti ja tallennetaan JAR-paketti artefaktia Package,
  • ajetaan checkstyle ja tallennetaan raportti osaksi Reports artefaktia,
  • ajetaan testit ja tallennetaan raportti osaksi Reports artefaktia,
  • ajetaan jacoco testikattavuustyökalu ja tallennetaan raportti osaksi Reports artefaktia,
  • ajetaan Javadoc ja tallennetaan se Javadoc artefaktiksi.

Kaikki artefaktit (Artifacts) saa ladattua projektin Actions-välilehden alta, valitsemalla ensin jokin esitetyistä tuloksista (eli ajoista).

Linkkejä

taajuustane's People

Contributors

segrel avatar

Watchers

 avatar

taajuustane's Issues

Vertaisarviointi

Tiralabra vertaisarviointi

Projekti ladattu 26.11.2020 klo 10:00

Koodikatsaus

Jos tiedostoa/luokkaa ei ole mainittu, en keksinyt kommentoitavaa ja se on hyvä.

Kompleksi.java

Hyvältä näyttää. Tämä on oma mielipide - ehkä voisi nimetä a ja b -muuttujat kuvaavammin, kuin yhdellä kirjaimella (esim. muuttuja a voisi olla nimellä reaali tms). Tämä saattaa helpottaa koodin lukua ulkopuolisena ja vähentää riskiä käyttää vahingossa samaa muuttujanimeä myöhemmin uudestaan esim. jossain luokan metodissa.

Toisaalta, onhan muuttujat selitettty dokumentaatiossa.

Kompleksiluvun laskuoperaatiot on tehty fiksusti.

Tallenne.java

Hyvä kattava virheenhallinta.

Tyylillisesti voisi olla tyhjiä rivejä eri kokonaisuuksien välissä lukemisen helpottamiseksi (vrt. tavallisen tekstin kappalejaot). Mutta tämä on taas näitä omia mielipiteitä ja onhan kyseessä on kohtuu lyhyt koodipätkä.

Projektin rakenne

Varsin hyvä omasta mielestä tämän laajuiseen projektiin, jossa kuitenkin algoritmin suunnittelu ja toteutus on pääosassa.

Jos projekti olisi laajempi, esimerkiksi käyttöliittymä voisi olla omassa paketissaan, tiedostojen lukeminen omassa paketissaan jne.

Testit

Yksikkötestejä on tehty laajasti ja testikattavuus on hyvä. Testikattavuuden lisäksi testejä tehdessä on mietitty myös ohjelman toiminnan oikeellisuuden testausta.

Fourierille on tehty myös suorituskykytesti.

Testausdokumentin mukaan lisää testejä on luvassa.

Testaus on myös automatisoitu hyödyntäen Github Actionsia, mistä plussaa.

Toiminnan testailu

Python-skriptillä generoidut taajuudet toimi hyvin.

Tein vielä kokeeksi Audacityllä (generate->tone) siniaaltoa 2093Hz taajuudella ja vain 0.01 amplitudilla ja sovellus osasi napata taajuuden täydellisesti. Näkyi toimivan myös square ja sawtooth -waveformeilla.

Kaiken kaikkiaan hyvältä näyttää.

Vertaisarviointi2

vertaisarviointi 2

En valitettavasti saanut kummallakaan ohjeella jaria ajettua: no main manifest attribute, in app.jar. (Repositorio kloonattu 4.12.2020)

Kaikki oli todella hyvin dokumentoitua ja muuttujat yms. oli selitetty selkeästi.

Pakkausrakennetta olisi voinut jakaa hieman enemmän.

Testikattavuusraportin katsoin artefakteista ja vihreältä näyttää eli testikatttavuus näyttää hyvältä. Testit on jaettu moneen luokkaan sen mukaan mitä testaavat. Myös tosi hyvä idea laittaa repoon valmiiksi testinäytteitä. Harmi etten saanut ajettua ohjelmaa.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.