สารบัญ:

Arduino: การแปลงความถี่ (DFT): 6 ขั้นตอน
Arduino: การแปลงความถี่ (DFT): 6 ขั้นตอน

วีดีโอ: Arduino: การแปลงความถี่ (DFT): 6 ขั้นตอน

วีดีโอ: Arduino: การแปลงความถี่ (DFT): 6 ขั้นตอน
วีดีโอ: สอนเปลี่ยนความถี่ PWM บน Arduino (How to change PWM frequency in Arduino) 2024, พฤศจิกายน
Anonim
Arduino: การแปลงความถี่ (DFT)
Arduino: การแปลงความถี่ (DFT)

โปรแกรมนี้คือการคำนวณการแปลงความถี่บน Arduino ด้วยการควบคุมการปะทะของพารามิเตอร์ มันแก้ไขโดยใช้การแปลงฟูริอองที่เสื่อมทราม

นี่ไม่ใช่ FFT

FFT คืออัลกอริธึมที่ใช้ในการแก้ DFT โดยใช้เวลาน้อยกว่า

รหัสสำหรับ FFT สามารถพบได้ที่นี่

ขั้นตอนที่ 1: มันทำงานอย่างไร (แนวคิด):

มันทำงานอย่างไร (แนวคิด)
มันทำงานอย่างไร (แนวคิด)
มันทำงานอย่างไร (แนวคิด)
มันทำงานอย่างไร (แนวคิด)

โปรแกรมสำหรับการแปลงความถี่ให้การควบคุมเอาต์พุตที่คุณต้องการได้อย่างดีเยี่ยม โปรแกรมนี้ประเมินช่วงความถี่ที่กำหนดโดยผู้ใช้ที่อินพุตที่กำหนดสำหรับชุดข้อมูล

  • ในรูปคือชุดข้อมูลที่มีความถี่สองความถี่ชื่อ f2 และ f5 ซึ่งจำเป็นต้องทำการทดสอบ f2 และ f5 เป็นชื่อสุ่มสำหรับสองความถี่ ตัวเลขที่สูงกว่าสำหรับความถี่ที่ค่อนข้างสูง ที่นี่ความถี่ที่เล็กกว่า f2 มีแอมพลิจูดสูงกว่าและ f5 มีแอมพลิจูดน้อยกว่า
  • สามารถแสดงทางคณิตศาสตร์ได้ว่า -ผลรวมของการคูณชุดข้อมูลฮาร์มอนิกสองชุดที่มีความถี่ต่างกันมีแนวโน้มเป็นศูนย์ (จำนวนข้อมูลที่สูงขึ้นสามารถนำไปสู่ผลลัพธ์การปะทะได้) ในกรณีของเรา หากความถี่การคูณทั้งสองนี้มีความถี่เท่ากัน (หรือใกล้เคียงกันมาก) ผลรวมของการคูณจะเป็นจำนวนที่ไม่ใช่ศูนย์ ซึ่งแอมพลิจูดขึ้นอยู่กับแอมพลิจูดของข้อมูล
  • เพื่อตรวจจับความถี่เฉพาะที่กำหนดชุดข้อมูลสามารถคูณด้วยความถี่การทดสอบต่างๆ และผลลัพธ์สามารถให้ส่วนประกอบของความถี่นั้นในข้อมูลได้

ขั้นตอนที่ 2: มันทำงานอย่างไร (ในรหัส):

มันทำงานอย่างไร (ในรหัส)
มันทำงานอย่างไร (ในรหัส)
มันทำงานอย่างไร (ในรหัส)
มันทำงานอย่างไร (ในรหัส)

สำหรับข้อมูลที่กำหนด (f2+f5) ทีละหนึ่ง f1 ถึง f6 จะถูกคูณและค่าของผลรวมจะถูกบันทึกไว้ ผลรวมสุดท้ายนั้นแสดงถึงเนื้อหาของความถี่นั้น ความถี่ที่เหลือ (ไม่ตรงกัน) ควรเป็นศูนย์ในอุดมคติ แต่เป็นไปไม่ได้ในกรณีจริง ในการทำให้ผลรวมเป็นศูนย์นั้น จำเป็นต้องมีชุดข้อมูลขนาดไม่สิ้นสุด

  • ดังแสดงในรูปที่ f1 ถึง f6 ความถี่ในการทดลองและแสดงการคูณด้วยชุดข้อมูลทุกจุด
  • ในรูปที่สอง จะมีการพล็อตผลรวมของการคูณนั้นที่ความถี่แต่ละความถี่ สองยอดที่ 1 และ 5 สามารถระบุได้

ดังนั้นโดยใช้วิธีการเดียวกันสำหรับข้อมูลสุ่ม เราจึงสามารถประเมินความถี่จำนวนมากและวิเคราะห์เนื้อหาความถี่ของข้อมูลได้

ขั้นตอนที่ 3: การใช้รหัสสำหรับการวิเคราะห์ความถี่:

การใช้รหัสสำหรับการวิเคราะห์ความถี่
การใช้รหัสสำหรับการวิเคราะห์ความถี่

ตัวอย่างเช่น ให้ใช้รหัสนี้เพื่อค้นหา DFT ของคลื่นสี่เหลี่ยม

วางโค้ดที่แนบมาก่อน (ฟังก์ชัน dft) หลังจากวนซ้ำตามภาพที่แสดง

8 ข้อกำหนดที่ต้องระบุ

  1. อาร์เรย์ที่ต้องใช้ dft
  2. ขนาดของอาร์เรย์
  3. ช่วงเวลาระหว่าง 2 การอ่านในอาร์เรย์ในหน่วยมิลลิวินาที
  4. ค่าที่ต่ำกว่าของช่วงความถี่ใน Hz
  5. ค่าสูงสุดของช่วงความถี่ในหน่วย Hz
  6. ขนาดของขั้นตอนสำหรับช่วงความถี่
  7. การทำซ้ำของสัญญาณ (ขั้นต่ำ 1) ความแม่นยำในการปะทะที่สูงขึ้น แต่เพิ่มเวลาในการแก้ปัญหา
  8. ฟังก์ชั่นหน้าต่าง:

    0 สำหรับไม่มีหน้าต่าง1 สำหรับหน้าต่างแบนด้านบน 2 สำหรับหน้าต่างฮันน์ 3 สำหรับหน้าต่างบานเกล็ด

(หากคุณไม่มีความคิดเกี่ยวกับการเลือกหน้าต่างให้ค่าเริ่มต้น 3)

ตัวอย่าง: dft(a, 8, 0.5, 0, 30, 0.5, 10, 3); นี่คืออาร์เรย์ขององค์ประกอบขนาด 8 ที่จะตรวจสอบ 0 Hz ถึง 30 Hz ด้วย 0.5 ขั้นตอน (0, 0.5, 1, 1.5, …, 29, 29.5, 30) 10 การทำซ้ำและหน้าต่างการแฮม

ที่นี่เป็นไปได้ที่จะใช้อาร์เรย์ที่มีขนาดใหญ่กว่ามากที่สุดเท่าที่ Arduino สามารถจัดการได้

ขั้นตอนที่ 4: เอาต์พุต:

เอาท์พุท
เอาท์พุท
เอาท์พุท
เอาท์พุท

ถ้าคุณแสดงความคิดเห็น

Serial.print(f);อนุกรม.print("\t");

จาก code serial plotter จะให้ลักษณะของสเปกตรัมความถี่ ถ้าไม่ใช่ Serial monitor จะให้ความถี่พร้อมกับ amplitude

ขั้นตอนที่ 5: การตรวจสอบหน้าต่างและขนาดตัวอย่างต่างๆ:

การตรวจสอบขนาดหน้าต่างและตัวอย่างต่างๆ
การตรวจสอบขนาดหน้าต่างและตัวอย่างต่างๆ

ในรูป ความถี่ของคลื่นไซน์วัดโดยใช้การตั้งค่าต่างๆ

ขั้นตอนที่ 6: ตัวอย่าง:

ตัวอย่าง
ตัวอย่าง

ในรูปของการแปลงข้อมูลโดยใช้ SciLab และ Arduino เปรียบเทียบ

แนะนำ: