python과 함께 배우는 신호 해석 - 제 10 강. 이산 푸리에 급수 (제 4...
TRANSCRIPT
Python과 함께배우는 신호해석
박섭형
이산 푸리에급수
이산 푸리에급수의 성질
Python과 함께 배우는 신호 해석
제 10 강. 이산 푸리에 급수
(제 4 장. 이산시간 주기 신호의 주파수 성분 분석: 이산 푸리에 급수)
박섭형
한림대학교 전자공학과
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 1
Python과 함께배우는 신호해석
박섭형
이산 푸리에급수
이산 푸리에급수의 성질
배울 내용
이산 푸리에 변환의 기본 개념
직교 정규 기저 벡터를 이용한 실벡터의 표현
직교 정규 기저 벡터의 변경
직교 정규 기저 벡터를 이용한 복소벡터의 표현
이산 푸리에 급수
이산 푸리에 급수의 성질
이산 푸리에 변환
이산 푸리에 변환의 성질
Python을 이용한 이산 푸리에 변환 계산
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 2
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
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
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
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
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
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
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
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
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
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
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
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
Python과 함께배우는 신호해석
박섭형
이산 푸리에급수
이산 푸리에급수의 성질
이산 푸리에 급수
DFS와 IDFS 식을 행렬과 벡터를 이용해서 나타내면 다음과 같이 나타낼 수있다.
X̃ = WNx̃, (4.54)
x̃ =1
NW∗NX̃, (4.55)
여기에서WN와W∗N는 각각 식 (4.46)과 (4.50)에 정의된 정방 행렬이다.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 15
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
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
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
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
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
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
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
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
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
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
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
Python과 함께배우는 신호해석
박섭형
이산 푸리에급수
이산 푸리에급수의 성질
연습 문제
연습 문제 4.3예제 4.8의 이산 푸리에 급수의 그래프를 그리는 스크립트를 작성해서 그림 4.1의 (b) 그래프와 비교하라.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 10 강. 이산 푸리에 급수 27
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
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
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
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
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
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
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
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
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
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