ฉันรู้ว่านี่เป็นไปได้ด้วยการเพิ่มตาม per. But ฉันต้องการหลีกเลี่ยงการใช้เพิ่มฉันมี googled และไม่พบตัวอย่างใด ๆ ที่เหมาะสมหรืออ่านได้โดยปกติฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของกระแสอย่างต่อเนื่องของกระแสตัวเลขจุดลอย การใช้ตัวเลขล่าสุด 1000 เป็นตัวอย่างข้อมูลวิธีที่ง่ายที่สุดในการบรรลุนี้ฉันทดลองกับการใช้อาร์เรย์แบบวงกลมค่าเฉลี่ยเคลื่อนที่แบบเสวนาและค่าเฉลี่ยเคลื่อนที่ที่ง่ายขึ้นและพบว่าผลลัพธ์จากอาร์เรย์แบบวงกลมเหมาะกับความต้องการของฉันดีที่สุด 12 มิถุนายน 12 ที่ 4 38. ถ้าความต้องการของคุณง่ายคุณอาจลองใช้ค่าเฉลี่ยเคลื่อนที่แทนคุณก็สร้างตัวแปร accumulator และเมื่อโค้ดของคุณดูที่ตัวอย่างแต่ละโค้ดจะอัพเดต accumulator ด้วย ค่าใหม่คุณสามารถเลือกค่า alpha คงที่ระหว่าง 0 ถึง 1 และคำนวณค่านี้ได้คุณต้องหาค่า alpha ที่ผลของตัวอย่างที่กำหนดจะใช้เวลาประมาณ 1000 ตัวอย่างเท่านั้นฉันไม่แน่ใจว่านี่เป็น เหมาะสำหรับคุณตอนนี้ t หมวกฉันได้วางไว้ที่นี่ปัญหาคือ 1000 เป็นหน้าต่างยาวสวยสำหรับการเคลื่อนที่เฉลี่ยฉันไม่แน่ใจว่ามีอัลฟาที่จะกระจายเฉลี่ยมากกว่า 1000 หมายเลขโดยไม่ underflow ในการคำนวณจุดลอย แต่ถ้าคุณ ต้องการค่าเฉลี่ยที่เล็กกว่าเช่น 30 ตัวเลขหรือมากกว่านี้เป็นวิธีที่ง่ายและรวดเร็วในการทำ it. answered 12 มิถุนายน 12 ที่ 4 44 1 โพสต์ของคุณค่าเฉลี่ยเคลื่อนที่ชี้แจงสามารถให้ alpha เป็นตัวแปรดังนั้นนี้จะช่วยให้ ใช้เวลาในการคำนวณค่าเฉลี่ยของฐานเวลาเช่นไบต์ต่อวินาทีถ้าเวลานับตั้งแต่การอัปเดตสะสมครั้งสุดท้ายเป็นเวลามากกว่า 1 วินาทีคุณจะอนุญาตให้ alpha เป็น 1 0 มิฉะนั้นคุณสามารถปล่อยให้ alpha เป็น usecs นับตั้งแต่การอัปเดตครั้งล่าสุด 1000000 jxh มิ.ย. 12 12 ที่ 6 21 โดยปกติแล้วฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของสตรีมตัวเลขจุดลอยที่ต่อเนื่องโดยใช้ตัวเลข 1000 ครั้งล่าสุดเป็นตัวอย่างข้อมูลโปรดทราบว่าด้านล่างปรับปรุงชุดค่าผสมทั้งหมดเป็นองค์ประกอบแทนที่ถูกแทนที่โดยหลีกเลี่ยงการข้ามค่าใช้จ่ายในการคำนวณ ผลรวม - จำเป็นสำหรับ th e - ค่าเฉลี่ย - เมื่อต้องการ - ทั้งหมดจะทำพารามิเตอร์ที่แตกต่างจาก T เพื่อสนับสนุนเช่นใช้ยาวนานเมื่อรวม 1000 long s, int สำหรับ char s หรือ double เพื่อ float ทั้งหมด s นี้เป็นบิตสมบูรณ์ใน numsamples ที่สามารถ ไปที่ผ่านมา INTMAX - ถ้าคุณสนใจคุณสามารถใช้ unsigned ยาวยาวหรือใช้สมาชิก bool ข้อมูลพิเศษเพื่อบันทึกเมื่อภาชนะบรรจุเป็นครั้งแรกในขณะที่การขี่จักรยาน numsamples รอบแถวที่ดีที่สุดแล้วเปลี่ยนชื่อสิ่งที่ไม่เป็นอันตรายเช่น pos. answered 12 มิถุนายน 12 ที่ 5 19 . สมมติว่าผู้ประกอบการโมฆะ T ตัวอย่างเป็นจริงโมฆะดำเนินการตัวอย่าง T oPless 8 มิถุนายน 14 ที่ 11 52. oPhtts ahhh เห็นดีจริงฉันหมายความว่ามันจะเป็นโมฆะดำเนินการ T ตัวอย่าง แต่แน่นอนคุณสามารถใช้สิ่งที่คุณต้องการจะแก้ไข, ขอบคุณโทนี่ D มิถุนายน 8 14 ที่ 14 27 นักวิทยาศาสตร์และวิศวกรของคู่มือการประมวลผลสัญญาณดิจิตอลโดย Steven W Smith, Ph D. Chapter 28 โปรเซสเซอร์สัญญาณดิจิตอลโปรเซสเซอร์สัญญาณดิจิตอลได้รับการออกแบบเพื่อดำเนินการอย่างรวดเร็วตัวกรอง FIR และเทคนิคที่คล้ายกันเพื่อให้เข้าใจ Hardwar ในขั้นตอนนี้เราจะอธิบายรายละเอียดของขั้นตอนที่จำเป็นในการใช้ตัวกรอง FIR ในส่วนถัดไปเราจะดูว่า DSP ออกแบบมาเพื่อทำตามขั้นตอนเหล่านี้ให้มีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้ในการเริ่มต้นเราจำเป็นต้องใช้ เพื่อแยกแยะระหว่างการประมวลผลออฟไลน์และการประมวลผลแบบเรียลไทม์ในการประมวลผลออฟไลน์สัญญาณอินพุตทั้งหมดอยู่ในคอมพิวเตอร์ในเวลาเดียวกันตัวอย่างเช่นนักธรณีฟิสิกส์อาจใช้ seismometer เพื่อบันทึกการเคลื่อนที่ของพื้นดินในระหว่างเกิดแผ่นดินไหวหลังจากที่สั่น สิ้นสุดลงข้อมูลอาจถูกอ่านลงในคอมพิวเตอร์และวิเคราะห์ในบางกรณีตัวอย่างของการประมวลผลออฟไลน์คือการถ่ายภาพทางการแพทย์เช่นการคำนวณเอกซเรย์คอมพิวเตอร์และ MRI ชุดข้อมูลจะได้รับในขณะที่ผู้ป่วยอยู่ภายในเครื่อง แต่การสร้างภาพ อาจจะล่าช้าจนกว่าจะถึงเวลาต่อมาจุดสำคัญคือข้อมูลทั้งหมดพร้อมกันในโปรแกรมประมวลผลซึ่งเป็นเรื่องปกติในการวิจัยทางวิทยาศาสตร์และวิศวกรรม แต่ไม่ได้อยู่ใน ผลิตภัณฑ์สำหรับผู้บริโภคการประมวลผลแบบออฟไลน์คือขอบเขตของคอมพิวเตอร์ส่วนบุคคลและเครื่อง mainframes ในการประมวลผลแบบเรียลไทม์สัญญาณเอาต์พุตจะถูกผลิตในเวลาเดียวกันที่มีการรับสัญญาณอินพุตตัวอย่างเช่นจำเป็นต้องใช้ในการสื่อสารทางโทรศัพท์, และเรดาร์แอ็พพลิเคชันเหล่านี้ต้องมีข้อมูลที่สามารถใช้งานได้ทันทีแม้ว่าจะมีความล่าช้าในระยะเวลาอันสั้นตัวอย่างเช่นการล่าช้าในสายโทรศัพท์เป็นเวลา 10 มิลลิวินาทีไม่สามารถตรวจพบได้จากลำโพงหรือผู้ฟังเช่นเดียวกันหากไม่มีสัญญาณเรดาร์ ล่าช้าโดยไม่กี่วินาทีก่อนที่จะแสดงให้ผู้ประกอบการใช้งานเรียลไทม์ใส่ตัวอย่างดำเนินการขั้นตอนวิธีและส่งออกตัวอย่าง over - and - over หรือมากกว่าพวกเขาอาจใส่ตัวอย่าง group. of ดำเนินการขั้นตอนวิธีและการส่งออก กลุ่มตัวอย่างนี่คือโลกของ Digital Signal Processors ตอนนี้ให้มองย้อนกลับไปที่รูปที่ 28-2 และคิดว่านี่เป็นตัวกรอง FIR ที่ถูกนำมาใช้ในแบบเรียลไทม์เพื่อคำนวณตัวอย่างการส่งออก ตัวอย่างเช่นสมมติว่าเราใช้ค่าสัมประสิทธิ์ 8 ตัวในตัวกรองนี้ 0 a 1 a 7 ซึ่งหมายความว่าเราต้องทราบค่าของแปดตัวอย่างล่าสุดจากสัญญาณอินพุท, xn, xn -1, xn -7 ตัวอย่างแปดชิ้นนี้ต้องเก็บไว้ในหน่วยความจำและได้รับการปรับปรุงอย่างต่อเนื่องเมื่อมีการเก็บตัวอย่างใหม่วิธีที่ดีที่สุดในการจัดการกับตัวอย่างที่เก็บไว้คำตอบคือ buffering แบบวงกลมภาพ 28-3 แสดงรูปวงกลมตัวอย่างที่แปด บัฟเฟอร์เราได้วางบัฟเฟอร์วงกลมนี้ไว้ในตำแหน่งหน่วยความจำแปดแห่งติดต่อกันตั้งแต่ปี 2547-1 ถึง 25478 รูปที่แสดงให้เห็นว่าตัวอย่างจากอินพุตทั้ง 8 ตัวอย่างจะถูกเก็บไว้ในช่วงเวลาใดเวลาหนึ่งในขณะที่ b แสดงการเปลี่ยนแปลงหลังจากได้รับตัวอย่างต่อไปความคิด บัฟเฟอร์แบบวงกลมคือจุดสิ้นสุดของอาร์เรย์เชิงเส้นนี้เชื่อมต่อกับจุดเริ่มต้นของตำแหน่งหน่วยความจำ 20041 ถูกมองว่าอยู่ติดกับ 20048 เช่นเดียวกับ 20044 ถัดจาก 20045 คุณสามารถติดตามอาร์เรย์โดยตัวชี้ตัวแปรที่มีค่า i s ที่อยู่ที่ระบุตำแหน่งที่ตัวอย่างล่าสุดอยู่ตัวอย่างเช่นในตัวชี้ประกอบด้วยที่อยู่ 20044 ในขณะที่ b มี 20045 เมื่อได้มาตัวอย่างใหม่จะแทนที่ตัวอย่างที่เก่าแก่ที่สุดในอาร์เรย์และย้ายตัวชี้ หนึ่งที่อยู่ข้างหน้าบัฟเฟอร์แบบวงกลมมีประสิทธิภาพเนื่องจากจำเป็นต้องเปลี่ยนค่าเดียวเมื่อได้รับตัวอย่างใหม่พารามิเตอร์ Four มีความจำเป็นสำหรับการจัดการบัฟเฟอร์แบบวงกลมก่อนอื่นต้องมีตัวชี้ที่ระบุจุดเริ่มต้นของบัฟเฟอร์แบบวงกลมในหน่วยความจำ ตัวอย่างเช่น, 20041 ประการที่สองต้องมีตัวชี้ชี้จุดจบของอาร์เรย์เช่น 20048 หรือตัวแปรที่มีความยาวเช่น 8 สามต้องระบุขนาดขั้นตอนของหน่วยความจำในรูปที่ 28-3 ขนาดขั้นตอนคือหนึ่ง ตัวอย่างเช่นที่อยู่ 20043 มีหนึ่งตัวอย่างที่อยู่ 20044 มีตัวอย่างต่อไปและอื่น ๆ นี่ไม่ใช่กรณีตัวอย่างเช่นที่อยู่อาจอ้างถึงไบต์และแต่ละตัวอย่างอาจต้องใช้สองหรือสี่ไบต์เพื่อเก็บค่า I n กรณีนี้ขนาดขั้นตอนจะต้องมีสองหรือสี่ตามลำดับทั้งสามค่ากำหนดขนาดและการกำหนดค่าของบัฟเฟอร์วงกลมและจะไม่เปลี่ยนแปลงในระหว่างการดำเนินงานของโปรแกรมค่าที่สี่ตัวชี้ไปตัวอย่างล่าสุด, ต้องมีการปรับเปลี่ยนเมื่อแต่ละตัวอย่างได้รับมาใหม่ในคำอื่น ๆ ต้องมีตรรกะของโปรแกรมที่ควบคุมวิธีการปรับปรุงค่าที่สี่ตามค่าของสามค่าแรกในขณะที่ตรรกะนี้ค่อนข้างง่ายจะต้องรวดเร็วมากนี่คือ จุดทั้งหมดของการสนทนานี้ DSP ควรเพิ่มประสิทธิภาพในการจัดการบัฟเฟอร์แบบวงกลมเพื่อให้ได้ความเร็วในการประมวลผลสูงสุดเท่าที่เป็นไปได้ buffering แบบเวกเตอร์ยังมีประโยชน์ในการประมวลผลแบบออฟไลน์พิจารณาโปรแกรมที่ทั้งอินพุตและสัญญาณเอาท์พุทมีอยู่อย่างสมบูรณ์ หน่วยความจำบัฟเฟอร์ไม่จำเป็นสำหรับการคำนวณ convolution เพราะทุกตัวอย่างสามารถเข้าถึงได้ทันทีอย่างไรก็ตามอัลกอริทึมหลายตัวจะถูกนำมาใช้ในขั้นตอนที่มีสัญญาณระดับกลาง ing สร้างระหว่างแต่ละขั้นตอนตัวอย่างเช่นตัวกรอง recursive ดำเนินการเป็นชุด biquads ทำงานในลักษณะนี้วิธี brute force คือการเก็บความยาวทั้งหมดของแต่ละสัญญาณกลางในหน่วยความจำ buffering แบบวงกลมให้ตัวเลือกอื่นเก็บเฉพาะตัวอย่างกลางที่จำเป็นสำหรับ การคำนวณที่มือช่วยลดจำนวนหน่วยความจำที่ต้องเสียค่าใช้จ่ายของอัลกอริธึมที่ซับซ้อนมากขึ้นแนวคิดที่สำคัญคือบัฟเฟอร์แบบวงกลมมีประโยชน์สำหรับการประมวลผลออฟไลน์ แต่สำคัญสำหรับแอพพลิเคชันแบบเรียลไทม์ขณะนี้เราสามารถดูขั้นตอนต่างๆได้ จำเป็นต้องใช้ตัวกรอง FIR โดยใช้บัฟเฟอร์แบบวงกลมสำหรับทั้งสัญญาณขาเข้าและสัมประสิทธิ์รายการนี้อาจดูเหมือนเล็กน้อยและ overexamined มันไม่ได้การจัดการที่มีประสิทธิภาพของงานบุคคลเหล่านี้เป็นสิ่งที่แยก DSP จากไมโครโปรเซสเซอร์แบบดั้งเดิมสำหรับตัวอย่างใหม่ทุก ขั้นตอนต่อไปนี้จำเป็นต้องดำเนินการเป้าหมายคือการทำให้ขั้นตอนเหล่านี้ดำเนินการได้อย่างรวดเร็วเนื่องจากขั้นตอนที่ 6-12 จะทำซ้ำหลาย ๆ ครั้งสำหรับแต่ละครั้ง ค่าสัมประสิทธิ์ในตัวกรองความสนใจเป็นพิเศษจะต้องได้รับการดำเนินการเหล่านี้ไมโครโปรเซสเซอร์แบบดั้งเดิมต้องทำตามขั้นตอนเหล่านี้ 14 อย่างต่อเนื่องกันและกันในขณะที่ DSP ได้รับการออกแบบเพื่อให้ทำงานแบบขนานในบางกรณีการดำเนินงานทั้งหมดภายในวนซ้ำขั้นตอนที่ 6 -12 สามารถทำได้ในรอบนาฬิกาเพียงครั้งเดียวลองดูสถาปัตยกรรมภายในที่ช่วยให้ประสิทธิภาพที่ยอดเยี่ยมนี้หนึ่งในแอพพลิเคชันหลักของบอร์ด Arduino คือการอ่านและบันทึกข้อมูลเซ็นเซอร์ตัวอย่างเช่นจอภาพหนึ่งตัวจะดันทุกวินาทีของวัน As อัตราตัวอย่างสูงมักจะสร้าง spikes ในกราฟหนึ่งยังต้องการที่จะมีค่าเฉลี่ยของการวัดเป็นวัดที่ไม่คงที่ในเวลาสิ่งที่เรามักจะต้องเป็นค่าเฉลี่ยทำงานนี้เป็นค่าเฉลี่ยของช่วงเวลาหนึ่งและมีคุณค่ามากเมื่อทำวิเคราะห์แนวโน้ม รูปแบบที่สั้นที่สุดของค่าเฉลี่ยในการทำงานสามารถทำได้โดยรหัสที่สร้างขึ้นเมื่อ average. In ทำงานก่อนหน้านี้หนึ่ง doesn t ต้องการใช้ทศนิยมคณิตศาสตร์ - เป็น thi s จะใช้เวลาหน่วยความจำและลดความเร็ว - หนึ่งสามารถทำเช่นเดียวกันอย่างสมบูรณ์ในโดเมนจำนวนเต็มแบ่งโดย 256 ในตัวอย่างรหัสคือ shift-right 8 ซึ่งเร็วกว่าพูดหารด้วยเช่น 100 นี้เป็นจริงสำหรับทุกอำนาจของ 2 เป็น divider และหนึ่งเท่านั้นต้องดูแลรวม weigths เท่ากับพลังของ 2 และแน่นอนหนึ่งควรดูแลไม่มี overflow ปานกลางพิจารณาใช้ unsigned long. If คุณต้องการค่าเฉลี่ยที่ถูกต้องมากขึ้นใน concreto จาก 10 ล่าสุด คุณต้องมีอาร์เรย์หรือรายการเชื่อมโยงเพื่อเก็บไว้อาร์เรย์นี้ทำหน้าที่เป็นบัฟเฟอร์แบบวงกลมและมีการวัดใหม่ทุกค่าที่เก่าที่สุดจะถูกนำออกค่าเฉลี่ยที่รันจะคำนวณเป็นผลรวมขององค์ประกอบทั้งหมดหารด้วยจำนวนองค์ประกอบในอาร์เรย์ รหัสสำหรับค่าเฉลี่ยจะเป็นสิ่งที่ต้องการ this. Drawback ของรหัสนี้คืออาร์เรย์ที่จะถือค่าทั้งหมดจะกลายเป็นขนาดใหญ่มากถ้าคุณมีหนึ่งวัดต่อวินาทีและคุณต้องการใช้ค่าเฉลี่ยต่อนาทีคุณต้องอาร์เรย์ของ 60 เฉลี่ยต่อชั่วโมงจะต้องอาร์เรย์ของ 3600 ที่ couldn t จะทำแบบนี้ใน Arduino ตามที่มีเพียง 2K ของแรม แต่โดยการสร้างค่าเฉลี่ย 2 ขั้นตอนก็สามารถเข้าหาค่อนข้างปฏิเสธไม่ได้สำหรับการวัดทั้งหมดใน psuedo code. As a อาร์เรย์อาร์เรย์ภายในใหม่เป็นสิ่งจำเป็นสำหรับทุกฟังก์ชั่น runAverage เสียงกรีดร้องนี้จะถูกนำมาใช้เป็นไลบรารี class. RunningAverage ไลบรารีไลบรารีรันไทม์จะทำให้คลาสของฟังก์ชันเหนือกว่าเพื่อที่จะสามารถใช้งานได้หลายครั้งในร่างมันเป็นการ decouples add และ avg. ฟังก์ชันที่จะเป็นบิตที่มีความยืดหยุ่นมากขึ้นเช่นหนึ่งสามารถเรียกค่าเฉลี่ยหลาย ๆ ครั้งโดยไม่ต้องเพิ่มสิ่งโปรดทราบว่าทุกๆกรณีของคลาสเพิ่มอาร์เรย์ของตัวเองเพื่อเก็บข้อมูลการวัดและการเพิ่มขึ้นของการใช้หน่วยความจำ เก็บไว้ให้เล็กที่สุดเท่าที่จะเป็นไปได้หมายเหตุกับรุ่น 0 2 ชื่อของวิธีการทั้งหมดทำขึ้น descriptive. S ร่างเล็กแสดงให้เห็นว่าสามารถใช้เครื่องกำเนิดไฟฟ้าแบบสุ่มจะใช้ในการเลียนแบบเซ็นเซอร์ในการติดตั้ง myRA จะล้างดังนั้น w e สามารถเริ่มต้นการเพิ่มข้อมูลใหม่ในลูปแรกจำนวนสุ่มถูกสร้างขึ้นและแปลงเป็นลอยที่จะเพิ่ม myRA แล้ว runerate ทำงานจะพิมพ์ไปยังพอร์ตอนุกรมหนึ่งยังสามารถแสดงบนจอแอลซีดีหรือส่งผ่าน ethernet ฯลฯ เมื่อ 300 รายการ myRA จะถูกล้างเพื่อเริ่มต้นใหม่อีกครั้งเมื่อต้องการใช้ไลบรารีให้สร้างโฟลเดอร์ในไลบรารี SKETCHBOOKPATH ของคุณโดยใช้ชื่อ RunningAverage และวาง h และมีตัวเลือกให้สร้างไดเรกทอรีย่อยของตัวอย่างเพื่อวางแอปพลิเคชันตัวอย่าง .2011-02-28 destructor ที่หายไปคงที่ในไฟล์ h.2.2011/02/28 เอาค่าดีฟอลต์คอนสตรัคเตอร์ 2012- - trimValue Yuval Naveh เพิ่ม trimValue ที่พบใน web.2012-11-21 refactored 2012-12-30 fillValue refactored สำหรับ publish.2014-07-03 เพิ่มรหัสป้องกันหน่วยความจำ - ถ้าอาร์เรย์ภายในไม่สามารถกำหนดขนาดได้จะกลายเป็น 0 นี่คือการแก้ปัญหาที่อธิบายไว้ที่นี่ทดสอบอย่างกว้างขวางชั้นเรียนการคำนวณหาค่าเฉลี่ย h. RunningAverage
Comments
Post a Comment