การย้าย ค่าเฉลี่ย กรอง ตัวอย่าง matlab


สร้างเมื่อวันพุธที่ 08 ตุลาคม 2551 เวลา 20:04 น. แก้ไขล่าสุดในวันพฤหัสบดีที่ 14 มีนาคม 2013 เวลา 01:29 น. เขียนโดย Batuhan Osmanoglu ผู้ชม: 41465 ค่าเฉลี่ยเคลื่อนที่ใน 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 ฉันต้องคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับชุดข้อมูลภายในลูปสำหรับ ฉันต้องได้รับค่าเฉลี่ยเคลื่อนที่มากกว่า N9 วัน การคำนวณ Im array เป็นค่า 365 ค่า (M) ซึ่งเป็นค่าเฉลี่ยของชุดข้อมูลอื่น ฉันต้องการคำนวณค่าเฉลี่ยของข้อมูลโดยมีค่าเฉลี่ยเคลื่อนที่ในพล็อตเดียว ฉัน googled เล็กน้อยเกี่ยวกับการย้ายเฉลี่ยและคำสั่ง conv และพบสิ่งที่ฉันพยายามใช้ในรหัสของฉัน: ดังนั้นโดยทั่วไปฉันคำนวณค่าเฉลี่ยของฉันและพล็อตมันด้วยค่าเฉลี่ยเคลื่อนที่ (ผิด) ฉันเลือกค่า wts จากเว็บไซต์ mathworks เพื่อที่ไม่ถูกต้อง (source: mathworks. nlhelpeconmoving-average-trend-estimation. html) ปัญหาของฉันแม้ว่าเป็นที่ฉันไม่เข้าใจสิ่งที่เป็น wts นี้ ทุกคนสามารถอธิบายได้หากมีบางสิ่งที่เกี่ยวข้องกับน้ำหนักของค่า: นั่นคือไม่ถูกต้องในกรณีนี้ ค่าทั้งหมดมีน้ำหนักเท่ากัน ถ้าฉันทำผิดอย่างนี้ฉันขอความช่วยเหลือด้วยความจริงใจขอบคุณ ถาม 23 กันยายนเวลา 14.00 น. เวลา 19:05 น. การใช้ Conv คือวิธีที่ยอดเยี่ยมในการใช้ค่าเฉลี่ยเคลื่อนที่ ในรหัสที่คุณกำลังใช้ wts คือจำนวนที่คุณชั่งน้ำหนักแต่ละค่า (ตามที่คุณคาดเดา) ผลรวมของเวกเตอร์นั้นควรมีค่าเท่ากับหนึ่ง ถ้าคุณต้องการให้น้ำหนักแต่ละค่าเท่ากันและทำตัวกรองการเคลื่อนย้าย N ขนาดแล้วคุณจะต้องการใช้การใช้อาร์กิวเมนต์ที่ถูกต้องใน conv จะทำให้มีค่าน้อยกว่า Ms มากกว่าที่คุณมีใน M. ใช้เหมือนกันถ้าคุณไม่ทราบผลกระทบของ ศูนย์ padding หากคุณมีกล่องเครื่องมือในการประมวลผลสัญญาณคุณสามารถใช้ cconv ถ้าต้องการลองใช้ค่าเฉลี่ยเคลื่อนที่แบบวงกลม สิ่งที่ต้องการคุณควรอ่านเอกสาร conv และ cconv เพื่อดูข้อมูลเพิ่มเติมหากยังไม่ได้ทำ คุณสามารถใช้ตัวกรองเพื่อหาค่าเฉลี่ยในการทำงานโดยไม่ใช้ลูปสำหรับ ตัวอย่างนี้จะหาค่าเฉลี่ยการทำงานของเวกเตอร์ 16 องค์ประกอบโดยใช้ขนาดหน้าต่างเป็น 5 2) เรียบเป็นส่วนหนึ่งของ Curve Fitting Toolbox (ซึ่งมีให้บริการในกรณีส่วนใหญ่) yy smooth (y) ทำให้ข้อมูลในเวกเตอร์ของคอลัมน์เรียบ y โดยใช้ตัวกรองค่าเฉลี่ยเคลื่อนที่ ผลลัพธ์จะถูกส่งกลับในเวกเตอร์ของคอลัมน์ yy ค่าเริ่มต้นของค่าเฉลี่ยเคลื่อนที่คือ 5. ดาวน์โหลด 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. Moving - Average ตัวกรองข้อมูลการจราจรตัวอย่างนี้แสดงวิธีทำให้ข้อมูลการจราจรลื่นไหลโดยใช้ตัวกรองเฉลี่ยเคลื่อนที่พร้อมหน้าต่างเลื่อน 4 ชั่วโมง สมการความแตกต่างต่อไปนี้จะอธิบายตัวกรองที่คำนวณค่าเฉลี่ยของชั่วโมงปัจจุบันและข้อมูลที่ผ่านมาสามชั่วโมง นำเข้าข้อมูลการจราจรและกำหนดคอลัมน์แรกของการนับยานพาหนะไปยังเวกเตอร์ x สร้างตัวกรองสัมบูรณ์เวกเตอร์ คำนวณค่าเฉลี่ยเคลื่อนที่ 4 ชั่วโมงของข้อมูลและคัดลอกข้อมูลต้นฉบับและข้อมูลที่กรอง MATLAB และ Simulink เป็นเครื่องหมายการค้าจดทะเบียนของ The MathWorks, Inc. โปรดดู mathworkstrademarks สำหรับรายการเครื่องหมายการค้าอื่น ๆ ที่เป็นของ The MathWorks, Inc. ชื่อผลิตภัณฑ์หรือแบรนด์อื่น ๆ เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของเจ้าของที่เกี่ยวข้อง เลือกประเทศของคุณ

Comments