Z transform

Posted 2016. 1. 20. 20:09

 

Z transform은 수열에 대해서 개발된 형태이다. Discrete signal에 사용한다.

Continuous system에서 라플라스 변환이 있다면, 이와 비슷한 역할을 해주는 것이 바로 Z transform이다.

라플라스 변환과 같이, 미분방정식을 풀때 유용하게 쓸수가 있다.

 

One-Sided Z-Transform

One side , 즉 +영역만을 사용하는 변환이다.

공식을 보면 0부터 무한대까지의 영역만을 더해주는 것을 볼 수 있다.

Two-Sided Z-Transform

말 그대로 두 영역, +와 - 영역을 모두 변환하는 것이다.

디지털 신호처리에서는 주로 One side 가 아닌 Two side 트랜스폼을 사용하므로 Two side에 대해서 중점적으로 다루도록 하겠다.

z 변환에서 z의 물리적 의미는  푸리에 변환의 의미로 해석해봤을때와 같은 의미라고 볼 수 있다. 오메가(w)는 2*pi*f 이므로 즉 2파이 간격으로 값을 갖게되는 변환이다. 하지만 여기서 z를  로 그냥  대체해서 쓸수는 없다. z 트랜스폼은 푸리에 변환과는 다른 변환이다. 오히려 z 트랜스폼이 더 넓은 의미의 변환이고, z 트랜스폼을 통해 푸리에 변환을 구할 수는 있지만 푸리에 변환으로 z 트랜스폼을 알 수는 없다고 한다. ( 이것에 대한 자세한 내용은 더 공부해봐야 알 것 같다.) 

 

ROC (Region Of Convergence)

ROC는 X(z)가 어느 범위에서 정의되는지 알 수 있게 해준다. 말 그대로 수렴 영역으로서, z 변환값을 수렴하게 하는 z의 범위를 말한다.

앞서서 말했듯 z 변환은 수열의 계산이 발전된 것이라고 보면 되는데,

z 변환의 식은 -무한대부터 +무한대까지의 수열을 더한 값이며, 고등학교때 배운 등비수열의 합(무한급수) 공식으로 정리 할 수있다.

위의 식에서 n의 범위에 따라서 z트랜스폼은 하나는 공비가 z/b 이고 다른하나는 공비가 a/z 인 수열들의 합으로 정리된다. 그리고 무한급수가 수렴하기위한 조건은,   공비 <1   , 이므로 z 변환의 수렴조건은 다음과 같고, 이것을 ROC (Region Of Convergence) 라고 한다.

z 변환에서 roc는 아주 중요하다. z 변환식이 같다고 하더라도 roc 가 다르면 실제 그 식들은 서로 다른 것이다. 따라서 roc가 없다면 X(z) 식을 역변환을 할 수가 없다.

Stability

어떤 선형 시스템의 임펄스 응답 h(n)의 z변환을  Transfer function(전달함수)이라고 한다. 전달함수는 어떤 입력을 넣었을때 어떤 출력이 나오게 하는지를 알려주는 입출력 관계식이고, (입력과 시스템을 z 영역에서 곱해주면 출력이 나온다.) 이때 이 전달함수를 B(z)/A(z) 꼴로 표현할 수 있는데 이 전달함수의 pole 에 따라서 시스템의 stability 가 결정된다.

pole이란 B(z)/A(z) 꼴의 전달함수를 무한대로 가도록 하는 z 값이며 극이라고도 한다. 전달함수를 무한대로 가도록 하는 값이므로 분모 A(z)를 0이 되게 하는 값이 pole이 된다.

여기서 전달함수의 pole 이 단위원(unit circle) 안에 존재하여야  Stable 한 시스템이 된다. 단위원은 반지름이 1인 원을 의미 하므로, 쉽게말해 pole이 1보다 작아야 stable 하다는 뜻이다.

조심해야 할 점은 위에서 본 ROC와 구분해야 한다는 점이다.  Stability란 말 그대로 시스템이 시간이 무한대로 흘렀을 때 발산하는지 수렴하는지 여부이다. 위에서 말한 ROC는 H(z)가 존재하는지, 즉,  수렴하는지 여부를 알게 하는 범위인 것이지만, h(n)이 수렴할지는 모르는 것이다. 즉,  H(z)가 수렴한다해도 꼭 Stable 한 시스템인 것은 아니다. 

 

위의 식을 보면 H(z)는 공비가 pk/z 인 급수들의 합으로 표현될 수 있다. 여기서 z가 pk가 될 경우 H(z)는 무한대가 되므로 이 시스템의 pole은 pk 이다. (K개의 폴이 존재하는 것이다.) 

아까 ROC를 설명하며 보았듯이 공비인 pk/z가 1보다 작다면 , H(z)는 수렴하게 된다. 즉, H(z)가 수렴하기 위한 범위는 이다.

하지만, H(z)를 역변환 한 h(n)을 보자, H(z)를 역변환한 h(n)은 다음과 같다.

H(z)가 수렴하더라도 (pk/z가 1보다 작더라도) 만약, pole인 pk 가 1보다 크다면, h(n)은 n이 무한대로 갈수록 발산하게 된다(공비가 1보다 크므로). 즉 Stable 하지 않은 시스템인 것이다.

따라서 어떤 시스템이 Stable 하기위해서는 전달함수의 모든 pole이 unit circle 안에 존재해야 한다는 조건을 만족하여야 한다.

 

 

 

 

 

 

 

'Digtal Signal Processing' 카테고리의 다른 글

DFT(Discrete Fourier Transform), zero padding  (0) 2016.02.03

1차원 파동방정식.

1차원, 즉 , 기하학적으로 1차원만 고려하는 것, x방향에 대해서만 고려하는 파동 방정식이다.

그림과 같은 원통형 내부에서 작용하는 파동을 생각해보자.

 

 

왼쪽의 스피커에서 파동을 발생시킨다면, 위치에 따른 압력이 달라질 것이고 이 압력의 변화가 어떤 모습을 나타내는지 알아내야 한다. 이 파동방정식을 세우기 위해서 몇가지 변수들의 관계식들을 정리하여야 한다.

Euler's equation

 x 에서의 압력을 p(x) 라 하고, 입자속도를 v(x)라고 하면 , 뉴턴의 제 2 운동법칙에 의해 위치 x 에서는 다음과 같은 식이 성립한다.

x와 (x+dx) 사이의 압력차이와 단면적 A의 곱은 곧 그 면적에 작용하는 힘을 나타내고, 우변의 A와 dx의 곱은 부피, 그리고 는 밀도이므로  곱은 질량이다. ( 질량 = 부피x밀도 ) 그리고 속도v를 미분한 것은 가속도이므로 , 위 식은 곧 뉴턴의 제2 운동법칙 F=ma 를 의미한다. (는 total밀도이고 정밀도 (소리가 없을때 밀도)와 변하는 밀도 의 합이다. 즉, 쉽게말해, 는 밀도의 DC성분이고, 는 밀도의 AC성분이라고 보면 된다.)

양변을 dx로 나눠주면 좌변은 p의 x에대한 편미분이 되고, 정리해주면 위와 같은 식이 나온다.  우변은 v에 대한 전미분을 한 것이다. 입자속도 v를 t에 대해 미분해주고, 위치 x에 대해서도 변화량이 미미하지만 존재한다 생각하고 x에 대한 변화량까지 포함해준 것이다. 이것이 Euler's equation이다. ( 수식쓰기가 귀찮아서 중간중간에 손으로 쓴것들이 좀있음...;;)

   여기서 밀도 로 근사화하고( 성분은 아주 작게 변화하는 값이므로), v의 x에 대한 편미분 항을 무시한 것(거리x에 의한 입자속도 변화량은 시간 t에의한 변화량에 비하면 아주 미미한 정도이므로 )linear Euler's equation 이라고 한다.

 

연속의 정리

연속의 정리란 들어온 질량만큼 밀도가 증가한다는 것이다.

들어온 질량 = 밀도의 변화   라고 생각하여 아래와 같은 식이 성립된다.

좌변의 밀도 x 속도 x A 는 곧 A를 통해서 순간 들어오는 질량, 즉 질량의 변화를 의미한다. ( 질량 = 밀도 x 부피 = 밀도 x  (dx)  x  A 이고, dx의 변화가 곧 입자속도 v 가 되므로 밀도x v x A는 곧 들어온 질량을 의미)  우변의 dxA는 부피가 되고, 밀도의 변화량과 곱하였으므로 이것 또한 결국에는 질량이 얼마나 증가하였는가를 의미한다.

이 또한 양변을 dx로 나누어 주면   의 x에 대한 편미분이 되고, 편미분을 한 뒤 양변의 A를 정리해주면 위와 같은 식이 되고, 이를 equation of continuity 라 한다.

 

압력과 밀도의 관계

압력과 밀도의 관계는 adiabatic exponent, 단열지수에 의해 결정되는데, 이 단열지수는 이전부터 물리학자들이 밝혀낸 값들이 있으니 이것을 이용하여 관계식을 구성할 수 있다.( 솔직히 어떻게 이렇게 관계식이 나오는지는 잘 모르겠다...)

단열지수는 단원자분자, 이원자분자 등등 여러 조건에 따라 달라지는데, 공기는 이원자 분자이고 이때 단열지수 는 1.402이다.

밀도와 압력의 그래프에서 기울기는 곧 그 매질에서의 파동의 속도 c의 제곱이된다.

여기서 기울를 구하기 위해 압력 를 테일러 전개를 하면

위와 같은 꼴로 나타낼 수 있고, 선형 음향학에서는 한 점에서 가 미세하게 변화하는 꼴이므로 이를 선형 꼴로 근사화 하여 2번째 항 이외를 무시한다면,

위와 같이 변형된다. 그렇게 되면 그래프의 기울기는 위의 두번째 항의 계수가 되며, 다음과 같이 파동의 속도와의 식을 세울 수 있다.

 

 

앞의 연속의 정리로 다시 돌아가서

                    형 음향학에서 위의 로 근사화 하고(보다 훨씬 크므로 를 그냥 로 근사화함) , 두번째 항인 밀도를 x로 편미분 한 항을 제거하여 근사화 할 수 있다. (앞에서 연속의정리를 유도하는 과정을 보면, 밀도x속도 를 dx로 나누게 되어 좌변과 같은 꼴이나오게 되는데, 밀도는 정밀도 를 중심으로 미세하게 변화하므로 두번째 항을 제거한 것이 아닐까 생각한다.)

그리고 압력과 밀도그래프의 기울기는 파동의 속도 c의 제곱이므로

밀도에 관한 식을 압력에 관한 식으로 바꿀 수 있고, linear continuity equation 을 얻게 된다.

 

 

1차원 파동 방정식

이제 앞서 구한 linear euler's equation과 linear continuity equation을 이용하여 1차원 파동방정식을 구할 수 있다.

linear euler's equation 의 양변을 x에 대하여 편미분하여 우변을 linear continuity eq 로 정리하면

1차원 파동 방정식을 구하게 된다.

 

 

 

아직 공부중이라 부족한 점이 많을 수도 있지만 공부한만큼 최대한 정리한 것입니다. 설명이 도중에 난해한 부분이 있더라도 이해바랍니다.

내가 매틀랩을 처음 다뤄본 것은 대학교 3학년때였다. 신호 프로젝트를 하게됬는데 그때는 매틀랩에대해 이해를 못하고 무작정 뛰어들어서 정말 힘들었던 기억이 난다.

매틀랩에 대한 이해만 한다면 아주 쉬운 프로그램이다. 매틀랩은 연산 체계가 행렬연산으로 되어있다. 모든 것이 행렬로 되어있는 것이다.

일단 기본적으로 행렬을 만드는 법부터 배우고 한단계씩 차근차근 배워가면 쉬울 것이다.

1 행렬 만들기

행렬을 만드는 법은 여러가지가 있는데 다음과 같이 1~5의 요소가 있는 열벡터를 만들려면

a =[1,2,3,4,5] 라고 입력하면 쉽게 만들 수 있다

굳이 콤마(,) 를 붙이지 않고 띄어쓰기만 해도 된다.

그럼 행은 어떻게 넘어가지?

간단하다  다음 행으로 넘어가려면  ; 을 써주면 된다

b = [1,2,3,4,5 ; 5,4,3,2,1] 을 써주면, 2 x 5인 행렬이 만들어진다.

 

; 을 써서 행벡터를 만들 수도 있지만

아까 만든 a 행렬에 '를 붙여서 a' 를 입력해주면 a의 transpose가 된다.

 

하지만 이렇게 직접 쓰다보면 귀찮기도 하고 시간도 오래걸린다.

예를들어, 실제 신호를 다루게 되면 몇만개, 몇십만개 이상의 샘플을 다루게 되는데,

몇만개를 직접 하나하나 입력할 수는 없을 것이다.

다음과 같이  d = 0:1:10 을 입력하면, 0부터 10 까지 1간격으로 나열하라는 명령이 된다.

간격을 내맘대로 설정할 수 있다.  만약 -10부터 20까지 5 간격으로 나누고 싶으면

e = -10:5:20 이라 쓰면 끝. 쉽다. 

 

이런 방법 말고 내가 만약에 0부터 10까지 23개의 요소로 나누고 싶다면?

각 요소 사이의 간격을 굳이 알지 못해도 linspace 라는 함수를 쓰면 할 수 있다.

a = linspace(0,10,23)

0부터 10 까지를 일정한 간격으로 23개요소로 나눈 것을 볼 수 있다.

 

이런 방법을 통해 DSP에서 말하는 샘플링(Sampling)을 할 때 쓸 수 있다.

내가 받은 데이터가 125Hz 로 샘플링 되어있다면, 그 데이터에 맞는 시간 t 행렬을 만들고자 할때,

t = linspce(0,1,125) 

라고 입력하면 1초동안 125개의 샘플을 가진 나의 데이터와 시간 t 행렬을 매칭시킬 수 있다

workspace에  t 를 보면 1x125 의 벡터가 나온 것을 볼 수 있고, 더블클릭하면 일정한 간격으로 늘어나는 것을 볼 수 있다. 

 

1초가 아니라 10초의 데이터라면

t = linspce(0,10,10*125)

라고 써주면 10초동안 10x125개의 샘플이 된다. (*는 곱하기)

 

신호를 샘플링해서 그래프를 나타내는 법은 다음번에 올리도록 할 것이다.

 

 

« PREV : 1 : 2 : 3 : NEXT »