เริ่มตัวอย่างกรองสามจุด · กลับบทมุมตามเวลา
อ่านต่อ บทสะสมมุมจาก Gyro ด้วยเวลาจริง เพื่อฝึก dt ไม่เท่ากันและผลของ offset ที่สะสม
วัตถุประสงค์และพื้นฐานที่ใช้
ฝึกอ่านผลของการกรองก่อนใช้มุมใน MCU: คำนวณค่าเฉลี่ยสามจุด ตรวจ sample ที่ยังไม่ครบ และบอกเวลาอ้างอิงของผลได้ ใช้เครื่องคิดเลข PC หรือกระดาษ ไม่ต้องมีบอร์ด อ่าน มุมต่อเนื่องและอัตราหมุนจาก Log ก่อนทำ
ภาพเสมือนจริงต้นบทสร้างด้วย AI ใช้ลูกแก้วสามช่อง ริบบิ้นและนาฬิกาเป็นสื่อแนวคิด ไม่ใช่อุปกรณ์กรองหรือผลวัด ตัวเลขทั้งหมดสมมติหนึ่งแกน เป็นมุมต่อเนื่องแล้ว ไม่มีมุมจริงให้ประเมินความแม่นยำ และไม่มีการทดลอง IMU หรือรันเฟิร์มแวร์
กำหนดหน้าต่างและช่วงเริ่มต้นให้ชัด
บทนี้ใช้ causal moving average: y[n] = (x[n] + x[n−1] + x[n−2]) / 3 น้ำหนักแต่ละจุดเท่ากับ 1/3 ใช้เฉพาะจุดปัจจุบันและอดีต ไม่ใช้ sample อนาคต กำหนด sample ห่างเท่ากัน 10 ms ใน clock/session เดียว และคำนวณเฉพาะเมื่อมีสามจุดครบ
สองจุดแรกจึง ยังไม่มีค่าเฉลี่ยเต็มหน้าต่าง ไม่ใช่ผลกรองศูนย์ การเติมศูนย์ ใช้ค่าแรกซ้ำ หรือเฉลี่ยเฉพาะจุดที่มี เป็นกติกาเริ่มต้นคนละแบบ ต้องระบุและคำนวณผลใหม่ อย่าใส่ค่าที่ไม่มีเพื่อทำให้กราฟต่อเนื่อง
DSP Guide ของผู้เขียน Steven W. Smith อธิบายการเฉลี่ยหลาย sample และการเลื่อนสัมพันธ์เมื่อใช้จุดด้านเดียว บทนี้กำหนดหน้าต่างย้อนหลังสามจุดและตัวเลขตัวอย่างเอง ไม่ใช้สูตรที่ต้องรออนาคตเป็นผลออนไลน์
คำนวณหกจุดและอ่านเวลาของผล
กำหนด: t เป็นเวลาของ sample หน่วย ms, x/y เป็น degree; ไม่มี gap/reset; ค่า y พร้อมคำนวณได้อย่างเร็วที่สุดเมื่อจุดล่าสุดมาถึง ยังไม่รวมเวลาประมวลผลหรือส่งข้อมูล
| Sample (ms) | x (°) | y เต็ม 3 จุด (°) |
|---|---|---|
| 0 | 0 | ยังไม่ครบ |
| 10 | 1.2 | ยังไม่ครบ |
| 20 | 1.8 | 1 |
| 30 | 3.2 | 31/15 ≈ 2.066667 |
| 40 | 3.8 | 44/15 ≈ 2.933333 |
| 50 | 5.2 | 61/15 ≈ 4.066667 |
ที่ 20 ms: (0 + 1.2 + 1.8) / 3 = 1° หน้าต่างคือ 0, 10, 20 ms มีจุดกึ่งกลางที่ 10 ms แต่คำนวณผลนี้ได้เมื่อมี sample 20 ms แล้ว จึงห้ามเขียนว่า MCU มีผล 1° พร้อมใช้ตั้งแต่ 10 ms การเลื่อนกราฟไปกึ่งกลางหน้าต่างทำได้เพื่อเปรียบเทียบย้อนหลัง ต้องติดป้ายเวลาให้ชัด
หาอัตราเฉลี่ยของผลต่างโดยใช้ dt = 0.01 s จากคู่จุดจริง ไม่ปัด y ก่อนลบ:
| ช่วง (ms) | dt (ms) | x rate (deg/s) | y rate (deg/s) |
|---|---|---|---|
| 0→10 | 10 | 120 | ยังไม่ครบ |
| 10→20 | 10 | 60 | ยังไม่ครบ |
| 20→30 | 10 | 140 | 320/3 ≈ 106.667 |
| 30→40 | 10 | 60 | 260/3 ≈ 86.667 |
| 40→50 | 10 | 140 | 340/3 ≈ 113.333 |
ผลกรองจุดแรกที่ 20 ms ยังไม่มีผลเต็มหน้าต่างก่อนหน้า จึงไม่มี y rate สำหรับช่วง 10→20 ms อัตรา y เป็นผลต่างของ ค่าเฉลี่ยสองหน้าต่าง ไม่ใช่ gyro ทันทีหรือการหมุนจริงที่พิสูจน์แล้ว ตัวเลขดูแกว่งน้อยลงในชุดนี้ไม่ได้พิสูจน์ว่าใกล้มุมจริงขึ้น
Matplotlib จากตัวเลขสมมติ จุด y วางที่เวลาจุดล่าสุดของหน้าต่าง; เส้นเชื่อมให้อ่านลำดับ ไม่ใช่ waveform ที่วัดระหว่าง sample เปิดกราฟกรองมุมและความหน่วงขนาดเต็ม
Group delay ไม่ใช่เวลารอให้ถึงค่าสุดท้าย
สำหรับ FIR น้ำหนักเท่ากัน N จุดที่สุ่มสม่ำเสมอ ความหน่วงเชิงกลุ่มในย่านที่นิยามได้คือ (N−1)/2 sample กรณี N = 3 จึง 1 sample = 10 ms อ่าน นิยาม group delay ของ SciPy ซึ่งแยกการหน่วงองค์ประกอบความถี่ และระบุว่าค่าที่ความถี่ตรงศูนย์ของ transfer function อาจไม่ถูกนิยาม บทนี้ไม่ได้รัน SciPy
ขยายที่มาของกรณีนี้: H(ω) = (1 + exp(−jω) + exp(−j2ω))/3 = exp(−jω)(1+2cosω)/3 เมื่อ ω เป็น radian/sample ในช่วงที่ตัวประกอบจริงไม่เป็นศูนย์และไม่เปลี่ยนเครื่องหมาย phase มี slope −1 จึงได้ group delay 1 sample ที่ศูนย์ของ H ห้ามอ้าง slope นี้ข้ามจุด phase กระโดด
แยกตัวอย่าง step: x = 0, 0, 0, 3, 3, 3° ที่ t = 0, 10, 20, 30, 40, 50 ms เมื่อเปลี่ยนเป็น 3° ที่ 30 ms ผลเต็มหน้าต่างคือ y ที่ 20, 30, 40, 50 ms = 0, 1, 2, 3° ถึงค่าสุดท้ายที่ 50 ms ห่างจากจุดเปลี่ยน 20 ms กรณีนี้จึงแยก group delay 10 ms, การแทนที่ sample ทั้งหน้าต่าง 20 ms และเวลาประมวลผล/สื่อสารจริงที่โจทย์ยังไม่ทราบ ไม่ใช้เลขหนึ่งแทนอีกเลข
ข้อจำกัดก่อนนำไปใช้กับข้อมูลโดรน
อย่าเฉลี่ยมุมแสดง 179° กับ −179° ตรง ๆ แล้วอ้าง 0° เป็นทิศใกล้เดิม ต้องเลือกวิธีสำหรับมุมและสมมติฐานให้เหมาะ อ่าน มุมข้ามขอบ และ Unwrap ก่อนกรองมุมต่อเนื่อง การเลือกจำนวนรอบที่ผิดไม่ถูกแก้ด้วยการเฉลี่ย
ถ้า sample ห่างไม่เท่ากัน ค่าเฉลี่ยสามตัวเลขยังคำนวณได้ แต่ไม่ใช่แบบจำลอง FIR ที่ช่วงเวลาเท่ากันนี้ และไม่ควรประกาศ delay 10 ms ตายตัว เมื่อเกิด gap/reset ให้บอกว่า window มีข้อมูลใดและเวลาใด ใช้กติกาเริ่มใหม่ที่ประกาศ ไม่สร้างจุดที่ไม่ถูกวัด ตรวจ อายุข้อมูลที่จุดใช้ ประกอบ
การเฉลี่ยไม่ได้แก้ bias คงที่: บวก offset b ทุก x ก็ได้ y เดิมบวก b เพราะผลรวมน้ำหนักเป็น 1 ไม่มี reference จึงไม่มี RMSE หรือหลักฐานความแม่นยำในชุดนี้ และ filter หลังการแปลงเป็นข้อมูลดิจิทัลไม่เรียกคืนข้อมูลที่ alias ไปแล้ว อ่าน อัตราสุ่มและข้อมูลที่ไม่ถูกวัด สำหรับข้อจำกัดก่อนเลือก filter
ขั้นตอนฝึกและคำแนะนำเบื้องต้น
- อ่าน คู่มือชุดกรองมุม ทำสำเนา ใบวางแผนกรองมุมว่าง บันทึกแกน หน่วย clock/session และกติกาเริ่มต้น
- ทำ โจทย์กรองมุมและความหน่วง เก็บเศษส่วนเต็มไว้จนขั้นสุดท้าย เขียนสมาชิกหน้าต่าง เวลากึ่งกลาง และเวลาพร้อมคำนวณคนละช่อง
- เปรียบเทียบตัวอย่าง ramp กับ step ก่อนเปิด เฉลยกรองมุม บอกสิ่งที่สรุปได้จากเลขและสิ่งที่ยังต้องวัดจริง
- หากต่อยอดฮาร์ดแวร์ ให้เก็บ input/output/timestamp และ configuration ของ filter เพื่อประเมินผลตามงานจริง ไม่เลือกค่าจูนควบคุมโดรนจากชุดเลขนี้
เริ่มด้วยหน้าต่างเล็กและกติกาชัดเจน อย่าเพิ่มจำนวนจุดเพียงเพื่อให้กราฟสวยขึ้นโดยไม่อ่านผลต่อเวลา ไม่มีคะแนนใหม่ในแบบประเมินเดิม ไม่มีผลวัดหรือ flight tuning ใหม่
ตัวเลขและแหล่งอ้างอิงชุดกรองมุม · รายการแฮชชุดกรองมุม · กลับภาพรวม MCU