매트랩을 활용한 신호와 시스템 실습cisl.nayana.kr/2014-matlab.pdf · 2014-03-28 ·...

54
매트랩을 활용한 신호와 시스템 실습 IT CookBook, 신호 및 시스템의 이해

Upload: trinhtram

Post on 01-Apr-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

매트랩을 활용한 신호와 시스템 실습

IT CookBook, 신호 및 시스템의 이해

2/37

매트랩의 사용법을 소개한다.

매트랩을 활용하여 기본 신호를 그래프로 표현한다.

매트랩을 활용하여 시스템을 해석한다.

매트랩 함수를 사용하여 신호의 주파수 영역을 표현한다.

학습목표

3/37

목차

1. 매트랩의 소개

2. 기본 신호들의 매트랩 프로그래밍

3. 매트랩을 활용한 신호의 주파수 영역 표현

4. 선형 시불변 시스템의 해석을 위한 매트랩 활용

4/37

매트랩의 소개

매트랩Matlab은 MATrix LABoratory를 줄인 말로 행렬이 연산에 기본 단위라는 의미가 내포

• 기본적으로 행렬을 사용하므로 차원이 필요치 않으며 복잡한 프로그래밍 언어를 사용하지 않고도 쉽게 수치 계산을 할 수 있다

라이브러리와 동일한 개념의 다양한 분야의 Toolbox를 제공

• 수학과 관련된 계산, 수치 해석, 행렬 연산, 신호처리, 알고리즘 개발, 상황 모델링과 데이터 분석 등에서 쉽게 그 결과를 얻을 수 있다

간편한 그래픽 기능을 통해서 연산 결과에 대한 가시화 기능을 제공

• 여러 가지 학문적 그래픽 표현부터 GUIGraphic User Interface를 통한 응용 프로그램 개발이 가능한 장점을 갖는다

응용 프로그램의 작성이 굉장히 편리

• M파일을 사용하여 응용 프로그램을 만들고 이를 실행시켜 특정한 해를 구할 수 있다

5/37

매트랩의 구성과 사용환경(1)

매트랩을 실행하면 세 영역으로 구분된 창이 나타난다.

• ①은 명령창으로 명령을 입력하거나 프로그램을 실행하는 데 사용된다

• ②는 Workspace 창으로 현재 사용중인 변수들에 대한 이름, 값, 데이터의 형type을 확인할 수 있다

• ③은 현재 디렉토리를 보여주고 있으며 하단의 Command History 탭을 선택하면 지금까지 명령창에 입력한 명령들의 목록을 볼 수 있다

6/37

매트랩의 구성과 사용환경(2)

M파일 생성을 위한 편집창

• 편집창에서 명령어들을 편집하여 응용 프로그램을 만든다

7/37

매트랩의 유용 명령

매트랩의 가장 기본적인 명령

• help : 특정 명령에 대한 원리와 사용법에 대한 설명을 보여준다.

• lookfor : 찾고자 하는 검색어에 관련된 함수들과 간략한 설명을 찾아준다.

• who/whos : 현재 사용하고 있는 변수에 대한 정보를 보여준다.

• clear : 현재 Workspace에 존재하는 모든 변수를 제거한다.

• size : 행렬의 크기를 알려준다. 행과 열을 표시

• length : 벡터의 길이를 찾아서 알려주는 함수

8/37

변수와 수의 표현과 수의 형식(1)

변수variable

• 매트랩에서 변수는 해당 이름을 가지는 1행 1열의 행렬

• 매트랩에서는 대소문자를 구분한다

• 명령창에서 계산된 수식의 결과는 자동적으로 ans라는 변수에 저장된다

따라서 ans변수를 다른 용도로 사용하는 것은 바람직하지 않다

수number

• IEEE 표준의 부동소수점floating point을 사용

• 16개의 유효 숫자와 함께 10-308에서 10+308범위를 가짐

• i 혹은 j는 허수를 표현하므로 변수로 사용하면 잘못된 연산을 유발할 수 있다

• inf : 무한대의 값을 표현

• NaN : 무의미한 수Not-a-Number, 0으로 나눗셈하는 경우 등에서 사용된다

예) 0/0, inf-inf

9/37

변수와 수의 표현과 수의 형식(2)

수를 표현할 때 유효자릿수에 따라서 수의 형식이 정해진다.

format : 다양한 수의 형식을 보여주는 명령어

화면에 표시되는 자리 수, 형식 결정

가능한 format :

• short : 고정소수점의 5자릿수를 표현default

• short e : 부동소수점의 5자릿수를 표현

• short g : 고정 또는 부동소수점에서 최선으로 5자릿수를 표현

• long : 고정소수점의 15자릿수를 표현

• long e : 부동소수점의 15자릿수를 표현

• long g : 고정 또는 부동소수점에서 최선으로 15자릿수를 표현

• bank : 달러와 센트를 위한 고정된 형식

• rat : 작은 정수들의 비ratio를 근사화

• hex : 16진수 형식

10/37

행렬 및 벡터의 사용 방법(1)

행렬의 입력 방식과 입력규칙

• 매트랩 명령창 :

– 가장 일반적인 방법으로 사용자가 행렬을 직접 생성하는 방법이다

• 내부 명령 또는 함수들을 사용하여 행렬을 생성 :

– 미리 만들어진 행렬들의 연산을 이용하는 방법이다

• M 파일 내에서 행렬을 구성 :

– 행렬을 직접 생성하거나 내부 명령과 함수들을 이용한다

• 외부의 자료 파일로부터 행렬을 읽어 들임 :

– 매트랩은 차원의 선언이나 형 선언이 필요 없이 외부 데이터를 컴퓨터가 사용 가능한 크기까지 자동적으로 저장 공간을 할당한다

11/37

행렬 및 벡터의 사용 방법(2)

행렬의 원소 입력 규칙

• 원소들은 빈 칸 또는 쉼표를 사용하여 분리

• 전체 원소들은 대괄호( [ ] )로 감싼다

• 원소의 끝에 세미콜론( ; )을 붙이면 한 행의 종료를 의미한다

– 예) a=[1 2 3]; → “1, 2, 3”이 1행 3열의 행렬 a에 저장된다. b=[3, 4, 5]; → “3, 4, 5”가 1행 3열의 행렬 b에 저장한다.

• 행렬의 행 구분은 세미콜론( ; )으로 구분한다

– 예) A=[1 2 : 4 5 : 8 9] 3행 2열의 행렬 생성

• 행렬의 원소는 괄호와 쉼표( , )로 표시되고, 첨자는 1부터 시작한다

예) a(2,1) : 행렬 a의 2행 1열의 원소 b(1,1) = 1; → “1”이 행렬 b의 1행 1열에 저장된다.

• 콜론 ( : ) 연산자

① 시작:끝 예) 1:4 à 1,2, 3, 4 (1부터 5까지를 나열) ② 시작:증분:끝 예) 5:-2:1 à 5, 3, 1 (5 ~1까지 -2씩 감소) ③ 행 또는 열 전체 예) A(2,:) à 행렬 A의 2행 전체, A(:,1) à 행렬 A의 1열 전체

=

985421

A

12/37

행렬 및 벡터의 사용 방법(3)

행렬의 원소 입력 규칙

• 수치, 함수, 수식, 문자 등은 모두 행렬의 원소로 사용될 수 있다. 단 수치, 함수 또는 수식을 문자와 함께 행렬의 원소로 지정할 수 없다.

• 행렬의 원소 중에 어느 한 원소만을 추가하거나 바꾸고 싶을 때는 색인을 지정하고 원하는 값을 입력한다.

• 작은 행렬을 큰 행렬에 추가할 수도 있고, 반대로 할 수도 있다. 명령 마지막에 세미콜론( ; )을 추가하면 명령은 실행되지만 화면에 보여주지는 않는다.

13/37

행렬 및 벡터의 사용 방법(4)

복소수와 복소 행렬

• 숫자 뒤에 ' i ' 또는 ' j '를 붙임으로써 복소수를 표현

• 만약 i 또는 j가 변수로 사용된다면 복소수로 표현이 불가능해진다

• ‘ + ' 또는 ‘ - ' 부호 전후에 공백을 두어서는 안 된다

– 두 개의 원소로 인식될 것이다

14/37

행렬의 연산(1)

산술 연산

(1) 행렬의 덧셈 및 뺄셈

– 숫자의 덧셈과 뺄셈과 마찬가지로 ‘ + '와 ‘ - ‘ 기호를 사용. 단, 두 행렬의 차원이 같아야 한다 – 각 행렬의 같은 위치, 즉 행렬 상의 색인이 같은 원소끼리 이루어진다

(2) 행렬의 곱셈

– ‘ * '를 사용하여 표시, 연산의 대상이 되는 두 행렬 또는 벡터의 내부 차원이 일치해야 한다

(3) 행렬의 나눗셈

– 행렬의 나눗셈은 스칼라와는 달리 좌측 나누기와 우측 나누기의 결과가 일치하지 않는다 – 좌측 나누기 : X=A\B A x X=B의 해 또는 X = 역행렬A x B (X = inv(A)*B) – 우측 나누기 : X=A/B X x B=A의 해 또는 X = A x역행렬B (X = A*inv(B))

15/37

행렬의 연산(2)

행렬의 산술 연산자

행렬의 산술 연산 우선 순위

16/37

배열 연산(Array operation)

• 행렬의 원소와 원소 사이에 성립되는 산술 연산

• 행렬의 덧셈과 뺄셈이 행렬의 원소 대 원소의 연산으로 정의되기 때문에 배열 연산의 덧셈과 뺄셈과의 차이는 없다

• ' .* '는 배열 연산의 곱셈을 나타낸다

– 두 행렬의 차원이 같을 때 각 행렬의 같은 위치에 있는 원소들끼리 곱셈을 수행

• ‘./ ’와 ‘.\ ’는 '배열 연산의 나눗셈을 나타낸다

– 두 행렬의 차원이 같을 때 각 행렬의 같은 위치에 있는 원소들끼리 나눗셈을 수행

• ' .^ '은 원소간의 거듭제곱을 나타낸다

17/37

관계 연산와 논리 연산

• 차원이 같은 두 행렬에 대하여 적용할 수 있는 6가지의 관계 연산자가 있다.

• 참과 거짓을 판별하는 논리 연산은 AND, OR NOT 등이 대표적이다.

18/37

행렬의 주요 함수

19/37

매트랩에서 그래프 출력하기

매트랩은 연산의 결과를 바로 그래프로 출력하여 확인할 수 있다

따라서 매트랩은 그래프를 그리기 위한 다양한 함수를 가지고 있다

• figure: 새로운 그림창 생성

• plot : 선형축을 사용하여 그래프 출력

• stem : 이산적인 축을 사용하여 그래프 출력

• loglog: 로그축을 사용하여 그래프 출력

• semilogx : x축은 로그 스케일을 사용, y축은 선형 스케일을 사용하여 그래프 출력

• semilogy : y축은 로그 스케일을 사용, x축은 선형 스케일을 사용하여 그래프 출력

• polar : 극좌표축을 사용하여 그래프 출력

• subplot : 하나의 그림창을 여러 개의 그래프 출력을 얻고자 할 경우

• axis : x축과 y축의 크기를 조정할 경우

• grid : 격자선을 그래프에 추가하여 출력

• title : 그래프의 제목을 추가하여 출력

• xlabel : x축에 축의 이름을 추가하여 출력

• ylabel : y축에 축의 이름을 추가하여 출력

• gtext : 마우스를 이용하여 지정한 위치에 문자를 출력

• text : 지정한 위치에 문자를 출력

20/37

그래프 선의 종류와 색

21/37

M파일 프로그래밍(1)

M파일은 매트랩 언어로 쓰여진 파일을 말한다

연속적인 매트랩 명령어들을 수행하는 스크립트 양식과 서브 프로그램의 개념으로 입력 매개변수와 출력 매개변수를 다루는 함수 양식이 있다

작성된 M파일은 명령창에서 M파일을 부르거나, 또는 다른 M파일 내에서 호출 할 수도 있다

함수 모드 M파일 작성

• 매트랩의 메뉴에서 [File]-[New]-[M-file]을 선택하면 편집창이 뜬다.

22/37

M파일 프로그래밍(2)

함수의 정의는 “function 출력 변수 = 함수 이름(입력 변수)”의 형태로 한다

파일명은 가능한 함수의 명과 동일하게 한다

함수 정의 부분 바로 다음에 나오는 주석문은 “help”명령 다음에 나오는 정보들이다

23/37

M파일 프로그래밍(3)

스크립트 모드 M파일 작성

• 편집기를 열어 문서를 작성하는데 명령창에서 하나씩 명령을 입력하는 대신 여러 명령을 일괄적으로 작성하나 첫 줄부터 순차적으로 수행되게 하는 것이다

24/37

흐름 제어 명령 (1)

for 루프 : 하나 이상의 문장을 미리 정해진 횟수만큼 반복 수행

while 루프 : 조건에 따라서 문장들을 확정되지 않은 횟수만큼 반복하여 실행. 이때 조건이 참일 때 반복, 거짓될 때 반복은 끝난다

for 변수=시작값:증가분:최종값 실행문 end

for a=1:7 x(a)=a; end >> x x = 1 2 3 4 5 6 7

while 국부조건 실행문 end

k=1; while k<7 x(k)=k*3; k=k+1; end >> x x = 3 6 9 12 15 18

25/37

흐름 제어 명령 (2)

break 문 : 루프를 빠져나가기 위한 명령어.

루프 안에서 원하는 위치에 'break'라고 쓰면 실행된다

if 문 : 조건문이 참일 때 실행문을 행한다. 여기서 '참'이란 조건문이 '0'이 아닌 수이거나 임의의 조건을 만족할 때이다

if 조건문 1 실행문 1 elseif 조건문 2 실행문 2 else 실행문 3 end

k=2; if (k/3)==0 disp('k는 3의 배수이다.') elseif (k/3)<1 disp('k는 3보다 작은 수 이다') else disp('k는 3보다 큰 수이다') end k는 3보다 작은 수 이다

26/37

흐름 제어 명령 (3)

switch 문 : 변수나 표현에 의해서 임의의 실행문이 선택적으로 수행된다. expression에 해당하는 경우가 있으면 그곳의 실행문을 실행하고, 경우가 없을 때는 otherwise의 실행문을 실행한다

switch expression (scalar or string) case value1 실행문 1 case value2 실행문 2 ..... otherwise 실행문 end

input=1; switch input case -1 disp('입력은 음수이다'); case 0 disp('입력은 0이다'); case 1 disp('입력은 1이다'); otherwise disp('입력은 -1, 0, 1이 아니다'); end 입력은 1이다

27/37

기본 신호들의 매트랩 프로그래밍(1)

정현파 신호의 그래프 표현

• 진폭의 차이를 가지는 정현파 신호들의 표현 프로그램 1

– 사인파 신호의 진폭이 0.5, 1, 2인 경우의 신호를 그래프로 표현하는 프로그램

t=0:0.05:6*pi; % 정현파 신호를 표현할 시간 영역을 설정 y=sin(t); % 크기 1을 갖는 사인 신호 생성 y1=2*sin(t); % 크기 2를 갖는 사인 신호 생성 y2=0.5*sin(t); % 크기 0.5를 갖는 사인 신호 생성 plot(t,y,t,y1,'r.',t,y2,'k:') % 크기가 다른 사인 신호를 하나의 창에 그린다

28/37

기본 신호들의 매트랩 프로그래밍(2)

정현파 신호의 그래프 표현

• 진폭의 차이를 가지는 정현파 신호들의 표현 프로그램 2

– 사인 신호의 진폭 크기에 따른 그래프의 표현을 각각의 좌표에 표현

t=0:0.05:6*pi; % 정현파 신호를 표현할 시간 영역을 설정 y=sin(t); % 크기 1을 갖는 사인 신호 생성 y1=2*sin(t); % 크기 2를 갖는 사인 신호 생성 y2=0.5*sin(t); % 크기 0.5를 갖는 사인 신호 생성 subplot(3,1,1) % 그래프창을 3행 1열로 나눈 것 중에 첫 번째 부분을 지정한다. plot(t,y) % 크기 1의 사인 신호를 그린다. axis([0 20 -2 2]) % 그래프 영역을 x축 범위는 0~20, y축 범위는 -2~2가 되도록 설정 subplot(3,1,2) % 그래프창을 3행 1열로 나눈 것 중에 두 번째 부분을 지정한다. plot(t,y1) % 크기 2의 사인 신호를 그린다. axis([0 20 -2 2]) % 그래프 영역을 x축 범위는 0~20, y축 범위는 -2~2가 되도록 설정 subplot(3,1,3) % 그래프창을 3행 1열로 나눈 것 중에 세 번째 부분을 지정한다. plot(t,y2) % 크기 0.5의 사인 신호를 그린다. axis([0 20 -2 2]) % 그래프 영역을 x축 범위는 0~20, y축 범위는 -2~2가 되도록 설정

29/37

진폭이 다른 사인 신호들의 분할 그래프 프로그램

실행 결과 그래프

30/37

위상의 차이를 가지는 정현파 신호들의 표현 프로그램

사인 신호 세 개의 위상이 각각 0, 2, -3 일 때, 그래프로 표현하여 비교

t=0:0.05:6*pi; % 정현파 신호를 표현할 시간 영역을 설정 y=sin(t); % 위상이 0인 사인 신호 생성 y1=sin(t+2); % 위상 선행이 2인 사인 신호 생성 y2=sin(t-3); % 위상 지연이 3인 사인 신호 생성 figure(1) % 그림창 1번을 만든다. plot(t,y,t,y1,'r.',t,y2,'k:') % 위상이 다른 사인 신호를 하나의 창에 그린다. figure(2) % 그림창 2번을 만든다. subplot(3,1,1) % 그림창 2번을 3행 1열 나누고 첫 번째 부분을 선택 plot(t,y) % 위상이 0인 사인 신호를 그린다. subplot(3,1,2) % 그림창 2번을 3행 1열 나누고 두 번째 부분을 선택 plot(t,y1) % 위상이 선행이 2인 사인 신호를 그린다. subplot(3,1,3) % 그림창 2번을 3행 1열 나누고 세 번째 부분을 선택 plot(t,y2) % 위상이 지연이 3인 사인 신호를 그린다.

31/37

위상이 다른 사인 신호들의 그래프 프로그램

실행 결과 그래프

32/37

주파수의 차이를 가지는 정현파 신호들의 표현 프로그램

세 개의 사인 신호의 각주파수 ω가 각각 1, 2, 4 일 때, 그래프를 그려서 그 차이점을 확인

t=0:0.05:6*pi; % 정현파 신호를 표현할 시간 영역을 설정 omega=1; % 각주파수 1 omega1=2; % 각주파수 2 omega2=4 ; % 각주파수 4 y=sin(omega*t); % 각주파수 1인 사인 신호 생성 y1=sin(omega1*t); % 각주파수 2인 사인 신호 생성 y2=sin(omega2*t); % 각주파수 4인 사인 신호 생성 figure(1) % 그림창 1번을 만든다. plot(t,y,t,y1,'r.',t,y2,'k:') % 주파수가 다른 사인 신호를 하나의 창에 그린다. figure(2) % 그림창 2번을 만든다. subplot(3,1,1) % 그림창 2번을 3행 1열 나누고 첫 번째 부분을 선택 plot(t,y) % 각주파수가 1인 사인 신호를 그린다. subplot(3,1,2) % 그림창 2번을 3행 1열 나누고 두 번째 부분을 선택 plot(t,y1) % 각주파수가 2인 사인 신호를 그린다. subplot(3,1,3) % 그림창 2번을 3행 1열 나누고 세 번째 부분을 선택 plot(t,y2) % 각주파수가 4인 사인 신호를 그린다.

33/37

주파수에 따른 사인 신호의 그래프 표현

실행 결과 그래프

34/37

지수 함수의 표현

지수 함수의 그래프를 출력하는 프로그램

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-2:0.01:2; % 출력할 그래프의 시간 영역의 범위를 설정한다. x=exp(t); % 지수 함수의 출력 값을 구한다. y=exp(-t); % 음의 시간 값을 갖는 지수 함수의 출력 값을 구한다. plot(t,x,t,y,'r') % 두 지수 함수의 그래프를 출력한다.

35/37

기본 신호들의 그래프 표현(1)

단위 계단 함수

<>

=0,00,1

)(tt

tu

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-3:0.001:10; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=stepfun(t,0); % 단위 계단 함수의 결과를 얻는다. plot(t,y) % 단위 계단 함수의 결과를 그래프로 출력한다. axis([-3 7 0 1.3]); % 그래프 영역을 x축 범위는 -3~7, y축 범위는 0~1.3이 되도록 설정

36/37

기본 신호들의 그래프 표현(2)

단위 램프 함수

<≥

=0,00,

)(ttt

tr

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=0:10; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=t; % 단위 램프 함수의 결과를 얻는다. plot(t,y) % 단위 램프 함수의 결과를 그래프로 출력한다. axis([-3 10 0 10]); % 그래프 영역을 x축 범위는 -3~10, y축 범위는 0~10이 되도록 설정 grid on %그래프의 보조눈금을 생성한다.

37/37

기본 신호들의 그래프 표현(3)

구현파

≤≤−

=나머지

TtTtrect

,0,1

)(

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-1:0.0001:1; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=rectpuls(t); % 구현파 함수의 결과를 얻는다. plot(t,y) % 구현파 함수의 결과를 그래프로 출력한다. axis([-1 1 0 1.2]); % 그래프 영역을 x축 범위는 -1~1, y축 범위는 0~1.2가 되도록 설정 grid on %그래프의 보조눈금을 생성한다.

38/37

기본 신호들의 그래프 표현(4)

싱크 함수 )(Sasin)(sinc tt

tt πππ==

clear all % 모든 변수를 작업공간에서 제거한다.

close all % 모든 그림창을 닫는다.

t=-5:0.05:5; % 출력할 그래프의 시간 영역의 범위를 설정한다.

y=sinc(t); % 싱크 함수의 결과를 얻는다.

plot(t,y) % 싱크 함수의 결과를 그래프로 출력한다.

xlabel('Time (sec)'); % X영역 레이블을 표시한다.

ylabel('Amplitude'); % Y영역 레이블을 표시한다.

title('Sinc Function') % 제목을 표시한다.

axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6,

% y축 범위는 -0.3~1.1가 되도록 설정

grid on % 그래프의 보조눈금을 생성한다.

39/37

싱크 함수의 그래프

40/37

기본 신호들의 그래프 표현(4)

단위 임펄스 함수

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-5:0.05:5; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=dirac(t); % 임펄스 함수의 결과를 얻는다. plot(t,y) % 임펄스 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Impulse Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on %그래프의 보조눈금을 생성한다.

41/37

신호들의 변환 연산(1)

시간 전이 연산

• 지연 연산 : , 선행 연산 : )( 0ttx − )( 0ttx +

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-5:0.05:5; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=sinc(t); % 싱크 함수의 결과를 얻는다. y1=sinc(t-3); % 지연된 싱크 함수의 결과를 얻는다. y2=sinc(t+3); % 선행된 싱크 함수의 결과를 얻는다. subplot(3,1,1) % 그림 창을 3행 1열 나누고 첫 번째 부분을 선택 plot(t,y) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정

42/37

시간 전이 연산

grid on % 그래프의 보조눈금을 생성한다. subplot(3,1,2) % 그림창을 3행 1열 나누고 두 번째 부분을 선택 plot(t,y1) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Delaied Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다. subplot(3,1,3) % 그림창을 3행 1열 나누고 세 번째 부분을 선택 plot(t,y2) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Preceding Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다.

43/37

시간 전이 연산 실행 결과 그래프

44/37

신호들의 변환 연산(2)

시간 반전 연산 )( tx −

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=0:1.5; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=tripuls(t); % 삼각 함수의 결과를 얻는다. y1=tripuls(-t); % 반전된 삼각 함수의 결과를 얻는다. subplot(2,1,1) % 그림 을 2행 1열 나누고 첫 번째 부분을 선택 plot(t,y) % 임펄스 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Triangle Function') % 제목을 표시한다. axis([-1.5 1.5 0 1.1]); % 그래프 영역을 x축 범위는 -1.5~1.5, % y축 범위는 0~1.1가 되도록 설정 grid on %그래프의 보조눈금을 생성한다. subplot(2,1,2) % 그림 창을 2행 1열 나누고 두 번째 부분을 선택 plot(-t,y1) % 임펄스 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Reflected Triangle Function') % 제목을 표시한다. axis([-1.5 1.5 0 1.1]); % 그래프 영역을 x축 범위는 -1.5~1.5, % y축 범위는 0~1.1가 되도록 설정 grid on %그래프의 보조눈금을 생성한다.

45/37

시간 반전 연산 실행 결과 그래프

46/37

신호들의 변환 연산(3)

시간 척도 조절 연산

• 신호 압축 : 신호 확장 : ( )ktx

ktx

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-5:0.05:5; % 출력할 그래프의 시간 영역의 범위를 설정한다. y=sinc(t); % 싱크 함수의 결과를 얻는다. y1=sinc(2*t); % 지연된 싱크 함수의 결과를 얻는다. y2=sinc(t/2); % 선행된 싱크 함수의 결과를 얻는다. subplot(3,1,1) % 그림창을 3행 1열 나누고 첫 번째 부분을 선택 plot(t,y) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다.

47/37

시간 척도 조절 연산

subplot(3,1,2) % 그림창을 3행 1열 나누고 두 번째 부분을 선택 plot(t,y1) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Compressed Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다. subplot(3,1,3) % 그림창을 3행 1열 나누고 세 번째 부분을 선택 plot(t,y2) % 싱크 함수의 결과를 그래프로 출력한다. xlabel('Time (sec)'); % X영역 레이블을 표시한다. ylabel('Amplitude'); % Y영역 레이블을 표시한다. title('Extended Sinc Function') % 제목을 표시한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다.

48/37

시간 척도 조절 실행 결과 그래프

49/37

매트랩을 활용한 신호의 주파수 영역 표현(1)

코사인 신호의 스펙트럼 생성 프로그램

clear all % 모든 변수를 작업 공간에서 제거한다. close all % 모든 그림창을 닫는다. t=0:0.0001:2*pi; % 출력할 그래프의 시간 영역 범위를 설정한다. x=sin(t); % 사인파 신호를 생성한다. y=fft(x); % 사인파 신호를 푸리에 변환한다. plot(t-pi,y) % 푸리에 변환 결과를 그래프로 나타낸다. axis([-4 4 -0.05 0.3]) % 그래프의 X축 범위는 -4~4, y축 범위는 -0.05~0.3으로 설정 grid on % 보조 눈금을 생성한다.

50/37

매트랩을 활용한 신호의 주파수 영역 표현(2)

싱크 신호의 스펙트럼 생성 프로그램

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. t=-5:0.05:5; % 출력할 그래프의 시간 영역의 범위를 설정한다. x=sinc(t); % 싱크 함수의 결과를 얻는다. y=fft(x); % 싱크 함수의 푸리에 변환 결과를 얻는다. plot(t,y) % 푸리에 변환 결과를 그래프로 출력한다. axis([-6 6 -0.3 1.1]); % 그래프 영역을 x축 범위는 -6~6, % y축 범위는 -0.3~1.1가 되도록 설정 grid on % 그래프의 보조눈금을 생성한다.

51/37

선형 시불변 시스템의 해석을 위한 매트랩 활용(1)

이산 컨벌루션을 구하는 프로그램

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. x=[1 3 2]; % 입력 이산 값 h=[3 1 2]; % 시스템의 이산 값 y=conv(h,x); % 이산 컨벌루션을 구한다. plot(y) % 컨벌루션의 결과를 그래프로 출력한다. grid on % 그래프의 보조눈금을 생성한다.

52/37

선형 시불변 시스템의 해석을 위한 매트랩 활용(2)

저역 통과를 이용한 잡음 신호 제거

clear all % 모든 변수를 작업공간에서 제거한다. close all % 모든 그림창을 닫는다. h=[-0.1294 0.2241 0.8365 0.4830]; % 저역통과 필터의 계수 [A w]=freqz(h,1,16); % 저역통과 필터의 주파수 응답을 구하여 준다. figure(1) % 그림창 1번을 연다. plot(w,abs(A)) % 저역통과 필터의 주파수 응답의 그래프를 그린다. grid on % 그래프의 보조눈금을 생성한다. t=0:0.01:2*pi; % 입력 신호의 시간 영역을 정한다. x=sin(t); % 사인 신호를 생성한다. n=rand(1,length(t))/20; % 잡음 신호를 생성한다. xn=x+n; % 입력 신호를 생성한다. y=conv(h,xn); % 입력 신호를 저주파 통과 필터를 통과 시킨다. figure(2) % 그림창 2번을 연다. subplot(2,1,1); % 그림창 2번을 2행 1열 형태로 분할하고 % 첫 번째 행을 선택한다. plot(t,xn); % 입력 신호를 그래프로 출력한다. grid on % 그래프의 보조눈금을 생성한다. subplot(2,1,2); % 그림창 2번의 두 번째 행을 선택한다. plot(y) % 필터링 된 신호를 그래프로 출력한다. grid on % 그래프의 보조눈금을 생성한다.

53/37

저역 통과를 이용한 잡음 신호 제거

0 0.5 1 1.5 2 2.5 30

0.5

1

1.5

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1

1.5

0 100 200 300 400 500 600 700-2

-1

0

1

2

12장 매트랩을 활용한 신호와 시스템 실습 끝