Sunday 9 July 2017

เฉลี่ยเคลื่อนที่ กรอง Nedir


เป็นไปได้ที่จะใช้ค่าเฉลี่ยเคลื่อนที่ใน C โดยไม่จำเป็นต้องมีหน้าต่างของตัวอย่าง Ive พบว่าฉันสามารถเพิ่มประสิทธิภาพบิตโดยการเลือกขนาดหน้าต่าง thats อำนาจของสองเพื่อให้บิตขยับแทนการหาร แต่ไม่จำเป็นต้อง บัฟเฟอร์จะดี มีวิธีแสดงผลลัพธ์เฉลี่ยเคลื่อนที่ใหม่ตามผลการค้นหาเดิมและตัวอย่างใหม่กำหนดค่าเฉลี่ยเคลื่อนที่ตัวอย่างเช่นข้ามหน้าต่างตัวอย่าง 4 ตัวอย่าง: เพิ่มตัวอย่างใหม่ e: ค่าเฉลี่ยเคลื่อนที่สามารถใช้งานได้แบบ recursively , แต่สำหรับการคำนวณที่แน่นอนของค่าเฉลี่ยเคลื่อนที่คุณต้องจำตัวอย่างการป้อนข้อมูลที่เก่าแก่ที่สุดในผลรวม (เช่นในตัวอย่างของคุณ) สำหรับค่าเฉลี่ยเคลื่อนที่ N ที่คุณคำนวณ: โดยที่ yn คือสัญญาณขาออกและ xn เป็นสัญญาณขาเข้า อีคิว (1) สามารถเขียน recursively เป็นดังนั้นคุณจำเป็นต้องจำตัวอย่าง xn-N เพื่อคำนวณ (2) ที่ระบุโดย Conrad Turner คุณสามารถใช้หน้าต่างแทนยาวได้ (ไม่ จำกัด ) แทนซึ่งจะช่วยให้คุณสามารถคำนวณเอาท์พุทได้เฉพาะจากผลลัพธ์ที่ผ่านมาและอินพุทปัจจุบัน: แต่นี่ไม่ใช่ค่าเฉลี่ยเคลื่อนที่ (unweighted) แต่เป็นค่าชี้แจง (อย่างน้อยที่สุดในทางทฤษฎี) คุณไม่เคยลืมอะไรเลย (น้ำหนักเพียงเล็กน้อยและเล็กลงสำหรับตัวอย่างที่ไกลในอดีต) ฉันใช้ค่าเฉลี่ยเคลื่อนที่โดยไม่มีหน่วยความจำรายการสำหรับโปรแกรมติดตาม GPS ที่ฉันเขียน ฉันเริ่มต้นด้วย 1 ตัวอย่างและหารด้วย 1 เพื่อให้ได้ค่าเฉลี่ยปัจจุบัน จากนั้นผมจะเพิ่มตัวอย่าง anothe และหารด้วย 2 เป็นค่าเฉลี่ยปัจจุบัน นี้ยังคงจนกว่าฉันจะได้รับความยาวเฉลี่ย ทุกครั้งหลังจากนั้นฉันเพิ่มในตัวอย่างใหม่ให้ได้ค่าเฉลี่ยและลบค่าเฉลี่ยดังกล่าวออกจากยอดรวม ฉันไม่ใช่นักคณิตศาสตร์ แต่ดูเหมือนจะเป็นวิธีที่ดีที่จะทำ ฉันคิดว่ามันจะเปิดท้องของคนที่แต่งตัวประหลาดคณิตศาสตร์จริง แต่ก็จะเปิดออกเป็นหนึ่งในวิธีที่ได้รับการยอมรับในการทำมัน และทำงานได้ดี เพียงแค่จำไว้ว่ายิ่งความยาวของคุณยิ่งใหญ่เท่าไรก็ยิ่งช้าลงตามสิ่งที่คุณต้องการทำ นั่นอาจไม่สำคัญตลอดเวลา แต่เมื่อไปตามดาวเทียมถ้าคุณช้าเส้นทางอาจอยู่ไกลจากตำแหน่งจริงและจะดูไม่ดี คุณอาจมีช่องว่างระหว่างจุดเริ่มต้นและจุดต่อท้าย ฉันเลือกความยาวของ 15 ปรับปรุง 6 ครั้งต่อนาทีเพื่อให้ได้อย่างราบรื่นเพียงพอและไม่ได้รับไกลจากตำแหน่งนั่งจริงกับจุดเส้นทางที่ราบรื่น ตอบ 16 พค. 16 ที่ 23:03 เริ่มต้นทั้งหมด 0, นับ 0 (ทุกครั้งที่เห็นค่าใหม่จากนั้นหนึ่งอินพุท (scanf) หนึ่งเพิ่ม totalnewValue, หนึ่งที่เพิ่มขึ้น (นับ) หนึ่งหารเฉลี่ย (totalcount) นี่จะเป็นค่าเฉลี่ยเคลื่อนที่มากกว่า input ทั้งหมดในการคํานวณคาเฉลี่ยโดยใชเพียง 4 อินพุทตอไปเทานั้นจะตองใช4 inputvariables อาจคัดลอก input แตละ input ไปยัง inputvariable ที่สูงกวาจากนั้นคา new moving average เปน sum ของ inputvariables 4 หารดวย 4 (right shift 2) ดีถ้าทุกปัจจัยการผลิตเป็นบวกเพื่อให้การคำนวณเฉลี่ยตอบกุมภาพันธ์ 3 15 ที่ 4:06 ที่จริงจะคำนวณค่าเฉลี่ยรวมและไม่เฉลี่ยเคลื่อนไหวตามนับได้รับผลกระทบขนาดใหญ่ของตัวอย่างการป้อนข้อมูลใหม่ ๆ กลายเป็น vanishingly ขนาดเล็ก ndash Hilmar Feb ค่าเฉลี่ยเคลื่อนที่มักใช้สำหรับการทำให้ข้อมูลราบรื่นในที่ที่มีเสียงรบกวนค่าเฉลี่ยเคลื่อนที่โดยทั่วไปไม่ได้รับการยอมรับว่าเป็น Finite Impulse Response เสมอไป (FIR) กรองว่าเป็นในขณะที่เป็นจริงหนึ่งในตัวกรองที่พบมากที่สุดในการประมวลผลสัญญาณ การรักษาด้วยฟิลเตอร์ช่วยให้สามารถเปรียบเทียบได้เช่นตัวกรอง windowed-sinc (ดูบทความเกี่ยวกับ low-pass high-pass และตัวกรอง band-pass และ band-reject สำหรับตัวอย่าง) ความแตกต่างสำคัญกับตัวกรองเหล่านี้คือค่าเฉลี่ยเคลื่อนที่เหมาะสำหรับสัญญาณที่มีข้อมูลที่เป็นประโยชน์ในโดเมนเวลา ซึ่งการวัดความเรียบโดยการเฉลี่ยเป็นตัวอย่างที่สำคัญ ตัวกรอง Windowed-sinc เป็นอีกทางเลือกหนึ่งที่มีประสิทธิภาพสูงในโดเมนความถี่ ด้วยการปรับเสียงในการประมวลผลเสียงเป็นตัวอย่างทั่วไป มีการเปรียบเทียบประเภทของตัวกรองทั้งสองประเภทในโดเมนเวลากับประสิทธิภาพของโดเมนความถี่ของตัวกรอง หากคุณมีข้อมูลที่ทั้งเวลาและโดเมนความถี่มีความสำคัญคุณอาจต้องการดูรูปแบบต่างๆใน Moving Average ซึ่งแสดงจำนวนรุ่นถ่วงน้ำหนักของค่าเฉลี่ยเคลื่อนที่ที่ดีกว่าที่ ค่าเฉลี่ยเคลื่อนที่ของความยาว (N) สามารถกำหนดเป็นลายลักษณ์อักษรได้ตามปกติโดยใช้ตัวอย่างการส่งออกปัจจุบันเป็นค่าเฉลี่ยของตัวอย่างก่อนหน้า (N) ค่าเฉลี่ยเคลื่อนที่จะมีการสลับของลำดับการป้อนข้อมูล (xn) กับชีพจรรูปสี่เหลี่ยมผืนผ้าที่มีความยาว (N) และความสูง (1N) (เพื่อทำให้พื้นที่ของชีพจรและจากนั้นได้รับการกรอง , หนึ่ง) ในทางปฏิบัติที่ดีที่สุดคือใช้ (N) แปลก แม้ว่าค่าเฉลี่ยเคลื่อนที่สามารถคำนวณได้โดยใช้จำนวนคู่ตัวอย่างโดยใช้ค่าแปลก ๆ สำหรับ (N) มีข้อได้เปรียบที่ความล่าช้าของตัวกรองจะเป็นจำนวนเต็มจำนวนตัวอย่างเนื่องจากความล่าช้าของตัวกรองด้วย (N) ตัวอย่างคือ (N-1) 2) ค่าเฉลี่ยเคลื่อนที่สามารถจัดตำแหน่งให้ตรงกับข้อมูลเดิมโดยการขยับโดยจำนวนเต็มจำนวนตัวอย่าง Time Domain เนื่องจากค่าเฉลี่ยเคลื่อนที่เป็นสวิทซ์ที่มีชีพจรรูปสี่เหลี่ยมผืนผ้าการตอบสนองต่อความถี่เป็นฟังก์ชัน sinc นี้ทำให้สิ่งที่ต้องการคู่ของตัวกรอง windowed sinc เนื่องจากเป็น convolution กับชีพจร sinc ที่ทำให้เกิดการตอบสนองความถี่เป็นรูปสี่เหลี่ยมผืนผ้า เป็นการตอบสนองความถี่ sinc ที่ทำให้ค่าเฉลี่ยเคลื่อนที่มีประสิทธิภาพต่ำในโดเมนความถี่ อย่างไรก็ตามจะทำงานได้ดีในโดเมนเวลา ดังนั้นจึงเหมาะที่จะทำข้อมูลให้ราบรื่นเพื่อขจัดเสียงรบกวนในขณะเดียวกันยังทำให้การตอบสนองต่อขั้นตอนอย่างรวดเร็ว (รูปที่ 1) สำหรับตัวอย่างเสียงแบบ Gaussian Noise (AWGN) ทั่วไปซึ่งมักจะสันนิษฐานโดยค่าเฉลี่ย (N) ตัวอย่างจะมีผลต่อการเพิ่ม SNR ด้วยปัจจัย (sqrt N) เนื่องจากเสียงสำหรับแต่ละตัวอย่างไม่มีความสัมพันธ์กันไม่มีเหตุผลที่จะปฏิบัติต่อแต่ละตัวอย่างแตกต่างกัน ดังนั้นค่าเฉลี่ยเคลื่อนที่ซึ่งจะทำให้แต่ละตัวอย่างมีน้ำหนักเท่ากันจึงจะสามารถกำจัดเสียงรบกวนได้สูงสุดสำหรับความคมชัดในการตอบสนองขั้นตอนที่กำหนด การดำเนินการเนื่องจากเป็นตัวกรอง FIR ค่าเฉลี่ยเคลื่อนที่สามารถนำมาใช้งานผ่านการบิด จากนั้นจะมีประสิทธิภาพเท่ากัน (หรือไม่มี) เช่นเดียวกับตัวกรอง FIR อื่น ๆ อย่างไรก็ตามสามารถนำมาใช้ซ้ำได้อย่างมีประสิทธิภาพ สูตรนี้เป็นผลมาจากนิพจน์สำหรับ (yn) และ (yn1) นั่นคือเมื่อเราสังเกตว่าการเปลี่ยนแปลงระหว่าง (yn1) และ (yn) คือคำว่าพิเศษ (xn1N) ปรากฏขึ้นที่ สิ้นสุดขณะที่คำ (xn-N1N) ถูกลบออกจากจุดเริ่มต้น ในทางปฏิบัติมักเป็นไปได้ที่จะออกไปหารด้วย (N) สำหรับแต่ละระยะโดยการชดเชยผลกำไรของ (N) ในที่อื่น การใช้งานแบบรีสตาร์ทนี้จะเร็วกว่า convolution แต่ละค่าใหม่ของ (y) สามารถคำนวณได้ด้วยการเพิ่มเพียงสองแบบแทนการเพิ่ม (N) ที่จำเป็นสำหรับการใช้คำจำกัดความที่ตรงไปตรงมา สิ่งหนึ่งที่มองออกไปด้วยการใช้งานแบบวนซ้ำคือข้อผิดพลาดในการปัดเศษจะสะสม ปัญหานี้อาจเป็นปัญหาสำหรับแอพพลิเคชันของคุณ แต่ก็หมายความว่าการใช้งานแบบรีสตาร์ทนี้จะทำงานได้ดีกว่าด้วยการใช้จำนวนเต็มมากกว่าที่มีเลขทศนิยม นี่เป็นเรื่องผิดปกติมากเนื่องจากการใช้งาน floating point มักจะง่ายกว่า ข้อสรุปของสิ่งนี้คือคุณไม่ควรประมาทประโยชน์ของตัวกรองค่าเฉลี่ยที่เคลื่อนที่ง่ายในการประมวลผลสัญญาณ เครื่องมือออกแบบตัวกรองบทความนี้ประกอบขึ้นด้วยเครื่องมือการออกแบบตัวกรอง ทดลองกับค่าที่แตกต่างกันสำหรับ (N) และให้เห็นภาพตัวกรองที่เป็นผลลัพธ์ ลองตอบตอนนี้การตอบสนองความถี่ของตัวกรองเฉลี่ยที่ใช้งานการตอบสนองความถี่ของระบบ LTI คือ DTFT ของการตอบสนองอิมพัลส์การตอบสนองต่อแรงกระตุ้นของค่าเฉลี่ยเคลื่อนที่แบบแอลเอสมีค่าเนื่องจากตัวกรองค่าเฉลี่ยเคลื่อนที่เป็น FIR การตอบสนองต่อความถี่จะลดลงเหลือน้อยที่สุด sum เราสามารถใช้เอกลักษณ์ที่มีประโยชน์มากในการเขียนการตอบสนองตามความถี่ที่เราได้ให้ ae minus jomega N 0 และ M L ลบ 1. เราอาจสนใจขนาดของฟังก์ชั่นนี้เพื่อหาความถี่ที่จะได้รับผ่านตัวกรองที่ไม่มีการลดทอนและจะถูกลดทอนลง ด้านล่างเป็นพล็อตของขนาดของฟังก์ชั่นนี้สำหรับ L 4 (สีแดง), 8 (สีเขียว) และ 16 (สีฟ้า) แกนแนวนอนมีตั้งแต่ศูนย์ถึง pi radian ต่อตัวอย่าง สังเกตได้ว่าในทั้งสามกรณีการตอบสนองต่อความถี่มีลักษณะ lowpass คอมโพเนนต์คงที่ (ความถี่เป็นศูนย์) ในอินพุตจะผ่านตัวกรองที่ไม่มีการลดทอน ความถี่ที่สูงขึ้นบางอย่างเช่น pi 2 จะถูกกำจัดออกโดยตัวกรอง อย่างไรก็ตามหากมีเจตนาในการออกแบบตัวกรองสัญญาณ Lowpass เราก็ยังไม่ได้ผลดีนัก บางส่วนของความถี่ที่สูงขึ้นจะลดทอนลงได้เพียงประมาณ 110 (สำหรับค่าเฉลี่ยเคลื่อนที่ 16 จุด) หรือ 13 (สำหรับค่าเฉลี่ยเคลื่อนที่สี่จุด) เราสามารถทำได้ดีกว่าที่ พล็อตข้างต้นถูกสร้างขึ้นโดยรหัส Matlab ต่อไปนี้: omega 0: pi400: pi H4 (14) (1-exp (-iomega4)) (1-exp (-iomega)) H8 (18) (1-exp (- (1-exp (-iomega16)) (1-exp (-iomega)) พล็อต (โอเมก้า, abs (H4) abs (H8) abs ( H16)) axis (0, pi, 0, 1) สำเนาลิขสิทธิ์ 2000- - University of California, BerkeleyMoving ค่าเฉลี่ยใน R ความรู้ของฉัน R ไม่มีฟังก์ชันในการคำนวณค่าเฉลี่ยเคลื่อนที่ อย่างไรก็ตามการใช้ฟังก์ชันการกรองเราสามารถเขียนฟังก์ชันสั้น ๆ สำหรับค่าเฉลี่ยเคลื่อนที่ได้จากนั้นเราสามารถใช้ฟังก์ชันนี้กับข้อมูลใดก็ได้: mav (data) หรือ mav (ข้อมูล 11) ถ้าเราต้องการระบุจุดข้อมูลจำนวนอื่น มากกว่า 5 ล็อตแรกที่วางแผนไว้: plot (mav (data)) นอกเหนือจากจำนวนจุดข้อมูลซึ่งค่าเฉลี่ยแล้วเรายังสามารถเปลี่ยนอาร์กิวเมนต์ด้านข้างของฟังก์ชันตัวกรองได้ด้วย: sides2 ใช้ทั้งสองด้าน sides1 ใช้ค่าที่ผ่านมาเท่านั้น แชร์สิ่งนี้: นำทางโพสต์

No comments:

Post a Comment