FFT หรือ fast Fourier transform คือวิธีที่รวดเร็วในการคำนวณ discrete Fourier transform (DFT) ถ้าคุณเริ่มจากค่าตัวอย่างที่เว้นระยะเท่ากัน DFT จะบอกว่ามีรูปแบบความถี่ไม่ต่อเนื่องแต่ละแบบอยู่ในค่าตัวอย่างเหล่านั้นมากแค่ไหน
ประเด็นสำคัญคือ FFT ไม่ได้เปลี่ยนผลลัพธ์ มันให้ค่า DFT เดียวกันกับสูตรคำนวณตรงๆ แต่ไปถึงคำตอบนั้นด้วยงานที่ซ้ำซ้อนน้อยกว่ามาก
FFT ในประโยคเดียว
FFT คืออัลกอริทึมที่เร็วกว่า สำหรับหาค่าจำนวนในโดเมนความถี่ชุดเดียวกับที่ DFT นิยามไว้
DFT วัดอะไร
สมมติว่าคุณมีค่าตัวอย่าง แล้ว DFT จะสร้างค่า ที่นิยามโดย
แต่ละค่า วัดว่าข้อมูลสอดคล้องกับรูปแบบความถี่ไม่ต่อเนื่องแบบหนึ่งมากเพียงใด
ถ้าค่าตัวอย่างถูกเก็บอย่างสม่ำเสมอด้วยอัตราการสุ่มตัวอย่าง ช่องความถี่ที่อยู่ติดกันจะห่างกันเป็น
เงื่อนไขนี้สำคัญมาก ถ้าไม่รู้อัตราการสุ่มตัวอย่าง คุณยังมี bin ของ DFT อยู่ แต่จะยังระบุไม่ได้ว่า bin เหล่านั้นตรงกับความถี่จริงทางกายภาพ เช่น เฮิรตซ์
ทำไม FFT จึงเร็วกว่า
FFT เป็นตระกูลของอัลกอริทึมสำหรับคำนวณ DFT อย่างมีประสิทธิภาพ เคล็ดลับหลักคือใช้โครงสร้างซ้ำในตัวประกอบเลขชี้กำลังเชิงซ้อนให้เกิดประโยชน์ แทนที่จะคำนวณผลรวมที่เกือบเหมือนกันใหม่ตั้งแต่ต้น
เวอร์ชันที่นึกภาพง่ายที่สุดคือ radix-2 FFT ซึ่งทำงานได้เป็นธรรมชาติที่สุดเมื่อ เป็นกำลังของ และมันจะแยกทรานส์ฟอร์มความยาว หนึ่งชุดออกเป็นทรานส์ฟอร์มความยาว สองชุดก่อนจะรวมผลลัพธ์กลับ
สำหรับ DFT แบบคำนวณตรงๆ ปริมาณงานคำนวณจะโตในระดับ แต่สำหรับ FFT ที่ใช้กันทั่วไป จะลดลงเหลือประมาณ
ช่องว่างนี้เองที่ทำให้ FFT สำคัญในทางปฏิบัติ สำหรับอินพุตขนาดเล็ก ทั้งสองวิธีอาจดูพอรับได้ แต่เมื่อข้อมูลมีขนาดใหญ่ FFT จะเร็วกว่าอย่างชัดเจนมาก
FFT แยกงานอย่างไร
แทนที่จะเปรียบเทียบทุกค่าตัวอย่างกับทุกรูปแบบความถี่โดยตรง FFT จะแยกปัญหาออกเป็นทรานส์ฟอร์มที่เล็กลง แล้วค่อยรวมกลับด้วยตัวประกอบเฟส
การแยกแบบมาตรฐานคือ:
- นำค่าตัวอย่างที่มีดัชนีคู่ไปไว้ในรายการหนึ่ง
- นำค่าตัวอย่างที่มีดัชนีคี่ไปไว้อีกรายการหนึ่ง
- คำนวณทรานส์ฟอร์มขนาดเล็กบนแต่ละรายการ
- รวมผลลัพธ์จากสองส่วนเข้าด้วยกัน
นี่คือแนวคิด divide-and-conquer ที่นำมาใช้กับการวิเคราะห์ความถี่
ตัวอย่าง FFT แบบ 4 จุด
พิจารณาสัญญาณ 4 จุด
รูปแบบนี้สลับระหว่าง กับ ดังนั้นเราคาดว่าจะเห็นโครงสร้างด้านความถี่บางอย่าง แทนที่จะได้ผลลัพธ์ที่แบนราบทั้งหมด
แยกเป็นดัชนีคู่และคี่ได้ดังนี้:
DFT แบบ 2 จุดของส่วนคู่คือ
และ DFT แบบ 2 จุดของส่วนคี่คือ
สำหรับ FFT แบบ 4 จุด ขั้นตอนการรวมคือ
โดยที่
เนื่องจาก การรวมจึงง่ายเป็นพิเศษ:
ทีนี้มาตีความผลลัพธ์กัน
คือพจน์ความถี่ศูนย์ ดังนั้นมันสะท้อนค่าเฉลี่ยที่ไม่เป็นศูนย์ของค่าตัวอย่าง ส่วนค่าที่ไม่เป็นศูนย์ที่ จับองค์ประกอบแบบสลับของรูปแบบนี้ในกรณี 4 จุด ถ้าคุณลบค่าเฉลี่ยออกก่อน พจน์ จะหายไป และองค์ประกอบที่สลับกันจะเด่นชัดขึ้น
ตัวอย่างนี้มีขนาดเล็ก แต่แนวคิดเดียวกันใช้ได้กับกรณีใหญ่กว่า คือแก้ทรานส์ฟอร์มย่อยก่อน แล้วค่อยรวมผล แทนที่จะสร้างผลรวมทั้งหมดใหม่ทุกครั้ง
ข้อผิดพลาดที่พบบ่อยเกี่ยวกับ FFT
คิดว่า FFT และ DFT ให้ผลลัพธ์คนละอย่าง
ไม่ใช่ FFT เป็นเพียงวิธีที่เร็วกว่าในการคำนวณ DFT
อ่านค่า bin เป็นความถี่จริงเร็วเกินไป
ตำแหน่งของ bin จะกลายเป็นความถี่จริงได้ก็ต่อเมื่อรู้ระยะห่างของการเก็บตัวอย่างแล้ว ถ้าอัตราการสุ่มตัวอย่างคือ ระยะห่างระหว่าง bin จะเป็น สำหรับข้อมูลที่เก็บอย่างสม่ำเสมอ
คิดว่าการ zero-padding เพิ่มข้อมูลใหม่
การ zero-padding อาจทำให้สเปกตรัมดูเรียบขึ้น เพราะเป็นการสุ่มดูทรานส์ฟอร์มพื้นฐานอย่างละเอียดขึ้น แต่ไม่ได้เพิ่มข้อมูลที่วัดมาใหม่
มองข้ามการเตรียมสัญญาณ
การลบค่าเฉลี่ย การใช้หน้าต่าง และการเลือกการสุ่มตัวอย่างอย่างระมัดระวัง อาจมีผลมาก ถ้ามองข้ามเงื่อนไขเหล่านี้ เอาต์พุตของ FFT อาจยังถูกต้องทางคณิตศาสตร์สำหรับค่าตัวอย่างที่ให้มา แต่ทำให้ตีความผิดได้
FFT ใช้ที่ไหนบ้าง
FFT ปรากฏอยู่ทุกที่ที่ต้องการข้อมูลในโดเมนความถี่จากข้อมูลตัวอย่างอย่างรวดเร็ว ตัวอย่างที่พบบ่อยคือการวิเคราะห์สเปกตรัม การกรองสัญญาณ การประมวลผลภาพ การวิเคราะห์การสั่นสะเทือน การแก้สมการเชิงอนุพันธ์เชิงตัวเลข และการคำนวณพหุนามหรือคอนโวลูชันอย่างรวดเร็ว
เหตุผลเป็นเรื่องเชิงปฏิบัติ เพราะหลายการดำเนินการจะง่ายขึ้นหรือเร็วขึ้นหลังจากย้ายจากโดเมนตัวอย่างไปยังโดเมนความถี่
ลองกรณีที่คล้ายกัน
ลองใช้ค่าตัวอย่าง 8 จุดที่เว้นระยะเท่ากันของคลื่นไซน์หนึ่งลูกเต็มคาบ แล้วคำนวณ DFT ด้วยเครื่องคิดเลขหรือสคริปต์ จากนั้นเพิ่มค่าออฟเซ็ตคงที่เข้าไปแล้วเปรียบเทียบเอาต์พุตใหม่ ค่าที่แรงขึ้นที่ เป็นวิธีง่ายๆ ที่ช่วยให้เห็นว่า FFT แยกอะไรออกมา
ต้องการความช่วยเหลือในการแก้โจทย์?
อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที
เปิด GPAI Solver →