python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4...

37
Python 과 함께 배우는 신호 해석 박섭형 이산 푸리에 급수 이산 푸리에 급수의 성질 Python과 함께 배우는 신호 해석 10 강. 이산 푸리에 급수 (4 장. 이산시간 주기 신호의 주파수 성분 분석: 이산 푸리에 급수) 박섭형 한림대학교 전자공학과 한림대학교 박섭형 Python과 함께 배우는 신호 해석 10 강. 이산 푸리에 급수 1

Upload: others

Post on 15-Jan-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

Python과 함께 배우는 신호 해석

제 10 강. 이산 푸리에 급수

(제 4 장. 이산시간 주기 신호의 주파수 성분 분석: 이산 푸리에 급수)

박섭형

한림대학교 전자공학과

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 1

Page 2: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

배울 내용

이산 푸리에 변환의 기본 개념

직교 정규 기저 벡터를 이용한 실벡터의 표현

직교 정규 기저 벡터의 변경

직교 정규 기저 벡터를 이용한 복소벡터의 표현

이산 푸리에 급수

이산 푸리에 급수의 성질

이산 푸리에 변환

이산 푸리에 변환의 성질

Python을 이용한 이산 푸리에 변환 계산

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 2

Page 3: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

x̃[n]이 주기가 N인 이산시간 복소 주기 신호라고 하자.

x̃[n] = x̃[n + rN], r는 정수, (4.37)

N의 양의 최솟값을 이 주기 신호의 기본 주기 (fundamental period)라고한다.

다음과 같이 x̃[n]의 한 주기 동안의 신호를 벡터로 구성한 것을 x̃라고 하자.

x̃ = [x̃[0] x̃[1] · · · x̃[N − 1]]T. (4.38)

이 벡터를 다음과 같이 직교 정규 기저 벡터들의 선형 결합으로 표현할 수있다.

x̃ = x̃[0]u0 + · · ·+ x̃[N − 1]uN−1, (4.39)

uk: k 번째 원소만 1이고 그 이외의 원소는 모두 0인 단위 벡터이다.

uk = [0 · · · 0 1 0 · · · 0]T. (4.40)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 3

Page 4: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

그리고 x̃를 다음과 같이 또 다른 직교 정규 기저 벡터들의 선형 결합으로도표현할 수 있다.

x̃ = ⟨w0, x̃⟩w0 + · · ·+ ⟨wN−1, x̃⟩wN−1, (4.41)

여기에서WN = e−j 2πN 이고, wk는 다음과 같다.

wk =1√N

(W∗

N0,W∗

Nk,W∗

N2k, · · · ,W∗

N(N−1)k

)T, k = 0, 1, · · · ,N − 1. (4.42)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 4

Page 5: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

이제 Xk = ⟨wk, x̃⟩라고 하면, Xk는 다음과 같이 쓸 수 있다.

Xk = ⟨wk, x̃⟩

= w∗k

Tx̃

=1√N

(W0

N,WkN,W2k

N , · · · ,W(N−1)kN

)(x̃[0], x̃[1], · · · , x̃[N − 1])T

=1√N

[W0

Nx̃[0] + WkNx̃[1] + · · ·+ W(N−1)k

N x̃[N − 1]]

(4.43)

=1√N

N−1∑n=0

WnkN x̃[n]

=1√N

N−1∑n=0

e−j 2πN nkx̃[n].

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 5

Page 6: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

그러면 x̃ = (x̃[0], x̃[1], · · · , x̃[N − 1])T를 다음과 같이 표현할 수 있다.

x̃ = ⟨w0, x̃⟩w0 + ⟨w1, x̃⟩w1 + · · ·+ ⟨wN−1, x̃⟩wN−1

= X0w0 + X1w1 + · · ·+ XN−1wN−1.(4.44)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 6

Page 7: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

이 벡터 식을 다음과 같이 풀어 쓸 수 있다.

X̃[0]

X̃[1]

X̃[2]

...

X̃[k]...

X̃[N − 1]

=x̃[0]√

N

W0N

W0N

W0N

...

W0N

...

W0N

+x̃[1]√

N

W0N

W1N

W2N

...

WnN

...

WN−1N

+ · · ·+ x̃[N − 1]√N

W0N

WN−1N

W2(N−1)N

...

Wn(N−1)N

...

W(N−1)2

N

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 7

Page 8: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

X̃[0]

X̃[1]

X̃[2]

...

X̃[k]...

X̃[N − 1]

=1√N

W0N W0

N · · · W0N · · · W0

N

W0N W1

N · · · WnN · · · WN−1

N

W0N W2

N · · · Wn·2N · · · W(N−1)2

N

......

. . ....

...

W0N Wk

N · · · WnkN · · · WN−1

N

......

. . ....

...

W0N WN−1

N · · · Wk(N−1)N · · · WN−1

N

x̃[0]

x̃[1]

x̃[2]...

x̃[n]...

x̃[N − 1]

.

X̃ = [X̃[0] X̃[1] · · · X̃[N − 1]]T라 하고, x̃ = [x̃[0] x̃[1] · · · x̃[N − 1]]T라하자. 그러면 이 식을 다음과 같이 표현할 수 있다.

X̃ =1√N

WNx̃, (4.45)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 8

Page 9: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

여기에서 (WN)k,n = WnkN 이다. 즉WN은 다음과 같다.

WN =

W0N W0

N · · · W0N · · · W0

N

W0N W1

N · · · WnN · · · WN−1

N

......

. . ....

...

W0N Wk

N · · · WnkN · · · WN−1

N

......

. . ....

...

W0N WN−1

N · · · Wk(N−1)N · · · WN−1

N

. (4.46)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 9

Page 10: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

한편, 정규 기저 벡터를 wk =1√N

[1 ej 2πN ·k ej 2πN ·2k · · · ej 2πN ·(N−1)k

]T로

변경하면 x̃를 다음과 같이 표현할 수 있다.

x̃ = ⟨w0, x̃⟩w0 + ⟨w1, x̃⟩w1 + · · ·+ ⟨wN−1, x̃⟩wN−1

= X0w0 + X1w1 + · · ·+ XN−1wN−1.(4.47)

이 벡터 식을 다음과 같이 정리할 수 있다.

x̃[0]

x̃[1]

x̃[2]...

x̃[n]...

x̃[N − 1]

=

X0√N

W∗N0

W∗N0

W∗N0

...W∗

N0

...W∗

N0

+

X1√N

W∗N0

W∗N1

W∗N2

...W∗

Nn

...W∗

NN−1

+ · · ·+ XN−1√

N

W∗N0

W∗N

N−1

W∗N2(N−1)

...W∗

Nn(N−1)

...

W∗N(N−1)2

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 10

Page 11: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

x̃[0]

x̃[1]

x̃[2]...

x̃[n]...

x̃[N − 1]

=

1√N

W∗N0 W∗

N0 · · · W∗

N0 · · · W∗

N0

W∗NN0 W∗

N1 · · · W∗

Nn · · · W∗

NN−1

......

. . ....

...

W∗N0 W∗

Nk · · · W∗

Nnk · · · W∗

NN−1

......

. . ....

...

W∗N0 W∗

NN−1 · · · W∗

Nk(N−1) · · · W∗

NN−1

X̃[0]

X̃[1]

...

X̃[n]...

X̃[N − 1]

.

(4.48)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 11

Page 12: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

이 식을 다음과 같이 쓸 수 있다.

x̃ =1√N

W∗NX̃, (4.49)

여기에서W∗N는 다음과 같다.

W∗N =

W∗N0 W∗

N0 · · · W∗

N0 · · · W∗

N0

W∗NN0 W∗

N1 · · · W∗

Nn · · · W∗

NN−1

......

. . ....

...

W∗N0 W∗

Nk · · · W∗

Nnk · · · W∗

NN−1

......

. . ....

...

W∗N0 W∗

NN−1 · · · W∗

Nk(N−1) · · · W∗

NN−1

. (4.50)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 12

Page 13: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

식 (4.48)의 n 번째 열만 따로 정리하면 다음과 같다.

x̃[n] = X0√N

W∗N0+

X1√N

W∗N

n+

X2√N

W∗N2n

+ · · ·+ XN−1√N

W∗N

n(N−1)

=1√N

N−1∑k=0

XkW∗N

kn (4.51)

=1√N

N−1∑k=0

Xkej 2πN kn,

여기에서 X[k] = Xk =1√N

N−1∑n=0

e−j 2πN nkx̃[n]을 x̃[n]의 이산 푸리에 급수

(discrete Fourier series)라고 하고, x̃[n] = 1√N

N−1∑k=0

Xke+j 2πN nk를 역 이산

푸리에 급수 (inverse discrete Fourier series)라고 한다. 그러나 계산의 편의상역 이산 푸리에 급수에만

1

N을 사용한다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 13

Page 14: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

정의 4.1 (이산 푸리에 급수와 역 이산 푸리에 급수)

이산 푸리에 급수(DFS: discrete Fourier series): 주기가 N인 이산 주기신호 x̃[n]의 한 주기 동안의 신호 x̃[0], x̃[1], · · · , x̃[N − 1]의 이산 푸리에급수 X̃[k]는 다음과 같이 정의된다.

X̃[k] =N−1∑n=0

x̃[n]e−j 2πN nk, k = 0, 1, · · · ,N − 1. (4.52)

역 이산 푸리에 급수(Inverse DFS)

x̃[n] = 1

N

N−1∑k=0

X̃[k]ej 2πN kn,n = 0, 1, · · · ,N − 1. (4.53)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 14

Page 15: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

DFS와 IDFS 식을 행렬과 벡터를 이용해서 나타내면 다음과 같이 나타낼 수있다.

X̃ = WNx̃, (4.54)

x̃ =1

NW∗NX̃, (4.55)

여기에서WN와W∗N는 각각 식 (4.46)과 (4.50)에 정의된 정방 행렬이다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 15

Page 16: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

예제 4.1다음과 같이 주어지는 이산시간 주기 신호 x̃[n]의 이산 푸리에 급수를 구하라.

x̃[n] = {· · · , 1↑, 2, 3, 4, 1, 2, 3, 4, · · · } (4.56)

한주기의 구간을 [0, 3]으로하자. W4 = e−j 2π4 = −j이므로이산 푸리에 급수의

정의에 의해 X̃[k]를 다음과 같이 구할 수 있다.

X̃[k] =3∑

n=0

x̃[n]e−j 2π4

nk =3∑

n=0

x̃[n](−j)nk, k = 0, 1, 2, 3 (4.57)

X̃[0] =

3∑n=0

x̃[n](−j)n·0 = 1 · 1 + 2 · 1 + 3 · 1 + 4 · 1 = 10,

X̃[1] =3∑

n=0

x̃[n](−j)n·1 = 1 · 1 + 2 · (−j) + 3 · (−1) + 4 · j = −2 + 2j,

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 16

Page 17: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

X̃[2] =3∑

n=0

x̃[n](−j)n·2 = 1 · 1 + 2 · (−1) + 3 · 1 + 4 · (−1) = −2, (4.58)

X̃[3] =

3∑n=0

x̃[n](−j)n·3 = 1 · 1 + 2 · j + 3 · (−1) + 4 · (−j) = −2− 2j.

따라서 X̃[k]는 다음과 같다.

{· · · , 10↑,−2 + 2j,−2,−2− 2j, 10,−2 + 2j,−2,−2− 2j, · · · } (4.59)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 17

Page 18: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

Python을 이용하여 신호의 DFS와 IDFS를 구하는 스크립트의 예

import numpy as npdef dfs(xn):

N = len(xn)n = np.arange(N)k = np.arange(N)WN = np.exp(-1j*2*np.pi/N)kn = np.outer(k,n)WNkn = WN**knreturn np.dot(WNkn, xn)

def idfs(Xk):N = len(Xk)n = np.arange(N)k = np.arange(N)WNast = np.exp(1j*2*np.pi/N)kn = np.outer(k,n)WNastkn = WNast**knreturn np.dot(WNastkn, Xk)/N

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 18

Page 19: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

Python을 이용하여 신호의 DFS와 IDFS를 구하는 스크립트의 예

xn = [1, 2, 3, 4]Xk = dfs(xn)print Xkxnr = idfs(Xk)print xnr

이 스크립트의 실행 결과는 다음과 같다.

>>>[ 10. +0.00000000e+00j -2. +2.00000000e+00j-2. -9.79717439e-16j -2. -2.00000000e+00j][ 1. -5.55111512e-16j 2. -3.52240700e-16j3. -1.11022302e-16j 4. +2.79565983e-16j]

>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 19

Page 20: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

벡터의 외적

정의 4.2 (벡터의 외적)

m × 1 열벡터 a = [a1 a2 · · · am]T와 n × 1 열벡터 b = [b1 b2 · · · bn]T의

외적 a ⊗ b는 abT와 같다.

a ⊗ b = abT =

a1

a2

...am

[b1 b2 · · · bn

]=

a1b1 a1b2 · · · a1bn

a2b1 a2b2 · · · a2bn...

.... . .

...amb1 amb2 · · · ambn

.

(4.60)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 20

Page 21: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

벡터의 외적

Numpy의 outer() 함수는 두 벡터의 외적을 구하는 함수이다. 다음 예를보면서 이 함수를 이해해 보자.

>>> a = np.arange(4)>>> aarray([0, 1, 2, 3])>>> np.outer(a,a)array([[0, 0, 0, 0],

[0, 1, 2, 3],[0, 2, 4, 6],[0, 3, 6, 9]])

>>> (1j)**_array([[ 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j],

[ 1.+0.j, 0.+1.j, -1.+0.j, -0.-1.j],[ 1.+0.j, -1.+0.j, 1.+0.j, -1.+0.j],[ 1.+0.j, -0.-1.j, -1.+0.j, 0.+1.j]])

>>>한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 21

Page 22: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

예제 4.2

다음 그림과 같이 주어지는 이산시간 주기 신호의 이산 푸리에 급수를 구하라.

n

x̃[n]

0

1

−13 −9 −2 2 9 13

이 신호는 주기가 N = 11인 이산 신호이다. 한 주기를 [−2, 8]을 취해도 되고,[0, 10]을 취해도 관계 없다.

X̃[k] =8∑

n=−2

x̃[n]e−j 2π11

nk, k = 0, 1, · · · , 10

=2∑

n=−2

e−j 2π11

nk (4.61)

= e−j 2π11

k(−2) + e−j 2π11

k(−1) + e−j 2π11

k·0 + e−j 2π11

k + e−j 2π11

k2.한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 22

Page 23: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

이 식은 초항이 e−j 2π11

k(−2), 공비가 e−j 2π11

k, 항의 갯수가 5인 등비 수열의합이다. 따라서 X[k]를 다음과 같이 쓸 수 있다.

(a) 공비 e−j 2π11

k = 1일 때, 즉, k = 0,±11,±22, · · · 일 때

X[k] = 5.

(b) 공비가 1이 아닌 경우, 즉 k ̸= 0,±11,±22, · · · 일 때

X̃[k] =e−j 2π

11k(−2)

(1− e−j 2π

11k·5)

1− e−j 2π11

k=

ej 4π11

k(1− e−j 10π

11k)

1− e−j 2π11

k

=ej 4π

11k − e−j 6π

11k

1− e−j 2π11

k=

e−j π11

k(

ej 5π11

k − e−j 5π11

k)

e−j π11

k (ej π11

k − e−j π11

k) (4.62)

=2j sin

(5π11

k)

2j sin(

π11

k) =

sin(5π11

k)

sin(

π11

k) .

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 23

Page 24: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수

n

x̃[n]

0

1

−13 −9 −2 2 9 130

5

−10 −5 0 5 10 15k

X [k]

(a) x̃[n]. (b) 그림 (a)의 푸리에 급수 X̃[k].

그림 4.1: 주기가 11인 이산 주기 신호와 그의 이산 푸리에 급수의 그래프.

x̃[n]과 X̃[k] 모두 주기가 11인 주기 신호인 것을 알 수 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 24

Page 25: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

Python을 이용하여 신호의 DFS와 IDFS를 구하는 스크립트의 예

다음은 이 신호의 DFS와 IDFS를 구하는 Python 스크립트이다.

1 xn = [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1]2 Xk = dfs(xn)3 print Xk4 print idfs(Xk)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 25

Page 26: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

Python을 이용하여 신호의 DFS와 IDFS를 구하는 스크립트의 예

이 스크립트의 실행 결과는 다음과 같다.

>>>[ 5.00000000 +0.00000000e+00j 3.51333709 +5.55111512e-16j

0.52110856 +4.44089210e-16j -1.20361562 -4.44089210e-16j-0.59435114 -1.11022302e-15j 0.76352112 -3.88578059e-16j0.76352112 +0.00000000e+00j -0.59435114 -1.99840144e-15j

-1.20361562 -3.66373598e-15j 0.52110856 -2.66453526e-15j3.51333709 +5.88418203e-15j]

[ 1.00000000e+00 -3.07834566e-16j 1.00000000e+00 -1.35382238e-16j1.00000000e+00 -3.83360054e-16j -3.57235815e-17 -5.20217066e-16j

-8.01911321e-17 -2.69558304e-16j -2.53011495e-16 -2.60933977e-16j-5.14051685e-16 -1.39818738e-16j -6.86872049e-16 +4.57133130e-16j-6.15270828e-16 +1.01390930e-15j 1.00000000e+00 +1.27188155e-15j1.00000000e+00 -4.17984463e-16j]

>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 26

Page 27: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

연습 문제

연습 문제 4.3예제 4.8의 이산 푸리에 급수의 그래프를 그리는 스크립트를 작성해서 그림 4.1의 (b) 그래프와 비교하라.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 27

Page 28: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수의 주기성

x̃[n]의 주기가 N이면, 이산 푸리에 급수 X̃[k]도 주기도 N인 주기 신호이다.

x̃[n] = x̃[n + mN] ⇒ X̃[k] = X̃[k + mN],m은 정수.

X̃[k + mN] =

N−1∑n=0

x̃[n]e−j 2πN n(k+mN)

=

N−1∑n=0

x̃[n]e−j 2πN nke−j 2πN nmN

=

N−1∑n=0

x̃[n]e−j 2πN nke−j2πnm (4.63)

=

N−1∑n=0

x̃[n]e−j 2πN nk

= X̃[k].한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 28

Page 29: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수의 선형성

이산 푸리에 급수는 선형 급수이며, 중첩 특성을 가진다. 주기가 N인 두 이산주기 신호 x̃1[n], x̃2[n]의 이산 푸리에 급수를 각각 X̃1[k], X̃2[k]라 하자. 즉,F{x̃1[n]} = X̃1[k],F{x̃2[n]} = X̃2[k]라 하면, x̃[n] = x̃1[n] + x̃2[n]의 이산푸리에 급수 X̃[k]는 다음과 같다.

X̃[k] =N−1∑n=0

(ax̃1[n] + bx̃2[n])e−j 2πN nk

=

N−1∑n=0

ax̃1[n]e−j 2πN nk + bN−1∑n=0

x̃2[n]e−j 2πN nk (4.64)

= aX̃1[k] + bX̃2[k].

그리고 역 이산 푸리에 급수도 선형 급수로 다음과 같은 성질을 갖는다.

F−1{aX̃1[k] + bX̃2[k]} = ax1[n] + bx2[n]. (4.65)

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 29

Page 30: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

시간 반전 신호의 이산 푸리에 급수

F{x̃[−n]} =

N−1∑n=0

x̃[−n]e−j 2πN kn (let m = −n)

=

−(N−1)∑m=0

x̃[m]ej 2πN km (let p = m + N)

=1∑

p=Nx̃[p − N]ej 2πN k(p−N) =

N∑p=1

x̃[p]ej 2πN kp (4.66)

=

N−1∑p=1

x̃[p]ej 2πN kp + x̃[N]ej 2πN kN =

N−1∑p=1

x̃[p]ej 2πN kp + x̃[0] · 1

=

N−1∑p=0

x̃[p]ej 2πN kp = X̃[−k] = X̃[N − k]

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 30

Page 31: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수의 복소 대칭

X̃∗[−k] =[N−1∑

n=0

x̃[n]e−j 2πN n(−k)

]∗

=

[N−1∑n=0

x̃[n]ej 2πN nk

]∗(4.67)

=

N−1∑n=0

x̃∗[n]e−j 2πN nk = F{x̃∗[n]}

X̃[k]는 주기가 N인 주기 신호이므로, X̃[−k] = X̃[N − k], X̃∗[−k] = X̃∗[N − k]이다. 따라서, 다음 식이 성립한다.

F{x̃∗[n]} = X̃∗[−k] = X̃∗[N − k]. (4.68)

만약에 x̃[n]이 주기가 N인 실수 주기 신호인 경우에는 다음 식이 성립한다.

F{x̃∗[n]} = F{x̃[n]} = X̃[k] = X̃∗[N − k] = X̃∗[−k] = X̃∗[N − k]. (4.69)한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 31

Page 32: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수의 시간 지연 특성

F{x̃[n − n0]} =

N∑n=0

x̃[n − n0]e−j 2πN nk, (4.70)

여기에서 m = n − n0라 두면, n = m + n0이므로 위 식은 다음과 같이 쓸 수있다.

F{x̃[n − n0]} =

N∑n=0

x̃[m]e−j 2πN (m+n0)k

=

N∑n=0

x̃[m]e−j 2πN mke−j 2πN n0 (4.71)

= e−j 2πN n0kX̃[k].

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 32

Page 33: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

이산 푸리에 급수의 Parseval 정리

N−1∑n=0

|x̃[n]|2 =

N−1∑n=0

x̃∗[n]x̃[n]

=

N−1∑n=0

(1

N

N−1∑k=0

X̃[k]ej 2πN kn

)∗

x̃[n]

=

N−1∑n=0

(1

N

N−1∑k=0

X̃∗[k]e−j 2πN kn

)x̃[n] (4.72)

=1

N

N−1∑k=0

X̃∗[k](N−1∑

n=0

x̃[n]e−j 2πN kn

)

=1

N

N−1∑k=0

X̃∗[k]X̃[k]

=1

N

N−1∑k=0

|X̃[k]|2.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 33

Page 34: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

실수 신호의 이산 푸리에 급수의 특성

N이 홀수인 경우인 경우

>>> x = np.arange(7)>>> X = dfs(x)>>> X>>>[ 21.0+0.j -3.5+7.26782489j -3.5+2.79115686j-3.5+0.79885216j -3.5-0.79885216j-3.5-2.79115686j -3.5-7.26782489j]

>>>

X̃[1] = X̃∗[6], X̃[2] = X̃∗[5], X̃[3] = X̃∗[4]

X̃[k] = X̃∗[N − k]가 성립하는 것을 알 수 있다.이 특성을 이용하여 연산양과 메모리 증가 문제를 해결할 수 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 34

Page 35: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

실수 신호의 이산 푸리에 급수의 특성

Numpy에서 실수 신호의 이산 푸리에 급수를 계산해 주는 함수가 rfft()이다.

>>> x = np.arange(7)>>> X = np.fft.rfft(x)>>> Xarray([ 21.0+0.j ,

-3.5+7.26782489j,-3.5+2.79115686j,-3.5+0.79885216j])

>>>

출력되지 않는 나머지 부분은 켤레 대칭 성질을 사용하여 구하면 된다.

X̃[4] = X∗[3], X̃[5] = X∗[2], X̃[6] = X∗[1]

의 관계를 이용해서 X̃[4], X̃[5], X̃[6]을 알 수 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 35

Page 36: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

실수 신호의 이산 푸리에 급수의 특성

N이 짝수인 경우인 경우

>>> x = np.arange(8)>>> X = np.fft.fft(x)>>> Xarray([ 28.+0.j ,

-4.+9.65685425j,-4.+4.j ,-4.+1.65685425j,-4.+0.j ,-4.-1.65685425j,-4.-4.j ,-4.-9.65685425j])

>>>

X̃[1] = X̃∗[7], X̃[2] = X̃∗[6], X̃[3] = X̃∗[5]

X̃[k] = X̃∗[N − k]가 성립하는 것을 알 수 있다.X̃[N/2] = X̃∗[N/2]이어야 하므로, X̃[N/2]는 실수가 되어야 한다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 36

Page 37: Python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4 …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/10.pdf · 이산푸리에 급수

Python과 함께배우는 신호해석

박섭형

이산 푸리에급수

이산 푸리에급수의 성질

실수 신호의 이산 푸리에 급수의 특성

>>> x = np.arange(8)>>> X = np.fft.rfft(x)>>> Xarray([ 28.+0.j ,

-4.+9.65685425j,-4.+4.j ,-4.+1.65685425j,-4.+0.j ])

>>>

X̃[0], · · · , X̃[7] 중에서 rfft() 함수가 반환하는 X̃[0], X̃[1], X̃[2], X̃[3], X̃[4]만알고 있어도,

X̃[5] = X∗[3], X̃[6] = X∗[2], X̃[7] = X∗[1]

의 관계를 이용해서 X̃[5], X̃[6], X̃[7]을 알 수 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 37