부록 A Matlab 활용
학습목표 이번 강의에서 다루게 되는 내용은 다음과 같습니다. 이번 장의 학습 목표 1) Matlab 툴에 대해 이해한다. 4) Matlab에서 M파일 프로그래밍에 대해 이해한다. 5) Matlab의 흐름 제어문에 대해 이해한다. 6) Matlab을 이용하여 DSP 실습을 통하여 이해를 높인다. 2장의 내용으로 신호 및 시스템에 대해 2회차, 3회차, 4회차 총 3회차에 걸쳐 설명하도록 하겠습니다. 먼저 2회차의 내용으로 신호 및 시스템의 개념에 대해 설명하고 두번째로 디지털 신호에 대해서 알아보며, 끝으로 기본적인 디지털 신호에 대해 알아보도록 하겠습니다.
Matlab의 개요 Matlab 이란? Matlab의 구성 MATrix LABoratory 의 약자, 수치해석, 행렬연산, 신호처리 및 간편한 그래픽 기능 등을 통합하여 고성능의 수치 계산 및 결과의 가시화 기능을 제공하는 프로그램. 행렬과 벡터를 기본 자료로 사용하여 기능을 수행하는 계산환경을 제공 기본적으로 행렬을 사용하므로 차원이 필요치 않으며 프로그래밍 언어를 사용하지 않고도 쉽게 수치 계산을 수행 M-file을 사용함으로서 특정한 해를 구하는데 필요한 응용 프로그램을 손쉽게 작성할 수 있음. Matlab의 구성 명령을 내리는 명령창 M-file을 작성하는 편집기 명령 수행 결과의 일부인 그림창 여러 가지 모듈을 이용하여 시뮬레이션을 수행하는 SIMULINK로 구성
Matlab의 실행 Toolbox를
Matlab의 실행 ①은 Toolbox를 보여주는 Lanch Pad와 밑의 Workspace 탭을 선택하면 사용된 변수들의 내용을 볼 수 있다. ②는 현재 디렉토리를 보여주고 있으며 또한 밑의 Command History 탭을 선택하면 지금까지 입력한 명령들의 히스토리를 볼 수 있다. ③은 명령 창으로 명령을 입력하거나 프로그램을 실행하는데 사용되는 창이다.
Matlab 사용법 – 행렬의 사용법 MATLAB에서 사용되는 행렬 입력방식 행렬 입력의 규칙 MATLAB 명령창 내부명령 또는 함수들을 사용하여 행렬을 생성 M-파일 내에서 행렬을 구성 외부의 자료 파일로부터 행렬을 불러들임 MATLAB은 다른 프로그래밍 언어들과 달리 차원의 선언이나 형 선언이 필요 없음(컴퓨터가 사용 가능한 크기까지 자동적으로 저장 공간을 할당) 행렬 입력의 규칙 원소들은 빈칸 또는 쉼표를 사용하여 분리 전체 원소들은 대괄호( [ ] )로 감싼다. 원소의 끝에 세미콜론( ; )을 붙이면 한 행의 종료를 의미.
Matlab 사용법 – 행렬의 사용법 행렬의 원소들 행렬의 원소 중에 어느 한 원소만을 추가하거나 바꾸고 싶을 때는 색인을 지정하고 원하는 값을 입력하면 된다.
Matlab 사용법 – 행렬의 사용법 작은 행렬을 이용하여 큰 행렬에 추가할 수도 있고, 반대로 할 수 도 있다. 참고로 명령에 마지막에 세미콜론( ; )을 추가하면 명령은 실행되지만 화면에 보여주지는 않는다.
Matlab 사용법 – 행렬의 사용법 복소수와 복소 행렬 MATLAB에서는 어떤 숫자 뒤에 ' i ' 또는 ' j '를 붙임으로써 복소수를 표현한다. 만약에 i 또는 j가 변수로 사용되었을 때는 복소수로 표현이 불가능해지므로 주의해야 한다. 복소행렬을 입력할 때 주의할 사항은 '+' 또는 '-' 부호 전후에 공백을 두어서는 안된다는 점이다. 만약 복소행렬을 '5 + 5i'와 같이 입력한다면 이 값은 '5+5i'의 한 원소가 아니라 '5'와 '5i'의 두원소로 인식될 것이다. 그러나 행렬의 원소가 아닌 하나의 수식을 입력하는 경우라면 공백이 있어도 상관없다.
Matlab 사용법 – 행렬의 사용법 복소수와 복소 행렬 도움말 기능 MATLAB과 관련된 대부분의 내용에 대하여 내장 도움말이 제공되는데 아무때나 help 하고 함수명을 입력하면 MATLAB에 관한 도움말을 얻을 수 있고 특별한 항목을 지정하여 요청하면 그 항목에 대하여 정보를 얻을 수 있다. ex)
Matlab 사용법 – 행렬의 사칙연산 행렬의 덧셈 및 뺄셈 행렬의 덧셈 및 뺄셈에는 숫자의 덧셈 및 뺄셈과 마찬가지로 '+'와 '-'기호를 사용한다. 단 행렬 연산의 대상이 되는 두행렬의 차원이 같아야 한다. 행렬 또는 벡터의 덧셈과 뺄셈은 각 행렬의 같은 위치, 즉 행렬 상의 색인이 같은 원소끼리 이루어진다. 서로 차원이 다른 경우에 연산이 불가능했지만, 예외적으로 1×1 행렬인 스칼라의 경우에는 어떤 한 행렬이나 벡터와도 연산이 가능하다. 이 경우에는 행렬이나 벡터의 모든 원소들에 스칼라를 더하거나 빼면 된다.
Matlab 사용법 – 행렬의 사칙연산 행렬의 덧셈 및 뺄셈
Matlab 사용법 – 행렬의 사칙연산 행렬의 곱셈 행렬의 나눗셈 행렬의 곱셈은 '*'를 사용하여 표시하며, 연산의 대상이 되는 두 행렬 또는 벡터의 내부 차원(inner dimension)이 일치할 경우에만 정의 행렬의 나눗셈 행렬의 나눗셈은 스칼라와는 달리 일반적으로 좌측 나누기와 우측 나누기의 결과가 일치하지 않는다. 좌측 나누기 : X=A\B -----> A*X=B의 해 (X = inv(A)*B) 우측 나누기 : X=A/B -----> X*B=A의 해 (X = A*inv(B))
Matlab 사용법 – 행렬의 사칙연산
Matlab 사용법 – 배열 연산 배열연산 배열 연산(Array operation)이란 *, \, /, ^ 또는 ' 기호에 의하여 이루어지는 일반적인 선형 행렬 연산이 아닌 행렬의 원소와 원소 사이에 성립되는 산술 연산 덧셈과 뺄셈 일반적으로 행렬의 덧셈과 뺄셈이 행렬의 원소 대 원소의 연산으로 정의되기 때문에 배열 연산의 덧셈과 뺄셈과의 차이는 없다. 곱셈과 나눗셈 ' .* '는 배열 연산의 곱셈을 나타내며, 두 행렬의 차원이 같을 때 각 행렬의 같은 위치에 있는 원소들끼리 곱셈을 하여 새로운 행렬을 구성한다.
Matlab 사용법 – 배열 연산
Matlab 사용법 – 배열 연산 배열을 사용한 거듭제곱 ' .^ '은 원소간의 거듭제곱을 나타낸다
Matlab 사용법 – 기타 연산 관계 연산 MATLAB에서는 차원이 같은 두 행렬에 대하여 적용할 수 있는 6가지의 관계연산자가 있다. 위 연산자들은 두 행렬의 대응 원소들을 비교하여 그 결과를 0과 1로 구성된 행렬의 형태로 나타낸다. ( 0 : 거짓, 1 : 참 ) 연산자 의 미 < 미만(less than) <= 이하(less than and equal) > 초과(greater than) >= 이상(greater than and equal) == 같음(equal) ~= 같지 않음(not equal)
Matlab 사용법 – 기타 연산 연산자 의 미 & 그리고(and) | 또는(or) ~ 부정(not) 논리 연산 C = A &B : 행렬 A와 행렬 B의 대응 원소들이 둘다 0 이 아닐 경우에는 1을, 하나라 도 0이면 0을 돌려준다. C = A | B : 행렬 A와 행렬 B의 대응 원소들중 하나라도 0이 아닐경우에는 1을, 두 원소들 중에서 어느 하나라도 0이 아닐경우에는 1을 돌려준다. B = ~A : A의 원소가 0이 아닐 경우에는 0을, 0이 아닐 경우에는 1을 돌려준다. 연산자 의 미 & 그리고(and) | 또는(or) ~ 부정(not)
Matlab 사용법 – 그래프 기본적인 그래프 함수 plot : 선형 축을 사용하여 그래프 출력 stem : 이산적인 축을 사용하여 그래프 출력 loglog: 로그 축을 사용하여 그래프 출력 semilogx : x축은 로그 스케일을 사용, y축은 선형 스케일을 사용하여 그래프 출력 semilogy : y축은 로그 스케일을 사용, x축은 선형 스케일을 사용하여 그래프 출력 polar : 극좌표 축을 사용하여 그래프 출력 subplot : 하나의 그림창을 여러 개의 그래프 출력을 얻고자 할 경우 axis : x축과 y축의 크기를 조정할 경우 grid : 격자선을 그래프에 추가하여 출력 title : 그래프의 제목을 추가하여 출력 xlabel : x축에 축의 이름을 추가하여 출력 ylabel : y축에 축의 이름을 추가하여 출력 gtext : 마우스를 이용하여 지정한 위치에 문자를 출력 text : 지정한 위치에 문자를 출력
Matlab 사용법 – 그래프 그래프 그리기 예제
Matlab 사용법 – 그래프 그래프 선 종류 / 색상 기호 선의 종류 색 상 . 점 y 노랑색(yellow) o 원 m 색 상 . 점 y 노랑색(yellow) o 원 m 자홍색(magenta) x c 하늘색(cyan) + 덧셈 r 빨간색(red) * 별표 g 녹색(green) - 실선 b 파랑색(blue) : 점선 w 흰색(white) -. 일점쇄선 k 검정색(black) -- 쇄선
Matlab 사용법 – 기타 연산 그래프의 분할
M 파일 프로그래밍 M 파일 전체적인 의미로 M-file이란 Matlab언어로 쓰여진 파일들(files) 또한, M-file은 연속적인 Matlab문장들(명령어들)을 수행하는 script 양식(script mode)과 입력 매개변수와 출력 매개변수를 다루는 함수 양식(function mode)이 있다. 이와 같은 M-file은 Matlab이 제공하는 text editor를 이용하여 작성 할 수 있다. text editor를 이용하여 M-file을 작성한다. command window에서 M-file을 부르거나, 또는 다른 M-file내에서 호출 할 수 도 있다.
M 파일 프로그래밍 M 파일 종류 비교 script mode의 M-file function mode의 M-file 파일 이름은 어떠한 이름으로도 할 수 있다. 파일의 이름은 function이름과 가능 한한 같게 한다. base workspace에 있는 data에 대해서 연산한다. function workspace에 있는 data에 대해서 연산한다.
함수 모드 M 파일 작성 Matlab의 메뉴에서 [File]-[New]-[M-file]을 선택하면 편집창이 뜬다
함수 모드 M 파일 작성 Matlab에서 function mode M-file을 작성하려면, “function 출력 변수 = 함수 이름(입력 변수)”의 형태로 함수를 정의 “%”으로 시작하는 주석 : 정의 부분 바로 다음에 나오는 첫 번째 주석 문은 “help"명령 다음에 나오는 정보들은 함수 정의 부분과 첫 번째 비 주석문(즉, Matlab 명령어 또는 빈 공간(blank))사이에 있는 주석문 “y=prod(1:n) "은 함수의 본체 이제, M-file을 다 작성했으면, 함수이름인 “fact"로 파일 이름을 정한 뒤 저장한다. 물론, 확장자는 ”.m "이다. 이제 명령창(command window)에서 실행 해 보도록 하자.
스크립트 모드 M 파일 작성 스크립트 모드는 함수 모드와 동일하게 편집기를 열어 문서를 작성하는데 명령 창에서 하나씩 명령을 입력하는 것 대신에 여러 명령을 일괄적으로 작성하나 첫 줄부터 순차적으로 수행되게 하는 것이다. 예제로서 그래프 사용법에서 설명한 그래프 분할하는 예제를 M-file로 작성해 보자.
흐름 제어문 for 루프 : 하나 이상의 문장이 미리 정해진 횟수만큼 반복 수행 실행문 for 변수=시작값:증가분:최종값 end 실행문
흐름 제어문 while 루프 : 국부적인 조건(local condition)에 따라서 하나 이상의 문장들을 불확정적인 횟수만큼 반복하여 실행 여기서 국부적인 조건은 수식이 될 수도 있고 단순히 조건이 될 수도 있다. 이 조건이 참( 0이 아니면 )일 때 수행되고 거짓( 0 이면) 이 될 때까지 수행 while 국부적 조건 end 실행문
흐름 제어문 break 문 : 루프를 빠져나가기 위한 명령어이다. 사용법은 단순히 루프 안에서 빠져나가기 원하는 위치에 'break'라고 쓰면 됨 if 문 : 조건문이 참일 때 실행문을 행한다. 여기서 '참'이란 조건문이 '0'이 아닌 수이거나 임의의 조건을 만족할 때이다. if 조건문1 elseif 조건문2 elseif 조건문3 else end 실행문 1 실행문 2 실행문 3 실행문 4
흐름 제어문 switch 문 : 변수나 표현에 의해서 임의의 실행문이 선택적으로 수행 실행문 1 expression에 해당하는 경우가 있으면 그곳의 실행문을 실행하고, 경우 같은 것이 없을 때는 otherwise의 실행문을 실행한다. switch expression (scalar or string) case value1 case value2 ..... otherwise end 실행문 1 실행문 2 실행문
흐름 제어문 switch 문 예제
Matlab을 이용한 DSP 활용 예제 단위 임펄스 신호와 단위 계단 신호 발생 프로그램
Matlab을 이용한 DSP 활용 예제 다항식 h와 x의 콘볼루션 계산 conv(A, B) : 행렬 A, B의 convolution 및 다항식의 곱 h = [1 3 2], x = [3 1 2] y = conv( h, x ) ※ deconv( y, x ) 의 결과와 h를 비교 행렬에 대한 fft(고속 Fourier transform, 주파수해석) A1 = [1 1 1 1 0 0 0 0] 에서 , A2 = fft(A1) 및 A3 = fft(A1,100) 를 그림
Matlab을 이용한 DSP 활용 예제
Matlab을 이용한 DSP 활용 예제 기본적인 Filter 시스템의 입출력관계가 y(n)=h(n)*x(n) 이면, 전달함수는 H(z) 이다. 이러한 시스템 및 입력X에 대한 출력을 표현 Y = filter( b, a, X ). (단 입력은 X) 의 형식을 이용
Matlab을 이용한 DSP 활용 예제
Matlab을 이용한 DSP 활용 예제 잡음이 섞여 있는 심전도 신호를 이용한 분당 심박수 구하기 아래 제공된 소스에 “ecg.txt”로 저장되어 있다. ECG 신호를 Matlab에서 읽어들여 컨볼루션을 수행하여 노이즈를 제거하고 심박수를 계산 신호의 샘플링 주파수는 200Hz이며, 레코딩 시간은 10초이다. 따라서 총 데이터 개수는 2000개
Matlab을 이용한 DSP 활용 예제 잡음이 섞여 있는 심전도 신호를 이용한 분당 심박수 구하기 주어진 파형에서 가장 최대치를 갖는 값을 R파라고 하는데 컨볼루션 결과의 파형에서 이들 간격(R-R 주기)의 평균치를 구하면 분당 심박수를 구할 수 있다. h[n]={-0.037841,-0.043247, -0.031183, 0, 0.046774, 0.100910, 0.151365, 0.187098, 0.2, 0.187098, 0.151365, 0.100910, 0.046774, 0, -0.031183, -0.043247, -0.037841} 로 주어짐.
Matlab을 이용한 DSP 활용 예제 Matlab 프로그램 작성
Matlab을 이용한 DSP 활용 예제
Matlab을 이용한 DSP 활용 예제
Matlab을 이용한 DSP 활용 예제
평가하기 A=[1 2 3; 4 5 6], B=[6 5 4; 3 2 1]일 때 Matlab을 활용하여 다음을 구하시오. A+B (2) A-B (3) A*3 (4) A.*B (5) A*B’ (6) A’*B A=[1 1 0 1 ], B=[0 1 0 0]일 때 Matlab을 이용하여 다음을 구하시오. (1) A&B (2) A|B (3) ~A Matlab에서 다음과 같이 명령창에 입력했을 경우 결과를 보이시오. >> x=0:4; >> y=5:5:25; >> plot(x,y); >> title(‘Example’); >> xlabel(‘x’); >> ylabel(‘y’) >>grid
평가하기
평가하기 입력 신호와 임펄스 응답이 다음과 같이 주어질 때 Matlab을 이용하여 출력 신호를 구하시오.
평가하기 1. format rat xn=[3 1/2 -1/4 1 4]; hn=[1 1 1 1]; yn=conv(xn,hn); stem(yn);