INF3460 våren 2009 Prosjekt i digital signalbehandling og akustikk Prosjektplan Innføring Lyd er kontinuerlige lufttrykkvariasjoner i tid (som sprer seg i rom). Med unntak av noen spesialtilfeller kan ikke kontinuerlige variasjoner (funksjoner) representeres eksakt på en datamaskin. Vi kan representere lyden på en datamaskin ved å måle lufttrykket ved gitte tidspunkt og rekonstruere en tilnærming til lufttrykkvariasjonene ved å bruke disse utplukkene. Målingene av lufttrykket, ofte kalt samplene, kan lagres og manipuleres på en datamaskin før lyden rekonstrueres. Vi kaller en mengde av sampler for digital lyd. I en digital sammenheng refereres ofte lyd til som analog lyd for å unngå forvirring. Øret til oss mennesker registrerer frekvensene i lyden. Både taleforståelsen og vår musikalske evne tar i bruk frekvensanalyse for å avgjøre henholdsvis ord og musikkens kvalitet. Hjernen vår benytter seg også av frekvensene til å dekomponere lyden og fremheve deler av den. Eksempelvis vil hjernen vår fremheve menneskelig tale og ofte gjøre den forståelig selv i støyfylte omgivelser. Hjernen benytter seg også av frekvensene sammen med den spesielle konstruksjonen av øregangene våre til å lokalisere lydens opphav. Digital lyd representeres tilnærmet alltid, og enkelte ganger også analyseres, ved bruk av samplene, altså ved bruk lufttrykkvariasjonene direkte. Selv om vi har matematiske verktøy som gjør oss i stand til å transformere samplene til en representasjon av frekvenser, har det vist seg vanskelig å analysere frekvensspekteret digitalt. Som ikke det skulle vært nok, gjør diskretiseringen av lufttrykket frekvensspekteret mer uniformt og dermed vanskeligere å analysere. Likevel er vi i mange situasjoner i stand til å gjøre en fornuftig frekvensanalyse digitalt, men denne frekvensanalysen blir tilnærmet alltid langt mindre robust enn den vi selv er utstyrt med. Dersom vi videre ønsker å utføre frekvensanalysen i sanntid, får vi i tillegg problemer med maskinkapasitet og spesielt maskinkraft. Den totale prosessen fra vi har fått en del av et signal til vi har funnet frekvensinnholdet og analysert dette må i gjennomsnitt ta mindre tid enn tiden det tar før vi får neste del av signalet. Valget av algoritme for transformering til frekvensdomenet er vanskelig og har blitt forsket mye på (Bartels og Linfoot, 2004), da denne må være så rask som mulig dersom vi skal kunne utføre en mest mulig grundig frekvensanalyse, som igjen gir kvaliteten på resultatet. Side 1 av 5
Mål Lage et program som kan ta opp lyd, finne frekvensinnholdet og fra dette lage et noteark i sanntid. Tanken er at det skal være et musikkinstrument som generer lyden og at programmet skal testes ved bruk av et piano. I første omgang vil programmet kun forsøke å finne enkelttoner, og dermed lage enkeltnoter, men dersom det er tid til overs bør det utvikles støtte for flere toner samtidig. Programmet skal ha et oversiktlig brukergrensesnitt og programmeres for Suns JRE versjon 1.6. Programmet skal kunne kjøres som en applikasjon og i nettlesere med Java-plugin i Windows og Linux-distribusjoner som har Sun JRE 1.6 installert. Notearket programmet lager skal kunne skrives til fil i en syntaks som forstås av LilyPond 1. Dersom tiden tillater det skal programmet også kunne skrive ut notearket direkte som en bildefil og/eller et PDF-dokument. Rammebetingelser Milepælene er fastsatt av faglærer. Prosjektet skal utføres i perioden fra tirsdag 3. februar til tirsdag 19. mai, altså på totalt 15 uker eller 75 arbeidsdager. Ettersom prosjektet skal utføres av kun én person som en tredjedel av en full arbeidsuke er det totalt 40 timer * 15 / 3 = 200 timer avsatt til prosjektet. Dette inkluderer forberedelser tilknyttet endelig fremføring og arbeid med poster og nettside. På ukebasis tilsvarer dette 40 timer / 3 = 13 timer og 20 minutter og på dagsbasis kun 40 timer / 15 = 2 timer og 40 minutter. Mangel på utstyr, eksempelvis tilgang til et piano, kan utsette og lage begrensninger for progresjonen med prosjekt, men ettersom prosjektet ikke krevet stort av utstyr håper og tror jeg dette vil ordne seg greit. Milepæler 1. Innlevering av prosjektplan og litteraturoversikt. 03.02.2009 2. Presentasjon av oppgavens bakgrunn og status på feltet. 10.02.2009 3. Demo1 Programmet kan ta opp lyd i sanntid (uten lagring), og jeg skal ha satt meg inn i problemer ved frekvensestimering og -analyse i sanntid. 4. Demo2 Programmet kan ta opp lyd og finne frekvensspekteret i sanntid, og jeg skal ha startet på programmet for å gjenkjenne noter. 24.02.2009 15 arbeidsdager 31.03.2009 40 arbeidsdager 5. Innlevering av poster. 05.05.2009 6. Innlevering av nettside. 12.05.2009 7. Ferdig Programmet kan lage og lagre (direkte og/eller indirekte) et noteark når det spilles enkelttoner på et piano i et støyfritt miljø. 19.05.2009 75 arbeidsdager 1 Et gratis og fritt program lisensiert under GNU General Public License ( http://www.gnu.org/copyleft/gpl.html ) som blant annet kan lage noteark fra filer med en spesifikk syntaks. Hjemmeside: http://lilypond.org Side 2 av 5
Oppgaver I prosjektplanleggingsfasen er det lurt å dele opp prosjektet i mindre deloppgaver og prøve å anslå tidsforbruk og avhengigheter til de forskjellige deloppgavene. Dette kan være nyttig for progresjonen og gi en følelse av hvor godt eller dårlig man har arbeidet i forhold til anslått tid, og på den måten gi en indikasjon på at man for eksempel må jobbe litt mer i tiden fremover. I tillegg blir man nødt til å analysere prosjektets deloppgaver mer nøyaktig og får dermed et bedre inntrykk av hvor de store utfordringene ligger og kan dermed prioritere disse. I et prosjekter med flere arbeidere kan slike prioriteringer skape store tidsbesparelser. Under vises først en list over deloppgavene og deretter et Gantt-diagram laget fra denne listen. Det burde nevnes at det ofte er vanskelig å anslå tidsforbruket på deloppgavene. Aktivitetsnummer Opptak av lyd Aktivitetsbeskrivelse 01 Teoristudie: Bli kjent med Javas Sampled Package («The Java TM Tutorials > Sound: Overview of the Sampled Package», 2008). 02 Teoristudie: Lære hvordan opptak av lyd utføres i sanntid med Javas Sampled Package («The Java TM Tutorials > Sound: Accessing Audio System Resources», 2008) («The Java TM Tutorials > Sound: Capturing Audio», 2008). 03 Implementering: Opptak av lyd i sanntid i Java for Suns JRE versjon 1.6. 04 Implementering: Lage en klasse som kan brukes til å vise lyd grafisk i sanntid. Frekvensberegning 05 Teoristudie: Lære om frekvensberegning og -estimering i sanntid. Disse temaene bør leses på samtidig siden valget av den beste beregningsalgoritmen kan avhenge av målet med beregningene, her frekvensestimering. Tidanslag (dager) Avhengigheter 1 Ingen 2 01 2 02 4 03 for uttesting, 7 Ingen Side 3 av 5
06 Implementering: Lage en metode som beregner frekvensene tilstrekkelig hurtig i sanntid. Med tilstrekkelig hurtig menes det at beregningene i gjennomsnitt skal ta mindre tid enn den tiden det tok å fange opp signalet. Samplingsraten skal være akseptabel. 07 Implementering: Lage en klasse som kan brukes til å vise frekvenser grafisk i sanntid. Programutvikling 14 03, 05 7 6 for uttesting, 08 Teoristudie: Lære om pianoets klang og overtoner. 2 Ingen 09 Implementering: Lage et program som kan gjenkjenne enkelttoner som spilles på et piano i sanntid. 10 Implementering: Lage en klasse som kan brukes til å lage og vise et noteark grafisk i sanntid. 11 Implementering: Lage en metode i notearkklassen som kan skrive en fil i en syntaks som forstås av LilyPond. Etterarbeid 10 06, 08 10 9 for uttesting, 3 10 for uttesting, 12 Lage poster. 4 Ingen 13 Lage internettside. 7 Ingen 14 Forberede den endelige framføringen. 2 10, 11, 12, 13 Merk at bare én aktivitet er satt opp om gangen. Dette er fordi prosjektet kun skal utføres av én person og denne personen jobber best med én ting om gangen. Eksempelvis er derfor aktiviteten med nummer 05 satt opp etter aktiviteten med nummer 04, som er siste aktivitet i delprosjektet om opptak av lyd i Java, dette til tross for at aktiviteten med nummer 05 ikke avhenger av noen aktiviteter. Side 4 av 5
Litteraturoversikt I denne tidlige fasen av prosjektet er det vanskelig å vite nøyaktig hvilken litteratur man vil benytte seg av. Under er derfor kun en forventet og trolig mangelfull litteraturoversikt. Den endelig litteraturoversikten vil trolig være langt større. Ambardar, A. 2006, Digital Signal Processing: A Modern Introduction, Thomson Learning, London. Bartels, M. og S. Linfoot, (september 2004), An Analysis of Real Time Implementation of Fourier Transform-based Frequency Recognition Algorithms, [online], IEEE International Symposium on Consumer Electronics. Tilgjengelig fra: <http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=01375919> [28.01.2009]. Kwok, H.K.C. og D.L. Jones, (oktober/november 1995), Instantaneous Frequency Estimation Using an Adaptive Short-Time Fourier Transform, [online], Conference Record of the Twenty-Ninth Asilomar Conference on Signals, Systems and Computers, Volume 1. Tilgjengelig fra: <http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00540607> [28.01.2009]. «The Java TM Tutorials > Sound: Accessing Audio System Resources», 2008, Sun Microsystems, <http://java.sun.com/docs/books/tutorial/sound/accessing.html> [03.02.2009]. «The Java TM Tutorials > Sound: Capturing Audio», 2008, Sun Microsystems, <http://java.sun.com/docs/books/tutorial/sound/capturing.html> [03.02.2009]. «The Java TM Tutorials > Sound: Overview of the Sampled Package», 2008, Sun Microsystems, <http://java.sun.com/docs/books/tutorial/sound/sampled-overview.html> [03.02.2009]. Uzun, I.S., A. Amira og A. Bouridane, (juni 2005), FPGA implementations of fast Fourier transforms for real-time signal and image processing, [online], IEE Proceedings Vision, Image and Signal Processing, Volume 152, Issue 3,. Tilgjengelig fra: <http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=01459902> [28.01.2009]. Xinglei Zhu, G. Beauregard og L. Wyse, (juli 2007), Real-Time Signal Estimation From Modified Short-Time Fourier Transform Magnitude Spectra, [online], IEEE Transactions on Audio, Speech, and Language Processing, Volume 15, Issue 5. Tilgjengelig fra: <http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04244543> [28.01.2009]. Side 5 av 5