การย้าย ค่าเฉลี่ย และ บิด
ใช้ MATLAB ฉันสามารถหาค่าเฉลี่ยเคลื่อนที่ 3 วันของคอลัมน์เฉพาะของเมทริกซ์และต่อค่าเฉลี่ยเคลื่อนที่กับเมตริกซ์นั้นได้ฉันพยายามคำนวณค่าเฉลี่ยเคลื่อนที่ 3 วันจากด้านล่างจนถึงด้านบนของเมทริกซ์ ฉันได้ให้รหัสของฉัน: กำหนดเมทริกซ์ต่อไปนี้และหน้ากาก: ฉันได้ลองใช้คำสั่ง conv แต่ฉันได้รับข้อผิดพลาด นี่คือ conv คำสั่งฉันได้พยายามใช้ในคอลัมน์ที่ 2 ของ matrix a: เอาต์พุตฉันต้องการจะได้รับในเมทริกซ์ต่อไปนี้: ถ้าคุณมีคำแนะนำใด ๆ ฉันจะขอบคุณมากมัน ขอขอบคุณสำหรับคอลัมน์ 2 ของ matrix a ฉันคำนวณค่าเฉลี่ยเคลื่อนที่ 3 วันดังนี้และใส่ผลลัพธ์ในคอลัมน์ 4 ของ matrix a (เปลี่ยนชื่อเมทริกซ์เป็น 39desiredOutput39 เพื่อแสดงภาพประกอบ) ค่าเฉลี่ย 3 วันเฉลี่ย 17, 14, 11 คือ 14 เฉลี่ย 3 วันจาก 14, 11, 8 คือ 11 เฉลี่ย 3 วันที่ 11, 8, 5 คือ 8 และค่าเฉลี่ย 3 วันของ 8, 5, 2 คือ 5. ไม่มีค่าในแถวล่าง 2 แถวสำหรับคอลัมน์ที่ 4 เนื่องจากการคำนวณค่าเฉลี่ยเคลื่อนที่ 3 วันเริ่มต้นที่ด้านล่าง ผลลัพธ์ 39valid39 จะไม่ปรากฏขึ้นจนกว่าอย่างน้อย 17, 14, และ 11. หวังว่านี่จะทำให้เกิดความรู้สึก Aaron Aaron 12 มิถุนายน 13 เวลาโดยทั่วไปแล้วจะช่วยได้ถ้าคุณจะแสดงข้อผิดพลาด ในกรณีนี้คุณกำลังทำผิดพลาด 2 ประการประการแรกต้องแบ่งความสามัคคีเป็นสามส่วน (หรือความยาวของค่าเฉลี่ยเคลื่อนที่) ประการที่สองให้สังเกตขนาดของ c คุณไม่สามารถเพียงพอดีกับ c ใน a. วิธีทั่วไปในการรับค่าเฉลี่ยเคลื่อนที่จะใช้เหมือนกัน: แต่ที่ไม่ได้มีลักษณะเหมือนที่คุณต้องการ แทนคุณถูกบังคับให้ใช้สายคู่: Im กำลังมองหาคำแนะนำในการใช้ CONVN เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่ในมิติเดียวบน matrix 3 มิติ Im รับเพียงเล็กน้อยขึ้นบนพลิกของเคอร์เนลภายใต้ประทุนและหวังว่าคนอาจจะสามารถชี้แจงพฤติกรรมสำหรับฉัน โพสต์ที่คล้ายคลึงกันซึ่งยังคงทำให้ฉันสับสนอยู่ที่นี่: ฉันมีข้อมูลการไหลของแม่น้ำและอากาศทุกวันสำหรับลุ่มน้ำในสถานที่ต่างๆ ดังนั้นเมทริกซ์เป็นเช่นนั้นสลัว 1 (แถว) แสดงแต่ละสลัวไซต์ 2 (คอลัมน์) แสดงวันที่สลัว 3 (หน้า) แสดงประเภทของการวัดต่าง ๆ (ความสูงของแม่น้ำการไหลปริมาณน้ำฝนเป็นต้น) เป้าหมาย คือพยายามใช้ CONVN เพื่อใช้ค่าเฉลี่ยเคลื่อนที่ 21 วันในแต่ละไซต์สำหรับจุดสังเกตแต่ละจุดสำหรับแต่ละตัวแปร เป็นฉันเข้าใจฉันควรจะสามารถใช้เมล็ด aa เช่นฉันพยายามเล่นรอบและสร้างเคอร์เนลอื่นที่ควรทำงาน (ฉันคิดว่า) และตั้ง ker2 เป็น: ผลไม่มากตรงกับและฉันสงสัยว่าถ้าฉันมี ขนาดที่ไม่ถูกต้องสำหรับเคอร์เนล แนวทางใดที่ได้รับความนิยมอย่างมาก BTW คุณมีเคอร์เนลที่สมมาตรและ flipping ดังนั้นควรไม่มีผลต่อผลลัพธ์ convolution สิ่งที่คุณได้ระบุไว้เป็นเคอร์เนลเฉลี่ยที่เคลื่อนที่โดยเฉลี่ยและการหมุนวนจะทำงานในการหาค่าเฉลี่ยเคลื่อนที่ตามที่คุณคาดหวัง แต่ I'm บิตสับสนเพราะคุณกล่าวว่าข้างต้นไม่ทำงาน Raydry Raydray พฤษภาคม 31 15 ที่ 20:17 ที่สมบูรณ์ขึ้นอยู่กับคุณ :) คำถามที่คุณมีคือคำตอบที่ถูกต้อง (ไม่มีการเล่นสำนวน) ที่จะทำให้ผู้คนจำนวนมากขึ้น ถ้าคุณต้องการที่จะอยู่ฉันสามารถเขียนคำตอบที่สรุปสิ่งที่เราพูดถึง ถ้าคุณต้องการยกเลิกการลบคำตอบของคุณก็ไม่มีปัญหาเลย แจ้งให้ทราบในบริบทของคำถามของคุณคุณมีเมทริกซ์ 3D และคุณต้องการหาค่าเฉลี่ยเคลื่อนที่ของแต่ละแถวเป็นอิสระจากชิ้นส่วน 3D ทั้งหมด โค้ดข้างต้นควรจะใช้ได้ (กรณีแรก) อย่างไรก็ตามแฟล็กที่ถูกต้องจะส่งกลับเมทริกซ์ที่มีขนาดถูกต้องในขอบเขตของเส้นรอบวง ดูจุดแรกของโพสต์ที่คุณเชื่อมโยงเพื่อดูรายละเอียดเพิ่มเติม โดยเฉพาะรายการ 21 รายการแรกสำหรับแต่ละแถวจะหายไปเนื่องจากค่าสถานะที่ถูกต้อง เฉพาะเมื่อคุณไปที่รายการที่ 22 ของแต่ละแถวเคอร์เนลการหมุนเวียนจะมีอยู่ภายในแถวเมตริกซ์และจากจุดที่คุณได้ผลลัพธ์ที่ถูกต้อง (ไม่มีจุดประสงค์ในการเล่นสำนวน) หาก youd ต้องการเห็นรายการเหล่านี้ที่ขอบเขตแล้วคุณจะต้องใช้ธงเดียวกันถ้าคุณต้องการรักษาเมทริกซ์ขนาดเดียวกันเป็น input หรือธงเต็ม (ซึ่งเป็นค่าเริ่มต้น) ซึ่งจะช่วยให้คุณขนาดของผลผลิตที่เริ่มต้นจาก ขอบด้านนอกที่รุนแรงที่สุด แต่จำไว้ว่าค่าเฉลี่ยเคลื่อนที่จะทำกับพวงของ zeroes และดังนั้น 21 รายการแรก wouldnt เป็นสิ่งที่คุณคาดหวังต่อไป อย่างไรก็ตามหากมีการแปลความหมายสิ่งที่คุณต้องการแล้วธงที่ถูกต้องคือสิ่งที่คุณต้องการ แต่จำไว้ว่าคุณจะมี 21 รายการที่ขาดหายไปเพื่อรองรับกรณีขอบ โดยรวมแล้วรหัสของคุณควรทำงาน แต่ต้องระวังในการตีความผลลัพธ์ BTW คุณมีเคอร์เนลที่สมมาตรและ flipping ดังนั้นควรไม่มีผลต่อผลลัพธ์ convolution สิ่งที่คุณได้ระบุไว้คือเคอร์เนลเฉลี่ยที่เคลื่อนที่โดยเฉลี่ยและการหมุนวนควรจะทำงานในการหาค่าเฉลี่ยเคลื่อนที่ตามที่คุณคาดไว้ค่าเฉลี่ยการเคลื่อนที่เป็นตัวกรองค่าเฉลี่ยเคลื่อนที่มักใช้สำหรับการให้ข้อมูลราบเรียบในที่ที่มีเสียงรบกวน ค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายไม่ได้รับการยอมรับว่าเป็นตัวกรองฟิลลิ่งอิมพัลส์ตอบ (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) และให้เห็นภาพตัวกรองที่เป็นผลลัพธ์ ลองใช้ตอนนี้ 29 กันยายน 2013 ค่าเฉลี่ยเคลื่อนที่โดย convolution ค่าเฉลี่ยเคลื่อนที่และค่าเฉลี่ยอะไรคือค่าเฉลี่ยของการเคลื่อนที่โดยใช้ convolution Moving average คือการดำเนินการง่ายๆที่ใช้เพื่อลดสัญญาณรบกวนของสัญญาณ: เรากำหนดค่าของแต่ละจุด ค่าเฉลี่ยของค่าในพื้นที่ใกล้เคียง โดยสูตร: นี่ x เป็นอินพุทและ y เป็นสัญญาณเอาต์พุตในขณะที่ขนาดของหน้าต่างเป็น w ซึ่งควรจะเป็นเลขคี่ สูตรข้างต้นอธิบายการทำงานแบบสมมาตร: ตัวอย่างจะถูกนำมาจากทั้งสองด้านของจุดจริง ด้านล่างเป็นตัวอย่างชีวิตจริง จุดที่หน้าต่างวางอยู่จริงเป็นสีแดง ค่าที่อยู่นอก x ควรเป็นศูนย์: เมื่อต้องการเล่นรอบ ๆ และดูผลกระทบของค่าเฉลี่ยเคลื่อนที่ให้ดูการสาธิตแบบโต้ตอบนี้ การคำนวณค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายมีความคล้ายคลึงกับ convolution: ในทั้งสองกรณีหน้าต่างจะถูกเลื่อนไปตามสัญญาณและองค์ประกอบต่างๆในหน้าต่างจะสรุปได้ ดังนั้นให้ลองทำสิ่งเดียวกันโดยใช้ convolution ใช้พารามิเตอร์ต่อไปนี้: ผลลัพธ์ที่ต้องการคือ: เป็นวิธีแรกให้เราลองทำสิ่งที่เราได้รับโดยการ convolving สัญญาณ x โดย k kernel ต่อไปนี้: ผลลัพธ์เป็นสามเท่ามากกว่าที่คาดไว้ นอกจากนี้ยังสามารถเห็นได้ว่าค่าที่ส่งออกคือส่วนสรุปของสามองค์ประกอบในหน้าต่าง เนื่องจากในระหว่างการบิดหน้าต่างจะเลื่อนตามองค์ประกอบทั้งหมดที่อยู่ในนั้นคูณด้วยหนึ่งและสรุปได้ดังนี้: yk 1 cdot x 1 cdot x 1 cdot x เพื่อให้ได้ค่าที่ต้องการของ y เอาท์พุทจะหารด้วย 3: โดยสูตรรวมถึงการหาร: แต่จะไม่ดีที่สุดที่จะทำส่วนในช่วง convolution นี่มาคิดโดยการจัดเรียงสมการ: ดังนั้นเราจะใช้ kernel ต่อไปนี้: ด้วยวิธีนี้เราจะ รับเอาท์พุทที่ต้องการ: โดยทั่วไป: ถ้าเราต้องการทำค่าเฉลี่ยเคลื่อนที่โดย convolution ที่มีขนาดหน้าต่าง w เราจะใช้ kernel k ดังต่อไปนี้: ฟังก์ชันง่ายๆทำค่าเฉลี่ยเคลื่อนที่คือ: การใช้ตัวอย่างคือ:
Comments
Post a Comment