๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Bio, Medical Engineering

[Bio] #2 Matlab์œผ๋กœ DFT ๊ตฌํ˜„ํ•˜๊ธฐ

by ์œ ๋ฏธ๋ฏธYoomimi 2023. 7. 25.

์ด๋ฏธ์ง• ์‹œ์Šคํ…œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ์‹ ํ˜ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

๋”ฐ๋ผ์„œ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ์— ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š”

ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜(Fourier Transform)๊ณผ ์—ญ๋ณ€ํ™˜(Inverse Fourier Transform)์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

(์‹ ํ˜ธ ๋ฐ ์‹œ์Šคํ…œ ๊ณผ๋ชฉ์„ ์—‰๋ง์œผ๋กœ ๋“ค์—ˆ๋˜ ๋‚ด๊ฒ ์ƒ๋‹นํ•œ ๊ณค์š•์ด์—ˆ๋‹ค.)

 

x(t)์˜ ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜

 

์ˆ˜ํ•™์  ์œ ๋„๋Š” ์ฐจ์น˜ํ•˜๊ณ ,

๊ด‘ํ•™์ ์ธ ๊ด€์ ์—์„œ ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 


 

๊ด‘ํ•™ ๋ถ„์•ผ ๋ฟ ์•„๋‹ˆ๋ผ ์ปดํ“จํ„ฐ ๋น„์ „(Computer Vision)์—์„œ๋Š” ํŠนํžˆ,

ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด 

์‹ ํ˜ธ๋ฅผ spatial domain์—์„œ frequency domain์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

 

Discreteํ•œ domain์—์„œ ์‹ ํ˜ธ๋ฅผ ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณต์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DFT(Discrete Fourier Transform)

 

์ด๋ฅผ ์ด์‚ฐ ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜(Discrete Fourier Transform, DFT)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

์ด ์ด์‚ฐ ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜๊ณผ ๊ทธ ์—ญ๋ณ€ํ™˜์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„

'๊ณ ์† ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜(Fast Fourier Transform, FFT)' ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

ํŠน์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์นญํ•˜๋Š” ๋ง์€ ์•„๋‹ˆ๊ณ ,

DFT ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ์ง€์นญํ•˜๋Š” ๋ง์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ FFT์—๋Š” ์ฟจ๋ฆฌ-ํŠœํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.

 

 

DFT ์—ฐ์‚ฐ์—๋Š” O(n^2)์ด๋ผ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š”๋ฐ,

FFT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด O(nlog(n))์ด ๋œ๋‹ค.

 

 

ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜์€ ์˜์ƒ ์ฒ˜๋ฆฌ์™€ ํ•„ํ„ฐ๋ง์„ ํ•  ๋•Œ ํ•„์ˆ˜์ ์ด๋‹ค.

spatial domain์˜ ์‹ ํ˜ธ๋ฅผ frequency domain์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด

์‹ ํ˜ธ์˜ ์ถ”๊ฐ€์ ์ธ ํŠน์„ฑ๋“ค์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


Matlab Code

 

DFT(Discrete Fourier Transform)์„ ์ˆ˜ํ–‰ํ•˜๋Š” matlab ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

 

function G = DFT(g)
    M = length(g);
    W = exp(-1j*2*pi/M*(0:M-1)'*(0:M-1));
    
    G = W*g;
end

(ํ‹ฐ์Šคํ† ๋ฆฌ ์ฝ”๋“œ ๋ธ”๋Ÿญ์— Matlab์€ ์ง€์›์ด ์•ˆ๋ผ์„œ ๋”ฐ๋กœ Javascript๋ฅผ ์ด์šฉํ•ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋“ฏํ•˜๋‹ค.)

(๊ทธ๋ž˜์„œ ์—‰๋šฑํ•˜๊ฒŒ ํ•˜์ด๋ผ์ดํŒ… ๋๋‹ค.. ์กฐ๋งŒ๊ฐ„ ๊ณ ์ณ๋ณผ๊ฒŒ์š”..)

 

 

 

์ฝ”๋“œ๋Š” ๋ฌด์ฒ™ ๊ฐ„๋‹จํ•˜๋‹ค.

 

M*1 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด g๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด(์ด๋•Œ type์€ ์‹ค์ˆ˜๋“  ๋ณต์†Œ์ˆ˜๋“  ์ƒ๊ด€์—†๋‹ค.),

์—ฌ๊ธฐ์— exp ( -1i * 2 * pi / M * (0:M-1)' * (0:M-1))์„ ๊ณฑํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ (0:M-1)' * (0:M-1)์€ 0๋ถ€ํ„ฐ M-1๊นŒ์ง€ M๊ฐœ์˜ ์ •์ˆ˜๋กœ ํ–‰, ์—ด์ด ์ฑ„์›Œ์ง„ M*M ํฌ๊ธฐ์˜ ์ •์ˆ˜ ํ–‰๋ ฌ์ด๋‹ค.

์ด M*M ํ–‰๋ ฌ์˜ ๊ฐ ์š”์†Œ์— -1i * 2 * pi / M ์„ ๊ณฑํ•œ ํ›„ exp๋ฅผ ์”Œ์šฐ๊ณ , ์ด๋ฅผ ๋‹ค์‹œ g์™€ ๊ณฑํ•ด Sigma๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด g๋ฅผ DFTํ•œ ๊ฒฐ๊ณผ์ธ G๋„ M*1 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด ๋œ๋‹ค.

 

 

 

 

์ด ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค.

 

10*1 double matrix

 

 

์‹œ๊ฐ„์„ ์žฐ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

 

 

Matlab ๋‚ด์žฅ fft๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒฐ๊ณผ ๊ฒ€ํ† 

 

fft๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜์˜ค๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค.

 

๋˜ํ•œ ๋‚ด์žฅ fft๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์ด ๋” ์งง์•„์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก  ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ ํ™” ๋“ฑ์˜ ๋ฌธ์ œ๋กœ

์ง์ ‘ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋ณด๋‹ค ๊ฒฝ๊ณผ ์‹œ๊ฐ„์ด ๋Š๋ ค์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ,

๋‚ด์žฅ fft๋Š” ์ด๋ฆ„๋Œ€๋กœ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ DFT๋ณด๋‹ค fastํ–ˆ๋‹ค.

 

 

 

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด FFT๋Š” ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

์•ž์œผ๋กœ ์‹ ํ˜ธ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ์ผ์ด ์ƒ๊ธฐ๋ฉด ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.