ฉันกำลังทำงานบนหุ่นยนต์เคลื่อนที่ที่ควบคุมผ่านตัวเชื่อมไร้สาย 2.4 GHz ตัวรับสัญญาณจะเชื่อมต่อกับ Arduino Uno ซึ่งทำหน้าที่เป็นตัวควบคุมหลักในตัว ช่องรับสัญญาณที่สำคัญที่สุด (และหลัก) ที่มาจากเครื่องรับสัญญาณจะสร้างสัญญาณรบกวนมากซึ่งจะนำไปสู่การเปลี่ยนแปลงเล็กน้อยในส่วนขาออกของตัวกระตุ้นแม้ว่าจะไม่จำเป็นก็ตาม ฉันกำลังมองหาห้องสมุดที่สามารถดำเนินการได้อย่างราบรื่น มีห้องสมุดใด ๆ ที่ทำให้เรียบสัญญาณสำหรับ Arduino (Uno) ถาม 16 ก. พ. 14 เวลา 13:57 น. ฉันคิดว่าฉันเห็นสัญญาณรบกวนที่มีสัญญาณรบกวน 1 ชุดในสัญญาณรบกวนของคุณ ตัวกรองค่ามัธยฐานจะดีกว่าในการกำจัดเสียงรบกวนของตัวอยางตัวอยางหนึ่งชุดกวาตัวกรองเชิงเสน (ดีกว่าตัวกรองความถี่ต่ำใด ๆ ค่าเฉลี่ยเคลื่อนที่ค่าเฉลี่ยถ่วงน้ำหนัก ฯลฯ ในแง่ของเวลาในการตอบสนองและความสามารถในการละเว้นค่าความไม่แน่นอนของเสียงรบกวนตัวอย่างเดียว) มีในความเป็นจริงหลายห้องสมุดเรียบเรียงสัญญาณสำหรับ Arduino ซึ่งหลายแห่งรวมถึงตัวกรองมัธยฐาน ห้องสมุดที่ให้ความนุ่มนวลของสัญญาณที่ arduino. cc: ห้องสมุดที่ให้ความนุ่มนวลของสัญญาณที่ github: จะมีลักษณะคล้ายกับงานนี้ในหุ่นยนต์ของคุณ (ค่ามัธยฐาน -3 ต้องใช้พลังงาน CPU น้อยมากและรวดเร็ว): คุณสามารถกรองแบบดิจิทัลโดยใช้ค่าต่ำ pass filter: เปลี่ยน 0.99 เพื่อเปลี่ยนความถี่ตัด (ใกล้ 1.0 เป็นความถี่ต่ำ) การแสดงออกที่แท้จริงของค่านั้นคือ exp (-2piffs) โดยที่ f คือความถี่ cutoff ที่คุณต้องการและ fs คือความถี่ที่มีการสุ่มตัวอย่างข้อมูล ตัวกรองดิจิทัลชนิดอื่นคือตัวกรองเหตุการณ์ ทำงานได้ดีกับข้อมูลที่มีความผิดปกติเช่น 9,9,8,10,9,25,9 ตัวกรองกิจกรรมจะส่งกลับค่าที่พบบ่อยที่สุด สถิตินี่คือโหมด ค่าเฉลี่ยสถิติเช่น Mean, Mode เป็นต้นสามารถคำนวณได้โดยใช้ Arduino Average Library ตัวอย่างที่นำมาจากหน้าห้องสมุด Arduino อ้างถึง: หนึ่งในโปรแกรมหลักสำหรับคณะกรรมการ Arduino กำลังอ่านและบันทึกข้อมูลเซ็นเซอร์ ตัวอย่างเช่นจอภาพหนึ่งจะดันทุกวินาทีของวัน เนื่องจากอัตราการสุ่มตัวอย่างสูงมักจะสร้างความตึงเครียดในกราฟเราต้องการวัดค่าเฉลี่ยด้วยเช่นกัน เนื่องจากการวัดไม่คงที่ในเวลาที่เราต้องใช้บ่อยๆคือค่าเฉลี่ยในการทำงาน นี่เป็นค่าเฉลี่ยของช่วงเวลาหนึ่งและมีค่ามากเมื่อทำการวิเคราะห์แนวโน้ม รูปแบบที่เรียบง่ายของค่าเฉลี่ยในการทำงานสามารถทำได้โดยโค้ดที่สร้างขึ้นเมื่อค่าเฉลี่ยที่ทำงานก่อนหน้านี้: ถ้าหนึ่งไม่ต้องการใช้คณิตศาสตร์แบบลอยตัว - เนื่องจากจะทำให้หน่วยความจำและลดความเร็ว - หนึ่งสามารถทำเหมือนกันได้อย่างสมบูรณ์ในโดเมนจำนวนเต็ม ส่วนที่ 256 ในโค้ดตัวอย่างคือ shift-right 8 ซึ่งเร็วกว่าการบอกหารด้วย 100 นี่เป็นความจริงสำหรับทุกๆอำนาจของ 2 เป็น divider และหนึ่งเท่านั้นต้องดูแล sum of weigths เท่ากับพลังของ 2 และแน่นอนว่าควรระวังไม่ให้มี overflow ปานกลาง (พิจารณาใช้ unsigned long) ถ้าต้องการ ค่าเฉลี่ยที่ถูกต้องมากขึ้นใน concreto จากการวัด 10 ครั้งคุณต้องมีอาร์เรย์ (หรือรายการที่เชื่อมโยง) เพื่อเก็บไว้ อาร์เรย์นี้ทำหน้าที่เป็นบัฟเฟอร์แบบวงกลมและมีการวัดใหม่ทั้งหมดที่เก่าที่สุดจะถูกลบออก ค่าเฉลี่ยที่ใช้งานจะคำนวณเป็นผลรวมขององค์ประกอบทั้งหมดหารด้วยจำนวนองค์ประกอบในอาร์เรย์ รหัสสำหรับค่าเฉลี่ยที่ทำงานจะเป็นเช่นนี้: ข้อเสียของรหัสนี้คืออาร์เรย์ที่จะเก็บค่าทั้งหมดจะมีขนาดใหญ่มาก ถ้าคุณมีหนึ่งการวัดต่อวินาทีและคุณต้องการใช้ค่าเฉลี่ยต่อนาทีที่คุณต้องการอาร์เรย์ของ 60 เฉลี่ยต่อชั่วโมงจะต้องอาร์เรย์ของ 3600 ที่ couldnt จะทำแบบนี้ใน Arduino ตามที่มีเพียง 2K ของแรม อย่างไรก็ตามโดยการสร้างค่าเฉลี่ย 2 ขั้นตอนสามารถเข้าหาได้ค่อนข้างดี (ข้อจำกัดความรับผิดชอบ: ไม่ใช่สำหรับการวัดทั้งหมด) ในโค้ด psuedo: เนื่องจากอาร์เรย์แบบคงที่ภายในใหม่เป็นสิ่งจำเป็นสำหรับฟังก์ชัน runningAverage ทุกตัวกรีดร้องนี้จะนำมาใช้เป็นคลาส ไลบรารี RunningAverage ไลบรารีรันไทม์จะทำให้คลาสของฟังก์ชันเหนือกว่าเพื่อให้สามารถใช้งานได้หลายครั้งในโครงร่าง มัน decouples add () และ avg () ฟังก์ชันที่จะเป็นบิตที่มีความยืดหยุ่นมากขึ้นเช่น หนึ่งสามารถเรียกค่าเฉลี่ยหลายครั้งโดยไม่ต้องเพิ่มสิ่ง. โปรดทราบว่าทุกๆอินสแตนซ์ของคลาสจะเพิ่มอาร์เรย์ของตัวเองเพื่อเก็บค่าการวัดและจะเพิ่มขึ้นตามการใช้หน่วยความจำ ส่วนติดต่อของชั้นเรียนจะถูกเก็บไว้ให้เล็กที่สุด หมายเหตุ: เมื่อใช้เวอร์ชัน 0.2 ชื่อของเมธอดทั้งหมดจะมีความหมายมากขึ้น ร่างเล็ก ๆ แสดงให้เห็นว่ามันสามารถใช้อย่างไร เครื่องกำเนิดไฟฟ้าแบบสุ่มใช้เพื่อเลียนแบบเซ็นเซอร์ ในการตั้งค่า () myRA จะถูกล้างเพื่อให้เราสามารถเริ่มต้นการเพิ่มข้อมูลใหม่ได้ ในลูป () แรกจำนวนสุ่มถูกสร้างขึ้นและแปลงเป็นลอยที่จะเพิ่ม myRA จากนั้นพิมพ์ค่าใช้งานไปที่พอร์ตอนุกรม หนึ่งยังสามารถแสดงบนจอแอลซีดีบางส่วนหรือส่งผ่าน ethernet ฯลฯ เมื่อมีการเพิ่ม 300 รายการ myRA จะล้างเพื่อเริ่มต้นอีกครั้ง เมื่อต้องการใช้ไลบรารีให้สร้างโฟลเดอร์ใน SKETCHBOOKPATHlibies ของคุณโดยใช้ชื่อ RunningAverage และใส่ไฟล์. h และ. cpp ลงในโฟลเดอร์ เลือกไดเรกทอรีย่อยตัวอย่างเพื่อวางแอปตัวอย่าง 2011/01/30: ฉบับเริ่มต้น 2011-02-28: destructor ที่หายไปถาวรในไฟล์. h 2011/02/28: ตัวสร้างเริ่มต้นที่ลบออก 2012--. trimValue () Yuval Naveh เพิ่ม trimValue (พบในเว็บ) 2012-11-21: refactored 2012-12-30: เติม fillValue () refactored สำหรับการเผยแพร่ 2014-07-03: เพิ่มโค้ดป้องกันหน่วยความจำ - ถ้าอาร์เรย์ภายในไม่สามารถกำหนดขนาดได้ กลายเป็น 0 นี่คือการแก้ปัญหาอธิบายไว้ที่นี่ - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - ทดสอบอย่างกว้างขวาง เรียนรู้เกี่ยวกับวิธีการใช้งาน high-pass ที่ง่ายมาก ๆ ในโพสต์นี้ we8217ll จะแสดงวิธีการใช้งานแบบ high-pass ที่ง่ายมาก band-pass และ band-stop ในตัว Arduino ขอแนะนำให้คุณอ่านโพสต์เกี่ยวกับ Potentiometers และ EMA (Exponential Moving Average) รวมถึงการวางแผนเกี่ยวกับค่าต่างๆใน Arduino IDE ก่อนดำเนินการต่อเนื่องจากเราใช้วงจรที่คล้ายกันวิธีการกรองและการวางแผนวิธีการในบทแนะนำนี้ เราใช้ Potentiometer แบบง่ายๆและ ADC เพื่อสร้างสัญญาณที่เราใช้งานผ่านตัวกรอง ตัวกรองชนิดต่างๆ แกน X คือความถี่และแกน Y คือ 8220gain8221 ซึ่งเป็นจำนวนสัญญาณที่ปล่อยผ่าน (หรือบางครั้งก็ได้รับการขยายสัญญาณ) (สูงกว่าผ่านการกรองสูง - ผ่านการกรองเป็นสิ่งที่ตรงกันข้ามกับ low - pass filtering) แทนที่จะทำให้สัญญาณราบรื่นออกไปคุณจะทิ้งเสียงทั้งหมดและการเปลี่ยนแปลงอย่างรวดเร็ว เมื่อสัญญาณเดิมคงที่รอบค่าคงที่ใด ๆ สัญญาณสูงจะส่งไปที่ศูนย์ 8230 ใช้ตัวกรองความถี่ต่ำผ่านและลบผลจากสัญญาณเดิม มีวิธีที่ถูกต้องและมีประสิทธิภาพมากกว่า problaby เพื่อใช้ตัวกรองผ่านสูง แต่วิธีที่เราต้องการทำคือการเรียกใช้ตัวกรองความถี่ต่ำผ่านและลบผลจากสัญญาณเดิม ด้วยวิธีนี้คุณเหลือเพียงความถี่สูงของสัญญาณเดิมเท่านั้น นี่คือวิธีที่เรานำมาใช้กับ Arduino Leonardo: Band-pass Filtering ลองจินตนาการว่าคุณมีสัญญาณที่ผ่านการกรองสูงซึ่งมีเสียงดังเกินไป จากนั้นกรอง band-pass อาจเหมาะสำหรับคุณ สัญญาณกรองแบบพาสแบนด์เป็นสัญญาณกรองความถี่สูงที่ราบรื่น 8230 ใช้ตัวกรอง EMA แยกต่างหาก 2 ตัวพร้อมความถี่ตัดที่แตกต่างกัน ความคิดของเราที่อยู่เบื้องหลังการใช้ตัวกรองแบนด์พาสคือเราใช้ตัวกรอง EMA แยกต่างหาก 2 ตัวโดยมีความถี่ตัดที่แตกต่างกัน จากนั้นเราจะลบสัญญาณที่กรองด้วยความถี่ตัดต่ำสุดจากสัญญาณที่กรองด้วยความถี่ตัดสูงที่สุด ด้วยวิธีนี้เราจึงเหลือความถี่ไว้ระหว่างความถี่ตัดทั้งสองแบบซึ่งทั้งสองอย่างมีความสำคัญอย่างยิ่งต่อประสิทธิภาพที่คุณต้องการจากตัวกรอง It8217s ง่ายที่จะเห็นความแตกต่างระหว่างสัญญาณสูงผ่าน (สีฟ้า) และสัญญาณแถบผ่าน (สีส้ม) หลังนี้ใช้สัญญาณ high-pass แบบกรองต่ำ Band-stop Filtering นี่เป็นสิ่งที่ยากที่สุดที่จะห่อหุ้มศีรษะไปได้ ตัวกรองนี้ให้ความถี่ต่ำสุดและสูงสุดเท่านั้น ซึ่งหมายความว่ามันแตกต่างกันเล็กน้อยจาก high-pass และ band-pass เพราะมันไม่ได้กลับสู่ศูนย์ตลอดเวลา แต่จะทำตามค่าคงที่ของสัญญาณ (เช่น low-pass filter) แต่แตกต่างจากตัวกรองความถี่ต่ำซึ่งรวมถึงความถี่สูงเช่นเสียงรบกวนและการเปลี่ยนแปลงอย่างรวดเร็ว 8230 ลบสัญญาณที่ผ่านการกรองแบนด์พาสจากสัญญาณเดิม ความคิดของเราที่อยู่เบื้องหลังการใช้งานนี้คือการลบสัญญาณที่ผ่านการกรองแบนด์พาสจากสัญญาณเดิม นี่เป็นตัวกรอง band-pass ผกผัน ความถี่ cutoff สองมีความสำคัญเช่นเดียวกับตัวกรอง band-pass ในกราฟนี้คุณจะเห็นว่าในความถี่ต่ำสัญญาณหยุดสัญญาณ (สีแดง) ทำหน้าที่เหมือนสัญญาณต่ำ (ส้ม) ในขณะที่ความถี่สูงกว่าจะทำหน้าที่เหมือนสัญญาณเดิม (สีน้ำเงิน) ปรากฏการณ์ที่น่าสนใจซึ่งสัญญาณหยุดการตอบสนองขั้นตอน (ใกล้ ๆ ) เริ่มต้นตามสัญญาณเดิมก่อนหลังจากที่เกิดขึ้นชั่วคราวจะทำหน้าที่เหมือนสัญญาณต่ำที่ผ่านมาบทเล็ก ๆ ที่ด้านล่างดังที่กล่าวมาแล้วนี้น่าจะเป็นที่สุด วิธีที่มีประสิทธิภาพหรือถูกต้องที่สุดในการใช้ตัวกรองประเภทนี้ อย่างไรก็ตามหากคุณต้องการการใช้งานตัวกรองที่รวดเร็วและสกปรกระบบเหล่านี้อาจไม่โทรมเกินไป โปรดจำไว้ว่าความล่าช้าที่ด้านล่างของลูปในตัวอย่างเหล่านี้มีความสำคัญต่อทั้งอัตราการวางแผนและลักษณะของตัวกรอง ลองใช้งานด้วยตัวคุณเองเล่นกับความถี่ตัดและสนุกบทความที่เกี่ยวข้องไม่สามารถทำได้โดยใช้ตัวกรองเฉลี่ยที่ใหญ่ขึ้น การแปรสภาพเป็นกระบวนการเชิงเส้นดังนั้นจึงปฏิบัติตามกฎหมายของการเชื่อมโยง ดังนั้นถ้าสัญญาณของคุณคือ s (t) และตัวกรองของคุณคือ f (t) (และตั้งค่าได้ดีเพียง 3 เพื่อทำให้การแสดงผลง่ายขึ้น) จากนั้นเราจะสามารถอธิบายการกรองได้ทางคณิตศาสตร์ดังนี้ - เริ่มแอมป์ (t) (( (t) f (t)) f (t)) f (t) แอมป์ s (t) (f (t) f (t) f (t)) end ในคำอื่น ๆ ที่ convolving สัญญาณด้วยตัวกรองเฉลี่ยหลาย ๆ ครั้ง เป็นเช่นเดียวกับ convolving มันครั้งเดียวกับตัวกรองเฉลี่ย convolved กับตัวเอง ดังนั้นสิ่งที่ดูเหมือนว่าดูด้านล่าง อย่างที่คุณเห็นตัวกรองจะกว้างขึ้น แต่ก็มีการเปลี่ยนแปลงรูปแบบตามที่คุณแก้ไขได้บ่อยขึ้น ดังที่ Libor กล่าวไว้เมื่อ n มีขนาดใหญ่มันเริ่มประมาณ gaussian filter ตามทฤษฎีบทขีด จำกัด กลาง ฉันคิดว่าคุณสามารถประมาณผลที่เกิดขึ้นกับตัวกรองที่มีขนาดแตกต่างกัน แต่ไม่ได้รับผลตรงเดียวกัน. สมมติว่าคุณใช้ตัวกรองกล่องสองครั้ง เช่นเดียวกับการหมุนเคอร์เนลของกล่องด้วยตัวเองซึ่งจะให้ตัวกรองสามเหลี่ยมและใช้ตัวกรองรูปสามเหลี่ยมในภาพเพียงครั้งเดียว การใช้ตัวกรองกล่องสามครั้งเหมือนกับการใช้ตัวกรองกำลังสอง เคอร์เนลกำลังสองถูกสร้างขึ้นโดยการหมุนสามเหลี่ยมด้วยกล่อง convolutions เหล่านี้ในที่สุดนำไปสู่ kernel กรอง Gaussian หากคุณกรองข้อมูลได้มากขึ้นด้วยตัวกรองที่มีขนาดเล็กลงหรือน้อยกว่าเมื่อใช้ตัวกรองขนาดใหญ่ตัวกรองจึงมีลำดับที่แตกต่างกัน ดังนั้นคุณจึงสามารถประมาณผล ประมาณนี้อาจเพียงพอ แต่ความถูกต้องสามารถพิสูจน์ได้โดยการคำนวณหลาย convolutions ของตัวกรองขนาดเล็กและใหญ่กับตัวเองและจากนั้นเปรียบเทียบผล คุณอาจสนใจเกี่ยวกับการเบลอแบบ Gaussian ด้วยตัวกรองช่องสัญญาณอย่างรวดเร็ว - มีสูตรให้ระบุในข้อกำหนด SVG 1.1 ตอบ 24 ส. ค. 12 เวลา 14:45 ขึ้นอยู่กับว่าคุณหมายถึงอะไรจากผลเดียวกัน หากคุณกำลังมองหาคำตอบเชิงตัวเลขเหมือนกันคุณจะไม่สามารถทำเช่นนั้นได้ ยิ่งไปกว่านั้นการกรองสัญญาณด้วยตัวกรองเฉลี่ยของความยาว M และ N จะให้ผลลัพธ์ที่แตกต่างกันเสมอ ในหลายกรณีการพูดจริงอาจไม่สำคัญว่าคุณใช้ตัวกรองใดถ้า M และ N ต่างกันไม่มากนัก นอกจากนี้ยังขึ้นอยู่กับความยืดหยุ่นที่คุณมีกับตัวกรอง หากคุณถูกจํากัดเฉพาะตามความยาวของตัวกรองคุณสามารถตั้งค่าสัมประสิทธิ์ M แรกเป็น Frac และเหลือเป็นศูนย์ได้ นี้จะให้ผลเช่นเดียวกับ averager เดิมของความยาวเมตรตอบ 24 สิงหาคม 12 ที่ 14:35 คำตอบของคุณ 2017 Stack Exchange, Inc
No comments:
Post a Comment