dftและfft - kmuttwebstaff.kmutt.ac.th/~thorin.the/ene208/lectures/dft_fft_pinit.pdf ·...
TRANSCRIPT
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
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)
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)
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
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
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
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) เปนสัญญาณ
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
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◦
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◦
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◦
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
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)
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
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
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)
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 }
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)
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
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
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) ตามขนาดเดิม
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 อยางเชนในกรณีนี้ พลังงานกระจายลงไปที่ความถี่
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 จะไมมีการรั่ว
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 จะมีการรั่ว
DFT และ FFT 25
3fsN
มากที่สุด รองลงมาคือความถี่ 4fsN
ตามดวยความถี่ 2fsN
และความถี่ 5fsN
ตามลำดับ รูปที่ 6 แสดงการกระจายของพลังงานของ x(t) ที่ความถี่ fk ไปยังความถี่วิเคราะหรอบความถี่ fk
ปญหาการรั่วของ DFT ไมสามารถขจัดได เพราะสัญญาณ x(t) ใด ๆ อาจมีองคประกอบไซนหลายความถี่ที่ตอเนื่อง หรืออยูใกลกันมาก จนตองมีบางความถี่ที่จะเกิดการรั่ว แตเรามีวิธีที่จะทำใหผลของมันเบาบาง จนไมมีผลตอการวิเคราะหเลยก็ได
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)
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)
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 เพื่อการทำความเขาใจ
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เพื่อรวมทั้งสองสวนเขาดวยกัน
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)
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) ซึ่งจะไดผลลัพท
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)
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