การย้าย ค่าเฉลี่ย กรอง matlab ฟังก์ชั่น
ดาวน์โหลด movAv. m (ดูที่ movAv2 - รุ่นปรับปรุงที่ช่วยให้การถ่วงน้ำหนัก) คำอธิบาย Matlab ประกอบด้วยฟังก์ชันที่เรียกว่า movavg และ tsmovavg (ค่าเฉลี่ยเคลื่อนที่แบบเวลาโดยเฉลี่ย) ในกล่องเครื่องมือทางการเงิน movAv ได้รับการออกแบบมาเพื่อทำซ้ำฟังก์ชันพื้นฐานของไฟล์เหล่านี้ โค้ดที่นี่เป็นตัวอย่างที่ดีในการจัดการดัชนีภายในลูปซึ่งอาจทำให้เกิดความสับสนในการเริ่มต้นด้วย Ive จงใจเก็บรหัสสั้นและง่ายเพื่อให้ขั้นตอนนี้ชัดเจน movAv มีค่าเฉลี่ยเคลื่อนที่โดยเฉลี่ยที่สามารถใช้เพื่อกู้คืนข้อมูลที่มีเสียงดังได้ในบางสถานการณ์ มันทำงานโดยการใช้ค่าเฉลี่ยของอินพุท (y) ในหน้าต่างเวลาเลื่อนซึ่งมีขนาดระบุโดย n n ที่มีขนาดใหญ่มากยิ่งขึ้นจำนวนของการทำให้ราบเรียบผลของ n สัมพันธ์กับความยาวของเวคเตอร์อินพุต y และมีประสิทธิภาพ (ดีจัดเรียง) สร้างตัวกรองความถี่ต่ำ - ดูตัวอย่างและส่วนพิจารณา เนื่องจากจำนวนการทำให้ราบเรียบที่ให้มาโดยแต่ละค่าของ n สัมพันธ์กับความยาวของเวกเตอร์อินพุตค่าของค่าที่ทดสอบจะแตกต่างกันไปเพื่อดูว่าอะไรเหมาะสม จำไว้ว่าจุด n จะสูญหายไปในแต่ละค่าเฉลี่ยหาก n เท่ากับ 100 จุดแรกของอินพุทเวกเตอร์ dont มีข้อมูลเพียงพอสำหรับค่าเฉลี่ย 100pt ซึ่งสามารถหลีกเลี่ยงได้โดยการวางซ้อนค่าเฉลี่ยตัวอย่างเช่นโค้ดและกราฟด้านล่างจะเปรียบเทียบค่าเฉลี่ยของหน้าต่างความยาวที่ต่างกัน แจ้งให้ทราบว่าเปรียบเทียบ 1010pt กับค่าเฉลี่ย 20pt เพียงอย่างเดียว ในทั้งสองกรณี 20 จุดของข้อมูลจะสูญหายไปทั้งหมด สร้าง xaxis x1: 0.01: 5 ก่อให้เกิด noise noise เกิดสัญญาณรบกวน 4 noise repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) noise reshape (noise, 1, noise) noiseReps) สร้าง ydata noise yexp (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt. 10noise (1: length (x)) รายละเอียดขั้นสูง: y2 movAv y6 movAv (y, 100) 100 pt พล็อตตัวเลขพล็อต (x, y, y2, y3, y4, y5, y6) (ข้อมูลดิบ, 10pt เฉลี่ยเคลื่อนที่, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel y) title (การเปรียบเทียบค่าเฉลี่ยเคลื่อนที่) movAv. m code run-through function output movAv (y, n) บรรทัดแรกกำหนดชื่อฟังก์ชันอินพุตและเอาต์พุต อินพุท x ควรเป็นเวกเตอร์ของข้อมูลที่จะใช้ค่าเฉลี่ยเมื่อ n ควรเป็นจำนวนจุดที่จะทำค่าเฉลี่ยมากกว่าเอาท์พุทจะมีข้อมูลเฉลี่ยที่ส่งกลับโดยฟังก์ชัน หาจุดกึ่งกลางของ n midPoint round (n2) งานหลักของฟังก์ชันจะทำในลูป for แต่ก่อนที่จะเริ่มเตรียมสองสิ่ง ประการแรกเอาต์พุตถูกจัดสรรล่วงหน้าเป็น NaN ซึ่งทำหน้าที่สองประการ preallocation แรกคือการปฏิบัติที่ดีโดยทั่วไปเนื่องจากลดการเล่นกลของหน่วยความจำ Matlab ต้องทำประการที่สองทำให้ง่ายในการวางข้อมูลเฉลี่ยเป็นเอาต์พุตขนาดเดียวกับเวกเตอร์อินพุท ซึ่งหมายความว่า xaxis เดียวกันสามารถใช้งานได้ในภายหลังทั้งสองแบบซึ่งเหมาะสำหรับการวางแผนหรือสามารถถอด NaN ออกได้ในหนึ่งบรรทัดของรหัส (เอาท์พุทเอาต์พุต (midpoint แบบแปรผันจะใช้เพื่อจัดตำแหน่งข้อมูลในเวกเตอร์การส่งออกถ้า n 10, 10 จุดจะหายไปเนื่องจากสำหรับ 9 จุดแรกของเวกเตอร์อินพุตมีข้อมูลไม่เพียงพอที่จะใช้ค่าเฉลี่ย 10 จุดเนื่องจากเอาท์พุทจะสั้นกว่าข้อมูลอินพุตจะต้องมีการจัดตำแหน่งอย่างถูกต้อง midPoint จะ ถูกนำมาใช้เพื่อให้จำนวนข้อมูลที่เท่ากันจะหายไปเมื่อเริ่มต้นและสิ้นสุดและอินพุตจะถูกจัดเก็บให้สอดคล้องกับผลลัพธ์โดยบัฟเฟอร์ NaN ที่สร้างขึ้นเมื่อตั้งค่าเอาต์พุตล่วงหน้าสำหรับความยาว 1: (y) - n ค้นหาช่วงของดัชนีโดยเฉลี่ย over (a: b) ห้ามคำนวณหาค่าเฉลี่ยเอาท์พุท (amidPoint) mean (y (a: b)) end ในลูปสำหรับตัวมันเองค่าเฉลี่ยจะถูกยึดเอาส่วนที่ต่อเนื่องกันของ input ห่วงจะทำงานสำหรับ a. ซึ่งเป็น หมายถึง 1 ถึงความยาวของอินพุท (y) ลบข้อมูลที่จะสูญหายไป (n) ถ้าอินพุทมีค่าเท่ากับ 100 จุด ng และ n คือ 10 ลูปจะทำงานจาก (a) 1 ถึง 90 ซึ่งหมายถึงมีดัชนีแรกของกลุ่มที่จะได้รับค่าเฉลี่ย ดัชนีที่สอง (b) เป็นเพียง -1 ดังนั้นในการทำซ้ำครั้งแรก a1 n10 ดังนั้นข 11-1 10. ค่าเฉลี่ยแรกจะได้รับมากกว่า y (a: b) หรือ x (1:10) ค่าเฉลี่ยของกลุ่มนี้ซึ่งเป็นค่าเดียวจะถูกเก็บไว้ในผลลัพธ์ที่ดัชนี amidPoint หรือ 156 เมื่อทำซ้ำที่สอง a2 b 210-1 11 ดังนั้นค่าเฉลี่ยจะถูกนำไป x (2:11) และเก็บไว้ในเอาต์พุต (7) เมื่อทำซ้ำครั้งสุดท้ายของลูปสำหรับอินพุทความยาว 100, a91 b 9010-1 100 ดังนั้นค่าเฉลี่ยจะถูกนำมาใช้ x (91: 100) และเก็บไว้ในเอาต์พุต (95) ใบนี้ให้ผลรวม n (10) ค่า NaN ที่ดัชนี (1: 5) และ (96: 100) ตัวอย่างและข้อควรคำนึงการย้ายค่าเฉลี่ยจะเป็นประโยชน์ในบางสถานการณ์ แต่ก็ไม่ใช่ทางเลือกที่ดีเสมอไป ต่อไปนี้คือตัวอย่างสองส่วนที่พวกเขาไม่จำเป็นต้องมีประสิทธิภาพสูงสุด การปรับเทียบไมโครโฟนชุดข้อมูลนี้แสดงถึงระดับของแต่ละความถี่ที่ผลิตโดยลำโพงและบันทึกโดยไมโครโฟนโดยมีการตอบสนองเชิงเส้นที่เป็นที่รู้จัก เอาท์พุทของลำโพงจะแตกต่างกันไปตามความถี่ แต่เราสามารถแก้ไขรูปแบบนี้ได้ด้วยข้อมูลการปรับเทียบ - เอาท์พุทสามารถปรับระดับให้เหมาะสมกับความผันผวนของการสอบเทียบได้ สังเกตว่าข้อมูลดิบมีเสียงดัง - นั่นหมายความว่าการเปลี่ยนแปลงเล็กน้อยในความถี่ดูเหมือนจะต้องมีการเปลี่ยนแปลงระดับที่มากผิดปกติ นี้สมจริงหรือเป็นผลิตภัณฑ์ของสภาพแวดล้อมการบันทึกที่สมเหตุสมผลในกรณีนี้เพื่อใช้ค่าเฉลี่ยเคลื่อนที่ที่คลี่ออกโค้งระดับความสูงเพื่อให้เส้นโค้งการปรับเทียบที่น้อยผิดปกติ แต่นี่ไม่ใช่เหตุผลที่ดีที่สุดในตัวอย่างนี้ข้อมูลเพิ่มเติมจะดีกว่า - การสอบเทียบหลายครั้งทำงานร่วมกันโดยเฉลี่ยจะทำลายเสียงในระบบ (ตราบเท่าที่มีการสุ่ม) และให้เส้นโค้งที่มีรายละเอียดน้อยลง ค่าเฉลี่ยเคลื่อนที่สามารถประมาณค่านี้ได้เท่านั้นและอาจลบส่วนที่ลดลงและยอดที่สูงขึ้นออกจากเส้นโค้งที่มีอยู่จริง คลื่นไซน์การใช้ค่าเฉลี่ยเคลื่อนที่บนคลื่นซายน์ไฮไลต์สองจุด: ประเด็นทั่วไปในการเลือกคะแนนที่เหมาะสมเพื่อให้มีค่าเฉลี่ยมากกว่า ง่าย แต่มีวิธีการวิเคราะห์สัญญาณที่มีประสิทธิภาพมากขึ้นกว่าค่าเฉลี่ยสัญญาณสั่นในโดเมนเวลา ในกราฟนี้คลื่นไซน์ดั้งเดิมจะถูกวาดด้วยสีฟ้า มีการเพิ่มเสียงรบกวนและวางแผนเป็นเส้นโค้งสีส้ม ค่าเฉลี่ยเคลื่อนที่จะถูกดำเนินการที่จุดต่างกันเพื่อดูว่าคลื่นต้นฉบับสามารถกู้คืนได้หรือไม่ 5 และ 10 จุดให้ผลลัพธ์ที่สมเหตุสมผล แต่อย่าเอาเสียงออกทั้งหมดซึ่งเป็นจุดเริ่มต้นของการสูญเสียรายละเอียดแอมพลิจูดมากขึ้นเมื่อค่าเฉลี่ยขยายไปในช่วงต่างๆ (จำ wave oscilates รอบศูนย์และ -1 หมายถึง 0) อีกทางเลือกหนึ่งคือการสร้างตัวกรองสัญญาณลอมพนด์ต่ำกว่าที่สามารถนำมาประยุกต์ใช้กับสัญญาณในโดเมนความถี่ได้ ฉันจะไม่ไปลงในรายละเอียดตามที่ไปเกินขอบเขตของบทความนี้ แต่เป็นเสียงเป็นความถี่สูงกว่าคลื่นความถี่พื้นฐานก็จะค่อนข้างง่ายในกรณีนี้เพื่อสร้างตัวกรอง lowpass กว่าจะลบความถี่สูง noise. Created เมื่อวันพุธที่ 08 ตุลาคม 2551 เวลา 20:04 น. แก้ไขล่าสุดในวันพฤหัสบดีที่ 14 มีนาคม 2013 เวลา 01:29 น. เขียนโดย Batuhan Osmanoglu ผู้ชม: 41486 Moving Average ใน Matlab บ่อยครั้งฉันพบว่าตัวเองต้องใช้ข้อมูลเฉลี่ยที่ฉันต้องลดเสียง นิดหน่อย. ฉันเขียนฟังก์ชันคู่ที่จะทำสิ่งที่ฉันต้องการ แต่ MATLABs สร้างขึ้นในฟังก์ชั่นกรองทำงานได้ดีเช่นกัน ที่นี่ฉันเขียนเกี่ยวกับ 1D และ 2D เฉลี่ยของข้อมูล สามารถใช้ตัวกรองแบบ 1D ได้โดยใช้ตัวกรอง ฟังก์ชั่นการกรองจำเป็นต้องใช้พารามิเตอร์ป้อนข้อมูลอย่างน้อยสามตัว ได้แก่ ค่าสัมประสิทธิ์การนับสำหรับตัวกรอง (b) ค่าสัมประสิทธิ์ตัวหารสำหรับตัวกรอง (a) และข้อมูล (X) แน่นอน ตัวกรองค่าเฉลี่ยที่ใช้งานได้สามารถกำหนดได้โดย: สำหรับข้อมูล 2D เราสามารถใช้ฟังก์ชัน Matlabs filter2 ได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของตัวกรองคุณสามารถพิมพ์ได้: นี่คือการใช้ตัวกรองเฉลี่ย 16 ถึง 16 ที่รวดเร็วและสกปรก ขั้นแรกเราต้องกำหนดตัวกรอง เนื่องจากสิ่งที่เราต้องการคือการมีส่วนร่วมเท่าเทียมกันของเพื่อนบ้านทั้งหมดเราจึงสามารถใช้ฟังก์ชันเหล่านี้ได้ เราแบ่งทุกอย่างด้วย 256 (1616) เนื่องจากเราไม่ต้องการเปลี่ยนระดับทั่วไป (amplitude) ของสัญญาณ ในการใช้ตัวกรองเราสามารถพูดได้ว่าด้านล่างนี้เป็นผลลัพธ์ของระยะ interferogram ของ SAR ในกรณีนี้ Range อยู่ในแกน Y และ Azimuth จะถูกแมปกับแกน X ตัวกรองมีความกว้าง 4 พิกเซลในช่วงและกว้าง 16 พิกเซลใน Azimuth ฉันกำลังพยายามดำเนินการโครงการกำหนด MATLAB ด้วยคำถามต่อไปนี้: เขียนฟังก์ชันที่เรียกว่า movingaverage ซึ่งใช้สเกลารเรียก x เป็นอาร์กิวเมนต์ขาเข้าและส่งกลับค่าสเกลาเรส ฟังก์ชันใช้บัฟเฟอร์เพื่อเก็บข้อมูลอินพุตก่อนหน้าและบัฟเฟอร์สามารถเก็บข้อมูลได้สูงสุด 25 อินพุท โดยเฉพาะฟังก์ชันจะต้องบันทึกข้อมูลอินพุต 25 รายการล่าสุดในเวกเตอร์ (บัฟเฟอร์) แต่ละครั้งที่เรียกใช้ฟังก์ชันจะคัดลอกอาร์กิวเมนต์อินพุตเป็นองค์ประกอบของบัฟเฟอร์ หากมีอินพุตอยู่ในบัฟเฟอร์จำนวน 25 รายการจะลบองค์ประกอบที่เก่าที่สุดและบันทึกข้อมูลปัจจุบันไว้ในบัฟเฟอร์ หลังจากเก็บข้อมูลอินพุตไว้ในบัฟเฟอร์แล้วจะส่งกลับค่าเฉลี่ยขององค์ประกอบทั้งหมดในบัฟเฟอร์ การแก้ปัญหาที่ฉันให้มีดังต่อไปนี้: ตามเกรดอัตโนมัติฟังก์ชันของฉันทำงานได้อย่างถูกต้องเมื่อค่า 1-50 กำลังผ่านไปเรื่อย ๆ แต่จะล้มเหลวเมื่อค่าของคลื่นไซน์ที่มีเสียงดังจะผ่านไปเรื่อย ๆ (ซึ่งฉันได้รับแจ้งว่าอาจเป็นเพราะบางส่วน ประเภทของข้อผิดพลาดรอบ) ฉันจะขอบคุณถ้ามีคุณสามารถให้คำแนะนำบางอย่างเกี่ยวกับขั้นตอนข้อผิดพลาดที่เป็นไปได้ในรหัสของฉัน (ต่อท้าย) ขอบคุณใน advanceMoving Average Function resultsmovingmean (ข้อมูลหน้าต่างสลัวตัวเลือก) คำนวณค่าเฉลี่ยเคลื่อนที่ที่ศูนย์กลางของข้อมูลเมทริกซ์โดยใช้ขนาดหน้าต่างที่ระบุในหน้าต่างในมิติสลัวโดยใช้อัลกอริทึมที่ระบุไว้ในตัวเลือก Dim และ option เป็นอินพุตตัวเลือกและจะใช้ค่าเริ่มต้นเป็น 1 Dim และ option optional inputs สามารถข้ามได้ทั้งหมดหรือสามารถแทนที่ด้วย a. ตัวอย่างเช่น movingmean (data, window) จะให้ผลลัพธ์เช่น movingmean (ข้อมูลหน้าต่าง 1,1) หรือ movingmean (ข้อมูลหน้าต่าง ,, 1) ข้อมูลเมทริกซ์ขนาดและมิติข้อมูลจะถูก จำกัด ด้วยขนาดเมตริกซ์สูงสุดสำหรับแพลตฟอร์มของคุณ หน้าต่างต้องเป็นจำนวนเต็มและควรเป็นเลขคี่ ถ้าหน้าต่างเป็นได้แล้วจะมีการปัดเศษลงไปที่เลขคี่ที่ต่ำกว่าถัดไป ฟังก์ชันจะคำนวณค่าเฉลี่ยเคลื่อนที่ที่รวมจุดกลางและ (window-1) 2 องค์ประกอบก่อนและหลังในมิติข้อมูลที่ระบุ ที่ขอบของเมทริกซ์จำนวนองค์ประกอบก่อนหรือหลังจะลดลงเพื่อให้ขนาดหน้าต่างที่เกิดขึ้นจริงน้อยกว่าหน้าต่างที่ระบุ ฟังก์ชันถูกแบ่งออกเป็นสองส่วนคืออัลกอริธึม 1d-2d และอัลกอริทึม 3 มิติ วิธีนี้ทำเพื่อเพิ่มประสิทธิภาพความเร็วในการแก้ปัญหาโดยเฉพาะในเมทริกซ์ขนาดเล็ก (เช่น 1000 x 1) นอกจากนี้อัลกอริทึมต่างๆในปัญหา 1d-2d และ 3d มีให้เช่นเดียวกับในบางกรณีอัลกอริทึมเริ่มต้นไม่เร็วที่สุด โดยทั่วไปจะเกิดขึ้นเมื่อเมทริกซ์กว้างมาก (เช่น 100 x 100000 หรือ 10 x 1000 x 1000) และค่าเฉลี่ยเคลื่อนที่จะคำนวณในมิติที่สั้นกว่า ขนาดที่อัลกอริทึมดีฟอลต์จะทำงานช้าลงจะขึ้นอยู่กับคอมพิวเตอร์ MATLAB 7.8 (R2009a) แท็กสำหรับไฟล์นี้โปรดล็อกอินเพื่อแท็กไฟล์ กรุณาเข้าสู่ระบบเพื่อเพิ่มความคิดเห็นหรือให้คะแนน ข้อคิดเห็นและการให้คะแนน (8) ฟังก์ชั่นเกี่ยวข้องกับการสิ้นสุดโดยการตัดส่วนท้ายหรือส่วนนำของหน้าต่างและเปลี่ยนเป็นค่าเฉลี่ยเคลื่อนที่ชั้นนำหรือต่อท้ายแทนที่จะเป็นจุดศูนย์กลาง ไปกับตัวอย่างที่คุณให้ไว้ในความคิดเห็นของคุณถ้าขนาดหน้าต่างอยู่ที่ 3 จากนั้นตรงกลาง 1 ฟังก์ชันค่าเฉลี่ยข้อมูลจากจุด 1 และ 2 ที่จุดศูนย์ 2 จุด 1, 2 และ 3 จะเฉลี่ยที่จุดศูนย์กลาง 9 จุดที่ 8, 9 และ 10 เป็นค่าเฉลี่ยและอยู่ที่ศูนย์ 10 (สมมุติว่าเวกเตอร์มี 10 รายการ) คะแนนเฉลี่ย 9 และ 10 movmean จัดการกับปลายไม่ว่าจะเริ่มต้นด้วยขนาดหน้าต่างที่ครอบคลุมเฉพาะจุด 1 ที่ 1 แล้ว 3 จุดที่จุด 2 แล้วเพิ่มขึ้นในขนาดหน้าต่างจนกว่าขนาดหน้าต่างที่ระบุไว้ในการป้อนข้อมูลฟังก์ชั่นขอบคุณ ดีและเรียบง่าย ขอขอบคุณ. งานที่ดีเป็นประโยชน์อย่างที่ Stephan Wolf กล่าว สิ่งที่ฉันกำลังมองหา ค่าเฉลี่ยเคลื่อนที่ที่ศูนย์กลางซึ่งสามารถทำงานได้ในพล็อตมากกว่าความกว้างทั้งหมดโดยไม่ต้องมองหาขนาดหน้าต่างของตัวกรองและย้ายจุดเริ่มต้น เร่งการก้าวของวิศวกรรมและวิทยาศาสตร์ MathWorks เป็นผู้นำด้านการพัฒนาซอฟต์แวร์คอมพิวเตอร์สำหรับวิศวกรและนักวิทยาศาสตร์
Comments
Post a Comment