전자/제어 공학에서 복소수는 단순한 수학적 추상이 아닙니다. 교류 회로 분석의 페이저(phasor), 라플라스 변환의 s = σ + j ω s = \sigma + j\omega s = σ + j ω , Z-변환의 단위원, 보드 선도의 복소 주파수 응답 — 이 모든 것이 복소해석학에 뿌리를 두고 있습니다. 이번 글에서는 복소수 체계부터 유수 정리, Z-변환과 디지털 필터 설계까지 완전히 정복합니다.
직교형(Rectangular Form) :
z = x + i y = x + j y z = x + iy = x + jy z = x + i y = x + j y
(전기공학에서는 i i i 대신 j j j 를 사용합니다. i i i 는 전류를 나타내기 때문)
실부: Re ( z ) = x \text{Re}(z) = x Re ( z ) = x
허부: Im ( z ) = y \text{Im}(z) = y Im ( z ) = y
극형(Polar Form) :
z = r e i θ = r ( cos θ + i sin θ ) = r ∠ θ z = r e^{i\theta} = r(\cos\theta + i\sin\theta) = r\angle\theta z = r e i θ = r ( cos θ + i sin θ ) = r ∠ θ
절댓값(크기): r = ∣ z ∣ = x 2 + y 2 r = |z| = \sqrt{x^2 + y^2} r = ∣ z ∣ = x 2 + y 2
편각(위상): θ = arg ( z ) = arctan ( y / x ) \theta = \arg(z) = \arctan(y/x) θ = arg ( z ) = arctan ( y / x ) (사분면 고려)
오일러 공식(Euler's Formula) :
e i θ = cos θ + i sin θ e^{i\theta} = \cos\theta + i\sin\theta e i θ = cos θ + i sin θ
이로부터:
cos θ = e i θ + e − i θ 2 , sin θ = e i θ − e − i θ 2 i \cos\theta = \frac{e^{i\theta} + e^{-i\theta}}{2}, \quad \sin\theta = \frac{e^{i\theta} - e^{-i\theta}}{2i} cos θ = 2 e i θ + e − i θ , sin θ = 2 i e i θ − e − i θ
수학 역사상 가장 아름다운 공식으로 꼽히는 오일러 항등식 :
e i π + 1 = 0 e^{i\pi} + 1 = 0 e iπ + 1 = 0
다섯 가지 가장 중요한 수(e e e , i i i , π \pi π , 1 1 1 , 0 0 0 )가 하나의 식에 연결됩니다.
드 무아브르 공식(De Moivre's Formula) :
( r e i θ ) n = r n e i n θ = r n ( cos n θ + i sin n θ ) (r e^{i\theta})^n = r^n e^{in\theta} = r^n(\cos n\theta + i\sin n\theta) ( r e i θ ) n = r n e in θ = r n ( cos n θ + i sin n θ )
n제곱근 : z 1 / n = r 1 / n e i ( θ + 2 k π ) / n z^{1/n} = r^{1/n} e^{i(\theta + 2k\pi)/n} z 1/ n = r 1/ n e i ( θ + 2 k π ) / n , k = 0 , 1 , … , n − 1 k = 0, 1, \ldots, n-1 k = 0 , 1 , … , n − 1
단위원 위의 n n n 등분점을 나타냅니다. (1의 n제곱근: W N k = e j 2 π k / N W_N^k = e^{j2\pi k/N} W N k = e j 2 π k / N - FFT에서 등장!)
덧셈/뺄셈 (직교형이 편리):
( x 1 + i y 1 ) ± ( x 2 + i y 2 ) = ( x 1 ± x 2 ) + i ( y 1 ± y 2 ) (x_1 + iy_1) \pm (x_2 + iy_2) = (x_1 \pm x_2) + i(y_1 \pm y_2) ( x 1 + i y 1 ) ± ( x 2 + i y 2 ) = ( x 1 ± x 2 ) + i ( y 1 ± y 2 )
곱셈 (극형이 편리):
( r 1 e i θ 1 ) ( r 2 e i θ 2 ) = r 1 r 2 e i ( θ 1 + θ 2 ) (r_1 e^{i\theta_1})(r_2 e^{i\theta_2}) = r_1 r_2 e^{i(\theta_1 + \theta_2)} ( r 1 e i θ 1 ) ( r 2 e i θ 2 ) = r 1 r 2 e i ( θ 1 + θ 2 )
크기는 곱, 위상은 합 — 전기공학에서 임피던스 곱셈의 기반입니다.
나눗셈 :
r 1 e i θ 1 r 2 e i θ 2 = r 1 r 2 e i ( θ 1 − θ 2 ) \frac{r_1 e^{i\theta_1}}{r_2 e^{i\theta_2}} = \frac{r_1}{r_2} e^{i(\theta_1 - \theta_2)} r 2 e i θ 2 r 1 e i θ 1 = r 2 r 1 e i ( θ 1 − θ 2 )
켤레복소수(Complex Conjugate) :
z ˉ = x − i y = r e − i θ \bar{z} = x - iy = r e^{-i\theta} z ˉ = x − i y = r e − i θ
유용한 성질:
z z ˉ = x 2 + y 2 = ∣ z ∣ 2 z\bar{z} = x^2 + y^2 = |z|^2 z z ˉ = x 2 + y 2 = ∣ z ∣ 2
Re ( z ) = ( z + z ˉ ) / 2 \text{Re}(z) = (z + \bar{z})/2 Re ( z ) = ( z + z ˉ ) /2
Im ( z ) = ( z − z ˉ ) / ( 2 i ) \text{Im}(z) = (z - \bar{z})/(2i) Im ( z ) = ( z − z ˉ ) / ( 2 i )
∣ z ˉ ∣ = ∣ z ∣ |\bar{z}| = |z| ∣ z ˉ ∣ = ∣ z ∣ , arg ( z ˉ ) = − arg ( z ) \arg(\bar{z}) = -\arg(z) arg ( z ˉ ) = − arg ( z )
교류 회로 분석 에서 복소수의 위력이 발휘됩니다.
v ( t ) = V m cos ( ω t + ϕ ) v(t) = V_m\cos(\omega t + \phi) v ( t ) = V m cos ( ω t + ϕ ) 를 페이저로 표현:
V = V m e j ϕ = V m ∠ ϕ \mathbf{V} = V_m e^{j\phi} = V_m\angle\phi V = V m e j ϕ = V m ∠ ϕ
임피던스(Impedance) :
Z R = R ( 순저항, 위상차 없음 ) Z_R = R \quad (\text{순저항, 위상차 없음}) Z R = R ( 순저항 , 위상차 없음 )
Z L = j ω L ( 인덕터, +90도 위상 진행 ) Z_L = j\omega L \quad (\text{인덕터, +90도 위상 진행}) Z L = j ω L ( 인덕터 , +90 도 위상 진행 )
Z C = 1 j ω C = − j ω C ( 캐패시터, -90도 위상 지연 ) Z_C = \frac{1}{j\omega C} = \frac{-j}{\omega C} \quad (\text{캐패시터, -90도 위상 지연}) Z C = j ω C 1 = ω C − j ( 캐패시터 , -90 도 위상 지연 )
직렬 RLC 임피던스:
Z = R + j ω L + 1 j ω C = R + j ( ω L − 1 ω C ) Z = R + j\omega L + \frac{1}{j\omega C} = R + j\left(\omega L - \frac{1}{\omega C}\right) Z = R + j ω L + j ω C 1 = R + j ( ω L − ω C 1 )
크기: ∣ Z ∣ = R 2 + ( ω L − 1 / ( ω C ) ) 2 |Z| = \sqrt{R^2 + (\omega L - 1/(\omega C))^2} ∣ Z ∣ = R 2 + ( ω L − 1/ ( ω C ) ) 2
위상: ϕ = arctan ( ω L − 1 / ( ω C ) R ) \phi = \arctan\!\left(\frac{\omega L - 1/(\omega C)}{R}\right) ϕ = arctan ( R ω L − 1/ ( ω C ) )
공진 조건: ω 0 L = 1 / ( ω 0 C ) \omega_0 L = 1/(\omega_0 C) ω 0 L = 1/ ( ω 0 C ) → ω 0 = 1 / L C \omega_0 = 1/\sqrt{LC} ω 0 = 1/ L C , Z = R Z = R Z = R (순저항)
전달 함수(Transfer Function) :
H ( j ω ) = Y ( j ω ) X ( j ω ) H(j\omega) = \frac{Y(j\omega)}{X(j\omega)} H ( j ω ) = X ( j ω ) Y ( j ω )
이것이 라플라스 도메인에서 H ( s ) ∣ s = j ω H(s)|_{s=j\omega} H ( s ) ∣ s = j ω 이며, 보드 선도의 기반입니다.
f ( z ) = f ( x + i y ) = u ( x , y ) + i v ( x , y ) f(z) = f(x + iy) = u(x, y) + iv(x, y) f ( z ) = f ( x + i y ) = u ( x , y ) + i v ( x , y )
여기서 u , v u, v u , v 는 실수 값 함수입니다.
예시 :
f ( z ) = z 2 = ( x + i y ) 2 = x 2 − y 2 + i ( 2 x y ) f(z) = z^2 = (x+iy)^2 = x^2 - y^2 + i(2xy) f ( z ) = z 2 = ( x + i y ) 2 = x 2 − y 2 + i ( 2 x y )
u ( x , y ) = x 2 − y 2 , v ( x , y ) = 2 x y u(x,y) = x^2 - y^2, \quad v(x,y) = 2xy u ( x , y ) = x 2 − y 2 , v ( x , y ) = 2 x y
f ( z ) = e z = e x + i y = e x ( cos y + i sin y ) f(z) = e^z = e^{x+iy} = e^x(\cos y + i\sin y) f ( z ) = e z = e x + i y = e x ( cos y + i sin y )
u ( x , y ) = e x cos y , v ( x , y ) = e x sin y u(x,y) = e^x\cos y, \quad v(x,y) = e^x\sin y u ( x , y ) = e x cos y , v ( x , y ) = e x sin y
f ( z ) f(z) f ( z ) 의 복소 미분:
f ′ ( z 0 ) = lim Δ z → 0 f ( z 0 + Δ z ) − f ( z 0 ) Δ z f'(z_0) = \lim_{\Delta z\to 0}\frac{f(z_0 + \Delta z) - f(z_0)}{\Delta z} f ′ ( z 0 ) = lim Δ z → 0 Δ z f ( z 0 + Δ z ) − f ( z 0 )
실수와 달리 Δ z \Delta z Δ z 가 복소 평면에서 어느 방향으로도 0에 접근할 수 있어야 극한값이 같아야 합니다.
x축 방향 (Δ z = Δ x \Delta z = \Delta x Δ z = Δ x ):
f ′ ( z ) = ∂ u ∂ x + i ∂ v ∂ x f'(z) = \frac{\partial u}{\partial x} + i\frac{\partial v}{\partial x} f ′ ( z ) = ∂ x ∂ u + i ∂ x ∂ v
y축 방향 (Δ z = i Δ y \Delta z = i\Delta y Δ z = i Δ y ):
f ′ ( z ) = 1 i ∂ u ∂ y + ∂ v ∂ y = − i ∂ u ∂ y + ∂ v ∂ y f'(z) = \frac{1}{i}\frac{\partial u}{\partial y} + \frac{\partial v}{\partial y} = -i\frac{\partial u}{\partial y} + \frac{\partial v}{\partial y} f ′ ( z ) = i 1 ∂ y ∂ u + ∂ y ∂ v = − i ∂ y ∂ u + ∂ y ∂ v
두 표현이 같으려면:
∂ u ∂ x = ∂ v ∂ y , ∂ u ∂ y = − ∂ v ∂ x \boxed{\frac{\partial u}{\partial x} = \frac{\partial v}{\partial y}, \quad \frac{\partial u}{\partial y} = -\frac{\partial v}{\partial x}} ∂ x ∂ u = ∂ y ∂ v , ∂ y ∂ u = − ∂ x ∂ v
이것이 **코시-리만 방정식(Cauchy-Riemann Equations)**입니다.
u , v u, v u , v 의 편미분이 연속이고 코시-리만 방정식을 만족하면 f ( z ) f(z) f ( z ) 는 **해석 함수(Analytic Function)**입니다.
해석 함수의 실부와 허부는 각각 라플라스 방정식 을 만족합니다:
∇ 2 u = ∂ 2 u ∂ x 2 + ∂ 2 u ∂ y 2 = 0 \nabla^2 u = \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} = 0 ∇ 2 u = ∂ x 2 ∂ 2 u + ∂ y 2 ∂ 2 u = 0
∇ 2 v = ∂ 2 v ∂ x 2 + ∂ 2 v ∂ y 2 = 0 \nabla^2 v = \frac{\partial^2 v}{\partial x^2} + \frac{\partial^2 v}{\partial y^2} = 0 ∇ 2 v = ∂ x 2 ∂ 2 v + ∂ y 2 ∂ 2 v = 0
증명 : 코시-리만에서 u x x = v y x u_{xx} = v_{yx} u xx = v y x , u y y = − v x y u_{yy} = -v_{xy} u y y = − v x y 이므로 u x x + u y y = v y x − v x y = 0 u_{xx} + u_{yy} = v_{yx} - v_{xy} = 0 u xx + u y y = v y x − v x y = 0 (혼합 편미분의 순서 교환).
u u u 를 알면 코시-리만으로 v v v 를 구할 수 있습니다 (조화 켤레 함수).
공학적 의미 : 포텐셜 흐름에서 속도 포텐셜과 유선 함수의 관계, 정전기학에서 전위와 전기력선의 관계.
지수 함수 e z = e x ( cos y + i sin y ) e^z = e^x(\cos y + i\sin y) e z = e x ( cos y + i sin y ) :
전체 복소 평면에서 해석적
( e z ) ′ = e z (e^z)' = e^z ( e z ) ′ = e z
∣ e z ∣ = e x |e^z| = e^x ∣ e z ∣ = e x , arg ( e z ) = y \arg(e^z) = y arg ( e z ) = y
삼각 함수 :
cos z = e i z + e − i z 2 , sin z = e i z − e − i z 2 i \cos z = \frac{e^{iz} + e^{-iz}}{2}, \quad \sin z = \frac{e^{iz} - e^{-iz}}{2i} cos z = 2 e i z + e − i z , sin z = 2 i e i z − e − i z
cos z \cos z cos z , sin z \sin z sin z 는 전체 복소 평면에서 해석적
실수 삼각함수와 달리 크기가 무한대가 될 수 있음: ∣ cos ( i y ) ∣ = cosh y → ∞ |\cos(iy)| = \cosh y \to \infty ∣ cos ( i y ) ∣ = cosh y → ∞
쌍곡 함수 :
cosh z = e z + e − z 2 , sinh z = e z − e − z 2 \cosh z = \frac{e^z + e^{-z}}{2}, \quad \sinh z = \frac{e^z - e^{-z}}{2} cosh z = 2 e z + e − z , sinh z = 2 e z − e − z
cos ( i z ) = cosh z , sin ( i z ) = i sinh z \cos(iz) = \cosh z, \quad \sin(iz) = i\sinh z cos ( i z ) = cosh z , sin ( i z ) = i sinh z
로그 함수 (다가 함수):
ln z = ln r + i ( θ + 2 k π ) , k ∈ Z \ln z = \ln r + i(\theta + 2k\pi), \quad k \in \mathbb{Z} ln z = ln r + i ( θ + 2 k π ) , k ∈ Z
주값(principal value): Ln z = ln r + i θ \text{Ln}\,z = \ln r + i\theta Ln z = ln r + i θ , − π < θ ≤ π -\pi < \theta \leq \pi − π < θ ≤ π
z = 0 z = 0 z = 0 과 음의 실수축에서 특이성 발생 (가지 절단, branch cut).
C C C : 복소 평면의 곡선 (매개변수 z ( t ) = x ( t ) + i y ( t ) z(t) = x(t) + iy(t) z ( t ) = x ( t ) + i y ( t ) , a ≤ t ≤ b a \leq t \leq b a ≤ t ≤ b )
∫ C f ( z ) d z = ∫ a b f ( z ( t ) ) z ′ ( t ) d t \int_C f(z)\,dz = \int_a^b f(z(t))z'(t)\,dt ∫ C f ( z ) d z = ∫ a b f ( z ( t )) z ′ ( t ) d t
예시 : ∫ C z 2 d z \int_C z^2\,dz ∫ C z 2 d z (C C C : 원점에서 1 + i 1+i 1 + i 까지 직선)
매개변수화: z ( t ) = t + i t z(t) = t + it z ( t ) = t + i t , z ′ ( t ) = 1 + i z'(t) = 1+i z ′ ( t ) = 1 + i , 0 ≤ t ≤ 1 0 \leq t \leq 1 0 ≤ t ≤ 1
∫ 0 1 ( t + i t ) 2 ( 1 + i ) d t = ∫ 0 1 t 2 ( 2 i ) ( 1 + i ) d t = ( 2 i ) ( 1 + i ) ⋅ 1 3 = 2 i + 2 i 2 3 = − 2 + 2 i 3 \int_0^1 (t+it)^2(1+i)\,dt = \int_0^1 t^2(2i)(1+i)\,dt = (2i)(1+i)\cdot\frac{1}{3} = \frac{2i+2i^2}{3} = \frac{-2+2i}{3} ∫ 0 1 ( t + i t ) 2 ( 1 + i ) d t = ∫ 0 1 t 2 ( 2 i ) ( 1 + i ) d t = ( 2 i ) ( 1 + i ) ⋅ 3 1 = 3 2 i + 2 i 2 = 3 − 2 + 2 i
∮ C f ( z ) d z = 0 \oint_C f(z)\,dz = 0 ∮ C f ( z ) d z = 0
조건 : f ( z ) f(z) f ( z ) 가 단순 폐곡선 C C C 위와 그 내부에서 해석적.
직관 : 해석 함수는 경로에 무관하게 적분됩니다.
그린 정리와의 관계 :
∮ C f ( z ) d z = ∮ C ( u + i v ) ( d x + i d y ) = ∮ C ( u d x − v d y ) + i ∮ C ( v d x + u d y ) \oint_C f(z)\,dz = \oint_C (u+iv)(dx+idy) = \oint_C (u\,dx - v\,dy) + i\oint_C (v\,dx + u\,dy) ∮ C f ( z ) d z = ∮ C ( u + i v ) ( d x + i d y ) = ∮ C ( u d x − v d y ) + i ∮ C ( v d x + u d y )
그린 정리와 코시-리만 방정식을 적용하면 두 항 모두 0이 됩니다.
경로 독립성 : 폐곡선 적분이 0 ↔ 적분이 경로에 무관
원시 함수(antiderivative): F ′ ( z ) = f ( z ) F'(z) = f(z) F ′ ( z ) = f ( z ) 이면 ∫ a b f ( z ) d z = F ( b ) − F ( a ) \int_a^b f(z)\,dz = F(b) - F(a) ∫ a b f ( z ) d z = F ( b ) − F ( a )
f ( a ) = 1 2 π i ∮ C f ( z ) z − a d z \boxed{f(a) = \frac{1}{2\pi i}\oint_C \frac{f(z)}{z-a}\,dz} f ( a ) = 2 π i 1 ∮ C z − a f ( z ) d z
조건 : f ( z ) f(z) f ( z ) 가 C C C 위와 내부에서 해석적, a a a 는 C C C 내부.
해석 : f ( z ) / ( z − a ) f(z)/(z-a) f ( z ) / ( z − a ) 는 z = a z = a z = a 에서 극점을 가집니다. 코시 공식은 극점 주변의 적분이 함수값과 직접 연결됨을 보여줍니다.
고차 미분 공식 :
f ( n ) ( a ) = n ! 2 π i ∮ C f ( z ) ( z − a ) n + 1 d z f^{(n)}(a) = \frac{n!}{2\pi i}\oint_C \frac{f(z)}{(z-a)^{n+1}}\,dz f ( n ) ( a ) = 2 π i n ! ∮ C ( z − a ) n + 1 f ( z ) d z
이는 해석 함수가 무한히 미분 가능함을 보여줍니다!
테일러 급수 : f ( z ) f(z) f ( z ) 가 z = z 0 z = z_0 z = z 0 근방에서 해석적이면:
f ( z ) = ∑ n = 0 ∞ a n ( z − z 0 ) n , a n = f ( n ) ( z 0 ) n ! f(z) = \sum_{n=0}^{\infty}a_n(z-z_0)^n, \quad a_n = \frac{f^{(n)}(z_0)}{n!} f ( z ) = ∑ n = 0 ∞ a n ( z − z 0 ) n , a n = n ! f ( n ) ( z 0 )
로랑 급수(Laurent Series) : f ( z ) f(z) f ( z ) 가 고리 영역 r 1 < ∣ z − z 0 ∣ < r 2 r_1 < |z - z_0| < r_2 r 1 < ∣ z − z 0 ∣ < r 2 에서 해석적이면:
f ( z ) = ∑ n = − ∞ ∞ a n ( z − z 0 ) n = ∑ n = 0 ∞ a n ( z − z 0 ) n + ∑ n = 1 ∞ b n ( z − z 0 ) n f(z) = \sum_{n=-\infty}^{\infty}a_n(z-z_0)^n = \sum_{n=0}^{\infty}a_n(z-z_0)^n + \sum_{n=1}^{\infty}\frac{b_n}{(z-z_0)^n} f ( z ) = ∑ n = − ∞ ∞ a n ( z − z 0 ) n = ∑ n = 0 ∞ a n ( z − z 0 ) n + ∑ n = 1 ∞ ( z − z 0 ) n b n
음의 거듭제곱 부분을 **주요부(principal part)**라고 합니다.
f ( z ) f(z) f ( z ) 가 z = z 0 z = z_0 z = z 0 에서 해석적이지 않은 경우:
제거가능 특이점(Removable Singularity) : 로랑 급수에 음의 거듭제곱 항이 없음.
sin z z = 1 − z 2 6 + z 4 120 − ⋯ ( z = 0 은 제거가능) \frac{\sin z}{z} = 1 - \frac{z^2}{6} + \frac{z^4}{120} - \cdots \quad \text{(}z=0\text{은 제거가능)} z s i n z = 1 − 6 z 2 + 120 z 4 − ⋯ ( z = 0 은 제거가능 )
z = 0 z = 0 z = 0 에 함수값 1을 부여하면 해석적이 됩니다.
m극(Pole of Order m) : 유한개의 음의 거듭제곱 항.
f ( z ) = 1 ( z − z 0 ) m ( 해석 함수 ) (m극) f(z) = \frac{1}{(z-z_0)^m}(\text{해석 함수}) \quad \text{(m극)} f ( z ) = ( z − z 0 ) m 1 ( 해석 함수 ) (m 극 )
본질적 특이점(Essential Singularity) : 무한히 많은 음의 거듭제곱 항.
e 1 / z = 1 + 1 z + 1 2 ! z 2 + ⋯ ( z = 0 은 본질적 특이점) e^{1/z} = 1 + \frac{1}{z} + \frac{1}{2!z^2} + \cdots \quad \text{(}z=0\text{은 본질적 특이점)} e 1/ z = 1 + z 1 + 2 ! z 2 1 + ⋯ ( z = 0 은 본질적 특이점 )
피카르 정리: 본질적 특이점 근방에서 함수값이 거의 모든 복소수를 취합니다.
유수의 정의 : f ( z ) f(z) f ( z ) 의 로랑 급수에서 ( z − z 0 ) − 1 (z-z_0)^{-1} ( z − z 0 ) − 1 항의 계수.
Res [ f , z 0 ] = b 1 = 1 2 π i ∮ ∣ z − z 0 ∣ = ϵ f ( z ) d z \text{Res}[f, z_0] = b_1 = \frac{1}{2\pi i}\oint_{|z-z_0|=\epsilon} f(z)\,dz Res [ f , z 0 ] = b 1 = 2 π i 1 ∮ ∣ z − z 0 ∣ = ϵ f ( z ) d z
유수 계산법 :
단순극 (m = 1 m=1 m = 1 ):
Res [ f , z 0 ] = lim z → z 0 ( z − z 0 ) f ( z ) \text{Res}[f, z_0] = \lim_{z\to z_0}(z - z_0)f(z) Res [ f , z 0 ] = lim z → z 0 ( z − z 0 ) f ( z )
유리함수 f = p / q f = p/q f = p / q (단순극):
Res [ f , z 0 ] = p ( z 0 ) q ′ ( z 0 ) \text{Res}[f, z_0] = \frac{p(z_0)}{q'(z_0)} Res [ f , z 0 ] = q ′ ( z 0 ) p ( z 0 )
m중극:
Res [ f , z 0 ] = 1 ( m − 1 ) ! lim z → z 0 d m − 1 d z m − 1 [ ( z − z 0 ) m f ( z ) ] \text{Res}[f, z_0] = \frac{1}{(m-1)!}\lim_{z\to z_0}\frac{d^{m-1}}{dz^{m-1}}\left[(z-z_0)^m f(z)\right] Res [ f , z 0 ] = ( m − 1 )! 1 lim z → z 0 d z m − 1 d m − 1 [ ( z − z 0 ) m f ( z ) ]
유수 정리(Residue Theorem) :
∮ C f ( z ) d z = 2 π i ∑ k Res [ f , z k ] \oint_C f(z)\,dz = 2\pi i \sum_k \text{Res}[f, z_k] ∮ C f ( z ) d z = 2 π i ∑ k Res [ f , z k ]
z k z_k z k 는 C C C 내부의 모든 특이점.
복소 해석학의 가장 강력한 응용 중 하나: 어려운 실수 적분을 쉽게 계산합니다.
예제 1 : I = ∫ − ∞ ∞ d x 1 + x 2 \displaystyle I = \int_{-\infty}^{\infty}\frac{dx}{1+x^2} I = ∫ − ∞ ∞ 1 + x 2 d x
f ( z ) = 1 / ( 1 + z 2 ) = 1 / [ ( z + i ) ( z − i ) ] f(z) = 1/(1+z^2) = 1/[(z+i)(z-i)] f ( z ) = 1/ ( 1 + z 2 ) = 1/ [( z + i ) ( z − i )]
상반 평면에서 반원 경로를 사용합니다. z = i z = i z = i 가 상반 평면의 단순극:
Res [ f , i ] = lim z → i z − i ( z + i ) ( z − i ) = 1 2 i \text{Res}[f, i] = \lim_{z\to i}\frac{z-i}{(z+i)(z-i)} = \frac{1}{2i} Res [ f , i ] = lim z → i ( z + i ) ( z − i ) z − i = 2 i 1
반원 호의 기여는 R → ∞ R \to \infty R → ∞ 에서 0이 됩니다 (조르당 보조정리).
I = 2 π i ⋅ 1 2 i = π I = 2\pi i \cdot \frac{1}{2i} = \pi I = 2 π i ⋅ 2 i 1 = π
따라서 ∫ − ∞ ∞ d x 1 + x 2 = π \displaystyle\int_{-\infty}^{\infty}\frac{dx}{1+x^2} = \pi ∫ − ∞ ∞ 1 + x 2 d x = π (검증: arctan ( x ) ∣ − ∞ ∞ = π \arctan(x)\Big|_{-\infty}^{\infty} = \pi arctan ( x ) − ∞ ∞ = π )
예제 2 : I = ∫ 0 ∞ cos x x 2 + a 2 d x ( a > 0 ) \displaystyle I = \int_0^{\infty}\frac{\cos x}{x^2+a^2}dx \quad (a > 0) I = ∫ 0 ∞ x 2 + a 2 cos x d x ( a > 0 )
f ( z ) = e i z z 2 + a 2 = e i z ( z + i a ) ( z − i a ) f(z) = \frac{e^{iz}}{z^2+a^2} = \frac{e^{iz}}{(z+ia)(z-ia)} f ( z ) = z 2 + a 2 e i z = ( z + ia ) ( z − ia ) e i z
상반 평면의 극점: z = i a z = ia z = ia
Res [ f , i a ] = e i ( i a ) 2 i a = e − a 2 i a \text{Res}[f, ia] = \frac{e^{i(ia)}}{2ia} = \frac{e^{-a}}{2ia} Res [ f , ia ] = 2 ia e i ( ia ) = 2 ia e − a
∫ − ∞ ∞ e i x x 2 + a 2 d x = 2 π i ⋅ e − a 2 i a = π e − a a \int_{-\infty}^{\infty}\frac{e^{ix}}{x^2+a^2}dx = 2\pi i \cdot \frac{e^{-a}}{2ia} = \frac{\pi e^{-a}}{a} ∫ − ∞ ∞ x 2 + a 2 e i x d x = 2 π i ⋅ 2 ia e − a = a π e − a
실부만 취하면:
I = ∫ 0 ∞ cos x x 2 + a 2 d x = π e − a 2 a I = \int_0^{\infty}\frac{\cos x}{x^2+a^2}dx = \frac{\pi e^{-a}}{2a} I = ∫ 0 ∞ x 2 + a 2 c o s x d x = 2 a π e − a
예제 3 : ∫ 0 2 π d θ 2 + cos θ \displaystyle\int_0^{2\pi}\frac{d\theta}{2+\cos\theta} ∫ 0 2 π 2 + cos θ d θ
z = e i θ z = e^{i\theta} z = e i θ , d z = i z d θ dz = iz\,d\theta d z = i z d θ , cos θ = ( z + z − 1 ) / 2 \cos\theta = (z + z^{-1})/2 cos θ = ( z + z − 1 ) /2 :
∫ 0 2 π d θ 2 + cos θ = ∮ ∣ z ∣ = 1 d z / i z 2 + ( z + z − 1 ) / 2 = ∮ 2 d z i ( z 2 + 4 z + 1 ) \int_0^{2\pi}\frac{d\theta}{2+\cos\theta} = \oint_{|z|=1}\frac{dz/iz}{2+(z+z^{-1})/2} = \oint\frac{2\,dz}{i(z^2+4z+1)} ∫ 0 2 π 2 + c o s θ d θ = ∮ ∣ z ∣ = 1 2 + ( z + z − 1 ) /2 d z / i z = ∮ i ( z 2 + 4 z + 1 ) 2 d z
극점: z = − 2 ± 3 z = -2 \pm \sqrt{3} z = − 2 ± 3 . 단위원 내부: z 1 = − 2 + 3 z_1 = -2 + \sqrt{3} z 1 = − 2 + 3
= 2 π i ⋅ 2 i ⋅ 2 ( z 1 − z 2 ) = 2 π 3 = 2\pi i \cdot \frac{2}{i \cdot 2(z_1 - z_2)} = \frac{2\pi}{\sqrt{3}} = 2 π i ⋅ i ⋅ 2 ( z 1 − z 2 ) 2 = 3 2 π
브로미치 적분(Bromwich Integral) :
f ( t ) = 1 2 π i ∫ σ − i ∞ σ + i ∞ F ( s ) e s t d s f(t) = \frac{1}{2\pi i}\int_{\sigma-i\infty}^{\sigma+i\infty}F(s)e^{st}\,ds f ( t ) = 2 π i 1 ∫ σ − i ∞ σ + i ∞ F ( s ) e s t d s
이는 s s s 평면에서 수직선을 따른 경로 적분으로, 왼쪽의 모든 극점을 포함하는 반원으로 경로를 닫으면 유수 정리 적용이 가능합니다:
f ( t ) = ∑ k Res [ F ( s ) e s t , s k ] f(t) = \sum_k \text{Res}\left[F(s)e^{st}, s_k\right] f ( t ) = ∑ k Res [ F ( s ) e s t , s k ]
예시 : F ( s ) = 1 / ( s 2 + ω 2 ) F(s) = 1/(s^2+\omega^2) F ( s ) = 1/ ( s 2 + ω 2 ) 의 역 라플라스 변환
극점: s = ± i ω s = \pm i\omega s = ± iω
Res [ e s t s 2 + ω 2 , i ω ] = e i ω t 2 i ω \text{Res}\left[\frac{e^{st}}{s^2+\omega^2}, i\omega\right] = \frac{e^{i\omega t}}{2i\omega} Res [ s 2 + ω 2 e s t , iω ] = 2 iω e iω t
Res [ e s t s 2 + ω 2 , − i ω ] = e − i ω t − 2 i ω \text{Res}\left[\frac{e^{st}}{s^2+\omega^2}, -i\omega\right] = \frac{e^{-i\omega t}}{-2i\omega} Res [ s 2 + ω 2 e s t , − iω ] = − 2 iω e − iω t
f ( t ) = e i ω t − e − i ω t 2 i ω = sin ω t ω f(t) = \frac{e^{i\omega t} - e^{-i\omega t}}{2i\omega} = \frac{\sin\omega t}{\omega} f ( t ) = 2 iω e iω t − e − iω t = ω s i n ω t
확인: L { sin ω t / ω } = 1 / ( s 2 + ω 2 ) \mathcal{L}\{\sin\omega t/\omega\} = 1/(s^2+\omega^2) L { sin ω t / ω } = 1/ ( s 2 + ω 2 ) ✓
이산 시간 신호 x [ n ] x[n] x [ n ] 의 Z-변환:
X ( z ) = Z { x [ n ] } = ∑ n = − ∞ ∞ x [ n ] z − n X(z) = \mathcal{Z}\{x[n]\} = \sum_{n=-\infty}^{\infty}x[n]z^{-n} X ( z ) = Z { x [ n ]} = ∑ n = − ∞ ∞ x [ n ] z − n
z = r e j Ω z = re^{j\Omega} z = r e j Ω 는 복소 변수. 수렴 조건: ∑ ∣ x [ n ] ∣ ∣ z ∣ − n < ∞ \sum|x[n]||z|^{-n} < \infty ∑ ∣ x [ n ] ∣∣ z ∣ − n < ∞
수렴 영역(ROC, Region of Convergence) :
단측 인과 신호: ∣ z ∣ > r max |z| > r_{\max} ∣ z ∣ > r m a x (극점의 밖)
단측 반인과 신호: ∣ z ∣ < r min |z| < r_{\min} ∣ z ∣ < r m i n (극점의 안)
양측 신호: 고리 영역 r 1 < ∣ z ∣ < r 2 r_1 < |z| < r_2 r 1 < ∣ z ∣ < r 2
단위 임펄스 :
x [ n ] = δ [ n ] ⇒ X ( z ) = 1 , 모든 z x[n] = \delta[n] \Rightarrow X(z) = 1, \quad \text{모든 } z x [ n ] = δ [ n ] ⇒ X ( z ) = 1 , 모든 z
단위 계단 :
x [ n ] = u [ n ] ⇒ X ( z ) = z z − 1 = 1 1 − z − 1 , ∣ z ∣ > 1 x[n] = u[n] \Rightarrow X(z) = \frac{z}{z-1} = \frac{1}{1-z^{-1}}, \quad |z| > 1 x [ n ] = u [ n ] ⇒ X ( z ) = z − 1 z = 1 − z − 1 1 , ∣ z ∣ > 1
지수 신호 :
x [ n ] = a n u [ n ] ⇒ X ( z ) = z z − a = 1 1 − a z − 1 , ∣ z ∣ > ∣ a ∣ x[n] = a^n u[n] \Rightarrow X(z) = \frac{z}{z-a} = \frac{1}{1-az^{-1}}, \quad |z| > |a| x [ n ] = a n u [ n ] ⇒ X ( z ) = z − a z = 1 − a z − 1 1 , ∣ z ∣ > ∣ a ∣
정현파 :
x [ n ] = cos Ω 0 n ⋅ u [ n ] ⇒ X ( z ) = z ( z − cos Ω 0 ) z 2 − 2 z cos Ω 0 + 1 , ∣ z ∣ > 1 x[n] = \cos\Omega_0 n \cdot u[n] \Rightarrow X(z) = \frac{z(z-\cos\Omega_0)}{z^2 - 2z\cos\Omega_0 + 1}, \quad |z| > 1 x [ n ] = cos Ω 0 n ⋅ u [ n ] ⇒ X ( z ) = z 2 − 2 z c o s Ω 0 + 1 z ( z − c o s Ω 0 ) , ∣ z ∣ > 1
x [ n ] = sin Ω 0 n ⋅ u [ n ] ⇒ X ( z ) = z sin Ω 0 z 2 − 2 z cos Ω 0 + 1 , ∣ z ∣ > 1 x[n] = \sin\Omega_0 n \cdot u[n] \Rightarrow X(z) = \frac{z\sin\Omega_0}{z^2 - 2z\cos\Omega_0 + 1}, \quad |z| > 1 x [ n ] = sin Ω 0 n ⋅ u [ n ] ⇒ X ( z ) = z 2 − 2 z c o s Ω 0 + 1 z s i n Ω 0 , ∣ z ∣ > 1
단위 램프 :
x [ n ] = n u [ n ] ⇒ X ( z ) = z ( z − 1 ) 2 , ∣ z ∣ > 1 x[n] = nu[n] \Rightarrow X(z) = \frac{z}{(z-1)^2}, \quad |z| > 1 x [ n ] = n u [ n ] ⇒ X ( z ) = ( z − 1 ) 2 z , ∣ z ∣ > 1
선형성 :
Z { a x [ n ] + b y [ n ] } = a X ( z ) + b Y ( z ) \mathcal{Z}\{ax[n] + by[n]\} = aX(z) + bY(z) Z { a x [ n ] + b y [ n ]} = a X ( z ) + bY ( z )
시간 이동 :
Z { x [ n − k ] } = z − k X ( z ) \mathcal{Z}\{x[n-k]\} = z^{-k}X(z) Z { x [ n − k ]} = z − k X ( z )
z − 1 z^{-1} z − 1 이 단위 지연 연산자입니다. 차분 방정식을 대수 방정식으로!
z 스케일링 (주파수 이동):
Z { a n x [ n ] } = X ( z / a ) \mathcal{Z}\{a^n x[n]\} = X(z/a) Z { a n x [ n ]} = X ( z / a )
시간 반전 :
Z { x [ − n ] } = X ( z − 1 ) \mathcal{Z}\{x[-n]\} = X(z^{-1}) Z { x [ − n ]} = X ( z − 1 )
합성곱(Z-변환의 핵심) :
Z { x [ n ] ∗ h [ n ] } = X ( z ) H ( z ) \mathcal{Z}\{x[n]*h[n]\} = X(z)H(z) Z { x [ n ] ∗ h [ n ]} = X ( z ) H ( z )
LTI 시스템 분석의 핵심: 합성곱이 곱셈으로!
초기값 정리 :
x [ 0 ] = lim z → ∞ X ( z ) x[0] = \lim_{z\to\infty} X(z) x [ 0 ] = lim z → ∞ X ( z )
최종값 정리 :
lim n → ∞ x [ n ] = lim z → 1 ( z − 1 ) X ( z ) \lim_{n\to\infty} x[n] = \lim_{z\to 1}(z-1)X(z) lim n → ∞ x [ n ] = lim z → 1 ( z − 1 ) X ( z )
부분 분수법 :
X ( z ) = B ( z ) A ( z ) = ∑ k A k z z − p k X(z) = \frac{B(z)}{A(z)} = \sum_k \frac{A_k z}{z - p_k} X ( z ) = A ( z ) B ( z ) = ∑ k z − p k A k z
p k p_k p k 는 극점, A k = [ ( z − p k ) X ( z ) / z ] z = p k A_k = [(z-p_k)X(z)/z]_{z=p_k} A k = [( z − p k ) X ( z ) / z ] z = p k
예제 : X ( z ) = z 2 ( z − 1 ) ( z − 0.5 ) X(z) = \frac{z^2}{(z-1)(z-0.5)} X ( z ) = ( z − 1 ) ( z − 0.5 ) z 2
X ( z ) z = z ( z − 1 ) ( z − 0.5 ) = A z − 1 + B z − 0.5 \frac{X(z)}{z} = \frac{z}{(z-1)(z-0.5)} = \frac{A}{z-1} + \frac{B}{z-0.5} z X ( z ) = ( z − 1 ) ( z − 0.5 ) z = z − 1 A + z − 0.5 B
A = z z − 0.5 ∣ z = 1 = 2 , B = z z − 1 ∣ z = 0.5 = − 1 A = \left.\frac{z}{z-0.5}\right|_{z=1} = 2, \quad B = \left.\frac{z}{z-1}\right|_{z=0.5} = -1 A = z − 0.5 z z = 1 = 2 , B = z − 1 z z = 0.5 = − 1
X ( z ) = 2 z z − 1 − z z − 0.5 X(z) = \frac{2z}{z-1} - \frac{z}{z-0.5} X ( z ) = z − 1 2 z − z − 0.5 z
x [ n ] = 2 u [ n ] − ( 0.5 ) n u [ n ] = [ 2 − ( 0.5 ) n ] u [ n ] x[n] = 2u[n] - (0.5)^n u[n] = [2 - (0.5)^n]u[n] x [ n ] = 2 u [ n ] − ( 0.5 ) n u [ n ] = [ 2 − ( 0.5 ) n ] u [ n ]
멱급수 전개법 (장제법):
X ( z ) = x [ 0 ] + x [ 1 ] z − 1 + x [ 2 ] z − 2 + ⋯ X(z) = x[0] + x[1]z^{-1} + x[2]z^{-2} + \cdots X ( z ) = x [ 0 ] + x [ 1 ] z − 1 + x [ 2 ] z − 2 + ⋯
X ( z ) X(z) X ( z ) 를 z − 1 z^{-1} z − 1 의 멱급수로 전개하면 직접 x [ n ] x[n] x [ n ] 을 읽을 수 있습니다.
예제 : y [ n ] − 0.5 y [ n − 1 ] = x [ n ] y[n] - 0.5y[n-1] = x[n] y [ n ] − 0.5 y [ n − 1 ] = x [ n ] , 초기 정지 상태, x [ n ] = u [ n ] x[n] = u[n] x [ n ] = u [ n ]
Z-변환 적용 (초기조건 0):
Y ( z ) − 0.5 z − 1 Y ( z ) = X ( z ) = z z − 1 Y(z) - 0.5z^{-1}Y(z) = X(z) = \frac{z}{z-1} Y ( z ) − 0.5 z − 1 Y ( z ) = X ( z ) = z − 1 z
Y ( z ) ( 1 − 0.5 z − 1 ) = z z − 1 Y(z)(1 - 0.5z^{-1}) = \frac{z}{z-1} Y ( z ) ( 1 − 0.5 z − 1 ) = z − 1 z
Y ( z ) = z / ( z − 1 ) 1 − 0.5 z − 1 = z 2 ( z − 1 ) ( z − 0.5 ) Y(z) = \frac{z/(z-1)}{1 - 0.5z^{-1}} = \frac{z^2}{(z-1)(z-0.5)} Y ( z ) = 1 − 0.5 z − 1 z / ( z − 1 ) = ( z − 1 ) ( z − 0.5 ) z 2
부분 분수로 역변환 (위 예제와 동일):
y [ n ] = 2 u [ n ] − ( 0.5 ) n u [ n ] = [ 2 − ( 0.5 ) n ] u [ n ] y[n] = 2u[n] - (0.5)^n u[n] = [2 - (0.5)^n]u[n] y [ n ] = 2 u [ n ] − ( 0.5 ) n u [ n ] = [ 2 − ( 0.5 ) n ] u [ n ]
n → ∞ n \to \infty n → ∞ 에서 y [ ∞ ] = 2 y[\infty] = 2 y [ ∞ ] = 2 (최종값 정리로 확인: ( z − 1 ) ⋅ z 2 / [ ( z − 1 ) ( z − 0.5 ) ] ∣ z = 1 = 1 / 0.5 = 2 (z-1)\cdot z^2/[(z-1)(z-0.5)]|_{z=1} = 1/0.5 = 2 ( z − 1 ) ⋅ z 2 / [( z − 1 ) ( z − 0.5 )] ∣ z = 1 = 1/0.5 = 2 )
전달 함수 H(z) :
LTI 시스템의 출력-입력 비:
H ( z ) = Y ( z ) X ( z ) = b 0 + b 1 z − 1 + ⋯ + b M z − M 1 + a 1 z − 1 + ⋯ + a N z − N H(z) = \frac{Y(z)}{X(z)} = \frac{b_0 + b_1 z^{-1} + \cdots + b_M z^{-M}}{1 + a_1 z^{-1} + \cdots + a_N z^{-N}} H ( z ) = X ( z ) Y ( z ) = 1 + a 1 z − 1 + ⋯ + a N z − N b 0 + b 1 z − 1 + ⋯ + b M z − M
영점(zero): H ( z ) = 0 H(z) = 0 H ( z ) = 0 인 z z z 값
극점(pole): H ( z ) = ∞ H(z) = \infty H ( z ) = ∞ 인 z z z 값
안정성 조건 : 모든 극점이 단위원 내부에 있어야 합니다.
안정 ⇔ 모든 극점 p k : ∣ p k ∣ < 1 \text{안정} \Leftrightarrow \text{모든 극점 } p_k: |p_k| < 1 안정 ⇔ 모든 극점 p k : ∣ p k ∣ < 1
FIR 필터 (유한 임펄스 응답):
H ( z ) = b 0 + b 1 z − 1 + ⋯ + b M z − M H(z) = b_0 + b_1 z^{-1} + \cdots + b_M z^{-M} H ( z ) = b 0 + b 1 z − 1 + ⋯ + b M z − M
극점이 원점에만 있어 항상 안정. 선형 위상 특성 가능.
IIR 필터 (무한 임펄스 응답):
H ( z ) = B ( z ) A ( z ) H(z) = \frac{B(z)}{A(z)} H ( z ) = A ( z ) B ( z )
극점이 단위원 내부에 있으면 안정. 적은 계수로 날카로운 특성 구현 가능.
from scipy import signal
import numpy as np
import matplotlib. pyplot as plt
N_order = 4
Wn = 0.2
b, a = signal. butter( N_order, Wn, btype= 'low' )
print ( "버터워스 LPF 계수:" )
print ( f" b = { b} " )
print ( f" a = { a} " )
w, h = signal. freqz( b, a, worN= 2048 )
zeros, poles, gain = signal. tf2zpk( b, a)
print ( f"\n영점: { zeros} " )
print ( f"극점: { poles} " )
print ( f"이득: { gain: .4f } " )
print ( f"극점 크기: { np. abs ( poles) } " )
fig, axes = plt. subplots( 2 , 2 , figsize= ( 14 , 10 ) )
axes[ 0 , 0 ] . plot( w/ np. pi, 20 * np. log10( abs ( h) + 1e-15 ) , 'b-' , linewidth= 2 )
axes[ 0 , 0 ] . axhline( y= - 3 , color= 'r' , linestyle= '--' , label= '-3dB' )
axes[ 0 , 0 ] . set_xlabel( '정규화 주파수 (x pi rad/샘플)' )
axes[ 0 , 0 ] . set_ylabel( '크기 (dB)' )
axes[ 0 , 0 ] . set_title( '버터워스 LPF 주파수 응답 (크기)' )
axes[ 0 , 0 ] . set_xlim( [ 0 , 1 ] )
axes[ 0 , 0 ] . set_ylim( [ - 80 , 5 ] )
axes[ 0 , 0 ] . legend( )
axes[ 0 , 0 ] . grid( True , alpha= 0.3 )
angles = np. unwrap( np. angle( h) )
axes[ 0 , 1 ] . plot( w/ np. pi, angles* 180 / np. pi, 'g-' , linewidth= 2 )
axes[ 0 , 1 ] . set_xlabel( '정규화 주파수 (x pi rad/샘플)' )
axes[ 0 , 1 ] . set_ylabel( '위상 (도)' )
axes[ 0 , 1 ] . set_title( '버터워스 LPF 위상 응답' )
axes[ 0 , 1 ] . set_xlim( [ 0 , 1 ] )
axes[ 0 , 1 ] . grid( True , alpha= 0.3 )
unit_circle = np. exp( 1j * np. linspace( 0 , 2 * np. pi, 200 ) )
axes[ 1 , 0 ] . plot( unit_circle. real, unit_circle. imag, 'k--' , alpha= 0.5 )
axes[ 1 , 0 ] . scatter( zeros. real, zeros. imag, s= 100 , marker= 'o' ,
color= 'blue' , zorder= 5 , label= '영점' )
axes[ 1 , 0 ] . scatter( poles. real, poles. imag, s= 100 , marker= 'x' ,
color= 'red' , linewidths= 2 , zorder= 5 , label= '극점' )
axes[ 1 , 0 ] . axhline( 0 , color= 'gray' , alpha= 0.3 )
axes[ 1 , 0 ] . axvline( 0 , color= 'gray' , alpha= 0.3 )
axes[ 1 , 0 ] . set_xlabel( '실수부' )
axes[ 1 , 0 ] . set_ylabel( '허수부' )
axes[ 1 , 0 ] . set_title( '극-영점 도표 (z 평면)' )
axes[ 1 , 0 ] . legend( )
axes[ 1 , 0 ] . grid( True , alpha= 0.3 )
axes[ 1 , 0 ] . set_aspect( 'equal' )
imp = np. zeros( 50 )
imp[ 0 ] = 1.0
h_imp = signal. lfilter( b, a, imp)
axes[ 1 , 1 ] . stem( h_imp, markerfmt= 'bo' , linefmt= 'b-' , basefmt= 'k-' )
axes[ 1 , 1 ] . set_xlabel( '샘플 n' )
axes[ 1 , 1 ] . set_ylabel( 'h[n]' )
axes[ 1 , 1 ] . set_title( '임펄스 응답 (IIR 무한)' )
axes[ 1 , 1 ] . grid( True , alpha= 0.3 )
plt. tight_layout( )
plt. savefig( 'digital_filter_analysis.png' , dpi= 150 )
plt. show( )
from scipy import signal
import numpy as np
import matplotlib. pyplot as plt
N_fir = 50
Wn = 0.2
h_fir = signal. firwin( N_fir + 1 , Wn, window= 'hamming' )
b_iir, a_iir = signal. butter( 6 , Wn, btype= 'low' )
w_fir, H_fir = signal. freqz( h_fir, [ 1 ] , worN= 2048 )
w_iir, H_iir = signal. freqz( b_iir, a_iir, worN= 2048 )
fig, axes = plt. subplots( 1 , 2 , figsize= ( 14 , 5 ) )
axes[ 0 ] . plot( w_fir/ np. pi, 20 * np. log10( abs ( H_fir) + 1e-15 ) ,
'b-' , linewidth= 2 , label= f'FIR (N= { N_fir} )' )
axes[ 0 ] . plot( w_iir/ np. pi, 20 * np. log10( abs ( H_iir) + 1e-15 ) ,
'r-' , linewidth= 2 , label= 'IIR 버터워스 6차' )
axes[ 0 ] . set_xlabel( '정규화 주파수' )
axes[ 0 ] . set_ylabel( '크기 (dB)' )
axes[ 0 ] . set_title( 'FIR vs IIR 주파수 응답' )
axes[ 0 ] . set_xlim( [ 0 , 1 ] )
axes[ 0 ] . set_ylim( [ - 80 , 5 ] )
axes[ 0 ] . legend( )
axes[ 0 ] . grid( True , alpha= 0.3 )
ph_fir = np. unwrap( np. angle( H_fir) )
ph_iir = np. unwrap( np. angle( H_iir) )
axes[ 1 ] . plot( w_fir/ np. pi, ph_fir* 180 / np. pi,
'b-' , linewidth= 2 , label= 'FIR (선형 위상)' )
axes[ 1 ] . plot( w_iir/ np. pi, ph_iir* 180 / np. pi,
'r-' , linewidth= 2 , label= 'IIR (비선형 위상)' )
axes[ 1 ] . set_xlabel( '정규화 주파수' )
axes[ 1 ] . set_ylabel( '위상 (도)' )
axes[ 1 ] . set_title( 'FIR vs IIR 위상 응답' )
axes[ 1 ] . set_xlim( [ 0 , 0.5 ] )
axes[ 1 ] . legend( )
axes[ 1 ] . grid( True , alpha= 0.3 )
plt. tight_layout( )
plt. savefig( 'fir_vs_iir.png' , dpi= 150 )
plt. show( )
print ( "계수 개수 비교:" )
print ( f" FIR: { len ( h_fir) } 계수" )
print ( f" IIR: b= { len ( b_iir) } , a= { len ( a_iir) } 계수 합계 { len ( b_iir) + len ( a_iir) } " )
z = e s T s , s = 1 T s ln z z = e^{sT_s}, \quad s = \frac{1}{T_s}\ln z z = e s T s , s = T s 1 ln z
s = σ + j ω s = \sigma + j\omega s = σ + j ω 에서:
z = e σ T s e j ω T s = e σ T s ∠ ( ω T s ) z = e^{\sigma T_s}e^{j\omega T_s} = e^{\sigma T_s}\angle(\omega T_s) z = e σ T s e j ω T s = e σ T s ∠ ( ω T s )
| s 평면 특성 | z 평면 특성 |
| -------------------------------------- | ------------- | --- | ---- |
| j ω j\omega j ω 축 (σ = 0 \sigma = 0 σ = 0 ) | 단위원 ∣ z ∣ = 1 | z | = 1 ∣ z ∣ = 1 |
| 좌반평면 (σ < 0 \sigma < 0 σ < 0 ) | 단위원 내부 ∣ z ∣ < 1 | z | < 1 ∣ z ∣ < 1 |
| 우반평면 (σ > 0 \sigma > 0 σ > 0 ) | 단위원 외부 ∣ z ∣ > 1 | z | > 1 ∣ z ∣ > 1 |
| DC (s = 0 s = 0 s = 0 ) | z = 1 z = 1 z = 1 |
| 나이퀴스트 주파수 (ω = π / T s \omega = \pi/T_s ω = π / T s ) | z = − 1 z = -1 z = − 1 |
안정성 대응 :
연속: 모든 극점이 좌반평면 → 이산: 모든 극점이 단위원 내부
아날로그 필터를 디지털 필터로 변환하는 방법:
s = 2 T s ⋅ z − 1 z + 1 s = \frac{2}{T_s}\cdot\frac{z-1}{z+1} s = T s 2 ⋅ z + 1 z − 1
주파수 워핑(frequency warping) 발생: ω a n a l o g = 2 T s tan ( Ω d i g i t a l 2 ) \omega_{analog} = \frac{2}{T_s}\tan\!\left(\frac{\Omega_{digital}}{2}\right) ω ana l o g = T s 2 tan ( 2 Ω d i g i t a l )
사전 워핑으로 보정 후 설계합니다.
from scipy import signal
import numpy as np
N = 4
Wn_analog = 2 * np. pi * 1000
z_a, p_a, k_a = signal. buttap( N)
b_analog, a_analog = signal. zpk2tf( z_a, p_a, k_a)
b_analog, a_analog = signal. lp2lp( b_analog, a_analog, Wn_analog)
fs = 8000
b_digital, a_digital = signal. bilinear( b_analog, a_analog, fs)
print ( "아날로그 필터 극점:" , np. roots( a_analog) )
print ( "디지털 필터 극점:" , np. roots( a_digital) )
print ( "디지털 극점 크기:" , np. abs ( np. roots( a_digital) ) )
연속 시스템 전달 함수:
G ( s ) = K ( s + z 1 ) ( s + z 2 ) ⋯ ( s + p 1 ) ( s + p 2 ) ⋯ G(s) = \frac{K(s+z_1)(s+z_2)\cdots}{(s+p_1)(s+p_2)\cdots} G ( s ) = ( s + p 1 ) ( s + p 2 ) ⋯ K ( s + z 1 ) ( s + z 2 ) ⋯
루스-허르비츠 판별법(Routh-Hurwitz Criterion) :
특성 다항식 a n s n + a n − 1 s n − 1 + ⋯ + a 0 a_n s^n + a_{n-1}s^{n-1} + \cdots + a_0 a n s n + a n − 1 s n − 1 + ⋯ + a 0 의 루스 배열을 이용해 우반 평면의 극점 수를 판별합니다.
나이퀴스트 판별법 :
G ( j ω ) G(j\omega) G ( j ω ) 의 나이퀴스트 선도에서 ( − 1 , 0 ) (-1, 0) ( − 1 , 0 ) 점의 감싸기 횟수로 안정성 판별.
디지털 제어기의 전달 함수 C ( z ) C(z) C ( z ) :
PID 디지털 구현 (후방 오일러 근사) :
C ( z ) = K p + K i T s z z − 1 + K d z − 1 T s z C(z) = K_p + K_i\frac{T_s z}{z-1} + K_d\frac{z-1}{T_s z} C ( z ) = K p + K i z − 1 T s z + K d T s z z − 1
이번 글에서 다룬 내용:
복소수 체계 : 직교형, 극형, 오일러 공식, 드 무아브르, 페이저 해석, 임피던스
복소함수와 해석 함수 : 복소 미분, 코시-리만 방정식, 조화 함수
복소 적분 : 경로 적분, 코시 정리, 코시 공식
로랑 급수와 유수 정리 : 특이점 분류, 유수 계산, 실수 적분 응용, 역 라플라스
Z-변환 : 정의, 수렴 영역, 주요 변환쌍, 차분 방정식 풀기
디지털 필터 설계 : FIR/IIR, 극-영점 도표, 안정성, 쌍일차 변환
s 평면 vs z 평면 : 안정성 조건 대응
다음 편에서는 **수치해석(Numerical Methods)**을 다룹니다. 방정식 풀기, 수치 미분/적분, ODE 수치 풀이, 선형 시스템, 보간까지 Python으로 완전 구현합니다.
Churchill, R. & Brown, J. "Complex Variables and Applications", 9th Edition
Oppenheim, A. & Schafer, R. "Discrete-Time Signal Processing", 3rd Edition
Proakis, J. & Manolakis, D. "Digital Signal Processing", 4th Edition
Ogata, K. "Modern Control Engineering", 5th Edition
SciPy 신호처리 공식 문서