DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf ·...

33
DFT และ FFT พินิจ กำหอม, ENE, KMUTT 1 บทนำ เทคนิคการวิเคราะหฟูเรียร (Fourier Analysis) เปนเทคนิคสำคัญสำหรับการวิเคราะหระบบและการวิเคราะหสัญ- ญาณ เครื่องมือสำคัญของการวิเคราะหฟูเรียรคืออนุกรมฟูเรียร (Fourier Series) ที่ใชกับการวิเคราะหเมื่อสัญญาณ เปนสัญญาณที่เปนคาบ (periodic signals) และการแปลงฟูเรียร (Fourier Transfrom) ซึ่งใชกับการวิเคราะหที่สัญ- ญาณไมเปนคาบแตมีพลังงานจำกัด (finite energy) ตลอดชวงเวลา อยางไรก็ตามการใชอนุกรมฟูเรียรและการแปลงฟู เรียรขอจำกัดอยู 2 กรณีคือ • เมื่อสัญญาณเปนสัญญาณที่ไดจากการวัด (measurement) ซึ่งจะมีลักษณะที่ไมสามารถเขียนอยูในรูปของ ฟงกชันแบบปด (closed-form function) และเปนลักษณะที่เปนจุด ๆ (discrete) สัญญาณลักษณะนี้จะอยู ในรูปเปนลำดับของตัวเลข (sequences of real number) แทนดวย x(n), n =0, 1, 2, ..., N - 1 ซึ่ง เรียกวาสัญญาณแบบไมตอเนื่อง (discrete signal) • เมื่อสัญญาณเปนสัญญาณที่ไมอยูในรูปของฟงกชันปด (closed-form function) กรณีที่ 1 เปนกรณีที่จะพบไดบอยในทางปฏิบัติ ซึ่งขอจำกัดนี้สามารถแกปญหาไดโดยการใช DFT (Discrete Fourier Transform) ในการประมาณสเปคตรัมของสัญญาณที่ไดจากการวัดที่อยูในรูปของลำดับของตัวเลข แตปญหา ของการใช DFT ก็คือถาคำนวณตามนิยามของ DFT จะใชเวลาในการคำนวณนานเกินไป ปญหานี้แกไดดวยการใชอัล กอริธึมชื่อ FFT (Fast Fourier Transform) ในการคำนวณ DFT ฉะนั้นเราอาจกลาวไดวา เราใช FFT ในการคำนวณ DFT เพื่อการประมาณสเปคตรัมของสัญญาณใด ๆ ดังนั้นในบทความนี้เราจะตอบคำถามที่สำคัญที่ทำใหประโยคดัง กลาวเปนจริงคือ • อะไรคือ DFT และเราประมาณสเปคตรัมของสัญญาณดวย DFT ไดอยางไร ซึ่งจะอยูในหัวขอ 2 • เราใช FFT คำนวณ DFT ใหเร็วไดอยางไร ซึ่งจะอยูในหัวขอ 3 2 Discrete Fourier Transform (DFT) 2.1 นิยาม DFT เปนวิธีการแปลงลำดับของตัวเลขทั้งที่เปนจำนวนจริงและจำนวนเชิงซอนจำนวน N จุด ไปอยูในรูปของลำดับของ ตัวเลขเชิงซอนจำนวน N จุดอีกชุดหนึ่ง โดยมีวิธีการแปลงตามสมการที่ (1) 1

Transcript of DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf ·...

Page 1: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT

พินิจ กำหอม, ENE, KMUTT

1 บทนำเทคนิคการวิเคราะหฟูเรียร (Fourier Analysis) เปนเทคนิคสำคัญสำหรับการวิเคราะหระบบและการวิเคราะหสัญ-ญาณ เครื่องมือสำคัญของการวิเคราะหฟูเรียรคืออนุกรมฟูเรียร (Fourier Series) ที่ใชกับการวิเคราะหเมื่อสัญญาณเปนสัญญาณที่เปนคาบ (periodic signals) และการแปลงฟูเรียร (Fourier Transfrom) ซึ่งใชกับการวิเคราะหที่สัญ-ญาณไมเปนคาบแตมีพลังงานจำกัด (finite energy) ตลอดชวงเวลา อยางไรก็ตามการใชอนุกรมฟูเรียรและการแปลงฟูเรียรขอจำกัดอยู 2 กรณีคือ

• เมื่อสัญญาณเปนสัญญาณที่ไดจากการวัด (measurement) ซึ่งจะมีลักษณะที่ไมสามารถเขียนอยูในรูปของฟงกชันแบบปด (closed-form function) และเปนลักษณะที่เปนจุด ๆ (discrete) สัญญาณลักษณะนี้จะอยูในรูปเปนลำดับของตัวเลข (sequences of real number) แทนดวย x(n), n = 0, 1, 2, ..., N − 1 ซึ่งเรียกวาสัญญาณแบบไมตอเนื่อง (discrete signal)

• เมื่อสัญญาณเปนสัญญาณที่ไมอยูในรูปของฟงกชันปด (closed-form function)

กรณีที่ 1 เปนกรณีที่จะพบไดบอยในทางปฏิบัติ ซึ่งขอจำกัดนี้สามารถแกปญหาไดโดยการใช DFT (DiscreteFourier Transform) ในการประมาณสเปคตรัมของสัญญาณที่ไดจากการวัดที่อยูในรูปของลำดับของตัวเลข แตปญหาของการใช DFT ก็คือถาคำนวณตามนิยามของ DFT จะใชเวลาในการคำนวณนานเกินไป ปญหานี้แกไดดวยการใชอัลกอริธึมชื่อ FFT (Fast Fourier Transform) ในการคำนวณ DFT ฉะนั้นเราอาจกลาวไดวา เราใช FFT ในการคำนวณDFT เพื่อการประมาณสเปคตรัมของสัญญาณใด ๆ ดังนั้นในบทความนี้เราจะตอบคำถามที่สำคัญที่ทำใหประโยคดังกลาวเปนจริงคือ

• อะไรคือ DFT และเราประมาณสเปคตรัมของสัญญาณดวย DFT ไดอยางไร ซึ่งจะอยูในหัวขอ 2

• เราใช FFT คำนวณ DFT ใหเร็วไดอยางไร ซึ่งจะอยูในหัวขอ 3

2 Discrete Fourier Transform (DFT)2.1 นิยามDFT เปนวิธีการแปลงลำดับของตัวเลขทั้งที่เปนจำนวนจริงและจำนวนเชิงซอนจำนวน N จุด ไปอยูในรูปของลำดับของตัวเลขเชิงซอนจำนวน N จุดอีกชุดหนึ่ง โดยมีวิธีการแปลงตามสมการที่ (1)

1

Page 2: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 2

ให x(n), n = 0, 1, 2, ..., N − 1 เปนลำดับของตัวเลขจำนวนจริง หรือลำดับของตัวเลขเชิงซอน และX(m), m = 0, 1, 2, ..., N − 1 เปน DFT ของ x(n)

X(m) =N−1∑n=0

x(n)e−j2πnm/N , j =√−1 (1)

เราอาจเรียก X(m) วาเปน DFT ขนาด N จุด (N-point DFT) ของ x เพราะจำนวนจุดที่ใชในการคำนวณ DFTนั้นมีผลกับการใชงาน DFT ในการประมาณสเปคตรัมของสัญญาณ ในกรณีเชนนี้เราจะแทน X ดวย XN

จะเห็นวาคาของ DFT หนึ่งจุดคือX(m) นั้นไดจากการบวกกันของผลคูณของ x(n) กับเลขเชิงซอน e−j2πnm/N ,n = 0, 1, 2, ..., N − 1 ซึ่งเปนรากที่ N ของหนึ่ง (N th root of unit) คำถามที่เราจะตอบตอไปก็คือแลวผลลัพธที่ไดนี้มีความหมายอะไร

2.2 การตีความหมายสมการ DFTเพื่อการทำความเขาใจเราจะเขียนสมการที่ (1) ใหมโดยแทน e−j2πnm/N ดวย cos 2πnm/N−j sin 2πnm/Nตามสมการของออยเลอร (Euler's Equation) ที่บอกวา ejθ = cos θ + j sin θ เราจะได

X(m) =N−1∑n=0

x(n)[cos (2πnm/N)− j sin (2πnm/N)] (2)

สมการที่ (2) เปน DFT ในรูปแบบสี่เหลี่ยม (recfangular form) ซึ่งดูเหมือนวาสมการนี้ดูยุงยากกวาสมการที่ (1)ในรูปแบบเอ็กโปเนนเชี่ยล (exponential form) แตรูปแบบนี้จะงายกวาในการทำความเขาใจ ขั้นแรกของการทำความเขาใจคือ การพิจารณาวา cos (2πnm/N)−j sin (2πnm/N) คือตัวแทนของสัญญาณแบบไซดความถี่ fm ที่จุด n (เราจะเห็นในภายหลังวาคาความถี่ fm นั้นขั้นอยูกับทั้งm และความถี่ในการชักตัวอยางสัญญาณ x(t) มาเปนx(n)) โดยใหมองขาม j ไปกอนใหเขาใจเพียงวาหนาที่ของ j คือใชเพื่อการเปรียบเทียบเฟสของสัญญาณแบบไซน จะเห็นวาคาของ DFT หนึ่งจุดนั้น ไดมาจากการผลบวกของการคูณแบบจุดตอจุด (dot product) ระหวางสัญญาณแบบไซดความถี่ fm กับสัญญาณ x(n) ซึ่งการกระทำดังกลาวเปนการหาความสัมพันธ (correlation) ระหวางสัญญาณx กับสัญญาณแบบไซนความถี่ fm ผลก็คือเราจะไดองคประกอบสัญญาณไซนที่ความถี่ fm ของสัญญาณ x

เพื่อความเขาใจที่ดีขึ้น เราจะกระจายสมการที่ (2) ในแตละคาของ m สำหรับ N = 4 ดังนี้

X(m) =3∑

n=0

x(n)[cos (2πnm/4)− j sin (2πnm/4)]

เริ่มจาก m = 0 เราจะได

X(0) = x(0) cos (2π · 0 · 0/4)− jx(0) sin (2π · 0 · 0/4)x(1) cos (2π · 1 · 0/4)− jx(1) sin (2π · 1 · 0/4)x(2) cos (2π · 2 · 0/4)− jx(2) sin (2π · 2 · 0/4)x(3) cos (2π · 3 · 0/4)− jx(3) sin (2π · 3 · 0/4)

Page 3: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 3

สำหรับ m = 1 เราจะได

X(1) = x(0) cos (2π · 0 · 1/4)− jx(0) sin (2π · 0 · 1/4)x(1) cos (2π · 1 · 1/4)− jx(1) sin (2π · 1 · 1/4)x(2) cos (2π · 2 · 1/4)− jx(2) sin (2π · 2 · 1/4)x(3) cos (2π · 3 · 1/4)− jx(3) sin (2π · 3 · 1/4)

สำหรับ m = 2 เราจะได

X(2) = x(0) cos (2π · 0 · 2/4)− jx(0) sin (2π · 0 · 2/4)x(1) cos (2π · 1 · 2/4)− jx(1) sin (2π · 1 · 2/4)x(2) cos (2π · 2 · 2/4)− jx(2) sin (2π · 2 · 2/4)x(3) cos (2π · 3 · 2/4)− jx(3) sin (2π · 3 · 2/4)

และสำหรับ m = 3 เราจะได

X(3) = x(0) cos (2π · 0 · 3/4)− jx(0) sin (2π · 0 · 3/4)x(1) cos (2π · 1 · 3/4)− jx(1) sin (2π · 1 · 3/4)x(2) cos (2π · 2 · 3/4)− jx(2) sin (2π · 2 · 3/4)x(3) cos (2π · 3 · 3/4)− jx(3) sin (2π · 3 · 3/4)

เราใช '·' แทนการคูณเพื่อแยก n และm/N ออกจากกัน เพราะ n ในที่นี้คือจุดของการชักตัวอยาง (sampling)ของสัญญาณ x(t), cos (2π · fm · t) และ sin (2π · fm · t) ซึ่งจะได x(n), cos (2π · n ·m/N) และsin (2π · n ·m/N) ตามลำดับ โดย fm คือความถี่ของสัญญาณรูปแบบไซนที่ขึ้นอยูกับทั้ง m และความถี่ของการชักตัวอยาง (sampling frequency)

ให fs คือความถี่ของการชักตัวอยาง เพื่อความเขาใจเราจะสมมุติให fs = 500 samples/sec กลาวคือในหนึ่งวินาทีเราจะชักตัวอยางมา 500 จุด ซึ่งจะทำใหไดระยะเวลาระหวางจุดชักตัวอยาง 2 จุดติดกัน หรือเวลาระหวางจุด n − 1 และจุด n เปน 1/fs = ts = 1/500 sec ในกรณีตัวอยางนี้สัญญาณถูกชักตัวอยางมา 4 จุดซึ่งกินเวลาทั้งหมดเทากับ 4ts = 4/500 sec เราจะพิจารณาความถี่ fm วามีคาเทาไร

จะเห็นวาเราชักตัวอยางที่จุด n = 0, 1, 2, 3 ที่เวลา t0 = 0, t1 = 1 · ts, t2 = 2 · ts, และ t3 = 3 · tsตามลำดับ พิจารณาเฉพาะสัญญาณ cos 2π · fm · t ผลจากการชักตัวอยางคือ

n = 0, cos (2π · t0 · fm) = cos (2π · 0ts · fm) = cos (2π · 0 ·m/4)

n = 1, cos (2π · t1 · fm) = cos (2π · 1ts · fm) = cos (2π · 1 ·m/4)

n = 2, cos (2π · t2 · fm) = cos (2π · 2ts · fm) = cos (2π · 2 ·m/4)

n = 3, cos (2π · t3 · fm) = cos (2π · 3ts · fm) = cos (2π · 3 ·m/4)

แสดงวา nts · fm = n · m4

หรือ fm = m4ts

= mfs4

ในกรณี N ใด ๆ เราจะไดความถี่ fm ดังสมการ 3

fm =mfsN

(3)

Page 4: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 4

เราเรียกความถี่ fm วาความถี่ วิเคราะห (analysis frequency) ซึ่งหมายถึงความถี่ที่ เราจะใช เปนองคประ-กอบสัญญาณไซนของสัญญาณ x (sinusoidal component of x) กลาวคือ X(m) เปนตัวบอกวา องคประ-กอบสัญญาณไซดที่ความถี่ fm ของสัญญาณ x มีขนาดแปรตาม Xmag(m) = |X(m)| และมี เฟสเทากับXϕ = argX(m) เมื่อเรานำทุกองคประกอบสัญญาณไซนทุกความถี่ fm, m มีคาตั้งแต 0 ถึง N − 1 มารวมกันเราจะไดสัญญาณ x โดยอาจจะตองมีการปรับขนาด (scaling) ใหเหมาะสม กระบวนการนำเอาองคประกอบสัญญาณไซนของ x มารวมกันเพื่อสราง x ก็คือฟงกชันอินเวอรสของ DFT (inverse DFT) ซึ่งจะกลาวถึงในหัวขอ 2.8

การเขียนองคประกอบสัญญาณไซดนั้นเขียนไดทั้งแบบสี่เหลี่ยม และแบบโพลาร หรือเอ็กโปเนนเชี่ยล ดังนี้

X(m) = Xreal(m) + jXimag(m) = Xmag(m)ejXϕ(m) (4)

Xmag(m) = |X(m)| =√

Xreal(m)2 +Ximag(m)2 (5)

Xϕ(m) =

{arctan (

Ximag(m)

Xreal(m)), เมื่อ X(m) อยูใน Q1 และ Q4

arctan (Ximag(m)

Xreal(m)) + π, เมื่อ X(m) อยูใน Q2 และ Q3

(6)

นอกจากนี้บอยครั้งที่เราจะสนใจสเปคตรัมกำลัง (power spectrum) แทนสเปคตรัมความถี่ (frequency spectrum)ในกรณีนี้เราตองการคำนวณกำลังของสัญญาณที่ความถี่ fm ตามสมการที่ (7)

XPS(m) = X2mag = |X(m)|2 = X2

real(m) +X2imag(m) (7)

2.2.1 ตัวอยางที่ 1: การคำนวณและการตีความหมาย DFT

เราจะใชตัวอยางในการแสดงความหมายของสมการ DFT ในสมการที่ (1) และสมการที่ (2) โดยในตัวอยางแรกนี้เราจะคำนวณ DFT ของลำดับ x(n) ที่ไดจากการชักตัวอยาง x(t) ซึ่งเปนฟงกชันที่ไดจากการบวกกันของสัญญาณไซนที่ความถี่ 1 kHz และ 2 kHz ดังนี้

x(t) = sin (2π(1000)t) + 0.5 sin (2π(2000)t+ 3π/4) (8)

โดย x(n) ไดจากการชักตัวอยางดวยความถี่ของการชักตัวอยาง fs = 8000 จุดตอวินาที หรือระยะหางระหวางจุดชักตัวอยางสองจุดติดกันคือ

ts =1

fs=

1

8000=

1

8ms

เราจะหา DFT ของ x(n) ซึ่งไดจาก x(t) ภายในเวลา 1 คาบของ sin (2π(1000)t) และ 2 คาบของ sin (2π(2000)t+ 3π/4)

ซึ่งเปนเวลา 1/1000 = 1 ms จากเวลา 0 ถึง 7ts ซึ่งมีทั้งหมด 8 จุด โดย x(n) ทั้ง 8 จุดไดแก

x(0) = 0.3535 x(1) = 0.3535

x(2) = 0.6464 x(3) = 1.0607

x(4) = 0.3535 x(5) = −1.0607

x(6) = −1.3535 x(7) = −0.3535

Page 5: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 5

0 1 2 3 4 5 6 7 8−1.5

−1

−0.5

0

0.5

1

1.5

← x(t)

← sin(2π(1000)t)

← 0.5sin(2π(2000)t+3π/4)

x(t) = sin(2π(1000)t) + 0.5sin(2π(2000)t + 3π/4)

n

(a) x(t) = sin (2π(1000)t) + 0.5 sin (2π(2000)t+ 3π/4) ��� x(n) ����������������� 8000 ������������

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=1

← sin(2π(fs/8)t)

← cos(2π(fs/8)t)

The correlation between x(n0 and the analysis frquency mfs/N at m=1 and N=8.

n

(b) �������������������������fm = fs · mN ����� m = 1, N = 8, fs = 8000 samples/sec

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=2

← sin(2π(2fs/8)t)

← cos(2π(2fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=2 and N=8.

n

(c) �������������������������fm = fs · mN ����� m = 2, N = 8, fs = 8000 samples/sec

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=3

← sin(2π(3fs/8)t)

← cos(2π(3fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=3 and N=8.

n

(d) �������������������������fm = fs · mN ����� m = 3, N = 8, fs = 8000 samples/sec

รูปที่ 1: สัญญาณอินพุท x(t) และ x(n) จากการชักตัวอยาง และสัญญาณวิเคราะหที่ความถี่ fm = fs · mN

เมื่อfs = 8000 sample/sec, N = 8, และ m = 1 ถึง 3

Page 6: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 6

รูปที่ 1(a) แสดงอินพุท x(t) และ x(n) ดังกลาวคำนวณ DFT ตามนิยามในสมการที่ (2) สำหรับกรณี m = 1 เราจะได

X(1) = 0.3535 · cos (2π · 0 · 1/8)− j0.3535 · sin (2π · 0 · 1/8) +0.3535 · cos (2π · 1 · 1/8)− j0.3535 · sin (2π · 1 · 1/8) +0.6464 · cos (2π · 2 · 1/8)− j0.6464 · sin (2π · 2 · 1/8) +1.0607 · cos (2π · 3 · 1/8)− j1.0607 · sin (2π · 3 · 1/8) +0.3535 · cos (2π · 4 · 1/8)− j0.3535 · sin (2π · 4 · 1/8) +−1.0607 · cos (2π · 5 · 1/8) + j1.0607 · sin (2π · 5 · 1/8) +−1.3535 · cos (2π · 6 · 1/8) + j1.3535 · sin (2π · 6 · 1/8) +−0.3535 · cos (2π · 7 · 1/8) + j0.3535 · sin (2π · 7 · 1/8)

X(1) = 0.3535(1)− j0.3535(0) +

0.3535(0.707)− j0.3535(0.707) +

0.6464(0)− j0.6464(1) +

1.0607(−0.707)− j1.0607(0.707) +

0.3535(−1)− j0.3535(0) +

−1.0607(−0.707) + j1.0607(−0.707) +

−1.3535(0) + j1.3535(−1) +

−0.3535(0.707) + j0.3535(−0.707)

= 0.0− j4.0 = 4e−jπ/2 = 4 ̸ −90◦

จะเห็นวาการคำนวณนี้เปนผลรวมของผลคูณกันระหวาง x(n) กับ y(n) สำหรับทุกจุดของn = 0, 1, 2, ..., 7

เมื่อ

y(n) = cos (2π · n · 1/8)− j sin (2π · n · 1/8)= yr(n) + jyi(n)

yr(n) = cos (2π · n · 1/8)yi(n) = − sin (2π · n · 1/8)

ซึ่ง y(n) นี้เปนสัญญาณไซนที่ความถี่วิเคราะห f1 = 1·fs8

ตารางที่ 2 แสดงการคำนวณ X(m) ในกรณี m = 1

นี้ ผลของการคำนวณนี้เปนคาความสัมพันธ (correlation) ของ x(n) กับ y(n) และเนื่องจากสัญญาณ y(n) เปนสัญญาณไซนขนาดเทากับ 1 ที่ความถี่ f1 ผลของการ correlation ดังกลาวก็คือขององคประกอบของ x(n) บนสัญญาณไซนความถี่ 1·fs

8รูปที่ 1(b) แสดงการ correlation ของ x(n) กับสัญญาณไซนความถี่ 1·fs

8

Page 7: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 7

ทำนองเดียวกันเมื่อ m = 2 เราจะได

X(2) = 0.3535 · cos (2π · 0 · 2/8)− j0.3535 · sin (2π · 0 · 2/8) +0.3535 · cos (2π · 1 · 2/8)− j0.3535 · sin (2π · 1 · 2/8) +0.6464 · cos (2π · 2 · 2/8)− j0.6464 · sin (2π · 2 · 2/8) +1.0607 · cos (2π · 3 · 2/8)− j1.0607 · sin (2π · 3 · 2/8) +0.3535 · cos (2π · 4 · 2/8)− j0.3535 · sin (2π · 4 · 2/8) +−1.0607 · cos (2π · 5 · 2/8) + j1.0607 · sin (2π · 5 · 2/8) +−1.3535 · cos (2π · 6 · 2/8) + j1.3535 · sin (2π · 6 · 2/8) +−0.3535 · cos (2π · 7 · 2/8) + j0.3535 · sin (2π · 7 · 2/8)

X(2) = 0.3535(1)− j0.3535(0) +

0.3535(0)− j0.3535(1) +

0.6464(−1)− j0.6464(0) +

1.0607(0)− j1.0607(−1) +

0.3535(1)− j0.3535(0) +

−1.0607(0) + j1.0607(1) +

−1.3535(−1) + j1.3535(0) +

−0.3535(0) + j0.3535(−1)

= 1.414− j1.414 = 2ejπ/4 = 2 ̸ 45◦

ซึ่งเปนผลบวกของ x(n) กับ y(n) สำหรับทุกคา n = 0, 1, 2, ..., 7 เมื่อ

y(n) = cos (2π · n · 2/8)− j sin (2π · n · 2/8)= yr(n) + jyi(n)

yr(n) = cos (2π · n · 2/8)yi(n) = − sin (2π · n · 2/8)

โดย y(n) นี้เปนสัญญาณไซนที่ความถี่วิเคราะห f2 = 2·fs8

ตารางที่ 1 แสดงการคำนวณ X(m) ในกรณี m = 2

นี้ และผลของการคำนวณนี้เปนคาความสัมพันธ (correlation) ของ x(n) กับ y(n) และเนื่องจากสัญญาณ y(n)

เปนสัญญาณไซนขนาดเทากับ 1 ที่ความถี่ 2·fs8

ผลของการ correlation ดังกลาวก็คือขององคประกอบของ x(n)บนสัญญาณไซนความถี่ 2·fs

8รูปที่ 1(c) แสดงการ correlation ของ x(n) กับสัญญาณไซนความถี่ 2·fs

8

การคำนวณที่ m คาอื่น ๆ ก็เชนเดียวกัน ตารางที่ 3 ถึง ตารางที่ 7 สรุปการคำนวณดังกลาว และรูปที่ 1(d) ถึง2(d) แสดงการ correlation ของ x(n) กับสัญญาณไซนความถี่ m·fs

8เมื่อ m = 3 ถึง 7 ตามลำดับ

จากตัวอยางการคำนวณ DFT เราจะเห็นวาการคำนวณ DFT หนึ่งจุด หรือการคำนวณ X(m) นั้นหาไดจาก

1. คำนวณสวนจริงของX(m) หรือXreal(m) โดยการคูณ x(n) และ yr(n) = cos (2π · mfsN

· nts)สำหรับทุกคาของ n แบบจุดตอจุด แลวรวมผลคูณทั้งหมด ขอสังเกตุที่ สำคัญคือ yr(n) เปนสัญญาณ

Page 8: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 8

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=4

← x(t)

← sin(2π(4fs/8)t)

← cos(2π(4fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=4 and N=8.

n

(a) �������������������������fm = fs · mN ����� m = 4, N = 8, fs = 8000 samples/sec

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=5

← x(t)

← sin(2π(5fs/8)t)

← cos(2π(5fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=5 and N=8.

n

(b) �������������������������fm = fs · mN ����� m = 5, N = 8, fs = 8000 samples/sec

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=6

← x(t)

← sin(2π(6fs/8)t)

← cos(2π(6fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=6 and N=8.

n

(c) �������������������������fm = fs · mN ����� m = 6, N = 8, fs = 8000 samples/sec

0 1 2 3 4 5 6 7 8−1.5

−1

−0.707

0

0.707

1

1.5

m=7

← x(t)

← sin(2π(7fs/8)t)

← cos(2π(7fs/8)t)

The correlation between x(n) and the analysis frquency mfs/N at m=7 and N=8.

n

(d) �������������������������fm = fs · mN ����� m = 7, N = 8, fs = 8000 samples/sec

รูปที่ 2: สัญญาณวิเคราะหที่ความถี่ fm = fs · mN, fs = 8000 sample/sec, N = 8, และ m = 4 ถึง 7

Page 9: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 9

ตารางที่ 1: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 1n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 18· n) − sin (2π · 1

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 0.707 0.25 -0.707 -0.252 0.6464 0.0 0.0 -1.0 -0.64643 1.0607 -0.707 -0.75 -0.707 -0.754 0.3535 -1.0 -0.3535 0.0 0.05 -1.0607 -0.707 0.75 0.707 -0.756 -1.3535 0.0 0.0 1.0 -1.35357 -0.3535 0.707 -0.25 0.707 -0.25

Xreal(6) =∑7

n=0 x(n)yr(n) = 0.0 Ximag(6) =∑7

n=0 x(n)yi(n) = −4.0

X(1) = 0.0− j4 = 4e−jπ/2 = 4 ̸ −90◦

ตารางที่ 2: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 2n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 28· n) − sin (2π · 2

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 0.0 0.0 -1.0 -0.35352 0.6464 -1.0 -0.6464 0.0 0.03 1.0607 0.0 0.0 1.0 1.06074 0.3535 1.0 0.3535 0.0 0.05 -1.0607 0.0 0.0 -1.0 1.06076 -1.3535 -1.0 1.3535 0.0 0.07 -0.3535 0.0 0.0 0.1 -0.3535Xreal(2) =

∑7n=0 x(n)yr(n) = 1.414 Ximag(2) =

∑7n=0 x(n)yi(n) = −1.414

X(2) = 1.414 + j1.414 = 2ejπ/4 = 2̸ 45◦

Page 10: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 10

ตารางที่ 3: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 3n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 38· n) − sin (2π · 3

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 -0.707 -0.25 -0.707 -0.252 0.6464 0.0 0.0 1.0 0.64643 1.0607 0.707 0.75 -0.707 -0.754 0.3535 -1.0 -0.3535 0.0 0.05 -1.0607 0.707 -0.75 0.707 -0.756 -1.3535 0.0 0.0 -1.0 1.35357 -0.3535 -0.707 0.25 0.707 -0.25

Xreal(3) =∑7

n=0 x(n)yr(n) = 0.0 Ximag(3) =∑7

n=0 x(n)yi(n) = 0.0

X(3) = 0.0 + j0.0 = 0.0ej0 = 0̸ 0◦

ตารางที่ 4: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 4n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 48· n) − sin (2π · 4

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 -1.0 -0.3535 0.0 0.02 0.6464 1.0 0.6464 0.0 0.03 1.0607 -1.0 -1.0607 0.0 0.04 0.3535 1.0 0.3535 0.0 0.05 -1.0607 -1.0 1.0607 0.0 0.06 -1.3535 1.0 -1.3535 0.0 0.07 -0.3535 -1.0 0.3535 0.0 0.0

Xreal(4) =∑7

n=0 x(n)yr(n) = 0.0 Ximag(4) =∑7

n=0 x(n)yi(n) = 0.0

X(4) = 0.0 + j0.0 = 0.0ej0 = 0̸ 0◦

Page 11: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 11

ตารางที่ 5: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 5n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 58· n) − sin (2π · 5

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 -0.707 -0.25 0.707 0.252 0.6464 0.0 0.0 -1.0 -0.64643 1.0607 0.707 0.75 0.707 0.754 0.3535 -1.0 -0.3535 0.0 0.05 -1.0607 0.707 -0.75 -0.707 0.756 -1.3535 0.0 0.0 1.0 -1.35357 -0.3535 -0.707 0.25 -0.707 0.25

Xreal(5) =∑7

n=0 x(n)yr(n) = 0.0 Ximag(5) =∑7

n=0 x(n)yi(n) = 0.0

X(5) = 0.0 + j0.0 = 0.0ej0 = 0̸ 0◦

ตารางที่ 6: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 6n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 68· n) − sin (2π · 6

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 0.0 0.0 1.0 0.35352 0.6464 -1.0 -0.6464 0.0 0.03 1.0607 0.0 0.0 -1.0 -1.06074 0.3535 1.0 0.3535 0.0 0.05 -1.0607 0.0 0.0 1.0 -1.06076 -1.3535 -1.0 1.3535 0.0 0.07 -0.3535 0.0 0.0 -0.1 0.3535Xreal(6) =

∑7n=0 x(n)yr(n) = 1.414 Ximag(6) =

∑7n=0 x(n)yi(n) = −1.414

X(6) = 1.414− j1.414 = 2e−jπ/4 = 2̸ −45◦

Page 12: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 12

ตารางที่ 7: การคำนวณ DFT ของตัวอยางที่ 1 สำหรับ m = 7n x(n) yr(n) = x(n)yr(n) yi(n) = x(n)yi(n)

cos (2π · 78· n) − sin (2π · 7

8· n)

0 0.3535 1.0 0.3535 0.0 0.01 0.3535 0.707 0.25 0.707 0.252 0.6464 0.0 0.0 1.0 0.64643 1.0607 -0.707 -0.75 0.707 0.754 0.3535 -1.0 -0.3535 0.0 0.05 -1.0607 -0.707 0.75 -0.707 0.756 -1.3535 0.0 0.0 -1.0 1.35357 -0.3535 0.707 -0.25 -0.707 0.25

Xreal(6) =∑7

n=0 x(n)yr(n) = 0.0 Ximag(6) =∑7

n=0 x(n)yi(n) = 4.0

X(7) = 0.0 + j4 = 4ejπ/2 = 4 ̸ 90◦

cos (2πfmt) ณ. จุดชักตัวอยางลำดับที่ n ซึ่งเกิดขึ้น ณ. เวลา t = nts เมื่อ ts = 1fs

โดยความถี่วิเคราะห fm มีคาเทากับ mfs

N

2. คำนวณสวนจินตภาพของX(m) หรือXimag(m) โดยการคูณ x(n) และ yi(n) = − sin (2π · mfsN

· nts)สำหรับทุกคาของ n แบบจุดตอจุด แลวรวมผลคูณทั้งหมด เชนเดียวกันขอสังเกตุที่สำคัญคือ yi(n) เปนสัญ-ญาณ − sin (2πfmt) ณ. จุดชักตัวอยางลำดับที่ n ซึ่งเกิดขึ้น ณ. เวลา t = nts เมื่อ ts = 1

fsโดย

ความถี่วิเคราะห fm มีคาเทากับ mfsN

3. คำตอบคือ X(m) = Xreal(m) + jXimag(m)

การคำนวณดังกลาวเปนการหาความสัมพันธของ x(n) กับ y(n) เมื่อ

y(n) = e−j2π·mfsN

·nts = e−j2π·mnN

= cos (2π · mfsN

· nts)− j sin (2π · mfsN

· nts)= yr(n) + jyi(n)

yr(n) = cos (2π · mfsN

· nts) = cos (2π · mn

N)

yi(n) = − sin (2π · mfsN

· nts) = − sin (2π · mn

N)

ซึ่งเปนสัญญาณไซนที่ความถี่วิเคราะห fm = mfsN

และเนื่องจาก y(n) เปนสัญญาณไซนที่ความถี่ fm ผลที่ไดจากการหาความสัมพันธดังกลาวคือ ก็คือองคประกอบสัญญาณไซนความถี่ fm ของ x(n) นั่นเอง

เราจะพิจารณากรณีที่ m = 0 ซึ่งเรายังไมไดคำนวณ เมื่อ m = 0 คาของ y(n) = ej2π·n·0 = 1 + j0

Page 13: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 13

สำหรับทุกคาของ n ดังนั้นเราจะได

X(0) =7∑

n=0

x(n) · 1 =7∑

n=0

x(n) = 7 · 17

7∑n=0

x(n) = 7xavg

= 0.3535 + 0.3535 + 0.6464 + 1.0607 + 0.3535

+(−1.0607) + (−1.3535) + (−0.3535)

= 0.0

จะเห็นวา X(0) มีคาเปน 7 เทา (หรือ N เทา สำหรับกรณีทั่วไป) ของคาเฉลี่ยของ x(n) เมื่อคาเฉลี่ยของ x(n)คือ xagv มีคา

xavg =1

N

N∑n=0

x(n)

นั่นคือ X(0) คือองคประกอบ DC ของสัญญาณ x(n) นั่นเอง ในกรณีตัวอยางที่ 1 นี้ไมมีองคประกอบ DC จึงไดX(0) = 0.0

เมื่อเรานำผลของการคำนวณ DFT ในตัวอยางที่ 1 มาพล็อต เราจะไดกราฟที่บอกถึงองคประกอบสัญญาณไซนที่ความถี่วิเคราะห fm ดังแสดงในรูปที่ 3

0 1 2 3 4 5 6 70

1

2

3

4

5Magnitude of X(m), |X(m)|, from the example 1

|X(m

)|

0 1 2 3 4 5 6 7

−135

−90

−45

0

45

90

135

Phase of X(m) from the example 1

Pha

se (

degr

ee)

0 1 2 3 4 5 6 7

−3.0

−2.0

−1.0

0

1.0

2.0

3.0

Real part of X(m) from the example 1

0 1 2 3 4 5 6 7

−4.0

−3.0

−2.0

−1.0

0

1.0

2.0

3.0

4.0

Imaginary part of X(m) from the example 1

kHz

kHz kHz

kHz

(b)

(a) (c)

(d)

รูปที่ 3: ผลการคำนวณ DFT ของตัวอยางที่ 1 (a) ขนาด (magnitude) ของ Xm; (b) เฟส (phase) ในหนวยองศาของ X(m); (c) สวนจริง (real part) ของ X(m) และ (d) สวนจินตภาพ (imaginary part) ของ X(m)

Page 14: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 14

2.3 ความสมดุลยของ DFT (DFT Symmetry)สังเกตผลของการคำนวณ DFT ในรูปที่ 3 อีกครั้งหนึ่ง จะเห็นวาคา DFT ของ x(n) ในตัวอยางนี้มีความสมดุลยในลักษณะที่

X(N −m) = X∗(m),m = 1, 2, ..., N/2− 1 (9)

เมื่อ X∗(m) เปน complex conjugate ของ X(m) กลาวคือถา

X(m) = Xreal(m) + jXimag(m) = Xmag(m)eXϕ(m)

แลว

X(N −m) = X∗(m) = Xreal(m)− jXimag(m) หรือ (10)X(N −m) = X∗(m) = Xmag(m)e−jXϕ(m) (11)

โดย Xmag(m) และ Xϕ(m) เปนไปตามสมการที่ (5) และสมการที่ (6) กลาวคือ เมื่ออยู ในรูปแบบสี่เหลี่ยม(rectangular form) เราจะได

Xreal(N −m) = Xreal(m) และ (12)Ximag(N −m) = −Ximag(m) (13)

0 1000 2000 30000

1

2

3

4

5Magnitude of X(f), |X(f)|, from the example 1

Frequency (Hz)

|X(f

)|

(a) ������������������������������������������������� x(n) (|X(fm)|)

0 1000 2000 3000

−135

−90

−45

0

45

90

135

Phase of X(f) from the example 1

Frequency (Hz)

Pha

se (

degr

ee)

(b) ������������������������������������������������ x(n) (Xϕ(fm))

รูปที่ 4: องคประกอบสัญญาณไซนที่ความถี่วิเคราะหของ x(n) (X(fm))ในตัวอยางที่ 1

Page 15: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 15

หรือ

Xmag(N −m) = Xmag(m) = |X(m)| และ (14)Xϕ(N −m) = −Xϕ(m) (15)

เมื่ออยูในรูปแบบโพลาร (polar form)ความสมดุลยดังกลาวจะเกิดขึ้นเสมอถา x(n) เปนลำดับของเลขจำนวนจริง (real-value sequence) ซึ่งใน

ทางปฏิบัติแลว สัญญาณทางกายภาพทั้งหมดจะเปนฟงกชันจำนวนจริง จึงทำให x(n) ในทางปฏิบัติเปนลำดับของเลขจำนวนจริง และ DFT ของมันจะมีความสมดุลยตามสมการที่ (9)

ดังนั้นในกรณีที่ x(n) เปนลำดับของเลขจำนวนจริง เราจะใชเฉพาะ X(m) = X(fm) ในครึ่งแรกคือเมื่อm = 0 ถึง m = N

2− 1 ดังแสดงในรูปที่ 4

เราสามารถพิสูจนสมการที่ (9) โดยเขียน X(N −m) ในรูปเอ็กโปเนนเชี่ยลของ DFT ตามสมการที่ (1) ดังนี้

X(N −m) =N−1∑n=0

x(n)e−j2π·n(N−m)N =

N−1∑n=0

x(n)e−j2π·n(−m)N e−j2π nN

N

=N−1∑n=0

x(n)ej2π·nmN เพราะ

e−j2π nNN = e−j2πn = 1

เนื่องจาก z∗ = |z|ejθ เมื่อ z = |z|e−jθ และ α(z1 + z2)∗ = α(z∗1 + z∗2) เมื่อ α เปนจำนวนจริง

เราจึงสรุปไดวา

X(N −m) =N−1∑n=0

x(n)ej2π·nmN = X∗(m) (16)

2.4 ความเปนเชิงเสนของ DFT (DFT Linearity)เราอาจมอง DFT เปนระบบอันหนึ่งที่เปลี่ยนอินพุท x(n) ไปเปนเอาทพุท X(m) และคุณสมบัติสำคัญอันหนึ่งของระบบใด ๆ คือคุณสมบัติความเปนเชิงเสน (linearity) ซึ่งกลาวไวดังนี้

ให A เปนระบบอันหนึ่ง โดย y1 เปนเอาทพุทของ A เมื่อปอน x1 เปนอินพุท และ y2 เปนเอาทพุทของ Aเมื่อปอน x2 เปนอินพุท แลว A จะมีคุณสมบัติเชิงเสน หรือเราเรียกอีกอยางหนึ่งวา A จะเปนระบบเชิงเชิง (linearsystem) ถา αy1 + βy2 เปนเอาทพุทของ A เมื่อปอน αx1 + βx2 เปนอินพุท

DFT มีคุณสมบัติความเปนเชิงเสน ซึ่งพิสูจนไดดังนี้ให x1(n) และ x2(n) (n = 0, 1, 2, ..., N − 1) เปนลำดับของเลขจำนวนเชิงซอน N จุด แลวเราจะได

X1(m) =N−1∑n=0

x1(n)e−j2πnm/N และ

X2(m) =N−1∑n=0

x2(n)e−j2πnm/N

Page 16: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 16

เปน DFT ของ x1(n) และ x2(n) ตามลำดับ กลาวคือ X1(m) และ X2(m) เปนเอาทพุทจากระบบ DFT เมื่อปอนอินพุทเปน x1(n) และ x2(n) ตามลำดับ ถาให

y(n) = αx1(n) + βx2(n)

เปนลำดับของจำนวนเชิงซอนจำนวน N จุด ที่เกิดจากการผลรวมของ αx1(n) และ βx2(n) โดย α และ β เปนคาคงที่เชิงซอน (complex constants) แลว เราจะได

Y (m) =N−1∑n=0

y(n)e−j2πnm/N =N−1∑n=0

(αx1(n) + βx2(n))e−j2πnm/N

=N−1∑n=0

αx1(n)e−j2πnm/N +

N−1∑n=0

βx2(n)e−j2πnm/N

= αN−1∑n=0

x1(n)e−j2πnm/N + β

N−1∑n=0

x2(n)e−j2πnm/N

= αX1(m) + βX2(m)

กลาวคือถาเราปอน αx1(n) + βx2(n) เปนอินพุทให DFT แลวเราจะได αX1(m) + βX2(m) เปนเอาทพุท ซึ่ง แสดงวา DFT มีคุณสมบัติความเปนเชิงเสน ซึ่งเปนจริงทั้งกรณีที่อินพุท x(n) ของมันจะเปนลำดับของเลขเชิงซอนหรือเปนลำดับของเลขจำนวนจริง เนื่องจากจำนวนจริงเปนเซตยอยของจำนวนเชิงซอน สมการขางบนจึงเปนจริงสำหรับกรณีที่ x1(n), x2(n), α, และ β เปนจำนวนจริง

ถาปราศจากความเปนเชิงเสน DFT จะไมมีประโยชนอะไรเลยในการวิเคราะหสัญญาณ เพราะเราจะสามารถหาDFT ไดเฉพาะสัญญาณที่มีเพียงความถี่เดียว แตในความเปนจริงสัญญาณในทางปฏิบัตินั้น เปนผลรวมของสัญญาณไซนหลายความถี่ ดวยคุณสมบัติความเปนเชิงเสนเราจึงใช DFT ในการวิเคราะหหาองคประกอบสัญญาณไซนที่ความถี่ตาง ๆ ได

2.5 ทฤษฎีการเลื่อนของ DFT (DFT Shift Theorem)ถา y(n) = x(n+ l) เปนลำดับของตัวเลขที่ไดจากการเลื่อน (shift) x(n) ไปทางซายจำนวน l จุด ทำให y(n)เร็วกวา x(n) อยู l จุด กลาวคือจุดแรกของ y คือ x(l) หรือ y(0) = x(l) แลวเราจะได

Y (m) = ej2π·l·mN X(m) (17)

2.6 ขนาดของ DFT (DFT Magnitudes)ถา x(n) เปนลำดับของเลขจำนวนจริงที่ไดจากการชักตัวอยาง x(t) ซึ่งมีองคประกอบสัญญาณไซนความถี่ fk =

fr =rfsN

ให

xk(t) = Ak cos (2πfkt+ ϕk) = Ar cos (2πfrt+ ϕr)

xk(n) = Ar cos (2πrntsfsN

+ ϕr) = Ar cos (2π · n · r

N+ ϕr)

Page 17: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 17

โดย xk(n), 0 ≤ n < N เปนลำดับที่ไดจากการชักตัวอยาง xk(t) ดวยความถี่ fs โดยเลือก N ที่ทำใหการชักตัวอยางครอบคลุม xk(t) เปนจำนวน q คาบโดย q เปนจำนวนเต็มบวก แลวเราจะไดความสัมพันธระหวางขนาดของDFT ที่จุด r หรือ |X(r)| และแอมปลิจูดของ xk(t) ดังนี้

Xmag(r) = |X(r)| = N

2Ar (18)

ถา x(n) เปนลำดับของเลขเชิงซอน โดยเงื่อนไขอยางอื่นยังเหมือนเดิม เราจะได

Xmag(r) = |X(r)| = NAr (19)

2.6.1 พิสูจน

แสดงใหเห็นวาสมการที่ (18) เปนจริงดังนี้ ให

x(n) = A1x1(n) + A2x2(n) + · · ·Akxk(n) + · · ·+ AKxK(n) =K∑k=1

Akxk

โดย xk เปนสัญญาณไซนความถี่ fk ดังนั้น x(n) มีองคประกอบสัญญาณไซนความถี่ fk ที่มีขนาดเทากับ Ak และมีเฟสเทากับ ϕk กลาวคือ

xk(n) = Ak cos (2πfknts + ϕk) = Ak cos (2π · n · fkfs

+ ϕk)

x(n) =K∑k=1

Ak cos (2π · n · fkfs

+ ϕk)

ถาการชักตัวอยางดวยความถี่ fs ทำให fk มีคาเทากับความถี่วิเคราะห fp = pfsN

สำหรับทุกคาของ k กลาวคือ

fk = fp =pfsN

, เมื่อ 0 ≤ p < N

x(n) =K∑k=1

Ak cos (2π · n · pfsNfs

+ ϕk)

=K∑k=1

Ak cos (2π · n · p

N+ ϕk)

หรือ

xk(n) = cos (2π · n · p

N+ ϕk) = Re{ejϕkej2π

pN }

Page 18: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 18

ถาเราให

zk(n) = ejϕkej2πpN

= cos (2π · n · p

N+ ϕk) + j sin (2π · n · p

N+ ϕk)

= xk(n) + jyk(n)

โดย

yk(n) = Im{zk(n)} = sin (2π · n · p

N+ ϕk)

= − cos (2π · n · p

N+ ϕk +

π

2)

= −x(n+ l)

โดยที่จุดชักตัวอยาง l คือจุดที่ทำให

2π · l · mr

N=

π

2

ซึ่งจะได

l =N

4r

yk(n) = −xk(n+N

4r)

เมื่อ fr = rfsN

เปนความถี่หนึ่งในองคประกอบสัญญาณไซนของ x(n) หรือ

fr =rfsN

, เมื่อ 0 < r < N

แลว

z(n) =K∑k=1

Akejϕkej2π

pN = x(n) + jy(n), โดย

x(n) =K∑k=1

Akxk(n) =K∑k=1

Ak cos (2π · n · p

N+ ϕk)

y(n) =K∑k=1

Akyk(n) =K∑k=1

Ak sin (2π · n · p

N+ ϕk)

= −x(n+ l) = −x(n+N

4r)

z(n) = x(n)− jx(n+N

4r)

Page 19: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 19

พิจารณาหา DFT ของ x(n) ที่ m = r (หา X(r)) โดยคำนวณจาก Z(r) ดังนี้

Z(r) =N−1∑n=0

z(n)e−j2πnr/N =N−1∑n=0

(x(n)− jx(n+N

4r))e−j2πnr/N

= X(r)− jej2πN4r

rN X(r)

= (1 + e−j π2 ej

π2 )X(r) = (1 + 1)X(r)

= 2X(r)

หรือ

X(r) =1

2Z(r)

=1

2

N−1∑n=0

{K∑k=1

Akejϕkej2πnp/N}e−j2πnr/N

=1

2

N−1∑n=0

K∑k=1

Akejϕkej2πnp/Ne−j2πnr/N

=1

2

K∑k=1

Akejϕk

N−1∑n=0

ej2πn(p−r)/N

=1

2Are

jϕr{N−1∑n=0

1}

=N

2Are

jϕr

ทั้งนี้เพราะN−1∑n=0

ej2πn(p−r)/N =

{ ∑N−1n=0 ej2πn(m)/N = 0, เมื่อ p ̸= r∑N−1n=0 ej2πn(0)/N = NAre

jϕr , เมื่อ p = r

จะเห็นวา

Xmag(r) = |X(r)| = N

2Ar

Xϕ(r) = ϕr

นั่นคือ X(r) คือองคประกอบสัญญาณไซนความถี่ fr = rfsN

ของ x(n) ซึ่งเปนไปตามสมการมี่ (18)

2.6.2 การสเกลขนาดของ DFT (DFT Scale Factors)

ขนาด DFT บอกถึงขนาดขององคประกอบสัญญาณไซนความถี่วิเคราะห mfsN

แตไมเทากับแอมปลิจูดของสัญญาณไซนดังกลาว ดังนั้นจึงอาจมีการปรับขนาดหรือสเกลขนาดของสัญญาณ DFT หลายวิธีเพื่อจุดประสงคที่แตกตางกันไป

สำหรับการสเกลแบบที่ 1 คือตามสมการที่ (1)หรือกลาวอีกนัยหนึ่งวาเปน DFT ที่มีแฟคเตอรของการสเกลเทากับ1 (หรือไมมีการสเกล) ในกรณีนี้สเกลแฟคเตอรของการอินเวอรส DFT จะเปน 1

Nตามสมการ 26

Page 20: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 20

การสเกลแบบที่ 2 ตามสมการที่ (20) มีสเกลแฟคเตอรเทากับ 1N

เพื่อใหขนาดของ DFT ที่ไดเทากับครึ่งหนึ่งของแอมปลิจูดของสัญญาณไซนที่ความถี่วิเคราะห ในกรณีนี้สเกลแฟคเตอรของการอินเวอรสจะเปน 1

X(m) =1

N

N−1∑n=0

x(n)e−j2πnm/N (20)

x(n) =N−1∑m=0

X(m)ej2πnm/N (21)

จะเห็นวา DFT ที่ไดนั้นบงบอกถึงแอมปลิจูด แตเราตองแลกดวยการที่ตองทำการคำนวณการหารดวย N เพิ่มเติมการสเกลแบบที่ 3 เปนการแบงสเกลแฟคเตอรไปทั้งทางดาน DFT และอินเวอรส DFT เทา ๆ กันคือ 1√

Nดัง

สมการที่ (22) และสมการที่ (23) สำหรับ DFT และอินเวอรส DFT ตามลำดับ

X(m) =1√N

N−1∑n=0

x(n)e−j2πnm/N (22)

x(n) =1√N

N−1∑m=0

X(m)ej2πnm/N (23)

2.7 แกนความถี่ของ DFT (DFT Frequency Axis)ผลการคำนวณ DFT ที่ตำแหนง m คือ X(m), m = 0, 1, . . . , N − 1 ซึ่งสามารถตีความหมายเปนองคประกอบสัญญาณไซนที่ความถี่วิเคราะห fm = mfs

Nของ x(n) (สมการที่ (3)) ดังนั้นในการตีความหมายนี้ เราสนใจ

X(fm) ซึ่งก็ไมมีอะไรมากเพราะ X(fm) = X(m) นั่นเอง ดังนั้นเมื่อเราตองการตีความหมายของ DFT เพื่อประมาณสเปคตรัมความถี่ (frequency spectrum) หรือสเปคตรัมกำลัง (power spectrum) ของ x(t) แลวเราจะตีความหมายแกน x ของการพล็อต X(m) เปนความถี่ โดยจุด X(m) จะถูกพล็อตทีตำแหนงความถี่วิเคราะห fmซึ่งจะขึ้นอยูกับตัวแปร 3 ตัวคือ

• ความถี่การชักตัวอยาง (sampling frequency) fs

• จำนวนจุดที่นำมาคำนวณ N ซึ่งจะสัมพันธกับ fs ถาเราคงที่ระยะเวลาของสัญญาณไว แตถาเราคงที่ fs แตเปลี่ยนระยะเวลาแลว N จะมีผลกับความถี่วิเคราะห

• ตัวชี้ (index) m ซึ่งเปนตัวบอกตำแหนงความถี่บนแกนความถี่ จะเห็นวาความถี่วิเคราะหที่จุด m ใด ๆ เปนฮารมอนิกที่ m ของความถี่ fs

Nซึ่งเปนความถี่วิเคราะหเมื่อ m = 1 หรือเปนความถี่ฐาน (fundamental

frequency) ของความถี่วิเคราะห นอกจากนี้แลวความถี่ fsN

ยังเปนระยะหางระหวางความถี่ของ DFT (DFT'sfrequency spacing) หรือความละเอียดทางความถี่ของ DFT (DFT's frequency resolution)

ถึงจุดนี้เราจะสรุปประเด็นสำคัญขงอสิ่งที่เราไดเรียนรูเกี่ยวกับ DFT กอนดังนี้

• แตละจุด (X(m)) ของการคำนวณ DFT ขนาด N จุด (N-point DFT) คือผลรวมของการคูณแบบจุดตอจุดระหวาง x(n) กับ y(n) = e−j2πnm/N สำหรับทุกคา n = 0, 1, 2, . . . , N − 1

Page 21: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 21

• y(n) = e−j2πnm/N = cos (2πnm/N) − j sin (2πnm/N) เปนจุดชักตัวอยางตำแหนงที่ nของฟงกชันเชิงซอน e−j2πfmt ที่ใชแทนสัญญาณไซนความถี่ fm = mfs

N

• การที่ y(n) เปนลำดับที่ไดจากการชักตัวอยางฟงกชัน e−j2πfmt ทำให X(m) เปนองคประกอบสัญญาณไซนที่ความถี่ fm ของ x(t)

• เมื่อลำดับ x(n) เปนเลขจำนวนจริงทั้งหมด ผลจาก DFT ขนาด N จุดจะเปนอิสระ (independent) เพียงN/2 จุด กลาวคือX(N−m) = X∗(m) เมื่อX∗(m) เปน complex conjugate ของX(m) หรือX(N −m) และ X(m) ขึ้นตอกัน (dependent) สำหรับทุกคาของ m = 0, 1, 2, . . . , N/2− 1

• DFT มีคุณสมบัติควมเปนเชิงเสน

• DFT มีคุณสมบัติ การ เลื่อน (shifting) เชน เดียวกับการแปลงฟู เรียร แบบตอ เนื่อง (continuous Fouriertransform) (ดูตามสมการที่ (17)

• ขนาดของ DFT แปรตรงกับ N และแอมปลิจูดขององคประกอบสัญญาณไซนที่ความถี่ fm (ดูตามสมการที่ (18) และสมการที่ (19

• ความละเอียดทางความถี่ของ DFT (DFT's frquency resolution) หรือระยะหางของความถี่ของ DFT (DFT'sfrequency spacing) คือ fs/N

2.8 อินเวอรส DFT (Inverse DFT)ผลของการคำนวณ DFT คือองคประกอบสัญญาณไซนความถี่ fm ของ x(n) ฟงกชันที่เปนตัวแทนของสัญญาณไซนความถี่ fm คือ

um(t) = ej2πfmt = cos (2πfmt) + j sin (2πfmt) (24)

เมื่อเรานำชักตัวอยาง um(t) ดวยความถี่ fs ทั้งหมด N จุดเราจะได

um(n) = ej2πfm(n/fs) = ej2πnm/N = cos (2πnm/N) + j sin (2πnm/N) (25)

องคประกอบสัญญาณไซนที่ความถี่ fm ของ x(n) คือ X(m)um(t) ซึ่งเมื่อชักตัวอยางดวยความถี่ fs แลวจะได X(m)ej2πnm/N เมื่อเรานำองคประกอบไซนที่ความถี่ fm ที่ทุกคา m เมื่อรวมกันเราจะได x(n) ดังนี้

x(n) =1

N

N−1∑m=0

X(m)ej2πnm/N (26)

หรือเขียนในรูปแบบสี่เหลี่ยมเปน

x(n) =1

N

N−1∑m=0

X(m)(cos (2πnm/N) + j sin (2πnm/N)) (27)

สมการที่ (26) และสมการที่ (27) เปนนิยามของอินเวอรส DFT ของ X(m) ในรูปแบบโพลารและสี่เหลี่ยมตามลำดับ โดย X(m) เปน DFT ที่ไดจากสมการที่ (1) หรือสมการที่ (2) หรือ DFT แบบไมมีการสเกล ดังนั้นเราจำเปนตองคูณเแฟคเตอรการสเกล 1

Nในสมการที่ (26) และสมการที่ (27) เพื่อใหได x(n) ตามขนาดเดิม

Page 22: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 22

2.9 การรั่วของ DFT (DFT Leakage)ในการทำความเขาใจ DFT ที่ผานมาเราสมมุติใหสัญญาณ x(t) นั้นประกอบขึ้นจากผลบวกของสัญญาณไซนความถี่fk โดยที่ fk เทากับความถี่วิเคราะหคาหนึ่ง หรือ fk = rfs

Nซึ่งจะเปนจริงก็ตอเมื่อเรานำเอาจุด x(n) จากการชัก

ตัวอยาง x(t) เปนระยะเวลา q คาบโดย q เปนจำนวนเต็มบวก ในกรณีนี้พลังงานทั้งหมดของ x(t) ที่ความถี่ fk จะไปลงที่ความถี่วิเคราะห fq = qfs

Nทั้งหมด แตถาจำนวนจุด N และความถี่การชักตัวอยาง fs ไมทำใหเกิดกรณีที่

fk = qfsN

แลวพลังงานของ x(t) ที่ความถี่ fk จะกระจายไปทั่วทุกความถี่ เรียกปรากฎการณนี้วาการรั่วของ DFT(DFT Leakage)

เราจะใชตัวอยางในการทำความเขาใจปรากฎการณนี้ สมมุติให x(t) มีองคประกอบไซนความถี่ fk อยู ดังนั้นเราจะพิจารณาเฉพาะองคประกอบนี้ของ x(t) กลาวคือเราพิจารณาเฉพาะ x(t) ที่เปนสัญญาณไซนความถี่เดียว โดยกรณีของ x(t) ใด ๆ ก็เกิดจากการรวมกันของสัญญาณไซนที่ความถี่ fk ตาง ๆ เทานั้น

พิจารณา x(t) ที่ความถี่ fk นั่นคือ

x(t) = sin (2πfkt) (28)

เมื่อชักตัวอยางดวยความถี่ fs จะได

x(n) = sin (2πfk(n/fs)) = sin (2πnfkfs) (29)

อันดับแรกเราพิจารณากรณีที่ไมมีการรั่วโดยเลือก N และ fs ให x(n), n = 0, 1, 2, . . . , N − 1 มีความยาวเปน q คาบซึ่งจะทำให fk = rfs

Nยกตัวอยางถาให q = 3 เราจะไดเวลาของการชักตัวอยางทั้งหมดเทากับ 3

fk

ซึ่งมีจำนวนจุดของการชักตัวอยางเทากับ N จุดระยะหางระหวางจุดคือ ts = 1fs

ดังนั้นเราจะได

N

fs=

3

fk

fk =3fsN

ซึ่งจะเห็นวา fk มีคาเทากับความถี่วิเคราะหที่ m = 3 ทั้งนั้นพลังงานทั้งหมดของ x(t) จะไปลงที่ความถี่ 3fsN

เพียงความถี่เดียวจึงไมมีการรั่ว ดังแสดงในรูปที่ 5

แตถาจำนวนจุด N ภายใตความถี่การชักตัวอยาง fs จากระยะเวลาที่ไมครบรอบของแตละคาบของ x(t) การรั่วของ DFT จะเกิดขึ้นดังนี้ สมมุติใหระยะเวลาในการชักตัวอยางทั้งหมดคือ 3.4 คาบของความถี่ fk หรือระยะเวลาที่ไดอินพุท N จุดจากการชักตัวอยางดวยความถี่ fs คือ 3.4

fkนั่นคือ

N

fs=

3.4

fk

fk =3.4fsN

ในกรณีเชนนี้พลังงานของ x(t) จะกระจายลงไปยังความถี่วิเคราะหที่อยูรอบ ๆ ความถี่ fk โดยความถี่ที่อยูใกลสุดจะไดพลังงานไปมากที่สุด และลดหลันลงไปตามระยะหางจาก fk อยางเชนในกรณีนี้ พลังงานกระจายลงไปที่ความถี่

Page 23: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 23

0 1 2 3 4 5 60

0.5

1

0

0.5

1

0

(a) ������ x = sin (2πfkt) ��� x(n) ����������������������������fs ������ 3 ���

0 2 4 6 8 10 12 14 160

5

10

15

Magnitude of X1(m), |X1(m)|

0 2 4 6 8 10 12 14 16

−100

0

100

Phase of X1(m)

(b) DFT ��������� x ��� (a)

รูปที่ 5: DFT ของอินพุทไซนความถี่ fk ในกรณีที่ fk = 3fs/N จะไมมีการรั่ว

Page 24: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 24

0 1 2 3 4 5 60

0.5

1

0

0.5

1

0

(a) ������ x = sin (2πfkt) ��� x(n) ����������������������������fs ������ 3.4 ���

0 2 4 6 8 10 12 14 16−5

0

5

10

15

Magnitude of X2(m)

0 2 4 6 8 10 12 14 16

−100

0

100

Phase of X2(m)

(b) DFT ��������� x ��� (a)

รูปที่ 6: DFT ของอินพุทไซนความถี่ fk ในกรณีที่ fk = 3.4fs/N จะมีการรั่ว

Page 25: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 25

3fsN

มากที่สุด รองลงมาคือความถี่ 4fsN

ตามดวยความถี่ 2fsN

และความถี่ 5fsN

ตามลำดับ รูปที่ 6 แสดงการกระจายของพลังงานของ x(t) ที่ความถี่ fk ไปยังความถี่วิเคราะหรอบความถี่ fk

ปญหาการรั่วของ DFT ไมสามารถขจัดได เพราะสัญญาณ x(t) ใด ๆ อาจมีองคประกอบไซนหลายความถี่ที่ตอเนื่อง หรืออยูใกลกันมาก จนตองมีบางความถี่ที่จะเกิดการรั่ว แตเรามีวิธีที่จะทำใหผลของมันเบาบาง จนไมมีผลตอการวิเคราะหเลยก็ได

Page 26: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 26

3 Fast Fourier Transform (FFT)ในหัวขอ 2 เราไดตอบคำถามขอที่หนึ่งที่ตั้งไวคือ จะใช DFT ทำประโยชนอะไรบาง โดยเฉพาะจะใช DFT ประมาณส-เปคตรัมความถี่ หรือสเปคตรัมกำลังของสัญญาณอินพุท x(t) ไดอยางไร ในหัวขอนี้เราจะตอบคำถามที่สองคือจะคำนวณ DFT อยางไรใหเร็ว ทั้งนี้เพราะประโยชนของ DFT นั้นจะเกิดขึ้นจริงได เราตองใช DFT ที่มีจำนวนจุด N สูงมากพอ แตปญหาของ DFT คือ การคำนวณตามนิยามของ DFT ในสมการที่ (1) นั้นแปรตาม N2 ดังนั้นถาไมมีวิธีการคำนวณ DFT ใหเร็วพอที่จะคำนวณ DFT ที่ N มีคาสูง ๆ ไดภายในเวลาอันสมควรแลว DFT ก็ไมมีประโยชน แนนอนวาเรามีวิธีการคำนวณ DFT ใหเร็วซึ่งวิธีนั้นก็คือใชอัลกอริธึมชื่อ FFT (Fast Fourier Transform) ในการคำนวณ ดังนั้นในหัวขอนี้เราจะทำความเขาใจวาอัลกอริธึม FFT เปนอยางไร ทำไมจึงคำนวณ DFT ไดเร็ว และที่คำนวณไดเร็วนั้นเร็วขนาดไหน

3.1 Cooley-Tukey FFTFFT ไดรับการคิดคนโดยนักคณิตศาสตร 2 ทานชื่อ Cooley และ Tukey โดยทั้งสองทานไดนำเสนอการคิดคนดังกลาวตอสาธารณในป ค.ศ. 1965 หรือป พ.ศ. 2508 เราเรียกวิธีการคำนวณตามหลักการของ Cooley และ Tukey วาCooley-Tukey FFT หรือ CT-FFT สิ่งที่ทั้งสองทานนำเสนอมีดังนี้

ให x(n) เปนลำดับเลขเชิงซอน หรือลำดับเลขจำนวนจริง จำนวนN = 2k จุด โดย n = 0, 1, 2, . . . N−1

แลว X(m) คือ DFT ของ x(n) ที่จุด m โดย m = 0, 1, 2, . . . , N − 1 จะได

X(m) =N−1∑n=0

x(n)e−j2πnm/N =N−1∑n=0

x(n)WmnN (30)

เมื่อ

WN = e−j2π1/N (31)

คือรากที่ N ของ 1 ตัวหลัก (a primitive N th-root of unity)ถาเราแบงอินพุท x(n) เปนสองสวน โดยสวนที่หนึ่งเปนสวนที่ตัวชี้เปนเลขคู และอีกสวนหนึ่งเปนเลขคู แลวเรา

จะเขียน X(m) ใหมไดดังนี้

X(m) =

N/2−1∑n=0

x(2n)W 2mnN +

N/2−1∑n=0

x(2n+ 1)W(2n+1)mN (32)

=

N/2−1∑n=0

x(2n)(W 2N)

mn +

N/2−1∑n=0

x(2n+ 1)WmN (W 2

N)mn

และเนื่องจาก

W 2N = e−j2π2/N = e−j2π 1

N/2 = WN/2 (33)

ซึ่งคือรากที่ N/2 ของ 1 ตัวหลัก (a primitive (N/2)th-root of unity) เราจะได

X(m) =

N/2−1∑n=0

x(2n)WmnN/2 +Wm

N

N/2−1∑n=0

x(2n+ 1)WmnN/2 (34)

Page 27: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 27

จะเห็นวา∑N/2−1

n=0 x(2n)WmnN/2 และ

∑N/2−1n=0 x(2n + 1)Wmn

N/2 คือการคำนวน (N/2)-point DFTดังนั้นวิธีการนี้ไดแบงการคำนวณ N-point DFT ออกเปนการคำนวณ (N/2)-point DFT จำนวน 2 สวน โดยนำเอาWm

N ซึ่งเปนเลขเชิงซอนตัวหนึ่งเรียกวา twiddle factor ไปคูณกับผลที่ไดจากสวนที่สอง แลวนำไปบวกกับสวนที่ 1สังเกตวาในขั้นตอนแรกนี้เปนการแบงตัวชี้ n ออกเปนสองสวน

ทำนองเดียวกันเราสามารถแบงตัวชี้m ออกเปน 2 สวนเชนเดียวกัน โดยสวนแรกคือm = 0, 1, 2, . . . , N/2−1 ซึ่งใชการคำนวณตามสมการที่ (34) และสวนที่สองคือ m = N/2, . . . , N − 1 ซึ่งเทากับตัวชี้สวนนี้จะเปนm + N/2 เมื่อ m เปนตัวชี้ในสวนแรก พิจารณา X(m + N/2) โดยแทน m ดวย m + N/2 ในสมการที่ (34) ดังนี้

X(m+N/2) =

N/2−1∑n=0

x(2n)W(m+N/2)nN/2 +W

m+N/2N

N/2−1∑n=0

x(2n+ 1)W(m+N/2)nN/2

=

N/2−1∑n=0

x(2n)WmnN/2(W

N/2N/2 )

n +WmN W

N/2N

N/2−1∑n=0

x(2n+ 1)WmnN/2(W

N/2N/2 )

n

และเนื่องจาก

WN/2N/2 = e−j2π = 1 (35)

และ

WN/2N = e−j2π(N/2)/N = e−jπ = −1 (36)

เราจะได

X(m+N/2) =

N/2−1∑n=0

x(2n)WmnN/2 −Wm

N

N/2−1∑n=0

x(2n+ 1)WmnN/2 (37)

จะเห็นวาในการคำนวณ X(m +N/2) นั้น ตางกับการคำนวณ X(m) เพืยงการนำสวนหลังไปลบออกจากสวนหนา แทนการไปบวก ดวยวิธีการนี้เราสามารถคำนวณ DFT โดย

1. ให m = 0

2. คำนวณ (N/2)-point DFT ที่จุด m ของอินพุท x(n) สวนที่ n เปนเลขคู ใหผลลัพธคือ X0(m)

3. คำนวณ (N/2)-point DFT ที่จุด m ของอินพุท x(n) สวนที่ n เปนเลขคี่ ใหผลลัพธคือ X1(m)

4. คูณ X1(m) กับ twiddle factor WmN ไดผลลัพธ Wm

N X1(m)

5. คำนวณ X(m) และ X(m+N/2) ดังนี้

X(m) = X0(m) +WmN X1(m) (38)

X(m+N/2) = X0(m)−WmN X1(m) (39)

Page 28: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 28

6. m = m+ 1

7. ถา m = N/2 จบ ถาไมใชใหกลับไปขั้นที่ 2

...

...

x(0)

x(2)

x(N-2)

x(N-1)

x(1)

x(3)

WN0

WN1

WNN/2-1

X(0)X(1)

X(N/2-1)

X(N/2)X(1+N/2)

X(N-1)

...

...

...

...(N/2)-point DFT

(N/2)-point DFT

..

.

..

.รูปที่ 7: ไดอะแกรมการไหล (dataflow diagram) ของการคำนวณ DFT ตามสมการที่ (34) และ (37)

X0

X1

x0

x1

+

_

W1x1W0x0

W1

W0 =

W1x1W0x0=

+.

.(a) Butterfly operation ��� twiddle factor �������

+x0

x1 W

X0

X1

+

_

Wx1x0=

Wx1x0=

.

.(b) Butterfly operation ��� twiddle factor ���������

รูปที่ 8: Butterfly operations (a) แบบ twiddle factor ดานเดียว และ (b) แบบ twiddle factor สองดาน

รูปที่ 7 แสดงไดอะแกรมการไหล (dataflow diagram) ของการคำนวณ N-point DFT ตามอัลกอริธึมขางบนหรือตามสมการสมการที่ (34) และ (37) เราเรียกการคำนวณในสมการที่ (38) และ (39) วา butterfly operation ซึ่งสามารถแสดงไดดวยไดอะแกรมการไหล (dataflow diagram) ไดดังรูปที่ 8

Butterfly operations ในรูปทั่วไปจะมีการคูณดวย twiddle factor ทั้งดานอินพุท x0 และอินพุท x1 ดังแสดงในรูปที่ 8(a) แตในการคำนวณ FFT ของ Cooley-Tukey นั้น twiddle factor ที่คูณอยูกับ x0 คือ W0 ในรูปจะมีคาเปน 1 ซึ่งจะได butterfly operation ดังแสดงในรูปที่ 8(b)

หัวใจสำคัญของการคำนวณตามอัลกอรึมขางบนก็คือ เราสามารถใชวิธีการนี้กับการคำนวณ (N/2)-point DFT ซึ่งแบงเปนการคำนวณ (N/4)-point DFT สองสวน และเนื่องจาก มี (N/2)-point DFT สองสวน เราจะไดการคำนวณ(N/4)-point DFT ทั้งหมด 4 สวน และถา N/4 ̸= 2 เราสามารถแบงตอไปจนกวา จะไดการคำนวณแตละสวนเปน 2-point DFT และ butterfly operations นอกจากนี้ 2-point DFT เองก็คำนวณดวย butterfly operationsทำใหผลจากการแบงจนถึง 2-point DFT เราจะไดการคำนวณ DFT จากการคำนวณ butterfly operations จำนวนN/2log 2

N ครั้ง เขาใจวาคงนึกภาพดังกลาวนี้ยังไมออก เราจะใชตัวอยางกรณีที่ N = 8 = 23 เพื่อการทำความเขาใจ

Page 29: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 29

x(0)

x(2)

x(1)

x(3)

W80

W81

W83

X(0)X(1)

X(3)

X(4)X(5)

X(7)

4-point DFT

4-point DFT

..

.

..

.x(5)

x(7)

x(4)

x(6)

X(6).W83

X(2).X0(0)

X1(0)

X1(1)

X1(2)

X1(3)

X0(1)

X0(2)

X0(3)

..

.

..

..

...

.

..

..

.

รูปที่ 9: ไดอะแกรมการไหล (dataflow diagram) ของการคำนวณ 8-point DFT หลังทำการแบงเปน 4-point DFTสองสวน

3.1.1 ตัวอยาง: FFT ขนาด 8 จุด (8-point FFT)

การคำนวณ FFT ขนาด 8 จุดก็คือ การคำนวณ 8-point DFT ดวยอัลกอริธึม FFT ในการแบงครั้งแรกตามสมการที่ (34) และ (37) เราจะได

X(m) =3∑

n=0

x(2n)Wmn4 +Wm

8

3∑n=0

x(2n+ 1)Wmn4 = X0(m) +Wm

8 X1(m)(40)

X(m+ 4) =3∑

n=0

x(2n)Wmn4 −Wm

8

3∑n=0

x(2n+ 1)Wmn4 = X0(m)−Wm

8 X1(m)(41)

โดย

• X0(m) เปน DFT ขนาด 4 จุดของ x(0), x(2), x(4), x(6) และ

• X1(m) เปน DFT ขนาด 4 จุดของ x(1), x(3), x(5), x(7)

รูปที่ 9 แสดงไดอะแกรมการไหลหลังการแบง 8-point DFT เปน 4-point DFT 2 สวน และ butterfly operationsเพื่อรวมทั้งสองสวนเขาดวยกัน

Page 30: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 30

สำหรับ X0(m) เราจะหาไดจากการแบง 4-point DFT เปน 2-point DFT สองสวนดังนี้

X0(m) =1∑

n=0

x(4n)Wmn2 +Wm

4

1∑n=0

x(4n+ 2)Wmn2 (42)

= X0,0(m) +Wm4 X0,1(m)

X0(m+ 2) =1∑

n=0

x(4n)Wmn2 −Wm

4

1∑n=0

x(4n+ 2)Wmn2 (43)

= X0,0(m)−Wm4 X0,1(m)

โดย

• X0,0(m) เปน DFT ขนาด 2 จุดของ x(0), x(4)

• X0,1(m) เปน DFT ขนาด 2 จุดของ x(2), x(6)

ทำนองเดียวกันสำหรับ X1(m) เราจะได

X1(m) =1∑

n=0

x(4n+ 1)Wmn2 +Wm

4

1∑n=0

x(4n+ 3)Wmn2 (44)

= X1,0(m) +Wm4 X1,1(m)

X1(m+ 2) =1∑

n=0

x(4n+ 1)Wmn2 −Wm

4

1∑n=0

x(4n+ 3)Wmn2 (45)

= X1,0(m)−Wm4 X1,1(m)

โดย

• X1,0(m) เปน DFT ขนาด 2 จุดของ x(1), x(5)

• X1,1(m) เปน DFT ขนาด 2 จุดของ x(3), x(7)

พิจารณา 2-point DFT โดยมี x(0) และ x(1) เปนอินพุท ตามนิยามเราจะได

X(0) =1∑

n=0

x(n)W 0n2 = x(0) + x(1) (46)

X(1) =1∑

n=0

x(n)W n2 = x(0)− x(1)W2 = x(0)− x(1) (47)

Page 31: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 31

เพราะ W2 = e−j2π(1/2)) = e−jπ = −1 ซึ่งจะเห็นวาเราหา 2-point DFT ไดจาก butterfly operation ที่มีtwiddle factor เทากับ 1 ดังนั้น เราจะได

X0,0(0) = x(0) + x(4)

X0,0(1) = x(0)− x(4)

X0,1(0) = x(2) + x(6)

X0,1(1) = x(2)− x(6)

X1,0(0) = x(1) + x(5)

X1,0(1) = x(1)− x(5)

X1,1(0) = x(3) + x(7)

X1,1(1) = x(3)− x(7)

ซึ่งไดจาก butterfly operations จำนวน 4 ตัว แตละตัวมี twiddle factors เทากับ 1

x(0)

x(2)

x(1)

x(3)

W80

W81

W83

X(0)X(1)

X(3)

X(4)X(5)

X(7)

.

.

.

.

.

.

x(5)

x(7)

x(4)

x(6)

X(6).W83

X(2).

X0(0)

X1(0)

X1(1)

X1(2)

X1(3)

X0(1)

X0(2)

X0(3)

.

.

.

.

.

.

.

...

.

.

.

..

...

.

.

.

.

.

. W40

W41

W40

W41

X0,0(0)

X0,1(0)

X0,0(1)

X0,1(1)

X1,1(0)

X1,1(1)

X1,0(0)

X1,0(1)

รูปที่ 10: ไดอะแกรมการไหล (dataflow diagram) ของการคำนวณ 8-point DFT ดวยวิธี Cooley-Tukey FFTขนาด 8 จุด

ผลจากการคำนวณ 2-point DFT ทั้ง 8 คาจะถูกนำไปคำนวณX0(m) และX0(m+2) สำหรับm = 0, 1

และคำนวณ X1(m) และ X1(m+ 2) สำหรับ m = 0, 1 ตามสมการที่ (42) ถึงสมการที่ (45) ซึ่งจะไดผลลัพท

Page 32: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 32

เปน

X0(0) = X0,0(0) +W 04X0,1(0) = X0,0(0) +X0,1(0)

X0(2) = X0,0(0)−W 04X0,1(0) = X0,0(0)−X0,1(0)

X0(1) = X0,0(1) +W 14X0,1(1) = X0,0(1)− jX0,1(1)

X0(4) = X0,0(1)−W 14X0,1(1) = X0,0(1) + jX0,1(1)

X1(0) = X1,0(0) +W 04X1,1(0) = X1,0(0) +X1,1(0)

X1(2) = X1,0(0)−W 04X1,1(0) = X1,0(0)−X1,1(0)

X1(1) = X1,0(1) +W 14X1,1(1) = X1,0(1)− jX1,1(1)

X1(4) = X1,0(1)−W 14X1,1(1) = X1,0(1) + jX1,1(1)

ซึ่งไดจาก butterfly operations จำนวน 4 ตัวเชนเดียวกัน โดย 2 ตัวมี twiddle factor เทากับ W 04 = 1 สวนอีก

สองตัวมี twiddle factor เทากับ W4 = e−j2π/4 = e−jπ/2 = −j

ผลจากการคำนวณ 2-point DFT ทั้ง 8 คาจะถูกนำไปคำนวณ X(m) และ X0(m + 4) สำหรับ m =

0, 1, 2, 3 ตามสมการที่ (40) และสมการที่ (41) ซึ่งจะไดผลลัพทเปน

X(0) = X0(0) +W 08X1(0)

X(4) = X0(0)−W 08X1(0)

X(1) = X0(1) +W 18X1(1)

X(5) = X0(1)−W 18X1(1)

X(2) = X0(2) +W 28X1(2)

X(6) = X0(2)−W 28X1(2)

X(3) = X0(3) +W 38X1(3)

X(7) = X0(3)−W 38X1(3)

ซึ่งไดจาก butterfly operations จำนวน 4 ตัวที่มี twiddle factors เทากับ Wm8 , m = 0, 1, 2, 3

เราเขียนไดอะแกรมการไหลของการคำนวณ 8-point FFT นี้ไดตามแสดงในรูปที่ 10 โดยอินพุท x(n) มาทางดานซายเขาสู butterfly operations สำหรับการคำนวณ 2-point DFT จำนวน 4 ตัว ผลลัพธที่ไดก็คือ X0,0(m),X0,1(m), X1,0(m) และ X1,1(m) สำหรับ m = 0, 1 เราเรียกการคำนวณนี้วาเปน stage 1 ผลลัพธจากstage 1 จะเปนอินพุทใหกับ butterfly operations จำนวน 4 ตัวใน stage 2 และผลจาก stage 2 ก็จะเปนอินพุทใหกับ butterfly operations จำนวน 4 ตัวของ stage 3 จากรูปที่ 10 เราจะได

จำนวน buttery operations แตละ stage = N/4 (48)จำนวน stages = log2 N = log2 2

k = k (49)

จำนวน buttery operations ทั้งหมด =N

2log2N =

N

2log2 2

k =kN

2(50)

Page 33: DFTและFFT - KMUTTwebstaff.kmutt.ac.th/~thorin.the/ENE208/Lectures/dft_fft_pinit.pdf · DFTและFFT 4 เราเรียกความถี่fm ว าความถี่วิเคราะห

DFT และ FFT 33

เนื่องจาก buttery operation หนึ่งตัวมีการคูณเลขเชิงซอน 1 ครั้งและการบวกเลขเชิงซอน 2 ครั้ง ในการคำนวณN-point DFT ดวย N-point FFT มีการคูณเลขเชิงซอนทั้งหมด N

2log2 N และมีการบวกเลขเชิงซอน N log2N

ครั้ง สำหรับการคำนวณตามนิยาม การคำนวณ DFT หนึ่งจุดตองทำการคูณเลขเชิงซอนจำนวน N ครั้งและทำการบวกN-1 ครั้ง ดังนั้นการคำนวณ N-point DFT ตามนิยามตองใชการคูณทั้งหมดN2 ครั้ง และการบวกทั้งหมด (N−1)2

ตารางที่ 8 เปรียบเทียบปริมาณการคูณและบวกระหวางการคำนวณ N-point DFT ตามนิยาม และการคำนวณดวยN-point FFT

ตารางที่ 8: เปรียบปริมาณการคูณและการบวกเลขเชิงซอนสำหรับการคำนวณ DFT ตามนิยามและการคำนวณดวยFFTk N = 2k จำนวนครั้งของการบวก จำนวนครั้งของการคูณ

ตามนิยาม FFT นิยาม/FFT ตามนิยาม FFT นิยาม/FFT4 16 225 64 3.5 256 32 86 64 3969 384 10.3 4096 192 21.38 256 65025 2048 31.8 65536 1024 6410 1024 1.04× 106 1.02× 104 102.2 1.05× 106 5.12× 103 204.812 4096 1.68× 107 4.92× 104 341.2 1.68× 107 2.46× 104 682.714 16384 2.68× 108 2.29× 105 1.17× 103 2.68× 108 1.15× 105 2.34× 103

16 65536 4.29× 109 1.05× 106 4.09× 103 4.29× 109 5.24× 105 8.19× 103

18 262144 6.87× 1010 4.72× 106 1.45× 104 6.87× 1010 2.36× 106 2.91× 104

20 1048576 1.10× 1012 2.10× 107 5.24× 104 1.10× 1012 1.05× 107 1.05× 105