สิ่งที่ทำให้ราบเรียบในแง่พื้นฐานมาก


17

อะไรที่ทำให้เรียบและฉันจะทำอย่างไร

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

แก้ไข: ลิงก์ไปยังคำถามติดตามผล


สำหรับสเปกตรัมคุณอาจต้องการหาค่าเฉลี่ยร่วมกัน (ในมิติเวลา) สเปกตรัมหลาย ๆ เส้นแทนที่จะเป็นค่าเฉลี่ยวิ่งตามแกนความถี่ของสเปกตรัมเดียว
endolith

@endolith ทั้งสองเป็นเทคนิคที่ถูกต้อง การหาค่าเฉลี่ยในโดเมนความถี่ (บางครั้งเรียกว่า Danielle Periodogram) จะเหมือนกับการเปิดหน้าต่างในโดเมนเวลา การหาค่าเฉลี่ยหลายจุด ("spectra") เป็นความพยายามที่จะเลียนแบบค่าเฉลี่ยของวงดนตรีที่แท้จริงของการคำนวณค่าเฉลี่ย (ซึ่งเรียกว่าเวลช์ประจำเดือน) นอกจากนี้ในเรื่องของความหมายฉันจะยืนยันว่า "การปรับให้เรียบ" เป็นตัวกรอง low-pass ที่ไม่มีสาเหตุ ดูการกรอง Kalman กับการปรับให้เรียบ Kalman, การกรอง Wiener v การปรับให้เรียบ Wiener ฯลฯ มีความแตกต่างที่ไม่สำคัญและขึ้นอยู่กับการใช้งาน
ไบรอัน

คำตอบ:


23

การปรับให้เรียบสามารถทำได้หลายวิธี แต่ในแง่พื้นฐานและทั่วไปก็หมายความว่าคุณสามารถส่งสัญญาณได้ด้วยการผสมองค์ประกอบกับเพื่อนบ้านของพวกเขา คุณละเลง / เบลอสัญญาณเล็กน้อยเพื่อกำจัดเสียงรบกวน ตัวอย่างเช่นเทคนิคการปรับให้เรียบแบบง่าย ๆ คือการคำนวณองค์ประกอบสัญญาณทั้งหมดf(t)ให้เท่ากับ 0.8 ของค่าดั้งเดิมบวกกับ 0.1 ของแต่ละเพื่อนบ้าน:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

สังเกตว่าปัจจัยการคูณหรือน้ำหนักจะรวมกันเป็นอย่างไร ดังนั้นหากสัญญาณค่อนข้างคงที่การปรับให้เรียบจะไม่เปลี่ยนแปลงมากนัก แต่ถ้าสัญญาณมีการเปลี่ยนแปลงฉับพลันฉับพลันจากนั้นการมีส่วนร่วมจากเพื่อนบ้านจะช่วยในการล้างเสียงดังกล่าวเล็กน้อย

น้ำหนักที่คุณใช้ในฟังก์ชั่นการคำนวณใหม่นี้สามารถเรียกว่าเคอร์เนล ฟังก์ชันเกาส์หนึ่งมิติหรือเคอร์เนลพื้นฐานอื่น ๆ ควรทำในกรณีของคุณ

ตัวอย่างที่ดีของการปรับให้เรียบแบบใดแบบหนึ่ง:

ด้านบน: สัญญาณที่ไม่สั่นไหว
ด้านล่าง: สัญญาณที่ราบเรียบ

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่างของเมล็ดข้าว:

ป้อนคำอธิบายรูปภาพที่นี่


นี่คือค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักหรือไม่? สิ่งนี้เรียกว่ามีขนาดหน้าต่าง 3 หรือไม่ แล้วองค์ประกอบที่ 1 และองค์ประกอบสุดท้ายล่ะ? และสิ่งนี้จะแก้ไขได้อย่างไรถ้าฉันมีองค์ประกอบ 128 องค์ประกอบและฉันต้องการใช้หน้าต่างที่มีองค์ประกอบ 16 หรือ 32 องค์ประกอบ

@ user13267: ใช่คุณสามารถพูดได้ว่าเคอร์เนลที่ราบเรียบเป็นค่าเฉลี่ยเคลื่อนที่ที่มีน้ำหนัก หากคุณใช้เคอร์เนลที่มีรูปแบบเหมือนกัน (ดูภาพที่สอง) เป็นเพียงค่าเฉลี่ยเคลื่อนที่ธรรมดา ขนาดของหน้าต่างคุณถูกต้อง สำหรับการจัดการกับขอบนั้นมีสามวิธีพื้นฐาน: 1) การซ้อนข้อมูลของคุณเป็นศูนย์ 2) การทำซ้ำค่าสุดท้าย 3) การสะท้อนสัญญาณ ในทุกกรณีคุณทำข้อมูลที่แกล้งเพื่อให้เคอร์เนลของคุณไม่ตกอยู่ในความว่างเปล่า
Junuxx

การขยายศูนย์จะไม่นับรวมอยู่ในความว่างเปล่าหรือไม่? ในตอนท้ายของกระบวนการเฉลี่ยเคลื่อนที่ชุดข้อมูล "เฉลี่ย" ใหม่ของฉันควรมีจำนวนข้อมูลเท่ากันกับที่ต้นฉบับไม่ควรทำ ถ้าฉันเอาแผ่นรองที่จุดเริ่มต้นหรือจุดสิ้นสุดหรือทำซ้ำข้อมูลสุดท้ายมันจะไม่ไบอัสค่าเฉลี่ยที่ขอบของอาร์เรย์หรือไม่ และการทำมิเรอร์สัญญาณจะช่วยในแง่ของจำนวนเทอมข้อมูลได้อย่างไร? มีบทช่วยสอนอย่างง่ายสำหรับทุกที่ซึ่งแสดงให้เห็นว่ากระบวนการเกิดขึ้นได้อย่างไรพูดว่า 32 จุดข้อมูลและขนาดหน้าต่าง 4 หรือ 5 หรือไม่?

2
หากคุณต้องการให้ชุดข้อมูลที่ราบรื่นของคุณมีความยาวเท่ากับชุดข้อมูลดั้งเดิมคุณจะต้องทำการ "ทำ" ข้อมูลที่จุดสิ้นสุด ตัวเลือกใด ๆ ที่คุณเลือกสำหรับวิธีสร้างข้อมูลนั้นมีอคติโดยเฉลี่ยในบางวิธี การรักษาข้อมูลนอกขอบเขตเป็นเสมือนชุดข้อมูลจริง (เช่นสมมติว่าตัวอย่าง N + 1 เหมือนกับ N-1, N + 2 = N-2 เป็นต้น) จะรักษาลักษณะสเปกตรัมความถี่ของ ส่วนท้ายของสัญญาณในขณะที่สมมติว่าการทำซ้ำเป็นศูนย์หรือไม่เป็นศูนย์จะทำให้ปรากฏว่าความถี่ทั้งหมดจะกลิ้งออกที่ปลาย
Russell Borogove

8

นอกจากคำตอบที่ดีของ Junuxx ฉันอยากจะทิ้งโน้ตสักสองสามข้อ

  • การปรับให้เรียบนั้นเกี่ยวข้องกับการกรอง ( บทความวิกิพีเดียค่อนข้างคลุมเครือ ) - คุณควรเลือกให้นุ่มนวลขึ้นตามคุณสมบัติของมัน

  • หนึ่งในรายการโปรดของฉันคือตัวกรองค่ามัธยฐาน นี่คือตัวอย่างของตัวกรองที่ไม่ใช่เชิงเส้น มันมีคุณสมบัติที่น่าสนใจมันรักษา "ขอบ" และค่อนข้างแข็งแกร่งภายใต้เสียงรบกวนขนาดใหญ่

  • หากคุณมีโมเดลว่าสัญญาณของคุณทำงานอย่างไรตัวกรองคาลมานมีค่าควรดู การปรับให้เรียบเป็นจริงการประมาณความน่าจะเป็นสูงสุดของ Bayesian ของสัญญาณตามการสังเกต


4

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


3

คุณสามารถค้นหารหัส matlab ทั้งหมดสำหรับการปรับตัวกรองค่าเฉลี่ยเคลื่อนที่ให้ราบรื่นสำหรับความยาวก๊อกที่แตกต่างกัน www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/


1

คนอื่น ๆ ได้กล่าวถึงวิธีที่คุณปรับให้เรียบฉันต้องการพูดถึงว่าทำไมปรับให้เรียบ

หากคุณใช้สัญญาณเกินขนาดอย่างเหมาะสมสัญญาณจะแตกต่างกันเล็กน้อยจากตัวอย่างหนึ่งไปยังอีกถัดไป (ตัวอย่าง = Timepoints, พิกเซล ฯลฯ ) และคาดว่าจะมีลักษณะที่ราบเรียบโดยรวม กล่าวอีกนัยหนึ่งสัญญาณของคุณมีความถี่สูงน้อยเช่นส่วนประกอบสัญญาณที่แตกต่างกันในอัตราที่คล้ายกับอัตราการสุ่มตัวอย่างของคุณ

กระนั้นการวัดก็มักจะเสียหายจากเสียงรบกวน ในการประมาณแรกเรามักจะพิจารณาเสียงที่จะติดตามการกระจายแบบเกาส์ด้วยค่าเฉลี่ยศูนย์และค่าเบี่ยงเบนมาตรฐานที่เพิ่มเข้ามาด้านบนของสัญญาณ

เพื่อลดเสียงรบกวนในสัญญาณของเราเรามักจะทำข้อสมมติฐานสี่ข้อต่อไปนี้: เสียงเป็นแบบสุ่มไม่มีความสัมพันธ์กันในกลุ่มตัวอย่างมีค่าเฉลี่ยเป็นศูนย์และสัญญาณมีสัญญาณเกินจริง ด้วยสมมติฐานเหล่านี้เราสามารถใช้ตัวกรองเฉลี่ยแบบเลื่อน

พิจารณาตัวอย่างสามตัวอย่างติดต่อกัน เนื่องจากสัญญาณมีค่าสูงเกินจริงสัญญาณต้นแบบจึงสามารถพิจารณาเปลี่ยนเป็นเส้นตรงซึ่งหมายความว่าค่าเฉลี่ยของสัญญาณในตัวอย่างทั้งสามจะเท่ากับสัญญาณจริงที่ตัวอย่างกลาง ในทางตรงกันข้ามเสียงมีค่าเป็นศูนย์และไม่มีความสัมพันธ์ซึ่งหมายความว่าค่าเฉลี่ยของมันควรจะเป็นศูนย์ ดังนั้นเราสามารถใช้ตัวกรองเฉลี่ยแบบเลื่อนสามตัวอย่างซึ่งเราแทนที่แต่ละตัวอย่างด้วยค่าเฉลี่ยระหว่างตัวมันเองกับสองเพื่อนบ้านที่อยู่ติดกัน

แน่นอนว่ายิ่งเราสร้างหน้าต่างมากเท่าไหร่เสียงก็ยิ่งมากขึ้นเท่านั้นที่จะทำให้เป็นศูนย์ แต่เสียงของเราจะน้อยลงเมื่อเทียบกับสัญญาณจริง ดังนั้นเราต้องทำการแลกเปลี่ยน วิธีหนึ่งที่จะพยายามใช้ประโยชน์จากทั้งสองโลกให้ดีที่สุดคือการใช้ค่าเฉลี่ยถ่วงน้ำหนักซึ่งเราแจกตัวอย่างน้ำหนักที่เล็กกว่าให้ห่างออกไปมากขึ้นเพื่อที่เราจะได้เอฟเฟ็กต์เสียงรบกวนจากช่วงที่กว้างขึ้นในขณะที่ไม่ถ่วงน้ำหนักสัญญาณจริง การสันนิษฐาน

วิธีที่คุณควรวางตุ้มน้ำหนักนั้นขึ้นอยู่กับเสียงสัญญาณและประสิทธิภาพในการคำนวณและแน่นอนว่าการแลกเปลี่ยนระหว่างการกำจัดเสียงรบกวนและการตัดเป็นสัญญาณ

โปรดทราบว่ามีการทำงานหลายอย่างในช่วงไม่กี่ปีที่ผ่านมาเพื่อช่วยให้เราผ่อนคลายสมมติฐานบางประการสี่ตัวอย่างเช่นโดยการออกแบบโครงร่างที่ราบเรียบด้วยหน้าต่างตัวกรองตัวแปร (การกระจายแบบแอนไอโซทรอปิก) หรือแบบที่ไม่ใช้ windows จริงๆ เลย (ไม่ใช่เฉพาะในพื้นที่)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.