Signal- och Bildbehandling, TSBB4 Laboration : Sampling och rekonstruktion. DFT. Maria Magnusson, 7-8 Avdelningen för Datorseende, Institutionen för Systemteknik, Linköpings Universitet Laboration. Förberedelser inför laborationen Läs igenom hela laborationshandledningen noggrant. Läs i kurslitteraturen om sampling, rekonstruktion och DFT. Lös om möjligt förberedelseuppgifterna i labhandledningen innan laborationstillfället! De är markerade med en pekande hand.. Introduktion Figur visar hur den kontinuerliga signalen g(t), den impulstågssamplade signalens(t) och den med avkänning samplade signaleng d (n) förhåller sig till varandra. Figuren visar också hur deras fouriertransformer, TDFT och DFT förhåller sig till varandra. FRÅGA : Hur lyder samplingsteoremet?
Signaldomän Fourierdomän g(t) s(t) g d (n) g d (n) SAMPLA T NT NT t t F F TDFT G(f) s(t) = g(t) T III( ) t S(f) G(f)/T T S(f) g d (n) = g(nt) N g d (n) = g(nt) n G T (Ω) G D (k) DFT N N n T T N T G T (Ω) = S ( ) ( Ω πt G Ω πt) /T π π N f f Ω G D (k) = S ( ) ( k NT G k NT) /T k Figur : Samband mellan kontinuerlig fouriertransform, samplad kontinuerlig fouriertransform, TDFT och DFT. FRÅGA : Vilken beteckning har samplingsfrekvensen i Figur? FRÅGA 3: Vilket samband gäller mellanωoch f i Figur? FRÅGA 4: Vilket samband gäller mellank och f i Figur? FRÅGA 5: Vilken skalfaktor på höjden skiljer mellang D ( ) och G( )?
.3 Start av laboration Börja med att logga in och öppna ett terminal-fönster från bakgrunden. Ge därefter följande kommandon: module add prog/matlab matlab &.4 Experiment med en cosinus-signal Kopiera in nedanstående kommandon i en MATLAB -fil, t ex SampleCosine.m. Alternativt finns filen att hämta från kurshemsidan. Kör MATLAB -scriptet och kontrollera att figurer så som i Figur och Figur 3 dyker upp. % Sätt upp aktuella axlar % ======================= N = 8; % antal sampel n = -N/:N/-; % diskret axel i signaldomänen T =.; % sampelavstånd [s] t = n*t; % tidsaxel [s] k = -N/:N/-; % diskret axel i fourierdomänen N9 = N*9; % 9 ggr fler sampel n9 = -N9/-4:N9/-5; % 9 ggr större diskret axel i signaldomänen t9 = n9 * T/9; % tidsaxel, 9 ggr tätare [s] pos =.7; % -start and stop-position för plot [s] % Sampla funktionen % ================= gd = cos(5*pi*n*t); % Beräkna DFT % =========== GD = fftshift(fft(ifftshift(gd))); % Visa funktionen med tidsaxel och sampelpunkter indikerade % ========================================================= figure() subplot(,,), plot(t,gd, --ob ); title( sampelpunkter från g(t) ) xlabel( t [s] ) axis([-pos pos - ]) % Visa funktionen med diskret axel i signal- och DFT-domän % ======================================================== figure() subplot(,,), plot(n,gd, --ob ); title( g_d(n) ) xlabel( n ) subplot(,,), plot(k,imag(gd), --or,k,real(gd), --ob ); 3
legend( imaginary, real ) title( G_D(k) ) xlabel( k ) % Rekonstruera signalen genom att falta med ett rekonstruktionsfilter % I matlab visar vi detta genom att falta fram % 9 ggr tätare med sampelpunkter. % Matlabs plot-funktion drar sedan räta linjer mellan samplen. % ==================================================================== % Skapa ett rekonstruktionsfilter % =============================== x = -6:/9:6; triangelfkn = ( - abs(x)).*(abs(x)<); % triangel sincfkn = sin(pi*x+eps)./(pi*x+eps); % trunkerad sinc %reconfilt = triangelfkn; reconfilt = sincfkn; % Visa rekonstruktionsfiltret % =========================== figure() subplot(,,), plot(x,reconfilt,.-b ); title( rekonstruktionsfilter ) % Rekonstruera % ============ g = zeros(,n9); % Skapa en noll-vektor, 9 ggr större g(5:9:end) = gd; % Fördela ut sampelpunkterna jämnt; g = conv(g, reconfilt, same ); % falta med reconfilt % Visa den rekonstruerade funktionen % ================================== figure() subplot(,,), plot(t9,g, -b ); title( g\wedge(t) ) xlabel( t [s] ) axis([-pos pos - ]) Programmet samplar alltså signalen g(t) = cos(5πt) med sampelavståndet T =. s till g d (n). Sedan beräknas G D (k) = DFT[g d (n)]. Därefter sker rekonstruktion med hjälp av faltning med ett rekonstruktionsfilter, en (trunkerad) sinc. FRÅGA 6: Bestäm fouriertransformen av g(t) = cos(5πt) genom tabellslagning. Ange också vilken frekvens f denna cosinus har. Följdaktligen, vilken maxfrekvens har g(t) = cos(5πt)? 4
FRÅGA 7: Läs av värdena på N och T i koden. Använd sedan sambandet mellank ochf som ni tog fram i en tidigare uppgift och beräkna cosinusens diskreta frekvens, k. Kontrollera att den stämmer genom att titta och klicka i plotten av G D (k). FRÅGA 8: Öka nu sampelavståndet i omgångar från T =. till T =. och vidare till T =.3 i koden. Vilken blir cosinusens motsvarande diskreta frekvenser? Kontrollera att de stämmer genom att titta och klicka i plotten av G D (k). Notera att cosinusen g(t) samplas glesare och glesare. Vad gäller för kvaliteten på den rekonstruerade signalen ĝ(t) i de tre fallen? FRÅGA 9: Enligt samplingsteoremet ska samplingsfrekvensen f s = /T vara minst gånger större äng(t):s maximala frekvens. Sätt sampelavståndet T så samplingsteoremet precis inte är uppfyllt. Vilket T väljer du? Testa och kommentera resultatet. Byt sedan cosinusen mot en sinus. Testa och kommentera resultatet. FRÅGA : FörT =.5 bör vi få en tydlig vikningsdistorsion. Gör först en grafisk lösning för att ta reda på vilken kontinuerlig frekvens f [Hz] som vikningsdistorsionen ligger på. Tekniken ska vara samma som i Ex) sist i föreläsning 5. Skriv också upp vilken diskret frekvens,k detta motsvarar. FRÅGA : Sätt nut =.5 i MATLAB -scriptet och kör det. Stämmer värdet på k som du räknade ut i förra uppgiften? Mät periodtiden T på ĝ(t) genom att t ex klicka i MATLAB -fönstret på närliggande toppar. Överensstämmer detta med värdet på f som du räknade ut i förra uppgiften? 5
sampelpunkter från g(t).5 -.5 - -.6 -.4 -...4.6 t [s] g (t).5 -.5 - -.6 -.4 -...4.6 t [s] Figur : Originalsignaleng(t) och den rekonstruerade signalenĝ(t). g d (n).5 -.5 - -8-6 -4-4 6 8 n G D (k) 5 imaginary real -8-6 -4-4 6 8 k 6 Figur 3: Den diskreta signaleng d (n) och dess DFTG D (k).
Återställ MATLAB -scriptet till vad vi hade från början, dvs cosinus ocht =.. Titta på rekonstruktionsfiltret, den (något trunkerade) sinc:en i MAT- LAB -fönstrets Figure. Den är ju ganska lång och därmed beräkningskrävande att falta med. Låt oss prova den enklare triangel-funktionen. Gå in i MATLAB -scriptet och flytta ett %-tecken så att reconfilt = triangelfkn; aktiveras istället för reconfilt = sincfkn; FRÅGA : Öka nu sampelavståndet i omgångar frånt =. tillt =. och vidare till T =.3 i koden på samma sätt som vi gjorde i en tidigare uppgift. Vad gäller för kvaliteten på den rekonstruerade signalen ĝ(t) i de tre fallen? Slutsats: Ett enklare rekonstruktionsfilter är tillräckligt då samplingsfrekvensen är mycket högre än minsta möjliga samplingsfrekvens, men otillräckligt annars..5 Experiment med avtagande sinus-puls Vi ska nu studera signalen g(t) = sin(πt) e 5t u(t) = { sin(πt) e 5t, t,, t <. () som visas i Figur 4. Dess fouriertransform är G(f) och amplitudspektrum G(f) och fasspektrumarg(g(f)) visas i Figur 5. FRÅGA 3: Bestäm G(f), den kontinuerliga fouriertransformen av signalen i ekvation () genom tabellslagning. Beräkna sedan G(), G(± ) och maxvärdet på högra puckeln G() och kontrollera om det stämmer med Figur 5! Gör nu följande ändringar i MATLAB -koden: Återställ MATLAB -scriptet SampleCosine.m till vad vi hade från början, dvs sättt=. och aktiverareconfilt = sincfkn;. Kopiera sedansamplecosine.m tillsamplepulse.m. 7
ISamplePulse.m: Ändra till: N = 5; pos =.8; gd = sin(*pi*t).*exp(-5*t).*(t>); FRÅGA 4: Kör MATLAB -scriptet SamplePulse.m och kontrollera att ĝ(t) i MATLAB :s Figure liknar Figur 4. En mycket liten skillnad syns. Beskriv hur den ser ut. Orsaken är att sampling och rekonstruktion inte är helt perfekt. FRÅGA 5: Nederst i MATLAB :s Figure plottas realdelen och imaginärdelen avg D (k). Lägg till kod isamplepulse.m så absolutvärde och argument (fas) av G D (k) visas i MATLAB :s Figure 3. Ledning: Använd MATLAB kommandonaabs,angle elleratan. Jämför resultatet med Figur 5. De ska likna varandra, men axlarna ska vara skalade i förhållande till varandra. Visa figuren och/eller koden för läraren. FRÅGA 6: I Figur 5 syns att puckeln i G(f) ligger påf = Hz och dess höjd är.. Vad motsvarar det förk och G D (k)? (Titta tillbaka på svaret på fråga 4 och 5.) Kontrollera också att värdena stämmer med plotten i förra frågan. FRÅGA 7: Vi har alltså samplingsavståndett =. s. Nu ska vi testa att sampla lite glesare. Signalen är inte perfekt bandbegränsad så vi kommer tyvärr att få lite vikningsdistorsion hur vi än gör. Låt oss dock anse att maxfrekvensen ligger approximativt på W = 3 Hz. Är det rimligt? Ge då en lämplig samplingsfrekvens, f s och samplingsavstånd T för denna maxfrekvens. Ändra T i MATLAB -scriptet och kör det. Kontrollera att ĝ(t) i MATLAB :s Figure liknar Figur 4. Beskriv skillnaden. 8
g(t).5 -.5 - -.5 - -.5 - -.5.5.5.5 t [s] Figur 4: Signalen g(t).. G(f).5-5 -4-3 - - 3 4 5 f [Hz] arg(g(f) 4 - -4-5 -4-3 - - 3 4 5 f [Hz] 9 Figur 5: Amplitudspektrum G(f) och fasspektrumarg(g(f)).
FRÅGA 8: Vi ska nu öka samlingsavståndet stegvis enligt: T = [.,.,.3,.4,.5,.6,.7] s. Kan ni se att högra sidan på högra puckeln abs(g D ) höjs relativt vänstra sidan på högra puckeln då T ökar från. s till. s till.3 s till.4 s? Det beror på att vikningsdistorsionen ökar. Titta också på hur ĝ(t) förändras. Jämför med ursprungssignaleng(t) i Figur 4. Hur lika de är i form? Svänger de i samma takt (med samma frekvens)? Ser ni vikningsdistorsionen i abs(g D )?... T =.: Mycket lika i form. Svänger i samma takt. T =.: T =.3: T =.4: T =.5: T =.6: T =.7: Då signalen inte länge svänger i samma takt betyder det att den viktigaste frekvensen, den vid puckeln, har vikts in till en lägre frekvens!.6 Fönstring med rektangelfönster DFT:n är den transform som är praktiskt användbar i datorsammanhang. För att kunna beräkna fouriertransformen av en signal krävs att man trunkerar den i tidsdomänen vilket innebär att man begränsar signalens utsträckning. Trunkering motsvarar multiplikation med en rektangelfunktion. Detta kallas också fönstring med rektangelfönster. Det finns flera andra fönster, t ex Hanning-, Hamming- och Blackman-fönstren. Principen är densamma för alla fönster. Kör ert program SampleCosine.m igen och kontrollera att det uppför sig normalt. För att se G D tydligare, ändra plotten enligt: %subplot(,,), plot(k,imag(gd), --or,k,real(gd), --ob ); subplot(,,), plot(k,imag(gd), -r,k,real(gd), -b ); FRÅGA 9: Ser ni den samplade cosinusen i g d och de två diskreta diracpulserna i G D? Eftergd = cos(5*pi*n*t); i MATLAB -koden, lägg till: rectwin = (abs(t)<=.3); hannwin = (cos(*pi*t/.8)).^.* (abs(t)<=.3); gd = gd.* rectwin;
och kör MATLAB -scriptet igen. FRÅGA : Trunkering motsvarar alltså multiplikation med en rektangelfunktion i signaldomänen. Vad motsvarar detta i fourierdomänen? FRÅGA : Använd svaret på förra frågan för att förklara det deformerade utseendet av G D efter trunkering. FRÅGA : Gör en liten ändring i MATLAB -koden så att Hanning-fönstret (hannwin) används istället. Hur förändras huvudloben och hur förändras sidoloberna då Hanning-fönster används istället för rekangel-fönster?