กลับไปหน้ารวมไฟล์
goertzel-algorithm-arduino.md

การประมวลผลสัญญาณดิจิทัล: The Goertzel Algorithm

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

invisible_mess_glasses_relay_schema_1772681179521.png

เอาชนะ FFT (Fast Fourier Transform)

การรัน FFT เต็มรูปแบบเพื่อวิเคราะห์ทุกความถี่ในห้องจะทำให้ RAM ของ Arduino หมดและใช้เวลานานเกินไป Goertzel Algorithm ได้รับการปรับแต่งมาอย่างดีเยี่ยม แทนที่จะตรวจสอบความถี่ ทั้งหมด คุณจะบอกสมการทางคณิตศาสตร์ว่า "ฉันสนใจแค่ 1,200 Hertz เท่านั้น" อัลกอริทึมจะทำงานอย่างรวดเร็วและให้ผลลัพธ์ที่ชัดเจนว่า "ใช่" หรือ "ไม่ใช่" หากตรวจพบโทนเสียงที่ระบุนั้นในเสียงรบกวน

แอปพลิเคชัน DTMF Tone Decoder

อัลกอริทึมนี้คือการคำนวณทางคณิตศาสตร์แบบเดียวกับที่บริษัทโทรศัพท์เก่าๆ ใช้

  1. เมื่อคุณกด '1' บนแป้นพิมพ์ โทรศัพท์จะสร้าง "Dual-Tone Multi-Frequency" (เช่น การผสมระหว่าง 697Hz และ 1209Hz)
  2. คุณวาง Electret Microphone ไว้ใกล้โทรศัพท์อนาล็อก
  3. Arduino จะทำการ analogRead() เสียงอย่างรวดเร็ว
  4. 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)

ข้อมูล Frontmatter ดั้งเดิม

title: "Goertzel Algorithm Frequency Detection"
description: "Detect the unseen! Use advanced mathematics to isolate and identify specific audio or electrical frequencies hidden within a noisy signal."
category: "Audio & Sound"
difficulty: "Advanced"