• No results found

BE MATLAB. (Matrix Laboratory) matlab.ico. för SIGNALER SYSTEM

N/A
N/A
Protected

Academic year: 2022

Share "BE MATLAB. (Matrix Laboratory) matlab.ico. för SIGNALER SYSTEM"

Copied!
18
0
0

Loading.... (view fulltext now)

Full text

(1)

MATLAB

(Matrix Laboratory)

för

SIGNALER

&

SYSTEM matlab.ico

BE 2001-10-01

(2)

1. Grunder

>> 2/3 ans = 0.6667

>>

MATLAB-prompt

>> 2/3; Ingen utskrift

a=[1 2 2 9 2]; Vektor, längd 5

>> a a =

1 2 2 9 2

Alltså radvektor

>> at=a';

>> at at = 1 2 2 9 2

Transponerad vektor, dvs kolonnvektor.

Transponering görs med operatorn ” ' ”

>> a*at ans = 94

Kvadratsumman

>>whos

Name Size Bytes Class a 1x5 40 double array ans 5x1 40 double array at 5x1 40 double array Grand total is 15 elements using 120 bytes

Visar aktuella variabler i arbets-arean (”workspace”) ( default ”work” )

>> pwd ans =

C:\matlabR12\work

”print working directory”

Här ligger MATLAB på c:, normalt startar Du på nätet, enhet H:

Byt directory a la DOS med CD …

>> clear all

>> whos

Raderar alla variabler

(3)

2. Vektorer är viktigt

>> a .*a ans =

1 4 4 81 4

Elementvis multiplikation.

Obs Obs punkten ( . )

( Om a var 1 2 2 9 2 )

>> a.^2 (a ”upphöjt till 2” (elementvis)) ger samma resultat

>> a(3) ans = 4

Obs att i MATLAB börjar index med 1, inte 0 som i C/C++

>> [maxx,ix]=max(a.*a) maxx =81 (MAX av vektorn )

ix =4 ( Index för MAX-värdet )

max är en färdig funktion som ingår i MATLAB

>> help max

MAX Largest component.

For vectors, MAX(X) is the largest element in X. For . . .

OnLine-manual. Skriv help

>> t=[0:300]; Generera t.ex en tidvektor med sampelintervallet 1

>> s1=sin(0.2*t); sin(0), sin(0.2), …, sin(60)

>> s1(1:3)

ans = 0 0.1987 0.3894

De 3 första elementen i s1

>> s1(0)

??? Index into matrix is negative or zero.

Typiskt fel

>> s2=exp(-0.01*t);

>> s=s1+s2;

Addera vektorer

>> N=length(s) N =301

>> size(s) ans =1 301

Längd och dimension, Dimensionen:

1 rad, 301 kolumner

(4)

>> W=sum(s.*s) W =210.1149

Signalens energi bestäms enligt

=

= 1

0 2( )

N t

t s W

>> W=s'*s W =210.1149

Går också bra

>> plot(t,s);xlabel('t');

>> ylabel('s');

>> title('s(t),linjär skala');

Se figur övre nedan

>> loglog(t,s.^2) Se undre figuren nedan Vad innebär loglog?

0 50 100 150 200 250 300

-1 -0.5 0 0.5 1 1.5 2

t s

s(t),linjär skala

100 101 102 103

10-5 10-4 10-3 10-2 10-1 100 101

(5)

>>subplot(2,1,1);

>>stem(t(1:50),s(1:50));

1:a av 2 plottar

Stem ritar staplar ( ”lollipops” ) De 50 första samplen

>>subplot(2,1,2);

>>stem(t(1:5:end),s(1:5:end));

2:a av 2 plottar

Var 5:te sampel från start till slut

0 5 10 15 20 25 30 35 40 45 50

-0.5 0 0.5 1 1.5 2

0 50 100 150 200 250 300

-1 -0.5 0 0.5 1 1.5 2

(6)

>> a=[1 2 3];b=[4 5 6];

>> conc=[a b]

conc =1 2 3 4 5 6

Skarva ihop 2 vektorer

>> snoom=conc(end:-1:1) snoom =6 5 4 3 2 1

Utan kommentar

>> zeropadd=

[snoom zeros(1,4)]

zeropadd =

6 5 4 3 2 1 0 0 0 0

Addera en vektor med 4 nollor till snoom

>> zeropadd=[snoom'; … zeros(4,1)]

zeropadd=

6 5 4 3 2 1 0 0 0 0

Nog vanligare med kolumnvektorer.

Observera ” ; ”-tecknet

>> f=[1,-3,2];

>> p=roots(f) p = 2 1

Beskriver ett polynom:

f(z)=z2-3z+2 och dess rötter

>> conv([1, -p(1)],[1, -p(2)]) ans = 1 -3 2

Funktionen conv multiplicerar ihop 2 polynom

>> conv([1 1],[0 1 1 1]) ans =0 1 2 2 1

>> stem(0:length(ans)-1,ans)

0 1 2 3 4

0 0.5 1 1.5 2

(7)

>> x=sin(0.1*t);

>> x=x';%kolumnvektor

>> brus=randn(length(x),1);

>> x_plus_brus=x+brus;

>> save f1 x_plus_brus;

>> clear ;

>> load f1

>> stem(x_plus_brus)

Generera en brusig sinus

Spara signalen i workspace på fil med namn f1.mat

Extension ”mat” fås automatiskt

”clear” raderar variabler från minnet

”load” hämtar fil från workspace

>> w=0:.1:1;%Frekvensvektor

>> x=sin(w+pi/2);% x=f(w)

>> A=[w' x'];%A 11*2-matris

>> A(:,1);1:a kolumn i A

>> A(:,2);2:a kolumn i A

>> plot(A(:,1),A(:,2));

Ibland kan det vara smidigt att tänka i fler än 1 dimension (1D)

Dessa kommandon skapar en 2D-matris och plottar f(x).

Vad tror Du att A(1,:) blir?

Jo, ” 0 1 ” (1:a raden i A )

>> whos

Name Size Bytes Class A 11x2 176 double array ans 1x2 16 double array w 1x11 88 double array x 1x11 88 double array Grand total is 46 elements using 368 bytes

Dessa variabler finns i minnet nu

(8)

3. Matriser är viktigt

>> A=[1 2 3;4 5 6;7 8 9];%3*3

>> B=[1 2 1]';%3*1

>> C=A*B C =

8 20 32

>> D=B*A

??? Error using ==> *

Inner matrix dimensions must agree.

Obs ordning vid multiplikation

>> A=[1 2;5 4];

>> B=inv(A) B =

-0.6667 0.3333 0.8333 -0.1667

>> help inv

INV Matrix inverse.

INV(X) is the inverse of the square matrix X.

>> A=[2 3;5 -1] ;

>> y=[5 4]';

>> x=inv(A)*y x =

1 1

Lös ekvationssystemet 2x1 + 3x2 = 5

5x1 - x2 = 4 Matrisnotation:

y=Ax x=A-1y

(9)

4. Liksom komplexa tal

a = 1.0000 + 2.0000i abs(a)

2.2361 real(a) 1 phase(a) ans =

1.1071 %Obs i radianer!

>> fas_rad=phase(a)*180/pi fas_rad =

63.4349

Konvertera vinkeln till grader

>> j=sqrt(-1);%Obs

>> x=2;cos(x) ans =

-0.4161

>> arg=j*x;

>> y=(exp(arg)+exp(-arg))/2 y =

-0.4161

Här kallas ” i ” för j Beräkna cos(2) med Eulers formel

>> t=(0:10)*j;

>> y=1/t;

??? Error using ==> /

Matrix dimensions must agree.

>> y=1./t;

Warning: Divide by zero.

>>plot(abs(y));

>>hold;

>>plot(abs(y),'o');

Obs. t är ju en vektor Elementvis invertering kräver då en ” . ”

Plotta y.

Obs funktionen hold

Re(a) Im(a)

2

1

(10)

5. m-filer

Man upptäcker snart att det kan bli omständligt att

när man behöver ett antal kommandon enbart jobba mot MATLAB-prompten.

Då skriver man lämpligen en m-fil. Den skapas i en texteditor och sparas i workspace. Den får filtypen m, t.ex kompass.m:

%m-fil som plottar

%en komplex vektor

%i ett polärt diagram

%Fas-steg på 30 grader (pi/6)

%Filnamn: kompass.m

%

t=0:pi/6:2*pi;

j=sqrt(-1);

x=exp(-0.2*t- j*t);

re=real(x);

im=imag(x);

compass(re,im);

Exekveras så här:

>> kompass

Tänk igenom programmets funktion!

(11)

6.Funktioner

Ett kraftfullare verktyg är att skapa egna funktioner som Kan anropas med ett antal parametrar och returnera ett antal värden.

Ex1:

Tillämpning:

>> v=randn(100,1);%slumptalsvektor

>> [mi,ma]=minmax(v) mi =

-2.1707 ma = 2.1832

%Funktion som beräknar min-

%och max-värden i en vektor.

%IN-data: Vektor v

%UT-data: minn och maxx

%Filnamn: minmax

function [minn,maxx]=minmax(v) minn=min(v);

maxx=max(v);

(12)

Ex2:

%Funktion som plottar

%beloppskurvan för en

%kompex-vektor

%IN-data: Vektor v

%Filnamn: complott

function complott(v) plot(abs(v));

Tillämpning:

>> j=sqrt(-1);t=0:0.1:1;v=sin(j*t);

>> complott(v);

Förklara varför sinusfunktionen får ett absolutvärde > 1 ! (i fig. ovan)

(13)

7. Vanliga testsignaler

>> dirac=[1,zeros(1,9)]';

I matten: δ[n]

Ger en dirac-puls följd av 9 st 0:or

>>step=[ones(10,1)]';

I matten: u[n]− nu[ −10]

Stegfunktion

>> pulse=[zeros(1,5), … ones(1,4) zeros(1,6)]';

I matten: u[n−5]−u[n−9]

Tidsfördröjd puls

>> ramp=0:10;

I matten: n⋅(u[n]−u[n−11])

Ramp

0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

0 10

(14)

>> n=0:40;x=sin(0.1*2*pi*n);

Justera så index på x-axeln börjar med 0:

>> stem(0:length(n)-1, x);

Sinus

t = 0:.0001:.0.1250;

y = SQUARE(2*pi*30*t);, plot(t,y)

Fyrkantvåg 30 Hz

(15)

function

my_sawtooth(M,N,topp)

%M=nr of periods

%N=nr of samples/period y=[];

y1=topp*(0:N1)./(N1);%up_ramp for i=1:M

y=[y1 y];%concat up_ramp end

%compute x_axis

%note:topp x-coord is same

%as next start x-coord:

x=[];

for i=1:M%loop periods for j=1:N%loop samples t=(i-1)*(N-1);

xt=t:t+(N-1);

end

x=[x xt];%concat x-coord end

%"return to zero":

y(end+1)=0;

x(end+1)=x(end);

plot(x,y,x,y,'o');

Sågtandsvåg

>> my_sawtooth(4,15,2.5);

(16)

8. Faltning (”convolution”)

Huru göra faltning för tidsdiskreta signaler?

Ex med f=0,1,2,3,2,1 och g=1,1,1,0,1:

%conv f[n]*g[n]

%discrete time convolution

%

f=[0 1 2 3 2 1];

g=[1 1 1 0 1];

k=0:1:length(f)+length(g)-2;

c=conv(f,g);

stem(k,c,'filled');

(17)

9. Några filterexempel Med kod:

%Filtrering av brusig

%sinus med frekvens f1 f1=10;%Hz

fs=100;%samplingsfrekvens dt=1/fs;%sampelintervall N=101;%antal sampel t=0:dt:(N-1)*dt;%tiden x=sin(2*pi*f1.*t);%signal n=0.2*randn(1,N);%brus s=x+n;%brusig signal subplot(3,1,1);

plot(t,s);

legend('Brusig signal');

%

%****filter****

%Lågpass,gräns 12 Hz

%normerad gränsfrekvens:

% w1=(12/(0.5*fs)

% gradtal gr=8

%

w1=12/(0.5*fs);

grad=8;

[B,A]=butter(grad,w1);

F=0:.5:20;%frekvensvektor i Hz

[H]=freqz(B,A,F,fs);

subplot(3,1,2);

%plotta frekvenskurva ( i dB ):

plot(F,20*log10(abs(H)));

legend('Filtrets dämpkurva');

y=filter(B,A,s);

subplot(3,1,3);

plot(t,y,'r');

legend('Filtrerad signal');

(18)

MED SIMULINK

:

References

Related documents

Vill man att funktionen skall klara elementvisa kalkyler (som i de flesta fall i denna kurs) måste man använda ”punk- terade operationer” (dvs. Om en viss anonym funktion saknar

Att anv¨anda linspace ¨ar det effektivaste s¨attet vid grafritning d˚ a vi har ett intervall vi ¨ar intressede av (start- och slutv¨arde) och vill bara ha tillr¨ackligt m˚

Nu skall vi bilda en matris S som skall h˚ alla ordning p˚ a vilka h¨ornpunkter som ¨ar h¨orn p˚ a de olika sidorna i tetraedern.... P˚ a s˚ a s¨att ser vi vilka sidor vi inte

>> for i=1:5, for j=1:5, A(i,j) = sin(i/10)*sin(j/10), end, end Om man skriver end; end; d¨aremot, s˚a f˚ar man samma resultat, dvs semikolon efter end har ingen verkan

Påpekande: för att man ska veta vilken metod man ska använda och för att man ska kunna tolka resultaten från programmen krävs kunskaper i matematik och numerisk analys.. Per

F¨or att transponera en matris anv¨ands specialtecknet ’ (apostrof).. Om Z ¨ar en komplex matris ¨ar Z’ transponering och komplext konjugat av Z.. h¨ogermultiplikation av B

ACPU - 29 January 2004 Yngve Sundblad Yngve Sundblad Föreläsning 4 sid.9 SF 1518/19 ht 2015 9 sept..

Examinations for courses that are cancelled or rescheduled such that they are not given in one or several years are held three times during the year that immediately follows the