5 จุด เฉลี่ยเคลื่อนที่ กรอง Matlab


การตอบสนองความถี่ของตัวกรองเฉลี่ยที่ใช้งานการตอบสนองความถี่ของระบบ LTI คือ DTFT ของการตอบสนองอิมพัลส์การตอบสนองต่อแรงกระตุ้นของค่าเฉลี่ยเคลื่อนที่แบบแอลเอสมีค่าเนื่องจากตัวกรองค่าเฉลี่ยเคลื่อนที่เป็น FIR การตอบสนองต่อความถี่ลดลงเป็นจำนวน จำกัด ที่แน่นอน สามารถใช้ตัวตนที่มีประโยชน์มากในการเขียนการตอบสนองตามความถี่ที่เราได้ให้ 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, BerkeleyUsing 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. วิธีทั่วไปในการรับค่าเฉลี่ยเคลื่อนที่จะใช้เหมือนกัน: แต่ที่ไม่ได้มีลักษณะเหมือนที่คุณต้องการ MOVINGAVERAGE (X, F) ทำให้ข้อมูลเวกเตอร์ X มีความนุ่มนวลด้วยหน้าต่าง boxcar ขนาด 2F1 นั่นคือโดยการหาค่าเฉลี่ยของแต่ละองค์ประกอบด้วยองค์ประกอบ F ที่ ด้านขวาและองค์ประกอบ F ด้านซ้าย องค์ประกอบที่รุนแรงยังมีค่าเฉลี่ย แต่มีข้อมูลน้อยกว่าอย่างเห็นได้ชัด ทิ้งขอบไว้ วิธีการนี้ทำได้เร็วจริงๆ MOVINGAVERAGE2 (X, M, N) จะทำให้เมทริกซ์ X มีขนาดมหึมาด้วยขนาดของกล่อง (2M1) x (2N1) โดยใช้ค่าเฉลี่ยขององค์ประกอบแต่ละส่วนที่มีองค์ประกอบโดยรอบอยู่ในกล่องที่ตรงกลาง หนึ่งนี้ยังเร็วมาก องค์ประกอบที่ขอบมีค่าเฉลี่ยมากเกินไป แต่มุมจะเหลือไว้ NANMOVINGAVERAGE (X, F) หรือ NANMOVINGAVERAGE (X, F, 1) ยอมรับองค์ประกอบของ NaN ในเวกเตอร์ X ซึ่งจะสอดแทรกองค์ประกอบของ NaN ที่ล้อมรอบด้วยองค์ประกอบตัวเลข NANMOVINGAVERAGE2 (X, M, N) หรือ NANMOVINGAVERAGE2 (X, M, N, 1) ยอมรับองค์ประกอบ NaN ในเมทริกซิ่ง X จะแทรกแซงองค์ประกอบ NaN เหล่านั้นที่ล้อมรอบด้วยองค์ประกอบตัวเลข การเติม GAP ​​ใหม่แบบเรียบง่าย: SMOOTHMAVERAGE (X, M, N, IND) ทำให้เรียบโดยเฉพาะองค์ประกอบ X (IND) ไม่สนใจ NaNs ข้อมูลนี้สามารถนำไปใช้กับข้อมูลอื่น ๆ ของ GAPS แต่ละไฟล์ M มีตัวอย่าง (ดูภาพหน้าจอ) ตรวจสอบด้านล่างเพื่อดู CHANGES ใน v3.1 หมายเหตุ: ดูรหัส 2 มิติจาก MOVINGAVERAGE2.M (และ RUNMEAN สำหรับคำแนะนำบางประการ) บางคนสามารถสร้าง N-dimensional MA ได้โดยง่าย คุณ MATLAB 7.5 (R2007b) MATLAB แท็กเส้นทางการค้นหาสำหรับไฟล์นี้โปรดล็อกอินเพื่อแท็กไฟล์ กรุณาเข้าสู่ระบบเพื่อเพิ่มความคิดเห็นหรือให้คะแนน ฉันต้องการจะได้รับฟังก์ชั่นค่าเฉลี่ยเคลื่อนที่ที่เกี่ยวข้องกับค่าน่านคาร์ลอฉันชอบการเคลื่อนไหวของคุณใช้งานง่ายมาก ฉันมีข้อมูลที่มีช่องว่างขนาดเล็กและใหญ่และฉันไม่ต้องการกรองช่องว่าง ฉันสามารถแบ่งเวกเตอร์ที่แต่ละช่องว่างได้ แต่นั่นอาจหมายถึงการทำงาน นี้เป็นประโยชน์มากสำหรับฉัน (ส่วนใหญ่สำหรับการวางแผน) เรียนทั้งหมด Ix27m เกี่ยวกับการเติมช่องว่างในการวัดสภาพอากาศที่ NaN ควรจะเต็มไปตามหน้าต่างเวลาหลายวัน (ชั่วโมงละแวกใกล้เคียงเช่นหลาย วัน) ตัวอย่างเช่น NaN หนึ่งตอน 5 โมงเย็นจะถูกแทนที่ด้วยค่าเฉลี่ยในชั่วโมงละแวกใกล้เคียงหลายวัน (letx27s พูด 4, 5 และ 6pm ของพื้นที่ใกล้เคียง 5 วัน) นี่คือกระดูกของคำถามที่ฉันชอบจัดการกับค่า rand (1,1000) x27 fakeNaN floor (rand (1,300) x271000) ค่า (fakeNaN) NaN สำหรับ i 1 : ค่าความยาว (ค่า) n 24 i (1: 5) havingnanindex find (isnan (ค่า) newvalues ​​nanmean (ค่า (havingnanindex n-1: havingnanindexn1)):: บางอย่างเช่นว่า: ถ้าคุณมีคำแนะนำหรือคำแนะนำโปรด รู้สึกอิสระที่จะแจ้งให้เราทราบ ขอบคุณ, ไมเคิลสวัสดีคาร์ลอฉันได้ส่งอีเมลเกี่ยวกับความยากลำบากใน programmation ของความคุ้มครองการเคลื่อนไหว recursive คุณมีความคิดเกี่ยวกับปัญหานี้ช่วยขอบคุณโดยล่วงหน้าเอ็ด postprocessing โพรของสัญญาณสเปคโทรสมีประโยชน์มากแน่นอน. Carlos Adrian Vargas Aguilera สามัญ Aslak คุณกำลังค้นหา FLEAS แทน BUGS แต่โอเคผู้ใช้: ระวังของ OUTLIERS และวิธีที่ใหญ่เมื่อใช้วิธี CUMSUM runmean ใช้ค่อนข้าง: NDNANFILTER :) Hi Carlos ฉันหมายถึงมันเป็นคำวิจารณ์ที่สร้างสรรค์ ประเด็นคือข้อผิดพลาดไม่จำเป็นหลีกเลี่ยงได้ง่ายและไม่มีประโยชน์ความเร็ว คุณมีสิทธิที่ในตัวอย่างเฉพาะข้อผิดพลาดไม่ใหญ่มาก (แม้ว่าคุณจะทำผิดพลาดของการเปรียบเทียบกับค่าเฉลี่ยมากกว่าค่าเบี่ยงเบนมาตรฐาน) อย่างไรก็ตามเนื่องจากข้อผิดพลาดมีขนาดเล็กในกรณีดังกล่าวไม่ได้หมายความว่าสำหรับชุดข้อมูลทั้งหมด ลองใช้ตัวอย่างเช่น: m3 n100000 xrandn (n, 1) x (1) 1e100 ปัญหาคือค่าผิดปกติทำให้เกิดข้อผิดพลาดมากในชุดเรียบทั้งหมดและไม่เพียง แต่ภายในหน้าต่าง ฉันลืมการจัดอันดับสำหรับตัวอย่าง Aslakx27s (1 ดาว): เขากำลังเปรียบเทียบข้อผิดพลาดของความแม่นยำ 1e-90.000000001 และ 1e-13 eps มี 10,000 เท่ามากกว่า แต่สำหรับค่าที่มีค่าเฉลี่ย 1,000 ซึ่งมากกว่า 1x27000,000x27000,000 มากกว่าข้อผิดพลาดที่มากขึ้น นั่นคือข้อผิดพลาดน้อยมาก isnx27t มันรหัสดี แต่ เคล็ดลับ cumsum เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่สามารถส่งผลให้เกิดข้อผิดพลาดที่มีขนาดใหญ่ผิดปกติภายใต้เงื่อนไขบางประการ: ค่าเฉลี่ยแตกต่างจากศูนย์มากและชุดยาวมาก นี่คือการทดสอบขนาดเล็กที่แสดงให้เห็นปัญหาโดยใช้วิธีการที่แตกต่างกัน 3 วิธีในการคำนวณค่าเฉลี่ยเคลื่อนที่ แสดงว่าเมธอด x27cumsumx27 มีข้อผิดพลาดมากกว่าข้อผิดพลาดจากเมธอดตัวกรองมากกว่า 10000 เท่า ไม่มีความแตกต่างความเร็วจริง m10 n300000 xrandn (n, 1) 1000 ตัวอย่างเช่นความดันบรรยากาศ (ii) หมายถึง (x (ii (0: m-1))) end slowtimetoc tic c0cumsum (x) c (c (m 1: 1)) สำหรับ ii1: ความยาว (s) (cs) .2)) tic fltones (m, 1) m ffilter2 (flt, x, x27validx27) filtertimetoc filtererrorsqrt (ค่าเฉลี่ย ((fs)) (c) ค่าความเป็นกรด - ด่าง ตรวจสอบหมายเลข IO และข้อผิดพลาด vectorized รวดเร็ว Carlos Adrin วาร์กัส Aguilera พบข้อบกพร่องที่ไม่เป็นอันตรายใน MOVINGAVERAGE บรรทัดที่ 75: เครื่องหมายจุลภาคพิเศษในคำเตือนและ RK: อันที่จริงแล้วข้อ จำกัด ของค่าเฉลี่ยเคลื่อนที่นี้ แต่ปัญหาเกี่ยวกับขอบเป็นเรื่องปกติในทฤษฎีการกรอง ผู้เขียนให้ความคิดแก่เราและคุณ BTW: การเติมข้อมูลแบบ GAP เป็นสิ่งที่ฉันกำลังมองหาอยู่ ขอบคุณ Carlos Adrin Vargas Aguilera สวัสดีขอบคุณแซมขอบคุณสำหรับความคิดเห็นของคุณ ฉันไม่มีปัญหากับตัวอย่างเช่นคุณควรจะได้ภาพหน้าจอข้างต้น (ไม่มีรู) บางที itx27s ปล่อย MATLAB ของคุณ แต่โค้ดเป็นเรื่องง่ายและควรทำงานกับผู้อื่น เกี่ยวกับ F เพื่อให้ได้ค่าเฉลี่ยศูนย์กลางรอบ ๆ องค์ประกอบจำนวนองค์ประกอบโดยเฉลี่ยควรเป็นเลขคี่ดังนั้น 2 F1 และด้วยวิธีนี้ F คือความกว้างครึ่งหนึ่งของหน้าต่าง (ตรวจสอบคำอธิบายด้านบน) คล้ายกันสำหรับ m, n บน 2D สวัสดีคาร์ลอสขอบคุณมากสำหรับโค้ด MATLAB ที่น่าสนใจของคุณ ฉันมีข้อสงสัยเกี่ยวกับขนาดของหน้าต่างในค่าเฉลี่ยเคลื่อนที่ 1D ขนาดของหน้าต่างคือ x272F1x27 คุณสามารถช่วยบอกฉันว่า x27Fx27 ยืนสำหรับนอกจากนี้ฉันได้พยายามที่จะได้รับค่าเฉลี่ยเคลื่อนที่ 2D เพื่อทำงานร่วมกับตัวอย่างของคุณให้ฉัน couldnx27t รับไปทำงาน

Comments

Popular Posts