Signals and Systems Using MATLAB Soongsil University 2014 Dr. Kwang-Bock You
Major Principles for the Special Lecture My fellow Students, ask not what your professor can do for you; ask what you can do for your professor. My fellow students of the 정통전, ask not what your department will do for you, but what together we can do for our success/ achievements/ splendid future.
John F. Kennedy Inaugural Address delivered January 20, 1961 My fellow Americans, ask not what your country can do for you; ask what you can do for your country. My fellow citizens of the world, ask not what America will do for you, but what together we can do for the freedom of man.
MatLab s windows Introduction Workspace Window 사용된변수들에대한정보제공 Editor Window 프로그램작성및편집 Toolbar 그림창그래프명령어가실행되면자동생성됨 Command History Window 명령어창에서입력된명령어들이기록되어있음
Introduction 창의분리 (undock) 와결합 (dock) undock dock
MatLab Help Windows Introduction
Introduction 배열의생성방법 꺾은괄호 [ ] 안에배열의원소들을직접입력함 외부데이터파일로부터행렬을읽어들임 MATLAB 명령어나자신이만든 m 파일을이용하여행렬을생성시킴 벡터의각원소는수, 또는미리정의된변수들, 함수들이포함된수학식등이될수있다. 알려진수집합을행벡터 (row vector) 로만들기 꺾은괄호 [ ] 안에알려진원소들을기입하며, 원소와원소는공백이나콤마 (,) 로구분한다. variable_name = [ 벡터원소들의나열 ] >> t = [5, 7, 2, 4 10 29] % 공백이나콤마로원소를구분한다 >> t = [0, 0.4*pi, 0.8*pi, 1.2*pi, 1.5*pi, 2*pi]; % 수식표현도가능하다 >> t = [0 0.4 0.8 1.2 1.5 2]*pi % 위의결과와같다
Introduction 일정한간격으로커지는원소들을가진벡터는콜론 (:) 을사용하여생성한다. variable_name = [m : q : n] or variable_name = m : q : n variable_name = (m : q : n) m 은첫번째원소이며, m+q, m+2q, 와같이 q 씩커지면서원소가생성되고, 최종원소는 n 을초과할수없다. m-n 이 q 의정수배이면최종원소는 n 이지만, 그렇지않으면 n 보다작은값이된다. n 이생략되면원소는 1 씩커진다. q 가음수인경우 m 은반드시 n 보다커야한다. >> x = [1:2:8] >> x=(0:0.5:1)*pi x=1 3 5 7 x=0 1.5708 3.1416 >> x=15:-3:8 >> t= -1:0.5:1 x=15 12 9 t=-1.0000-0.5000 0 0.5000 1.0000
Elements Introduction - v(m) : 벡터 v의 n번째원소를나타낸다. - v(:) : 벡터 v의모든원소를열벡터로나타낸다. - v(m:n) : 벡터 v의 m 번째원소에서 n 번째원소까지의원소들을나타낸다. - end는벡터나행렬의마지막원소의주소를나타내는데사용되며, 벡터의경우 end는명령어 length( 벡터 ) 의실행결과와같은값을갖는다. >> v=[10 20 30 40 50]; >> v(3) ans = 30 >> w=v(2:4) w = 20 30 40 >> length(v) ans = 5 >> v=[10 20 30 40 50]; >> x=v(2:end) x = 20 30 40 50 >> y=v(2: length(v)) y = 20 30 40 50 >> v(3:end)=0 v = 10 20 0 0 0
Introduction 행렬에대한곱셈과나눗셈은선형대수의법칙을따른다. 그러나두행렬의원소와원소사이의연산이필요한경우가많다. 덧셈과뺄셈은원래행렬의같은위치의원소끼리더하거나빼므로원칙적으로원소별연산에해당된다. 원소별연산은다음과같이점뒤에연산기호를붙이면된다 : - * ( 원소별곱셈 ),.^ ( 원소별지수승 ),./ ( 우측나눗셈 ),.\ ( 좌측나눗셈 ) 두벡터 v 와 w 가각각 v=[v1, v2, v3], w=[w1 w2 w3] 이라면, v.*w = [ v1w1, v2w2, v3w3 ] v./w = [ v1/w1, v2/w2, v3/w3 ] v.^w = [ vv ww, v2 w2, v3 w3 ] 두행렬 A 와 B 에대해 a11 a12 a13 b11 b12 b13 ab 11 11 ab 12 12 ab 13 13 A.* B= a a a b b b = a b a b a b 21 22 23 21 22 23 21 21 22 22 23 23 a31 a32 a 33 b31 b32 b 33 a31b31 a32b32 a33b 33
Introduction % Solution of Ax=b % Solution of Ax=b >> A=[1 0 0; 2 2 0; 3 3 3]; t=det(a); b=[2 2 2]; x=inv(a)*b'; t = x = 6 2.0000-1.0000-0.3333
Introduction Try! (refer to pp. 34 ~35) X=ones(1, 10) A=ones(5, 5) X1=zeros(1, 5) y=rand(1, 10) y1=randn(1,10)
Introduction 그래프구성요소 Figure window title number Figure window title Marker Plot title Legend Y axis label Text label X axis label
Introduction 2 차원그래프를생성하는데사용되는 plot 명령어의형식 : ex) plot(x, y) x : x 좌표값들을가진벡터 y : y 좌표값들을가진벡터 x, y 두벡터로부터형성되는순서쌍을그래프에점으로나타내고점들을직선으로잇는다. >> x=[1 2 3 5 7 7.5 8 10]; >> y=[2 6.5 7 7 5.5 4 6 8]; >> plot(x, y), grid on ** 그래프의기본선색깔은파란색이다.
Introduction plot 명령어의옵션으로선색깔과종류, 데이터표식 (marker) 모양등을지정할수있다. plot(x, y, line specifiers', 'PropertyName', PropertyValue) 선과 marker 의모양 색지정 선의굵기, marker 의크기 테두리 배경색지정 선종류 실선 ( 기본 ) Solid line 지정자 - 선색깔 red green 지정자 r g Marker 모양 지정자 plus 부호 + 원 o( 알파벳 ) 파선 Dashed line -- blue cyan b c 별표 * 점. 점선 Dotted line : magenta yellow m y / / / ^/v/</> s 일점쇄선 Dash-dot line -. black white k w x d x
그래프형식지정의예 Introduction
Introduction axis 명령어는좌표축의범위와모양을변경할때사용된다. axis([xmin, xmax, ymin, ymax]) 형태로사용한다. grid on / off 그래프에격자선 (grid) 를 on / off 한다. 100 90 80 70 % 그래프그리기 x = 0: 0.02: pi/2; plot(x, tan(x), '-ro') axis([0 pi/2 0 5]) % 최대값에맞추어설정된좌표축의재설정 axis([0 pi/2 0 5]) 60 50 40 30 20 10 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0 0.5 1 1.5
Introduction subplot 명령어를이용하여동일한페이지에여러개의그래프를그릴수있다. subplot 명령어의형식 subplot(m, n, p) 그림창을 m n 의작은사각형그래프영역으로나누고, 각그래프영역에대해첫줄부터마지막줄까지왼쪽에서오른쪽순서대로차례로일련번호를부여한후, p 번째영역을그래프출력대상영역으로만든다. 즉, 이명령어뒤에오는 plot 명령어와형식지정명령어는 p 번째영역에적용된다. 예 ) subplot(3, 2, 1) 은우측그림과같이세줄과두칸으로배열된 6 개의그래프영역을만든후, 첫번째그래프영역을활성화한다. (3,2,1) (3,2,2) (3,2,3) (3,2,4) (3,2,5) (3,2,6)
subplot 명령어사용예 Introduction
Introduction plot (stem) 을이용해서 y t = sin 20ππ 그려라. (Solution) clc; clear all; t = [ 0 : 0.01 : 10]; y = sin(20*pi*t); plot(t, y); xlabel('x값 '); ylabel('y값 '); axis([0 3-1.5 1.5]); title('y=sin(20*pi*t)');
Introduction x t = 4 cos 2ππ, pppp x nt s, ii T s = 0.1 (Solution) t = [ -100 : 0.1 : 100]; x = 4*cos(2*pi*t); plot(t, x, '-'); title('4cos(2*pi*t)'); axis([-10 10-4 4]);
Symbolic 변수 Symbolic Math. syms 변수 1 변수 2 변수 3 형태로선언 모든기본적인수학적연산들은동일하게사용가능 Symbolic 변수를이용한그래프작성 ezplot( 심볼릭변수 ) // 2π 에서 2π 의 x 범위에서 2 차원그래프를작성 Ex) y t = sin 3ππ 그려라.
Symbolic Math. (Solution) syms t y = sin(3*pi*t); ezplot(y);xlabel('t');ylabel('y'); axis([0 3-1.5 1.5]); title('sin(3*pi*t)');
Symbolic Math. syms Shortcut for constructing symbolic objects Syntax syms arg1 arg2... syms arg1 arg2... real syms arg1 arg2... clear syms arg1 arg2... positive
Symbolic Math. clc; clear all; t = [ 0 : 0.01 : 10]; y = sin(2*pi*t); plot(t, y); xlabel('x 값 '); ylabel('y 값 '); axis([0 3-1.5 1.5]); title('y=sin(2*pi*t)'); clc; clear all; syms t y = sin(2*pi*t); ezplot(y); xlabel('t'); ylabel('y'); axis([0 3-1.5 1.5]); title('sin(2*pi*t)');
Symbolic 함수이용하기 (See pp. 44) Ex) z t = dd(t) dd Symbolic Math. = 2tttt t 2, y t = cos (t 2 ) syms t y z y = cos(t^2); z = diff(y) subplot(2,1,1) ezplot(y, [0, 2*pi]);grid on; subplot(2,1,2) ezplot(z, [0, 2*pi]);grid on;
Symbolic Math.
diff Differences and approximate derivatives Syntax Y = diff(x) Y = diff(x,n) Y = diff(x,n,dim) Examples The quantity diff(y)./diff(x) is an approximate derivative. x = [1 2 3 4 5]; y = diff(x) y = 1 1 1 1 z = diff(x,2) z = 0 0 0 Symbolic Math.
Symbolic Math. syms t y z y = cos(t^2); z = diff(y) figure(1), subplot(2,1,1) ezplot(y, [0, 2*pi]);grid on; hold on subplot(2,1,2) ezplot(z, [0, 2*pi]);grid on; hold on
Symbolic Math. t1=0:0.1:2*pi; y1=cos(t1.^2); z1=diff(y1)./diff(t1); figure(1), subplot(211) stem(t1, y1, 'r'); axis([0 2*pi 1.1*min(y1) 1.1*max(y1)]) subplot(212) stem(t1(1:length(y1)-1), z1, 'r'); axis([0 2*pi 1.1*min(z1) 1.1*max(z1)]) hold off
Symbolic Math. 1 cos(t 2 ) 0.5 0-0.5-1 0 1 2 3 4 5 6 t (-2) t sin(t 2 ) 10 5 0-5 -10 0 1 2 3 4 5 6 t
Creating Your Own Functions 함수만들기 함수파일임을알림. 반드시소문자로입력. 함수프로그램안에서사용할입력인자들로괄호안에입력 function [ 출력변수 1, 출력변수 2,.] = function_name( 입력변수 1, 입력변수 2, ) 꺾은괄호안에출력인자들을나열함. 출력인자가한개인경우에는꺾은괄호없이변수하나만쓴다. 프로그램에서사용할함수이름. 함수이름에대한규칙은변수와동일함 ex) function [] = plotxy(t1, t2) // 리턴값이없는경우 function x = plotxy(t1, t2) // 리턴값이한개인경우
Creating Your Own Functions 함수정의하기 Editor창에함수를정의 함수의이름과동일하게파일을저장 Command창에서함수사용 <ff 함수를정의하고사용하는예제 >
Creating Your Own Functions Refer to pp. 37 function y=f(x) y=x*exp(-sin(x)/(1+x^2); Note) The file f.m should be in the working directory. y=f(2) gives y= 0.1611 function [mean,stdev,median] = stat(x) n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); median = n/2; x=z1; % z1 <1x62 double> [mean, stdev, median]=stat(x) mean = -0.0423 stdev = 4.8152 median = 31 Q) What should the file name be?
function [mean,stdev,median] = stat(x) n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); median = n/2; [mean, stdev, median]=stat(x) mean = -0.0423 stdev = 4.8152 median = 31 Q) What should the file name be?
Let us have a fun! clear all load train/ gong/ chirp Fs=4000/ 8000/ 10000/ 16000 sound (y, Fs) plot(y) 0.8 0.6 0.4 0.2 1 0.8 0.6 0.4 0.2 train 0 0-0.2-0.4-0.6-0.2-0.4-0.6-0.8-0.8 0 1 2 3 4 5 6 7 8 x 10 4-1 0 2000 4000 6000 8000 10000 12000 14000
Let us have a fun! % Let us have an appreciation of the beautiful classic music clear all load handel Fs=8000 sound (y, Fs) plot(y) 0.8 0.6 0.4 0.2 0-0.2-0.4 Messiah -0.6-0.8 0 1 2 3 4 5 6 7 8 x 10 4
Is it cool? Record your name or whatever Then, plot the signal Please examine the instructions by using help Fs = 11025; y = wavrecord(5*fs,fs,'int16'); wavplay(y,fs);