การประมวลผลสัญญาณดิจิทัล: The Goertzel Algorithm
เซ็นเซอร์ทั่วไปจะให้ค่าเดียวแก่คุณ (เช่น "อุณหภูมิ 25 องศาเซลเซียส") แต่ถ้าอินพุตของคุณเป็นกระแสเสียงที่วุ่นวายและมีเสียงรบกวนล่ะ? โปรเจกต์ Goertzel Algorithm จะพาคุณไปรู้จักกับ Digital Signal Processing (DSP) โดยการค้นหาความถี่ที่ เฉพาะเจาะจงมาก จากอินพุตของไมโครโฟนด้วยการคำนวณทางคณิตศาสตร์ เช่น เสียงนกหวีดสุนัข

เอาชนะ FFT (Fast Fourier Transform)
การรัน FFT เต็มรูปแบบเพื่อวิเคราะห์ทุกความถี่ในห้องจะทำให้ RAM ของ Arduino หมดและใช้เวลานานเกินไป Goertzel Algorithm ได้รับการปรับแต่งมาอย่างดีเยี่ยม แทนที่จะตรวจสอบความถี่ ทั้งหมด คุณจะบอกสมการทางคณิตศาสตร์ว่า "ฉันสนใจแค่ 1,200 Hertz เท่านั้น" อัลกอริทึมจะทำงานอย่างรวดเร็วและให้ผลลัพธ์ที่ชัดเจนว่า "ใช่" หรือ "ไม่ใช่" หากตรวจพบโทนเสียงที่ระบุนั้นในเสียงรบกวน
แอปพลิเคชัน DTMF Tone Decoder
อัลกอริทึมนี้คือการคำนวณทางคณิตศาสตร์แบบเดียวกับที่บริษัทโทรศัพท์เก่าๆ ใช้
- เมื่อคุณกด '1' บนแป้นพิมพ์ โทรศัพท์จะสร้าง "Dual-Tone Multi-Frequency" (เช่น การผสมระหว่าง 697Hz และ 1209Hz)
- คุณวาง Electret Microphone ไว้ใกล้โทรศัพท์อนาล็อก
- Arduino จะทำการ
analogRead()เสียงอย่างรวดเร็ว - Goertzel algorithm สองตัวจะทำงานพร้อมกัน หากตรวจพบ ทั้ง 697Hz และ 1209Hz พร้อมกัน Arduino จะพิมพ์ออกมาว่า: "ตรวจพบปุ่ม '1'!"
การใช้งานระบบหลัก
- Arduino Uno/Nano: การคำนวณนี้ผลักดันขีดจำกัดสูงสุดของชิป 8-bit!
- Microphone Amplifier (MAX4466): จำเป็นสำหรับการป้อนสัญญาณคลื่นอนาล็อกที่สะอาด
- ความรู้ C++ DSP: การคำนวณนี้เกี่ยวข้องกับ sines, cosines และ floating-point arrays ที่ซับซ้อน มันต้องมีการกำจัด
delay()ออกไป และอาศัย sample rates ที่แม่นยำอย่างสมบูรณ์ (เช่น การสุ่มตัวอย่างเสียงที่ 8000Hz อย่างแม่นยำโดยใช้ hardware timers)