Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % LABORATIONSUPPGIFTER I TSDT18/84 SIGNALER & SYSTEM
- % --------------------------------------------------
- % LÄS NEDANSTÅENDE TEXT INNAN DU BÖRJAR JOBBA MED DATORUPPGIFTERNA!!!!
- % I detta skript skriver du ned alla funktionsanrop och övrigt som behövs
- % för att lösa varje uppgift. Skriptet är indelat i separata celler/sektioner
- % med dubbla procenttecken, dvs. %%, där du för varje deluppgift skriver
- % in alla relevanta Matlab-anrop i motsvarande cell.
- % Vid redovisningen kan du då i editorn enkelt och snabbt exekvera och
- % redovisa din matlabkod och relaterade grafer för en deluppgift/cell i taget.
- % I de fall en graf ska redovisas, t.ex. en signal eller något frekvensspektrum,
- % så ska ditt skript generera grafen på det sätt du gjorde när du löste uppgiften.
- % Du ska alltså inte redovisa några grafer/figurer i form av fig-filer eller
- % utskriva i pappersform. Anledningen till detta är att det ska vara möjligt
- % att i efterhand, vid redovisningen, undersöka vad som händer med grafen
- % om du justerar någon parameter hos uppgiftens signal eller system - vilket
- % assistenten ibland kan be dig att göra.
- % Tips: Använd gärna funktionen ohfig för att förtydliga en redan ritad graf.
- % Funktionen ökar fontstorleken på text och linjetjockleken i graferna i figurfönstret.
- %
- % Vid behov kan du behöva spara matlab-variabler under labben med save
- % (som t.ex. save filnamn.mat A H1 D för att spara variablerna A, H1 och D
- % i datafilen filnamn.mat). I ditt skript laddar du sedan in de sparade
- % variablerna med load filnamn.mat.
- % OBS: Senare i labserien, i samband med filterdesign, kommer du att konstruera
- % laplacetransformer och z-transformer m.h.a. funktionen pzchange.
- % När du redovisar utskrifter av pzchange-grafer, så behöver du i respektive
- % cell spara den matlabkod som behövs för att återgenerera pzchange-grafen.
- % Då kan du t.ex. även behöva ladda in en transform som du tidigare har
- % erhållit och sparat i en mat-fil.
- % Då kan du eller assistenten manipulera transformen m.h.a. pzchange vid redovisningen.
- % Tips: Du kommer ofta att kopiera Matlabkod från kommandofönstret eller
- % ?Command History?-fönstret till redovisningsskriptet i editorn.
- % Det gör du enklast genom att markera funktionsanropen och sedan dra och
- % släppa den markerade texten i editorn.
- % I en Linuxmiljö kan du även ändra kortkommandon av typen Ctrl+C och CTRL+V
- % för att kopiera respektive klistra in.
- % Det gör du under System/Preferences/Keyboard/Shortcuts (tror jag... ;)
- %% EXEMPEL PÅ HUR MATALANROP EXEKVERAS I EN CELL/SEKTION
- % Se även https://se.mathworks.com/help/matlab/matlab_prog/run-sections-of-programs.html
- % 1) Ställ markören var som helst i den här raden eller raderna strax nedan,
- % så att denna cell och alla dess rader gulmarkeras.
- % Cellen markeras när du ställer markören på valfri rad i cellen.
- %
- % 2) I "Editor"-fliken finns avdelningen "RUN". Klicka på knappen
- % "Run Section" för att exekvera all Matlabkod i denna cell/sektion.
- % Du kan även exekvera cellens Matlabkod genom att trycka Ctrl + Enter
- % (CMD + Enter på Mac).
- % Exempel på matlabkod som exekveras i denna cell/sektion (rita en sinus):
- t=0:0.1:10;
- figure(4)
- plot(t,sin(t),'r'),
- shg
- %% 1. INLEDNING
- % Ingen uppgift att lösa här. Vi behov behöver du kanske i stället fräscha upp
- % dina matlabkunskaper - se i så fall sidan "matlabresurser" på kurswebbsidan!
- %% 2. FALTNING
- % Kopiera dina funktionsanrop hit.
- % Dela på lämpligt sätt in dina funktionsanrop i fler delceller, för enklare redovisning!
- %% 2.1. Studera faltning
- MS2P4
- %% 2.2. Jämför Ex1 & Ex2
- %% EX 1
- MS2P4_mod('1.5*sin(pi*t).*(t>=0&t<1)','1.5*(t>=0&t<1.5)-(t>=2&t<2.5)')
- %% EX 2
- MS2P4_mod('1.5*(t>=0&t<1.5)-(t>=2&t<2.5)','1.5*sin(pi*t).*(t>=0&t<1)')
- % Ser på bilderna att de är samma tack vare faltningsegenskap
- %% 2.3. Förskjutet impulssvar
- % Ex 3
- MS2P4_mod('1.5*sin(pi*t).*(t>=0&t<1)','1.5*(t+0.2>=0&t+0.2<1.5)-(t+0.2>=2&t+0.2<2.5)')
- % Nya utsignalen är förskjuten 0,2 s till vänster
- % Ex 1 är kausal ty y(t) = 0 då x(t) = 0 för t < 0
- % Ex 3 är även den kausal ty y(t0) = 0 då x(t) = 0 för t < t0
- %% 2.4. Förskjutet impulssvar och förskjuten insignal
- % Ex 4
- MS2P4_mod('1.5*sin(pi*(t-0.5)).*(t-0.5>=0&t-0.5<1)','1.5*(t+0.2>=0&t+0.2<1.5)-(t+0.2>=2&t+0.2<2.5)')
- % Ser att utsignal är förskjuten 0,3 s åt höger
- % Icke-kausal ty utsignal ändras innan insignal,
- % uppfyller ej alltså att y(t0) = 0 då x(t) = 0 för t < t0
- %% 3. FOURIERSERIEANALYS
- % Uppgift 3a ? beräkning
- %% Uppgift 3a ? rita signal & spektrum
- %% Skapar x(t)
- % Lägger ihop två signaler ty t >= 0
- D = fouser('pulse(t, 0, 1) + pulse((t-7), 0, 1)', 8);
- signal(D)
- ohfig
- %% 3A Räknar ut deltoner
- pwr(D) % = 0.25, 94% av 0.25 är 0,235
- D2 = remtone(D,'lp', 6);
- pwr(D2) % = 0.2354
- % Detta ger minst 6 deltoner
- spect(D2)
- ohfig
- % Första frekvensen f0 = 1/T0 = 1/8 = 0.125
- % Alltså måste intervallet för gränsfrekvensen vara [1/8 * 6, 1/8 * 7[
- %% Släpp igenom så få deltoner som möjligt
- D3 = remtone(D,'lp', 1);
- signal(D3)
- ohfig
- %% Rita upp båda amplitudsspektrumen
- spect(D, D2)
- ohfig
- %% Uppgift 3b
- for i = 1:30
- DB = remtone(D,'lp', i);
- signal(DB)
- pause(0.2);
- end
- % Ser att högfrekventa signaler har mycket lägre påverkan än vad
- % lågfrekventa signaler har. Behöver väldigt många signaler för att
- % signalen ska visas som den ska. Ser att signalen hoppar mycket även med
- % många frekvenser tillagda och detta beskrivs enligt Gibbs fenomen.
- %% 4. FOURIERTRANSFORMANALYS
- % Dela på lämpligt sätt in dina funktionsanrop i fler delceller, för enklare redovisning!
- % Uppgift 4a
- %% Rita upp pulsen p(t)=u(t)-u(t-5)
- p = in('us(t)-us(t-5)','t'); % Skapar pulsen
- signal(p);
- ohfig();
- %% Fouriertransormera pulsen och rita upp amplitud- och fasspektrum
- P = foutr(p); % Fouriertransformerar pulsen
- spect(P); % Ritar upp amplitud- och fasspektrum
- ohfig();
- arg = value(P, 2); % arg(P) från 0 - 2 Hz
- %% Jämför Sinc:ens toppvärde med fyrkantpulsen
- %signal(p);
- spectmod(P,'A',5);
- ohfig();
- %% Uppgift 4b
- s1 = in('sin(2*pi*200*t)*pulse(t,0,1/5)', 't');
- signal(s1)
- s2 = in('sin(2*pi*200*t)*pulse(t,0,1/40)', 't');
- %% Amplitudspektrum S1
- S1 = foutr(s1); % Fouriertransformerar pulsen
- spectmod(S1,'A',400);
- %% Amplitudspektrum S2
- S2 = foutr(s2); % Fouriertransformerar pulsen
- spectmod(S2,'A',400);
- %% En figur med båda amplitudspektrumen
- spect(S1, S2, 400);
- subplot(2,1,1), set(gca, 'xlim', [175, 225]);
- ohfig
- %% Uppgift 4c
- %%soundsc(toner(32768:65536),6400);
- T1 = foutr(toner); % Fouriertransformerar pulsen
- %signal(toner)
- spectmod(T1,'A');
- ohfig;
- %% Uppgift 4d
- %% Bestäm sifferknapp
- T2 = foutr(ton);
- spectmod(T2, 'A');
- %signalmod(ton);
- %% 5. TIDSKONTINUERLIGA FREKVENSSELEKTIVA FILTER
- % Dela på lämpligt sätt in dina funktionsanrop i fler delceller, för enklare redovisning!
- % Uppgift 5a.
- MS4
- %% Uppgift 5b
- load lab3;
- %% Uppgift 5c
- load uppgift5c;
- pzchange(H3)
- %% Uppgift 5d
- pzchange('s')
- %% Uppgift 5e
- %% Butterworth
- [B,A] = butter(10, 2*pi*100, 'low', 's');
- pzchange(in(B,A,'s'))
- %% Chebyshev
- [B,A] = cheby1(4, 3, 2*pi*100 ,'low', 's');
- pzchange(in(B,A,'s'))
- %% Uppgift 5f
- %pzchange('s');
- %load(uppgift5f)
- %pzchange(uppgift5f)
- %pzchange(uppgift5f_better)
- X = foutr(toner);
- %x = ifoutr(toner);
- %signal(toner)
- Y = output(X, better_filter);
- %Y = output(X, Own_filter);
- y = ifoutr(Y);
- signal(y)
- %ohfig
- %spectmod(Y,'A');
- %spect(Y)
- %% 6. TIDSDOMÄNANALYS AV TIDSDISKRETA SIGNALER & SYSTEM
- % Dela på lämpligt sätt in dina funktionsanrop i fler delceller, för enklare redovisning!
- % Uppgift 6a
- MS3
- %% Uppgift 6b
- CE3_5
- %% Uppgift 6c
- %edit CE3_5
- n = -5:19; % Anm: I boken står det (0:19), men från -5 är lämpligare
- x = inline('n==0'); % = enhetsimpulsen
- a = [1 -0.6 -0.16]; b = [5 0 0];
- h = filter(b,a,x(n));
- clf; stem(n,h,'k'); xlabel('n'); ylabel('h[n]');
- %% 6c a)
- n = -5:19; % Anm: I boken står det (0:19), men från -5 är lämpligare
- x = inline('n==0'); % = enhetsimpulsen
- a = [1 -1]; b = [0 1];
- h = filter(b,a,x(n));
- clf; stem(n,h,'k'); xlabel('n'); ylabel('h[n]');
- %% 6c b)
- n = -5:19; % Anm: I boken står det (0:19), men från -5 är lämpligare
- x = inline('n==0'); % = enhetsimpulsen
- a = [1 -5 6]; b = [0 8 -19];
- h = filter(b,a,x(n));
- clf; stem(n,h,'k'); xlabel('n'); ylabel('h[n]');
- %% 6c d)
- n = -5:19; % Anm: I boken står det (0:19), men från -5 är lämpligare
- x = inline('n==0'); % = enhetsimpulsen
- a = 1; b = [2 -2];
- h = filter(b,a,x(n));
- clf; stem(n,h,'k'); xlabel('n'); ylabel('h[n]');
- %% Uppgift 6d
- falta
- %edit falta
- % Faltning mellan x[n] och h[n]
- % Lasse Alfredsson 2012
- n=0:50;
- x=inline('2*(n>=5 & n<20)','n'); % x[n]=2(u[n-5]-u[n-20])
- h=inline('1*(n>=2 & n<10)','n'); % h[n]=u[n-2]-u[n-10]
- subplot(2,1,1)
- stem(n,x(n),'b');hold on,
- stem(n,h(n),'r');hold off
- xlabel('n')
- title('x[n] (blå) & h[n] (röd)')
- y=conv(x(n),h(n)); % y[n]=x[n]*h[n] (faltning)
- subplot(2,1,2)
- stem(n,y(1:length(n))); % Ty length(y) = length(x)+length(h)-1
- xlabel('n')
- title('y[n]')
- %% Uppgift 6e 1
- %edit falta
- % Faltning mellan x[n] och h[n]
- % Lasse Alfredsson 2012
- n=0:50;
- x=inline('2*(n>=5 & n<20)','n'); % x[n]=2(u[n-5]-u[n-20])
- h=inline('1*(n>=2 & n<10)','n'); % h[n]=u[n-2]-u[n-10]
- subplot(2,1,1)
- stem(n,x(n - 10),'b');hold on,
- stem(n,h(n),'r');hold off
- xlabel('n')
- title('x[n] (blå) & h[n] (röd)')
- y=conv(x(n - 10),h(n)); % y[n]=x[n]*h[n] (faltning)
- subplot(2,1,2)
- stem(n,y(1:length(n))); % Ty length(y) = length(x)+length(h)-1
- xlabel('n')
- title('y[n]')
- %% Uppgift 6e 2
- %edit falta
- % Faltning mellan x[n] och h[n]
- % Lasse Alfredsson 2012
- n=0:50;
- x=inline('cos((pi/6).*n).*(n>=0)','n'); % x[n]=2(u[n-5]-u[n-20])
- h=inline('1.5.*((0.95).^n).*(n>=0 & n<11)','n'); % h[n]=u[n-2]-u[n-10]
- subplot(2,1,1)
- stem(n,x(n),'b');hold on,
- stem(n,h(n),'r');hold off
- xlabel('n')
- title('x[n] (blå) & h[n] (röd)')
- y=conv(x(n),h(n)); % y[n]=x[n]*h[n] (faltning)
- subplot(2,1,2)
- stem(n,y(1:length(n))); % Ty length(y) = length(x)+length(h)-1
- xlabel('n')
- title('y[n]')
- %% TIDSDISKRETA FREKVENSSELEKTIVA FILTER
- % Dela på lämpligt sätt in dina funktionsanrop i fler delceller, för enklare redovisning!
- % Uppgift 7a
- %pzchange('z')
- load uppgift7a;
- pzchange(H1z)
- %% Uppgift 7b
- load uppgift7b;
- pzchange(HA)
- %pzchange(HB)
- %% Uppgift 7c
- %% Uppgift 7d
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement