UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: Oppgavesettet er på 9 sider. Vedlegg: Tillatte hjelpemidler: INF2400 Digital signalbehandling 16. 23. april 2004, hjemmeeksamen Ingen Alle nødvendige, så lenge oppgaven løses individuelt Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Dette oppgavesettet består av 3 oppgaver. Skulle noe være uklart, så skriv klart hvilke forutsetninger du gjør for å løse oppgaven, og gå videre! Oppgave 1 og 2 er regneoppgaver, der det legges vekt på at svarene er logisk bygget opp, godt begrunnet og at det er lett å se hva som er endelig svar. Oppgave 3 involverer programmering i Java, og besvarelsen vurderes med hensyn på svar på spørsmålene, samt oversiktlighet og dokumentasjon av innlevert kode. Hjemmeeksamen teller 30 % av den totale karakteren i kurset. Det er ikke anledning til å samarbeide, da det utfra besvarelsene kan være vanskelig å skille mellom sunt samarbeid og ren avskrift. Besvarelsen skal leveres i tre identiske eksemplarer, innen fredag 23.april kl. 18.00. Oppgave 1 Sinusoider og sampling Gitt de to signalene x 1 (t) = A 1 cos(2πf 1 t + φ 1 ) og x 2 (t) = DC + A 2 cos(2πf 2 t + φ 2 ) der de ukjente verdiene A 1, A 2, f 1, f 2, φ 1, φ 2, og DC er reelle konstanter. 1a Angi betingelsene for at produktet x(t) = x 1 (t) x 2 (t) (1) er et periodisk signal. Begrunn svaret. (Fortsettes på side 2.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 2 x(t) Ideell C til D omformer x[n] Ideell D til C omformer y(t) f s f s Figur 1: Ideelle omformere mellom kontinuerlig og diskret tid 1b Gi et eksempel på praktisk bruk av å kombinere signalene x 1 (t) og x 2 (t) som i ligning 1, gitt betingelsene f 1 f 2, DC > A 2, DC > 0 og φ 1 = 0 Spesifiser rollen hvert av signalene x 1 (t) og x 2 (t) da har. Hvilken effekt har det på produktet x(t) at DC > A 2? 1c Gitt verdiene A 1 = 1 f 1 = 600 Hz φ 1 = 0 A 2 = 3 f 2 = 40 Hz φ 2 = π/3 DC = 6 Skriv signalet x(t) som en sum av sinusoider og skisser spektret. Er signalet periodisk? Finn i så tilfelle fundamentalperioden T 0. 1d Signalet x(t), som funnet i 1c, er inngangen til den ideelle kontinuerlig-tildiskret (C-til-D) omformeren i figur 1. Hvordan må samplingsfrekvensen f s velges hvis vi ønsker å unngå aliasing? 1e Sett samplingsperioden lik T s = 0.5 ms og finn utgangssekvensen x[n] fra C-til-D omformeren, uttrykt ved de prinsipale alias. Skisser spektret til x[n]. Den ideelle diskret-til-kontinuerlig (D-til-C) omformeren i figur 1 opererer på samplingsraten f s og rekonstruerer et signal y(t) fra sekvensen x[n]. Finn utgangen y(t). (Fortsettes på side 3.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 3 x[n] C B A D y[n] 1f Figur 2: Et blokkdiagram Sett samplingsperioden lik T s = 1 ms og finn utgangssekvensen x[n] fra C- til-d omformeren, uttrykt ved de prinsipale alias. Skisser spektret til x[n]. Finn utgangen y(t) fra den ideelle D-til-C omformeren, gitt denne samplingsperioden. Oppgave 2 FIR-filtrering 2a I figur 2 er det skissert et diskret-tid system ved hjelp av et rotete blokkdiagram. Finn differensligningen for y[n], gitt ved forsinkede versjoner av x[n] og de reelle koeffisientene A, B, C og D. Angi også tilhørende impulsrespons h[n]. Tegn et nytt blokkdiagram for dette systemet, nå på direkte form. 2b Et LTI-filter har impulsresponsen h[n] = cos(πn 2 )u[ n + 3] Er dette et FIR-filter? Begrunn svaret. Finn utgangen y[n] når inngangen er gitt ved x[n] = δ[n + 1] 2δ[n 1] (Fortsettes på side 4.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 4 2c Finn frekvensresponsen H(e j ˆω ), gitt ved R, til filtret med impulsrespons h[n] = δ[n] δ[n R] Finn et uttrykk for magnituden H(e j ˆω ) gitt ved R. Skisser H(e j ˆω ) og faseresponsen H(e j ˆω ) for R = 1. Hvilken effekt har det på H(e j ˆω ) dersom R økes? 2d Vi sender ut et informasjonssignal c(t) med flere frekvenskomponenter, der den høyeste frekvensen er begrenset ved f max 500 Hz. Samtidig vet vi at noen sender ut et annet signal v(t), med kjent frekvens f 0, for å ødelegge vår overføring. v(t) = cos(2π f 0 t), f 0 = 200 Hz, Resultatet er at summen x(t) av de to signalene x(t) = c(t) + v(t) ankommer mottakeren. Der samples kontinuerlig-tid signalet x(t) til diskrettid sekvensen x[n], med en samplingsrate f s = 1000 Hz. Kommenter valget av f s i forhold til samplingsteoremet. Angi x[n] så langt det lar seg gjøre med den informasjonen du har. 2e For å fjerne det uønskede signalet v(t), kjøres sampelsekvensen x[n] gjennom et filter med impulsrespons på formen h[n] = δ[n] δ[n R] Hvilke krav stilles til H(e j ˆω ) for at påvirkningen fra v(t) skal filtreres helt bort fra x[n]? Angi den minste verdien R kan ha for å oppnå dette kravet. Anta at informasjonssignalet c(t) er ukjent utover det at frekvensene er øvre begrenset av 500 Hz. Angi mulige ulemper forbundet med å filtrere bort uønskede frekvenser på denne måten. (Fortsettes på side 5.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 5 ^ jω H( e ) π ^ ω c ^ ω c π ^ ω Figur 3: Et ideelt lavpassfilter Oppgave 3 Java-programmering Et ideelt lavpassfilter med kuttfrekvens ˆω c har frekvensresponsen { H LP,ideell (e j ˆω 1 ˆω < ˆω c ) = 0 ˆω c < ˆω < π som vist i figur 3. Den tilhørende impulsresponsen er h LP,ideell [n] = ( ˆωc ) π ( sin(ˆωc n) ) = ˆω c n Dette er et lineært og tidsinvariant (LTI) filter. ( ˆωc ) sinc(ˆω c n), < n < π Filtre med uendelig impulsrespons er ikke implementerbare. En måte å lage et realiserbart filter på er å trunkere (avkorte) h LP,ideell [n] til et endelig intervall i n, nemlig M 2 n M 2 der vi antar at M er et heltall. Dette gir et FIR-filter med odde lengde 2 L = M + 1 og like orden M, som vi kaller h LP [n] h LP [n] = { ˆωc π sinc(ˆω cn), M 2 < n < M 2 0, ellers Det tilsvarende kausale filtret finner vi ved å forsinke h LP [n] med M 2 (2) sampler h LP [n] = { ˆωc sinc(ˆω π c(n M )), 2 0 n M 0, ellers Denne forsinkelsen av impulsresponsen introduserer, for alle FIR-filtre, en forsinkelse av utgangen y[n] i forhold til inngangen x[n], på M sampler. 2 (Fortsettes på side 6.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 6 Ettersom filtret antas å ha odde lengde L, vil forsinkelsen M 2 heltall sampler. representere et Den tilhørende frekvensresponsen kan, etter noen operasjoner, uttrykkes på formen H(e j ˆω ) = e j ˆω M 2 ˆω c π ( 1 + 2 M 2 1 sinc (ˆω c (k M 2 )) cos (ˆω ( M 2 k))) k=0 der faktoren e j ˆω M 2 representerer fasen til frekvensresponsen, mens resten av uttrykket representerer en reell amplitude-funksjon. I fasen gjenfinner vi forsinkelsen filtret introduserer, på M/2 sampler. Vi skal filtrere stereolyd fra en wav-fil. Støyen er en sinusoid, med en frekvens f 0. Først består oppgaven i å lese inn et støyfritt signal, legge på støy på en av kanalene og filtrere resultatet med et trunkert ideelt lavpassfilter. Senere skal det leses inn og filtreres på en lydfil der den ene kanalen er korrumpert av støy (med ukjent frekvens) på forhånd. Koden kan bygges på Java 5, men med utvidelser for å ta hensyn til stereolyd og filtrering av kun en kanal. Nødvendige klasser er pakket i ifi.dsb.jar, som også inneholder en implementasjon av klassen CircConvolution. Det stilles ikke store krav til det grafiske grensesnittet dere skal lage, forståelse er langt viktigere. Likevel blir denne delen litt utvidet i forhold til i Java 5, ettersom hver kanal nå skal behandles separat. Dere anbefales å bruke klassen SignalGraph, da skjer mye av vindusgenereringen automatisk, blant annet muligheten til å velge mellom plott i tids- eller frekvensdomenet. Et eksempel på bruk av denne klassen, som gir to grafer i samme plott, er gitt ved følgende kode: double [ ] chonefi ; double [ ] choneno ; SignalGraph graph = SignalGraph. c r e a t e ( " T i t l e ", " ylabel ", samplingrate, null ) ; graph. s e t S i g n a l (0,new S i g n a l ( chonefi ) ) ; graph. s e t S i g n a l (1,new S i g n a l (choneno ) ) ; Det er tilstrekkelig å hardkode hvilke array(er) som sendes til setsignal (), og endre dette ettersom hva du ønsker å plotte. Ved behov for samplingsraten, bør denne tas fra den lydfilen signalet leses inn fra, det sikrer konsistens og kan gjøres ved: SoundInput s i S t e r e o = new SoundInput ( f i l e n a m e ) ; double samplingrate = s i S t e r e o. getsamplerate ( ) ; (Fortsettes på side 7.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 7 3a Forklar hvorfor filtret med impulsrespons gitt i ligning 2 ikke er kausalt. 3b Skriv en klasse ExamFilter.java, som ligger utenfor ifi.dsb-pakken. Klassen er definert av skjelettet i listing 1 (neste side) og skal inneholde 3c konstruktøren ExamFilter(String filename, int inputlength, double[] h) en main-metode, som oppretter et ExamFilter-objekt og kaller start() setamplitude(double amplitude) og setfrequency(double frequency), metoder som setter frekvens og amplitude på sinus-signalet (støyen) metoden start (), som skal inneholde løkken som leser inn data, filtrerer og skriver ut (evt. spiller av). Data fra begge kanalene skal tas vare på, slik at resultatsignalet også er i stereo. metoden ilp (int length, double cutoff), som skal implementere et trunkert ideelt lavpassfilter. Kuttfrekvensen cutoff er den normaliserte vinkelfrekvensen ˆω c, gitt i radianer. Filtret kan antas å ha odde lengde. Les inn lydfilen utenstoy.wav. Legg selv på støy på den ene kanalen (kaller den kanal 1), velg en sinus med høyere frekvens enn de som finnes i inngangssignalet. Forklar hva du gjør og begrunn eventuelle valg du tar, gjerne med støtte i plott. Filtrer med ilp-filtret, og bruk en vilkårlig (odde) lengde L. Konvolver filtret bare med kanalen med støy på og velg en kuttfrekvens tilpasset frekvensene i støyen og signalet. Begrunn valget. Skriv begge kanalene (den filtrete kanal 1 og den ufiltrerte kanal 2) til en stereo wav-fil eller spill dem direkte av i stereo. Begge deler gjøres enkelt med klassen SoundOutput. Lytt til resultatet og beskriv det du hører. 3d Bruk nå et langt filter (f.eks. med lengde L = 101) og sett amplituden på støy-sinusoiden lavt. Plott den støybelagte kanal 1 både før og etter filtrering. Hva forventer du å se i plottet, jf diskusjonen om forsinkelse introdusert av filtret? Finner du denne effekten? Legg i tilfelle ved et eksempelplott der den er klart synlig, og vis ved regning at verdiene stemmer. Anta at filtreringen er vellykket, helt uten tap av ønskede frekvenser. Den lavpassfiltrerte kanal 1 kombineres med den støyfrie kanal 2 til et nytt (Fortsettes på side 8.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 8 import i f i. dsb. ; class ExamFilter { Listing 1: Java-skjelett ExamFilter ( S t r i n g filename, int length, double [ ] h) {} public static void main ( S t r i n g [ ] args ) { S t r i n g f i l e n a m e ; double [ ] h ; ExamFilter e f = new ExamFilter ( filename, 1 2 8, h ) ; // S e t t amplitude og f r e k v e n s på støy s i n u s } public void s t a r t ( ) { boolean stop ; / I n i t i a l i s e r o b j e k t e r f o r å l e s e f r a s t e r e o wav f i l e r, samt f o r å s p i l l e av/ s k r i v e t i l s t e r e o wav f i l e r. I n i t i a l i s e r SineGenerator o b j e k t ( f o r s t ø y ) og SignalGraph o b j e k t ( f o r p l o t t i n g ). Les f r a wav f i l, f ø r s t e gang. / while (! stop ) { / Generer nye støy v e r d i e r ( s i n u s ), l e g g t i l en av kanalene og k o n v e r t e r t i l f l y t t a l l. F i l t r e r korrumpert kanal og p l o t t vha k l a s s e n SignalGraph. Konverter t i l h e l t a l l og s k r i v ut / s p i l l av begge kanaler. Les nye lyd sampler, h v i s mulig. / } } public void setamplitude ( double amplitude ) {} public void setfrequency ( double frequency ) {} } public static double [ ] i l p ( int length, double c u t o f f ) {} (Fortsettes på side 9.)
Eksamen i INF2400, 16. 23. april 2004, hjemmeeksamen Side 9 stereosignal. På hvilken måte skiller dette resultatsignalet seg fra det vi kan lese fra utenstoy.wav? Begrunn. Lytt til utenstoy.wav og ditt filtrerte resultat. Kan du høre forsinkelseseffekten av filtreringen? Kan du tenke deg noen grunn til at øret kan ha problemer med å oppfatte denne effekten? 3e Bruk nå wav-filen medstoy.wav, som er lik som utenstoy.wav, bortsett fra at en støy-sinus allerede er lagt til. Avgjør først hvilken kanal det er lagt støy på. Hvorfor kan vi fremdeles filtrere med et lavpassfilter? Begrunn og legg ved plott som underbygger ditt svar. Filtrer lyden, for den kanalen der det er nødvendig. Begrunn valget av kuttfrekvens og beskriv/illustrer resultatet. Gjenfinner du forsinkelseseffekten her også? Test gjerne for flere valg av filterlengde L. 3f Anta at vi nå ønsker å oppheve den utilsiktede forsinkelseffekten som har vært diskutert i foregående deloppgaver, slik at begge kanalene i resultatsignalet er ved samme tid for et gitt sampel n. Kan du tenke deg (flere) måter å gjøre det på? Forklar kort. Implementer en "tidstilpasning" av den ufiltrerte kanalen til den filtrerte kanalen, i metoden start(). Forklar hva du gjør. Sett sammen resultatsignalet av den filtrerte kanal 1 og den støyfrie, tidstilpassede kanal 2. Kommenter i forhold til resultatet fra oppgave 3d, ved hjelp av hørbare forskjeller eller plott. Anta igjen at filtreringen er vellykket, uten tap av ønskede frekvenser. Er det nå noen forskjell på resultatsignalet (begge kanaler) og signalet i utenstoy.wav? Begrunn svaret. Lydfilene utenstoy.wav (uten pålagt sinus) og medstoy.wav (med pålagt sinus) legges ut med link fra eksamenssiden. Besvarelsen skal inneholde kommentert Java-kode dokumentasjon generert av javadoc svar på spørsmålene, presentert med nødvendige og illustrative plott