TTT6 Elektroisk systemdesig og -aalyse II Aalyseøvig 9 Løsigsforslag Oppgave. Sigalegeskaper (p) a) Sigalee er vist i figuree uder:.. x[ ]. x[+]... 7 6 6 7 7 6 6 7.. x[ ]. x[ +]... 7 6 6 7 7 6 6 7.. x[]u[ ]. x[]... 7 6 6 7 7 6 6 7
x[ ] skisseres ved å brette x[] rudt y-akse. x[ + ] skisseres ved å forskyve x[] tre sampler til vestre. x[ ] = x[ ( + )] skisseres ved å forskyve x[ ] tre sampler til vestre, eller ved å forskyve x[] tre sampler til høyre og så brette resultatet rudt y-akse. x[ ] = x[ + ] = x[ ( )] skisseres ved å brette x[ + ] rudt y-akse eller ved å forskyve x[ ] tre sampler til høyre. { {, <, < x[]u[ ] =, fordi u[ ] = x[],,. x[] skisseres ved å plukke ut aehvert sample (sampler med partallsidekser) fra x[]. Dee operasjoe kalles desimerig. b) x() ka skrives som e sum av forskjøve og skalerte ehetspulser på dee måte: c) Sigaleergi er defiert som x[] = δ[ + ] δ[ + ] + δ[ ] + δ[ ] + δ[ ]. E = x[], hvor absoluttverdioperasjoe ka sløyfes for reelle sigaler. I vårt tilfelle får vi: E = (x[ ]) + (x[ ]) + (x[]) + (x[]) + (x[]) + (x[]) = + + + + + = 8 Oppgave. Kovolusjo (p) a) h [] og h [] har edelig legde og beskriver derfor FIR-systemer. h [] har uedelig legde, og beskriver således et IIR-system. Et LTI-system er kausalt hvis og bare hvis h[] = for <. Dee betigelse er oppfylt for h [] og h [], me ikke h []. Et LTI-system er BIBO-stabilt hvis og bare hvis = h[] <. Dee betigelse er oppfylt av alle FIR-systemer. Systemee beskrevet av h [] og h [] er derfor stabile. For systemet beskrevet av h [] har vi ( ) ( ) h [] = u[] = = = = = = < Dette systemet er derfor også stabilt. b) Merk at x [] = δ[]. Respose til dette sigalet er derfor ehetspulsrespose til systemet, h [] = δ[] + δ[ ] δ[ ].
c) Systemrespose er gitt av y[] = x [] h [] = x [k]h [ k] = ( ) k ( ) k u[k] u[ k] Merk at u[k]u[ k] = {, k, ellers. For <, er alle leddee i summasjoe lik ull, slik at vi får y[] =. For, ka vi fjere u[k]u[ k] hvis vi edrer summasjositervallet til k [, ]. ( ) k ( ) k y[] = = ( ) k = ( )+, k= hvor likige for geometrisk rekke ble brukt i de siste likhete. k= Dette ka til slutt bli foreklet til y[] = [( ) + ] = For alle ka resultatet sammefattes med ( y[] = ) u[]. d) Ehetspulsrespose for systemer koblet i serie er h[] = h [] h []. Side h [] består av tre ehetspulser, ka vi skrive Nå har vi h [] = δ[ + ] + δ[] + δ[ ]. h[] = h [] (δ[ + ] + δ[] + δ[ ]) = h [ + ] + h [] + h [ ]. Det er eklest å berege dette grafisk ved å summere h [] og des to forskjøve versjoer. Dette er illustrert i figur. Fra dee figure ser vi at h[] = δ[ + ] + δ[] + δ[ ] + δ[ ] δ[ ]. Et MATLAB-script som bereger og plotter h[] ved å bruke fuksjoe cov er gitt uder: h=[ -]; N=; N=; h=[ ]; M=-; M=; h=cov(h,h) =N+M:N+M; %idices of ozero values of the covolutio stem(,h), grid o, xlabel( ), ylabel( h[] ) Det produserer grafe gitt i figur.
h [+] h [] h [ ] h[] Figur : Bereger h[] = h [] h [] = h [ + ] + h [] + h [ ] h[] Figur : Bereger h[] = h [] h [] i MATLAB
Oppgave. Systemer i parallell og serie/arduio-implemetasjo (p) a) Side h [] og h [] er så korte, er det praktisk å utrykke dem som summer av ehetspulser: h [] = δ[] + δ[ ] + δ[ ] () h [] = δ[] + δ[ ] + δ[ ] + δ[ ] () Ehetspulsrespose til seriesystemet fier vi som kovolusjoe av delsystemee. Dette blir: h s [] = h [] h [] = (δ[] + δ[ ] + δ[ ]) h [] = h [] + h [ ] + h [ ] () der vi har utyttet at vi jobber med tidsivariate systemer (forsikede ehetspulser kovolvert med h [] resulterer i forsikede ehetspulsresposer). Videre ka vi sette i for h [] i likig (). Da får vi: h s [] = δ[] + δ[ ] + δ[ ] + δ[ ] + δ[ ] + δ[ ] () Grafisk blir dette slik: hs[] 6 Videre er ehetspulsrespose til parallellsystemet lik summe av ehetspulsresposee til delsystemee. Vi får: Plott: h p [] = h [] + h [] = δ[] + δ[ ] + δ[ ] + δ[ ] () hp[] 6
b) For å fie spragresposee, påtrykker vi ehetssprag x[] = u[] på systemigagee, og fier utgagssigalee ved kovolusjo med h s [] og h p []. For seriesystemet får vi: y s [] = h s [] x[] = h s [k]x[ k] = h s [k]u[ k] (6) Dette ka vi forekle ved å ise at u[ k] = år k, og ellers ull. Vi treger derfor bare å summere opp til k =, og ka da også ta bort u[ k] side de alltid er lik der vi å summerer. Videre iser vi at vi ka starte å summere på k = side vi har e kausal ehetspulsrespos (h s [] = for egative ). Vi får da: y s [] = Plott: h s [k] = δ[]+δ[ ]+6δ[ ]+9δ[ ]+δ[ ]+δ[ ]+δ[ 6]+... k= (7) ys[] 8 6 6 7 8 For parallellsystemet blir det tilsvarede: y p [] = h p [] x[] = h p [k]x[ k] = h p [k]u[ k] = h p [k] k= = δ[] + δ[ ] + 6δ[ ] + 7δ[ ] + 7δ[ ] +... (8) Plott: yp[] 8 6 6 7 8 c) Bruker implemetasjoe fra aalyseøvig 8, og bytter ut koeffisietee til e skalert (velger å multiplisere med ) og avrudet versjo av h s []. Vi ser av plottet av h s [] 6
at filteret vil ha e forsterkig lik, og vi må derfor også edre skalerigsfaktore på utgage i forhold til aalyseøvig 8. Ved å bruke samme formel som agitt der, kommer e frem til e faktor 88. Kode: #iclude <Wire. h> #iclude <Adafruit_MCP7. h> #iclude <TimerOe. h> // Piout : // F i l t e r i p u t A. //DAC SDA A. //DAC SDL A. it v a l ; //To h o l d t h e c u r r e t u f i l t e r e d value, i. e. x () it v a l F i l t ; //To h o l d t h e c u r r e t f i l t e r e d value, i. e. y () v o l a t i l e boolea sampletime ; // Flag to deote t h a t a ew c oversio s h o u l d t a k e p l a c e. cost it ORDER = ; // Order o f FIR f i l t e r. cost it DIVIDE = 88; //The output i s d i v i d e d by t h i s umber to ormalize i t. byte bufpoit = ; // Curret p o s i t i o i t h e c i r c u l a r b u f f e r. //The c o e f f i c i e t s. cost it COEFF[ORDER+] = { 96, 89, 88, 88, 89, 96; // C i r c u l a r b u f f e r used by t h e f i l t e r r o u t i e to h o l d c u r r e t ad p r e v i o u s x () v a l u e s. // log, to make t h e m u l t i p l i c a t i o s happe i b i t. it ibuf [ORDER+] = {,,,,, ; // I s t a t i a t e DAC. Adafruit_MCP7 dac ; void setup ( ) { // Set up timer to t r i g g e r t h e f u c t i o s a m p l i g I t e r r u p t each ms. Timer. i i t i a l i z e ( ) ; Timer. a t t a c h I t e r r u p t ( s a m p l i g I t e r r u p t ) ; // Set up DAC at c o r r e c t IC address. dac. begi ( x6 ) ; void loop ( ) { //Check i f i t s time f o r a ew coversio / f i l t e r ru. i f ( sampletime ) { //Read x () from t h e ADC. v a l = aalogread (A) ; //Ru FIR f i l t e r. The c u r r e t x () i s iput, t h e c u r r e t y () i s output. v a l F i l t = f i r F i l t ( v a l ) ; // Write c u r r e t y () to t h e DAC. dac. s e t V o l t a g e ( v a l F i l t, f a l s e ) ; // Reset f l a g. sampletime = f a l s e ; //ISR ( i t e r r u p t s e r v i c e r o u t i e ) t r i g g e r e d by timer each ms. void s a m p l i g I t e r r u p t ( void ) { // Set t h e f l a g t r u e each ms to deote t h a t i t s time to c o v e r t / f i l t e r. sampletime = t r u e ; 7
//FIR f i l t e r r o u t i e. Takes t h e c u r r e t x () as argumet, ad output t h e c u r r e t y ( ). it f i r F i l t ( it c u r r I ) { // V a r i a b l e to h o l d t h e c u r r e t output. log currout = ; //Put t h e c u r r e t x () i t h e c o r r e c t b u f f e r p o s i t i o. ibuf [ bufpoit ] = c u r r I ; //Do f i l t e r i g : Loop through a l l t h e c o e f f i c i e t s, ad m u l t i p l y with t h e c o r r e c t x v a l u e s i t h e b u f f e r. // Accumulate t h e r e s u l t i t h e v a r i a b l e currout. for ( it i =; i < ORDER; i ++) { currout += ( log )COEFF[ i ] ( log ) ibuf [ bufpoit ] ; //Wrap t h e b u f f e r p o i t e r aroud whe i t i s eeded. i f ( bufpoit >= ORDER) bufpoit = ; else bufpoit++; //Do t h e l a s t m u l t i p l i c a t i o / accumulatio w i t h o u t updatig t h e b u f f e r p o i t e r. // B e t t e r to j u s t do t h i s o u t s i d e t h e loop, tha to implemet e x t r a checks i s i d e t h e l o o p ( h i g h e r comp time ). currout += ( log )COEFF[ORDER] ( log ) ibuf [ bufpoit ] ; // Normalize ad r e t u r t h e output. retur currout /DIVIDE ; Bilde fra oscilloskopet: 8