operator01.jpg


안녕하세요? LGS입니다.

오랫만에 'MATLAB 때려잡기' 강좌를 진행합니다 ^^

오늘은 Laplace Transform(라플라스 변환)에 대해서 알아보겠습니다.

(본 강좌는 'Arduino with MATLAB - Passive Filter' 강좌의 보충강좌이기도 합니다)


공학에서 많이 쓰이는 변환(transform)은 3가지 정도 됩니다.


  • Fourier Transform   (푸리에 변환)
  • Laplace Transform  (라플라스 변환)
  • Z - Transform        (Z 변환)


Fourier Transform은 'MATLAB 때려잡기 - FFT' 편에서 이미 봤습니다 ^^

위에서 말하는 변환(transform)이라는 것은 domain(영역)을 옮기는 겁니다.

Fourier Transform 같은 경우에는 time domain을 frequency domain으로 옮기는 변환이었구요

Laplace Transform은 time domain을 s-domain으로 옮기는 거죠~ (s-domain도 사실 frequency domain입니다)


e0076624_4c930c6a0a1a7.jpg


왜 Laplace transform을 하느냐?! 하면...

미분 방정식을 풀 때 시간영역(time domain)에서 직접 해(solution)을 구하려고 하면 굉~장히 어렵습니다.

그런데 time domain을  s-domain으로 옮기면(즉 라플라스 변환 하면) 미분방정식이 연립방정식으로 변한다~ 이거죠!!

그 어려운 미분방정식이 중학생도 풀 수 있는 연립방정식으로 바뀌는 겁니다. 아 정말 환타스틱합니다 ㅜㅜ

s-domain에서 연립방정식을 푼 다음 다시 time domain으로 돌아가면(Inverse Laplace Transform) 미분방정식의 해를 바로 구할 수 있습니다.


어디서 많이 보던 절차 아닙니까? 넵 FFT에서 보던거랑 거의 유사합니다. ^^

(시실 Fourier Transform과 Laplace Transform은 이란성 쌍둥이 입니다. 뿌리가 같구요~ 

Laplace Transform은 Fourier Transform을 일반화 한거예요... )


time domain을 s-domain으로 변환하는 공식은 아래와 같습니다.

참고로 아래와 같이 적분(integral)을 통해 domain을 변환하는 것을 적분변환(integral transform)이라 하구요

integral에 사용되는 함수를 kernel function이라고 합니다.

Laplace transform의 경우는 e^-st 가 kernel function이 되겠죠? ^^

hQgMH-1_jwJ56iRCCPhg6HWVhPtdzJsiY9zh1W3B51RzhtlXqefejf3uHzH-J8KqsCF4tFsemeIMk9NP2RBimyMdyiD3oGHHI6JF9XyGxVVCFLi_BWw


L{ } 은 라플라스 변환을 한다는 기호(연산자)입니다. 간단하게 Laplace Transform 한번 해볼께요~

만약 time domain의 함수 f(t)가 e^2t 인 경우라면??

e-ZarV9XWu83jc5wtc_v8nBODVZNuitotjuP-CStgaDwK--9H5ydgaW-mvRDNqWRryj_RWXKP9ni142l9pzo31pqlcdZed_SfT8-YJ-B7TAHV4L0PFY

e^2t 를 라플라스 변환하면 1/(s-2)가 나오네요 ^^

MATLAB으로 Laplace transform을 하시려면 lapace 함수를 사용하시면 됩니다.

Command window에서

syms t;     % syms 함수는 symbolic 변수를 선언할 때 쓰이는 함수입니다.

laplace(exp(2*t))

라고 입력해보시면  >> 1/(s-2) 가나오는 것을 확인할 수 있습니다.


이런식으로 많이 쓰이는 함수들은 미리 계산해 놓은 표가 아래 표입니다.

아래 표에서 t, e^at, cos(wt), sin(wt) 정도만 외워 두셔도 편합니다 ㅎㅎ

( u(t)는 unit step function으로 t가 0 이상일 때는 1 이라는 말입니다. 

그러므로 t=>0 이상을 다루실 때 u(t)를 그냥 1로 간주하셔도 크게 문제가 없습니다.)


dTNXmiEXXMQuEdp7TvGTRi5m-GuzDhkJkVYFecpKzyM_3uGr0FeSLC3p0mAyQSHwHaJldx-KIfsGmEBAgFYu_Ksp-ywBrKRdrcE-LMmXdEru_lZK02U

이미지 출처 : http://en.wikipedia.org/wiki/Laplace_transform



실제의 물리계를 방정식으로 표현해보면 대부분 미분방정식을 띄게 되므로

아래 table에서 함수를 미분을 하게 되면 Laplace transform에서 어떻게 처리하는지 잘 보시기 바랍니다.

(f(n)(t)는 f(t) 함수를 n번 미분한 것을 뜻합니다)


qGsltWgpXMBsj0s245o_KydvboBracnxagDN7AmxS2AcsdDEiOgyt7LgH-2E9QfZTGFhqpoPxRE7FjjxesdIaFsFQMdaLCgQpD6ILKodHcKKXbrupaY

이미지 출처 : http://en.wikipedia.org/wiki/Laplace_transform


또한 실제의 물리계를 미분방정식으로 표현한 후 Laplace Transform을 해보면 대부분 분수의 형태를 띄게 됩니다.

예를 들어 라플라스 변환한 결과 값이 아래와 같다면

rZmYzWYvPftpINLYnjCHqg1ZVKFC-37Y6iiQ3Ubt9-mXkWZ-j7jiM0gbKblj4nprEj4VBCOubALT9mP80G6HbGJD8zjS5HC44PQpEbp7Dbf4IWFi7Sg


위의 F(s)를 보고 (저는 머리가 나빠서) 바로 역 라플라스 변환(Inverse Laplace transform)을 할 수 없습니다.

Laplace Transform Table에도 없구요 ;;

위의 식을 차원이 낮은 분수로 잘게 쪼개놓으면 역변환하기가 굉장히 쉬워집니다. 

1/(s-2)는 암산으로도 역변환 하실 수 있잖아요 ㅋㅋ

차원이 낮은 분수로 잘개 쪼개는 것을 partial fraction expansion(부분 분수 전개) 이라고 하구요

partial fraction expansion을 해주어야 쉽게 Inverse Laplace transform을 할 수 있다 이거죠~


bY6Ra521Qhw1SAp79m1KrwGTsPy1JAFvTKaHF4b6xkwEVUYM7GO4__rMGTI7WldwKH6NsrJDjaqOGb5TDVsv7xacq2Z0cOuG-cIeZyFdiYJrkEWX3p0

partial fraction expansion 하는 방법은 우선 분모를 인수분해 하신 후 

각 분모를 0으로 만드는 값을 대입해서 각각의 항의 계수를 계산 합니다.


참고로 MATLAB에서 partial fraction expansion을 하시려면 residue 함수를 사용하시면 되요.

위의 예제의 경우 아래 code와 같이 입력 하시면 됩니다.

각 계수는 차원이 높은 항의 계수부터 낮은 항의 계수로 차례대로 적어주시면 되구요~

HIATJiLOft3T3Pg_gs6jwGGirHsB_NI1x6UlagVX2O14wSALoPvtJkhqEhzBecoTG3xeeNvZNoIpLltiiMswNfcyZMTwh829O5bMnT-5wZyhdj3-8vg


결과 값으로 돌아나오는 r, p, k는 각각 residues, poles, direct terms 입니다.

실행결과늘 보시면 손으로 구한 값이랑 일치하는 것을 확인할 수 있습니다.


lVy7_HDuSbAVIBBYt8leGODsW-dlJbDDu7npeN42NqkM8_epXwdYalT5dIBQYp_UctW0XgH78F40VodDZVdBlP9kWOIDwF3jYbGHgM3fN7MLMWa1oQk



자~이제 실제상황에 Laplace transform을 써먹어 봅시다.'

'MATLAB 때려잡기 ODE'편에서는 ode45라는 함수를 사용하여 미분방정식의 해를 수치적으로 해를 구했는데

이번에는 MATLAB에서 ilaplace 라는 함수를 사용하여 symbolic하게 문자로 해를 구해보도록 하겠습니다.


회로를 하나 해석할 건데요 'Pre-Lecture Arduino with MATLAB (Passive Filter)'에 나왔던 RC 회로입니다.

Pre-Lecture Arduino with MATLAB (Simulink) <== 간단한 Simulink 사용법을 확인하실 수 있습니다~ ^^

이후 나오는 내용이 이해가 가지 않으시면 Pre-Lecture for Arduino with MATLAB 강좌를 참조하시기 바랍니다.

Laplace transform으로 circuit analysis하는 자세한 방법은 아래 링크를 참조하시기 바랍니다.

http://www.stanford.edu/~boyd/ee102/laplace_ckts.pdf


yX8rVO6OkuJpJxPByCIdxLDS2oNIpYNoUIqrxfjmOLB43-2fYkGryqeojNqP5HicFacmZqUJpLrdezD1jhZgNS089MnWG9UMwup7GPlT8A6lX0KddNA


말씀 드렸듯이 MATLAB의 Simulink Simscape를 이용하시면 쉽게 회로를 해석할 수 있어요

(DC Voltage = 1V, Inductor = 1H, Resistor = 1Ω)

JFz8M_75oOoRm8tRgVt5OwQuJU4axIXDGqcv568oBXO2R5wJZbZcUfomFHF_SbiUBWeJA_CNm2LIG60DAOjAo4a8YM8k0T9gDfOvOu7C1oFuIPFKj3E


위의 Simulink Model은 복잡해 보이지만 별거없죠?

그냥 전원이랑 저항 Capacitor만 있는 회로인데 전압계 달아서 복잡해 보일 뿐입니다. =(=^ㅅ^=)=

왼쪽 결과 Scope에서 노랑색선이 전압입니다.


dJg7YsY_ENIjn-VKW-0X4fLi3KZPDX_Otgecj4S-VHpYfn7Anat_UK-hJLB0aMXROaAScXA2Fjr5h9zC_htnQOLUGMEES2AJhvGYW6SuxUd161fKZ5A


잘 보시면 current를 Laplace transform 한 것이 Admittance인 걸 알 수 있습니다.

Impedance는 Resistor와 같다고 생각하시고 Admittance는 Resistor의 역수인 Conductivity와 같은 개념으로 보시면 됩니다.

R에 걸리는 전압을 Impedance를 써서 표현해보면 아래처럼 되겠죠~

uf5mTWUT7DXwp3PuZiBruBPbAaMyTNi3DbG-JBo3baFOyWeHlWrQR5K6kBx2WM9lsetfKMmDjxxVqaSwfZC1I9tcxcJ5aSgVdTx8lxAsx8iJJzeU4tI


만약 입력전압이 V로 일정하다면 

anImtt1eDuMMyGbUzBUZebO8oiXdvxrq654_kWqI2V4N2Ofk-kbaHk4bJC4_KNhy_3pJU7NQy7aTTadBCExwP3IexuD9zPEbBCWIzgIHiGcOH2Rd68Q

VR을 위과 같이 정리할 수 있겠죵?

BdsyGeoQ5-RYCQxc-lLRJRbN9NhsdvMgMPZRL3BpNCjqNGz42UBEZO_UKBA2vjl39i8A2KqSGjfwa3TtjE9ZfY1Y-nI7c56UiyCdGq8N4fBuEhBXTqw


syms는 앞에서 설명했듯이 symbolic 변수를 선언 할 때 쓰이는 함수입니다.

Inverse Laplace Transform하시려면(s-domain을 다시 time-domain으로 되돌리시려면) ilaplace 함수를 사용하시면 되구요~

pretty 함수는 symbolic 결과를 보기 좋게 표현해주는 함수입니다.

Command Window에 나온 결과를 보니 

TeGJqBgFc75-56L8XRHouWfZa9-N5uG9L-O3g-guKF6yw77dp4Vc3pNBgiOFfR0gVebBj_oy8o6NloIyk2G6o8RWrluBFI5LtzPbhbA0t5PJWSj2cDA


위와 같고 위의 결과는 Simulink로 Simulation한 결과 그래프와 정확히 일치하네요 ^^

Laplace Transform을 잘 쓰시면 손으로 미분방정식을  정말 쉽게 풀수 있습니다.




이번 강의 끝~ =(=^ㅅ^=)=

이상입니다.

profile