ดิว.นินจา

ดิว.นินจา

Saturday, June 22, 2019

NETPIE IoT : วิเคราะห์ผลตอบสนองความถี่โดยไลบรารี arduinoFFT

อธิบายในภาพรวม FFT (Fast Fourier Transform) คืออัลกอริทึมในการแปลงสัญญาณในโดเมนเวลาเป็นผลตอบสนองความถี่ โดยมีหลักการพื้นฐานเช่นเดียวการแปลงฟูเรียร์ในระบบเวลาต่อเนื่อง พัฒนาจาก DFT (Discrete Fourier Transform) ให้ใช้เวลาการคำนวณน้อยลง ช่วยให้สามารถใช้คอมพิวเตอร์ช่วยในการวิเคราะห์องค์ประกอบด้านความถี่ของสัญญาณหรือระบบที่ต้องการได้อย่างมีประสิทธิภาพ ปัจจุบันผู้เริ่มต้นไม่จำเป็นต้องเขียนอัลกอริทึม FFT ด้วยตัวเองเพราะสามารถหาไลบรารีพร้อมใช้งานในซอพต์แวร์ ภาษาคอมพิวเตอร์ และแพลตฟอร์มที่ใช้กันทั่วไป ในบทความนี้จะนำเสนอการใช้ไลบรารี arduinoFFT สำหรับแพลตฟอร์ม Arduino และ ESP ในการพัฒนาอุปกรณ์ IoT สำหรับวิเคราะห์ผลตอบสนองความถี่ แสดงผลและสั่งงานโดย NETPIE รายละเอียดของเนื้อหาอยู่ในไฟล์ pdf ที่เป็นส่วนหนึ่งของหนังสือ "พัฒนาไอโอทีโดยเน็ตพาย"(อยู่ระหว่างดำเนินการ) รวมถึงโปรแกรมที่ดาวน์โหลดได้จากลิงก์ด้านล่างของบทความ

ฮาร์ดแวร์สำหรับการทดลองนี้จะใช้ NodeMCU V2 และบอร์ด IGR เพื่อความสะดวกในการเชื่อมต่อสัญญาณ ซึ่งผู้อ่านสามารถทดลองบนโปรโตบอร์ดก็ได้ แต่จะต้องมีเครื่องกำเนิดสัญญาณ (signal generator) ซึ่งเป็นเครื่องมือที่มีในห้องปฏิบัติการทั่วไป สำหรับการทดลองเล่นที่บ้าน ผู้เขียนใช้บอร์ด SGIoT ที่เคยนำเสนอในบทความ "สร้างอุปกรณ์ไอโอทีกำเนิดสัญญาณบน ESP32 และ NETPIE" ดังแสดงในรูปที่ 1 ต่อเอาต์พุตของตัวกำเนิดสัญญาณเข้ากับขา A0 ของ NodeMCU (หากใช้เครื่องกำเนิดสัญญาณอื่นต้องแน่ใจว่าเอาต์พุตแกว่งอยู่ในช่วง 0 – 3.3 โวลต์ โดยมีค่าเฉลี่ยอยู่ตรงกลางของช่วง คือ 1.65 โวลต์)

รูปที่ 1 ฮาร์ดแวร์ที่ใช้ในการทดลอง FFT

ในช่วงแรกของการพัฒนาจะทดลองใช้ไลบรารี arduinoFFT โดยยังไม่เชื่อมต่อ NETPIE แต่รันโปรแกรมตัวอย่าง FFT_03 ให้แสดงข้อมูลออกบน Serial Monitor และนำไปพล็อตบน Scilab เปลี่ยนรูปแบบของสัญญาณและตรวจสอบเอาต์พุตที่ได้จาก FFT ดังแสดงในรูปที่ 2 ซึ่งจะเห็นว่าสอดคล้องกับทฤษฏี เช่น FFT ของรูปคลื่นสี่เหลี่ยมจะประกอบด้วยความถี่หลักและฮาร์มอนิกที่ความถี่เป็น 3,5, … เท่า แสดงว่าไลบรารีสามารถใช้งานได้ตามต้องการ

รูปที่ 2 ผลตอบสนองความถี่ของสัญญาณ 5 ประเภท

ในการใช้งานเป็นอุปกรณ์ IoT เราไม่สามารถส่งข้อมูลทั้งย่านความถี่ผ่านอินเทอร์เน็ตเพราะข้อมูลจะมีจำนวนมาก โดยปกติความถี่ที่ขนาดเกิดค่ายอดสูง (peaks) ซึ่งจะแสดงนัยสำคัญของสัญญาณหรือระบบที่สนใจ ตัวอย่างเช่นมอเตอร์ที่เริ่มเสื่อมสภาพหรือเสียสมดุลย์จะแสดงองค์ประกอบความถี่ที่สัมพันธ์กับความเร็วในการหมุน โดยขนาดของ FFT ที่ความถี่นั้นจะมีค่าสูง

ดังนั้นจะทดลองเขียนโปรแกรมเพื่อตรวจสอบความถี่ที่เกิดค่ายอดในรูปที่ 2 และแสดงผลบน NETPIE โดยเน้นสัญญาณ 4 ประเภทคือ รูปคลื่นไซน์ สี่หลี่ยม สามเหลี่ยม และฟันเลื่อย (สัญญาณ random ความถี่ที่เกิดค่ายอดจะไม่แน่นอน) การค้นหาค่ายอดจากแอเรย์ที่ได้จากเอาต์พุตของ FFT ดูเหมือนง่าย แต่ในทางปฏิบัติจะเกิดปัญหาเนื่องจากความถี่ที่ใกล้เคียงกับค่ายอดอาจมีขนาดสูงกว่าค่ายอดรองลงมา ตัวอย่างเช่นค่ายอดสูงสุดมีขนาด 10 เกิดขึ้นที่ความถี่ 100 Hz ยอดที่รองลงมาเกดขึ้นที่ 300 Hz มีขนาด 5 ในขณะที่ขนาดที่ความถี่ 100.1 Hz มีขนาด 7 ถ้าเราเขียนโปรแกรมเพื่อตรวจสอบความถี่อย่างง่ายจากขนาดสูงสุดลงมาจะได้เท่ากับ 100, 100.1, 300 Hz โดยโปรแกรมไม่ทราบว่าความถี่ 100.1 Hz เป็นเพียงความถี่ที่ใกล้เคียงกับค่ายอดแรก ซึ่งไม่ใช่ข้อมูลที่เราต้องการ ดังนั้นในการค้นหาจะต้องตรวจสอบว่าความถี่ที่ได้อยู่ในช่วงที่ใกล้กับความถี่ที่เลือกไว้แล้วหรือไม่ และคัดเอาความถี่ 100.1 Hz ออกไป

สำหรับรายละเอียดในการพับลิชค่าให้ NETPIE รวมถึงการสร้าง widget แสดงผลและควบคุมบน Freeboard จะใช้โครงสร้างเหมือนกับที่ได้อธิบายในบทก่อนหน้าของหนังสือ และเป็นวิธีการที่ผู้เขียนใช้มาโดยตลอด ดังนั้นจะไม่กล่าวถึงในเนื้อหาส่วนนี้ รูปที่ 3 แสดงหน้า NETPIE Freeboard ที่สร้างขึ้น ค่าที่แสดงคือค่ายอดและความถี่ของสัญญาณรูปคลื่นฟันเลื่อยที่ความถี่ 100 Hz ความแม่นยำของความถี่ขึ้นกับจำนวนจุดข้อมูลในการทำ FFT ในตัวอย่างนี้ใช้ 256 จุด การสั่งคำนวณ FFT สามารถเลือกแบบครั้งต่อครั้งโดยกดปุ่ม [Compute] หรือตั้งค่า AUTO FFT เป็น ON เพื่อคำนวณทุกคาบเวลาที่ตั้งได้โดยสไลเดอร์ ความถี่การสุ่มและค่าระดับของขนาดในการตัดสินว่าเป็นยอดหรือไม่สามารถปรับได้จาก Freeboard เช่นเดียวกัน

รูปที่ 3 หน้า Freeboard สำหรับโปรแกรม FFT_netpie.ino

รูปที่ 4 แสดงผลการทดสอบกับสัญญาณ 4 ประเภท (รูปคลื่นไซน์ สี่เหลี่ยม สามเหลี่ยม และฟันเลื่อย) ที่ความถี่สัญญาณ 100 Hz จะเห็นว่าสอดคล้องกับกราฟในรูปที่ 2

รูปที่ 4 ผลการทดสอบ FFT กับสัญญาณ 4 ประเภท

ไฟล์ประกอบ

No comments:

Post a Comment

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...