Moving Average Filter
Lab 4: Moving Average Filter
วัตถุประสงค์
เพิ่ม Circular Buffer สำหรับเก็บข้อมูล
เพิ่มฟังก์ชัน Moving Average Filter
ลด noise ของข้อมูล sensor gพื่อ “ทำให้ข้อมูลจาก sensor นิ่งขึ้น” โดยลด noise แบบสุ่ม
4.1 Concept: Moving Average Filter
Moving Average = ค่าเฉลี่ยของ N samples ล่าสุด

สูตรหลักของ Moving Average (ค่าเฉลี่ยของ N ตัวล่าสุด)
N ตัวล่าสุด)ให้ x[k] คือ sample ล่าสุด ณ เวลา k และใช้หน้าต่างยาว N
ตัวอย่าง (N=5):
samples = [9.8, 9.9, 10.1, 9.7, 9.8]
average = (9.8 + 9.9 + 10.1 + 9.7 + 9.8) / 5 = 9.86
ข้อดี:
ลด noise แบบสุ่ม
ข้อมูลราบเรียบขึ้น
ข้อเสีย:
มี delay (latency)
ตอบสนองช้าลง
4.2 เพิ่มโค้ดใน sensor_hub_daq_task.c
อันนี้คือ “ความหมาย” ของ moving average แบบตรงตัว (เหมือนที่เขียนในหัวข้อ concept)
4.2.1 สูตรแบบ “ทำเร็ว” ด้วยตัวแปร sum (ดังแสดงในโค้ด)
โค้ดของคุณทำแนวนี้:
ถ้า buffer เต็มแล้ว: ลบค่าที่จะถูกเขียนทับออกจาก
sumใส่ค่าใหม่ แล้วบวกเข้า
sumค่าเฉลี่ย =
sum / count
เขียนเป็น LaTeX ได้แบบนี้ (เมื่อ buffer เต็มแล้ว count=N):
กรณีช่วงเริ่มต้นที่ยังไม่ครบ N ตัว (เหมือน count++ ในโค้ด):
4.2.2 สูตร “Circular Buffer index” (head ที่วนด้วย modulo)
ในโค้ดมีประมาณ:
(ใช้สื่อว่า index วนกลับไป 0 เมื่อครบหน้าต่าง)
4.3 เพิ่มการเรียกใช้ใน Main Loop
4.4 Output ที่คาดหวัง
จบ Session 2 | ต่อไป: Session 3: LVGL Display
Last updated
Was this helpful?