C เฉลี่ยเคลื่อนที่


ฉันรู้ว่านี่เป็นไปได้ด้วยการเพิ่มตาม 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 Jun 12 12 at 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 ตัวอย่าง แต่แน่นอนคุณสามารถใช้สิ่งที่คุณต้องการจะแก้ไข, ขอบคุณ Tony D มิถุนายน 8 14 ที่ 14 27.As คนอื่น ๆ ได้กล่าวถึงคุณควรพิจารณาตัวกรอง IIR infinite ตอบสนองมากกว่า Impulse FIR ผลตอบรับตัวกรองที่คุณกำลังใช้อยู่ขณะนี้มีมากขึ้นไป แต่ในช่วงแรกกรอง FIR จะดำเนินการ เป็น convolutio ชัดเจน ns และตัวกรอง IIR ด้วยสมการตัวกรอง IIR ที่ฉันใช้กันมากในไมโครคอนโทรลเลอร์เป็นตัวกรองแบบ low pass ของโพรเซสเซอร์แบบเดียวซึ่งเป็น digital analog ของตัวกรอง analog แบบ RC สำหรับแอพพลิเคชันส่วนใหญ่จะมีลักษณะที่ดีกว่าตัวกรองช่องสัญญาณที่คุณใช้ ใช้มากที่สุดของตัวกรองกล่องที่ฉันได้พบเป็นผลมาจากคนไม่ให้ความสนใจในระดับการประมวลผลสัญญาณดิจิตอลไม่ได้เป็นผลจากการต้องลักษณะเฉพาะของพวกเขาหากคุณเพียงต้องการที่จะลดความถี่สูงที่คุณรู้ว่าเป็นเสียงรบกวน ตัวกรองสัญญาณต่ำผ่านเสาเดียวดีกว่าวิธีที่ดีที่สุดในการใช้งานไมโครคอนโทรลเลอร์แบบดิจิทัลในแบบปกติคือ FILT - FILT FF NEW - FILT. FILT เป็นชิ้นส่วนที่มีความคงทนถาวรนี่เป็นเพียงตัวแปรที่คุณต้องใช้เพื่อคำนวณตัวกรองใหม่นี้เท่านั้น ค่าใหม่ที่ตัวกรองจะถูกอัพเดตด้วยการวนซ้ำนี้ FF คือส่วนของตัวกรองที่ปรับความหนาแน่นของตัวกรองดูขั้นตอนนี้และดูว่าสำหรับ FF 0 ตัวกรองคือ infin itely heavy เนื่องจาก output ไม่เคยเปลี่ยนแปลงสำหรับ FF 1 จริงๆแล้วไม่มี filter เลยตั้งแต่เอาต์พุตทำตาม input ค่าที่เป็นประโยชน์อยู่ระหว่างระหว่างระบบขนาดเล็กที่คุณเลือก FF เป็น 1 2 N เพื่อให้คูณด้วย FF สามารถทำได้ เป็นเปลี่ยนขวาโดย N บิตตัวอย่างเช่น FF อาจเป็น 1 16 และคูณด้วย FF ดังนั้นการเปลี่ยนสิทธิของ 4 บิตมิฉะนั้นตัวกรองนี้ต้องการเพียงหนึ่งลบและหนึ่งเพิ่มแม้ว่าตัวเลขมักจะต้องกว้างกว่าค่า input เพิ่มเติมเกี่ยวกับความแม่นยำเชิงตัวเลขในส่วนที่แยกต่างหากด้านล่างฉันมักจะใช้เวลาอ่านโฆษณาอย่างมีนัยสำคัญได้เร็วกว่าที่จำเป็นและใช้ตัวกรองเหล่านี้สองตัวเรียงกันนี่คือดิจิตอลเทียบเท่าของตัวกรอง RC สองชุดและลดทอนตาม dB 12 dB เหนือความถี่ rolloff อย่างไรก็ตามสำหรับการอ่านโฆษณามักจะเกี่ยวข้องกับตัวกรองในโดเมนเวลาโดยการพิจารณาการตอบสนองขั้นตอนนี้จะบอกคุณว่าระบบของคุณจะเห็นการเปลี่ยนแปลงอย่างไรเมื่อสิ่งที่คุณกำลังวัดเปลี่ยนแปลงเพื่ออำนวยความสะดวก การออกแบบตัวกรองเหล่านี้ซึ่งหมายถึงการเลือก FF และตัดสินใจว่าจะกี่ของน้ำตกฉันใช้ FILTBITS โปรแกรมของคุณคุณระบุจำนวนของบิต shift สำหรับแต่ละ FF ในชุด cascaded ของตัวกรองและจะคำนวณการตอบสนองขั้นตอนและค่าอื่น ๆ ที่จริงฉัน มักจะเรียกใช้นี้ผ่านฉัน wrapper script PLOTFILT นี้ทำงาน FILTBITS ซึ่งทำให้ไฟล์ CSV แล้วแปลงไฟล์ CSV ตัวอย่างเช่นที่นี่เป็นผลมาจาก PLOTFILT 4 4.The สองพารามิเตอร์เพื่อ PLOTFILT หมายความว่าจะมีสองตัวกรอง cascaded ของประเภท อธิบายข้างต้นค่าของ 4 บ่งชี้ว่าจำนวนของกะบิตเพื่อให้เกิดการคูณด้วย FF ค่า FF สองตัวจึงเป็นดังนี้ 1 16 ในกรณีนี้การติดตามสีแดงคือการตอบสนองต่อหน่วยและเป็นสิ่งสำคัญที่ต้องดูตัวอย่างเช่น ผลลัพธ์นี้จะบอกคุณว่าถ้าอินพุทมีการเปลี่ยนแปลงทันทีผลลัพธ์ของตัวกรองแบบรวมจะกำหนดให้เป็น 90 ค่าใหม่ใน 60 ครั้งถ้าคุณสนใจเวลาในการปักหลัก 95 ครั้งคุณต้องรอประมาณ 73 ซ้ำและใช้เวลาในการตัดสินเพียง 50 ครั้งเท่านั้น 26 iterations. The ติดตามสีเขียวจะแสดงผลจากการขัดจังหวานความกว้างเต็มรูปแบบเดียวนี้จะช่วยให้คุณมีความคิดของการปราบปรามเสียงสุ่มดูเหมือนว่าไม่มีตัวอย่างเดียวจะทำให้เกิดการเปลี่ยนแปลงมากกว่า 2 5 ในการส่งออกรอยสีฟ้าคือการให้ ความรู้สึกอัตนัยของสิ่งที่กรองนี้จะมีเสียงสีขาวนี้ไม่ได้เป็นการทดสอบอย่างเข้มงวดเนื่องจากมีการรับประกันไม่ว่าสิ่งที่เนื้อหาของตัวเลขสุ่มเลือกเป็นสัญญาณรบกวนสีขาวสำหรับการทำงานของ PLOTFILT นี้เป็นเพียงเพื่อให้คุณหยาบ ความรู้สึกของเท่าใดก็จะถูกแบนและวิธีการเรียบมันคือ PLOTFILT อาจ FILTBITS และจำนวนมากสิ่งที่มีประโยชน์อื่น ๆ โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเฟิร์มแวร์ PIC มีอยู่ในการพัฒนาซอฟต์แวร์ PIC ปล่อยซอฟต์แวร์เครื่องมือที่ดาวน์โหลดของฉันหน้า page. Added เกี่ยวกับความแม่นยำเชิงตัวเลข . เห็นจากความคิดเห็นและตอนนี้คำตอบใหม่ที่มีความสนใจในการพูดคุยจำนวนบิตที่จำเป็นในการใช้ตัวกรองนี้ทราบว่าคูณโดย FF จะสร้าง Log 2 FF บิตใหม่ด้านล่างจุดไบนารี ในระบบขนาดเล็ก FF มักจะถูกเลือกให้เป็น 1 2 N เพื่อให้การคูณนี้เกิดขึ้นได้จริงโดยการเปลี่ยน N บิตให้ถูกต้องดังนั้น FILT จึงเป็นจำนวนเต็มจุดคงที่โปรดสังเกตว่าไม่มีการเปลี่ยนแปลงใด ๆ ของคณิตศาสตร์จากโปรเซสเซอร์ s มุมมองตัวอย่างเช่นถ้าคุณกำลังกรองการอ่านโฆษณา 10 บิตและ N 4 FF 1 16 จากนั้นคุณต้องใช้เศษเศษส่วนด้านล่างการอ่าน AD จำนวนเต็ม 10 บิตโปรเซสเซอร์ส่วนใหญ่คุณต้องทำ 16 บิตจำนวนเต็มเนื่องจาก 10 bit อ่าน AD ในกรณีนี้คุณยังคงสามารถดำเนินการได้เหมือนกันกับจำนวนเต็ม 16 บิต แต่เริ่มต้นจากการอ่านค่า AD ด้านซ้ายที่เปลี่ยนไป 4 บิตหน่วยประมวลผลไม่ทราบถึงความแตกต่างและไม่จำเป็นต้องทำคณิตศาสตร์กับจำนวนเต็ม 16 บิตทั้งหมด ทำงานได้ไม่ว่าคุณจะพิจารณาว่าเป็น 12 4 จุดคงที่หรือ 16 จำนวนเต็มจริง 16 0 จุดคงที่โดยทั่วไปคุณต้องเพิ่มบิต N ขั้วกรองแต่ละถ้าคุณ don t ต้องการเพิ่มเสียงรบกวนเนื่องจากการเป็นตัวแทนตัวเลขในตัวอย่างข้างต้น , ตัวกรองที่สองของสองจะต้องมี 10 4 ในทางปฏิบัติบนเครื่อง 8 บิตซึ่งหมายความว่าคุณต้องใช้ค่าบิต 24 ค่าทางเทคนิคเฉพาะขั้วที่สองของสองจะต้องมีค่ามากขึ้น แต่สำหรับความเรียบง่ายของเฟิร์มฉันมักจะใช้แทนเดียวกันและด้วยเหตุเดียวกัน รหัสสำหรับเสาทั้งหมดของตัวกรองโดยปกติฉันเขียนโปรแกรมย่อยหรือแมโครเพื่อดำเนินการการดำเนินการเสาหนึ่งกรองแล้วใช้ที่แต่ละขั้วว่า subroutine หรือแมโครขึ้นอยู่กับว่าหน่วยความจำรอบหรือโปรแกรมมีความสำคัญมากขึ้นในโครงการเฉพาะใด ๆ ทั้งสองวิธี ฉันใช้รัฐบางรอยขีดข่วนเพื่อส่ง NEW เข้าไปใน macro subroutine ซึ่งอัปเดต FILT แต่ยังโหลดว่าเป็นสถานะการขีดข่วนเหมือนเดิม NEW อยู่ในนี้ทำให้ง่ายต่อการใช้เสาหลายอันเนื่องจาก FILT ที่อัปเดตของเสาหนึ่งอันใหม่ของ next เมื่อ subroutine เป็นประโยชน์ที่จะมีจุดชี้ไปที่ FILT ระหว่างทางซึ่งจะมีการอัพเดตเพียงหลังจาก FILT ระหว่างทางวิธีการ subroutine จะดำเนินการกับตัวกรองต่อเนื่องใน memory ถ้าเรียกว่า multiple ครั้งกับแมโครคุณ don t ต้องการตัวชี้ตั้งแต่คุณผ่านในที่อยู่เพื่อดำเนินการในแต่ละ iteration. Code ตัวอย่างนี่เป็นตัวอย่างของแมโครตามที่อธิบายไว้ข้างต้นสำหรับ PIC 18.And นี่คือแมโครที่คล้ายกันสำหรับ PIC 24 หรือ dsPIC 30 หรือ 33 ทั้งสองตัวอย่างนี้จะถูกใช้เป็นแมโครโดยใช้ตัวประมวลผลแอ็คเซ็ปเตอร์ของ PIC ซึ่งมีความสามารถมากกว่าทั้งแบบมาโครภายในที่มีอยู่แล้ว clabacchio ปัญหาอื่นที่ควรจะกล่าวถึงคือการใช้งานเฟิร์มแวร์คุณสามารถเขียนโพรโตคอลผ่านต่ำโพรเซสเซอร์ subroutine เพียงครั้งเดียวจากนั้นใช้มันหลายครั้งในความเป็นจริงฉันมักจะเขียนเช่น subroutine ที่จะใช้ตัวชี้ในหน่วยความจำเพื่อกรองสถานะแล้วมีมันล่วงหน้า ตัวชี้เพื่อให้สามารถเรียกได้อย่างต่อเนื่องเพื่อให้ทราบตัวกรองแบบหลายขั้ว Olin Lathrop 20 เม. ย. 55 ที่ 15 03.1 ขอบคุณมากสำหรับคำตอบของคุณ - ทั้งหมดของพวกเขาฉันตัดสินใจที่จะใช้ตัวกรอง IIR นี้ แต่ตัวกรองนี้ไม่ได้ใช้เป็น Standard LowPass Filter เนื่องจากต้องใช้ Counter Values ​​ค่าเฉลี่ยและเปรียบเทียบเพื่อตรวจจับการเปลี่ยนแปลงใน Range เนื่องจากค่าเหล่านี้เป็นมิติที่แตกต่างกันไปโดยขึ้นอยู่กับฮาร์ดแวร์ที่ฉันต้องการใช้เพื่อให้สามารถตอบสนองต่อฮาร์ดแวร์เหล่านี้ได้ การเปลี่ยนแปลงที่เฉพาะเจาะจงโดยอัตโนมัติ sensslen 21 พฤษภาคมที่ 12 06. ถ้าคุณสามารถอยู่กับข้อ จำกัด ของอำนาจของสองจำนวนรายการเฉลี่ยเช่น 2,4,8,16,32 ฯลฯ แล้วแบ่งได้อย่างง่ายดายและมีประสิทธิภาพสามารถทำได้ใน ไมโครประสิทธิภาพต่ำโดยไม่แบ่งเฉพาะเพราะสามารถทำได้เป็นเปลี่ยนบิตกะขวาแต่ละคนเป็นหนึ่งในอำนาจของทั้งสองเช่น OP คิดว่าเขามีสองปัญหาแบ่งใน PIC16 และหน่วยความจำสำหรับแหวนของเขา buffer คำตอบนี้แสดงให้เห็นว่าการแบ่ง ไม่ใช่เรื่องยากเป็นที่ยอมรับมันไม่ได้อยู่ที่ปัญหาหน่วยความจำ แต่ระบบ SE ช่วยให้คำตอบบางส่วนและผู้ใช้สามารถใช้อะไรจากคำตอบสำหรับตัวเองหรือแม้กระทั่งการแก้ไขและรวมคำตอบอื่น ๆ s เนื่องจากบางส่วนของคำตอบอื่น ๆ ต้องมีการดำเนินการแบ่งพวกเขา ยังไม่สมบูรณ์เหมือนกันเนื่องจากไม่แสดงวิธีการอย่างมีประสิทธิภาพบรรลุนี้ใน PIC16 มาร์ติน 20 เมษายน 12 ที่ 13 01. มีคำตอบสำหรับการกรองเฉลี่ยจริงกรอง aka boxcar กรองกับความต้องการหน่วยความจำน้อยลงถ้าคุณ don t ใจ downsampling It s เรียกว่าตัวกรองแบบผสมผสานแบบเรียงซ้อน (Cascaded Integrator-comb filter) CIC แนวคิดก็คือคุณมีตัวรวบรวมข้อมูลซึ่งคุณใช้ความแตกต่างในช่วงเวลาหนึ่ง ๆ และอุปกรณ์ประหยัดหน่วยความจำที่สำคัญคือโดยการสุ่มตัวอย่างคุณจะไม่ต้องเก็บอีเวน ry ค่าของ integrator สามารถดำเนินการโดยใช้ pseudocode ต่อไปนี้ความยาวเฉลี่ยที่มีประสิทธิภาพของการเคลื่อนที่ของคุณคือการ decimationFactor stateize แต่คุณจะต้องเก็บตัวอย่างเกี่ยวกับ statesize แน่นอนคุณจะได้รับประสิทธิภาพที่ดีขึ้นถ้า statesize และ decimationFactor ของคุณมีอำนาจของ 2 เพื่อให้ ส่วนแบ่งและตัวดำเนินการที่เหลือได้รับการแทนที่โดยการเปลี่ยนแปลงและหน้ากาก - ands. Postscript ฉันเห็นด้วยกับ Olin ว่าคุณควรพิจารณาตัวกรอง IIR แบบธรรมดาก่อนที่ตัวกรองค่าเฉลี่ยที่เคลื่อนที่ถ้าคุณไม่จำเป็นต้องมี nulls ค่าของตัวกรอง boxcar 1 ขั้ว หรือตัวกรองความถี่ต่ำ 2 ขั้วอาจจะทำงานได้ดีในทางกลับกันถ้าคุณกำลังกรองเพื่อจุดประสงค์ในการ decimation โดยใช้อินพุตที่มีอัตราการสุ่มตัวอย่างสูงและใช้ค่าเฉลี่ยสำหรับการใช้งานด้วยกระบวนการที่มีอัตราต่ำและตัวกรอง CIC อาจเป็นเพียงสิ่งที่คุณกำลังมองหาโดยเฉพาะอย่างยิ่งถ้าคุณสามารถใช้ stateize 1 และหลีกเลี่ยง ringbuffer ทั้งหมดพร้อมเพียง value. There integrator ก่อนหน้านี้มีการวิเคราะห์ในเชิงลึกของคณิตศาสตร์ที่อยู่เบื้องหลังการใช้คำสั่งแรก er IIR filter ที่ Olin Lathrop ได้อธิบายไว้แล้วเกี่ยวกับการแลกเปลี่ยน stack การประมวลผลสัญญาณภาพดิจิตอลรวมถึงภาพสวย ๆ มากมายสมการนี้เป็นตัวกรอง IIR ซึ่งสามารถใช้งานได้โดยใช้ integers เพียงอย่างเดียวและไม่มีการหารโดยใช้โค้ดต่อไปนี้อาจต้องมีการดีบั๊กตามที่ฉัน กำลังพิมพ์จากหน่วยความจำตัวกรองนี้ประมาณค่าเฉลี่ยเคลื่อนที่ของตัวอย่าง K ล่าสุดด้วยการกำหนดค่าของอัลฟาไปเป็น 1 K ให้ทำดังนี้ในโค้ดข้างต้นด้วยการกำหนด BITS ไปที่ LOG2 K นั่นคือ K 16 ชุด BITS ถึง 4 สำหรับ K 4 ชุด BITS ถึง 2 ฯลฯ ฉันจะตรวจสอบรหัสที่ระบุไว้ที่นี่ทันทีที่ฉันได้รับการเปลี่ยนแปลงและแก้ไขคำตอบถ้า needed. answered 23 มิถุนายนที่ 4 04.Here sa เดียวขั้วต่ำผ่านกรองเฉลี่ยเคลื่อนที่ด้วย cutoff ความถี่ CutoffFrequency ง่ายมากอย่างรวดเร็วทำงานได้ดีและเกือบจะไม่มีหน่วยความจำ overhead. Note ตัวแปรทั้งหมดมีขอบเขตเกินกว่าฟังก์ชั่นการกรองยกเว้นผ่านใน newInput. Note นี่คือตัวกรองขั้นตอนเดียวหลายขั้นตอนสามารถ cascaded กันเพื่อเพิ่ม ความคมชัดของ ตัวกรองถ้าคุณใช้มากกว่าหนึ่งขั้นตอนคุณจะต้องปรับ DecayFactor เป็นที่เกี่ยวข้องกับ Cutoff ความถี่เพื่อชดเชยและเห็นได้ชัดทั้งหมดที่คุณต้องเป็นทั้งสองสายที่วางไว้ที่ใดก็ได้พวกเขา don t จำเป็นต้องใช้ฟังก์ชันของตัวเองตัวกรองนี้จะมี เวลาเริ่มทำงานก่อนค่าเฉลี่ยเคลื่อนที่ของสัญญาณอินพุตหากคุณต้องการหลีกเลี่ยงเวลาในการรับส่งสัญญาณคุณสามารถเริ่มต้น MovingAverage ให้เป็นค่าแรกของ newInput แทน 0 และหวังว่าอินเทอร์เฟซใหม่จะไม่เป็นค่าผิดปกติ CutRequest SampleRate มีช่วงระหว่าง 0 ถึง 0 5 DecayFactor คือค่าระหว่าง 0 ถึง 1 โดยปกติแล้วจะใกล้เคียงกับ 1.Single-precision floats ที่ดีพอสำหรับสิ่งต่างๆส่วนใหญ่ฉันชอบคู่ถ้าคุณต้องการติดตัวเลขจำนวนเต็มคุณสามารถ แปลง DecayFactor และ Amplitude Factor เป็นเศษเล็กเศษน้อยจำนวนเต็มซึ่งเป็นตัวเลขที่ถูกเก็บไว้เป็นจำนวนเต็มและตัวหารเป็นจำนวนเต็มของ 2 ดังนั้นคุณจึงสามารถเปลี่ยนบิตไปทางขวาเป็นตัวหารแทนที่จะต้องแบ่งระหว่างลูปไหว ตัวอย่างเช่นถ้า DecayFactor 0 99 และคุณต้องการใช้ integers คุณสามารถตั้งค่า DecayFactor 0 99 65536 64881 จากนั้นทุกครั้งที่คุณคูณด้วย DecayFactor ในลูปไส้กรองของคุณเพียงแค่เปลี่ยนผล 16.For ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้เป็นหนังสือที่ยอดเยี่ยมที่ s บทที่ 19 เกี่ยวกับตัวกรอง recursive. PS สำหรับกระบวนทัศน์ Moving Average ซึ่งเป็นแนวทางที่แตกต่างในการตั้งค่า DecayFactor และ AmplitudeFactor ที่อาจเกี่ยวข้องกับความต้องการของคุณมากขึ้นสมมติว่าคุณต้องการก่อนหน้านี้ประมาณ 6 รายการโดยเฉลี่ย tog ether ทำ discretely คุณ d เพิ่ม 6 รายการและหารด้วย 6 เพื่อให้คุณสามารถตั้งค่า AmplitudeFactor เป็น 1 6 และ DecayFactor เป็น 1 0 - AmplitudeFactor. answered 14 พฤษภาคม 12 ที่ 22 55 ทุกคนอื่นได้แสดงความคิดเห็นอย่างละเอียดเกี่ยวกับยูทิลิตี้ ของ IIR vs FIR และในอำนาจของสองฝ่ายฉัน d ต้องการให้รายละเอียดการใช้งานด้านล่างทำงานได้ดีใน microcontrollers ขนาดเล็กไม่มี FPU ไม่มีการคูณและถ้าคุณเก็บ N พลังของทั้งสองฝ่าย เป็น single-cycle bit-shifting บัฟเฟอร์ ring FIR พื้นฐานเก็บบัฟเฟอร์ที่กำลังทำงานของค่า N ล่าสุดและ SUM ที่ใช้งานของค่าทั้งหมดในบัฟเฟอร์แต่ละครั้งที่มีตัวอย่างใหม่เข้ามาให้ลบค่าที่เก่าแก่ที่สุดในบัฟเฟอร์จาก SUM แทนที่ด้วยตัวอย่างใหม่ให้เพิ่มตัวอย่างใหม่ไปที่ SUM และเอาต์พุตของ SUM N Modified IIR buffer จะมีค่า SUM ที่กำลังทำงานอยู่ของค่า N ล่าสุดแต่ละครั้งที่มีตัวอย่างใหม่มาให้ SUM - SUM N เพิ่มในใหม่ ตัวอย่างและผลลัพธ์ SUM ตอบเมื่อสิงหาคม 28 13 เวลา 13 45. ถ้าฉันอ่านคุณถูกต้องคุณจะอธิบายคำสั่งแรก IIR กรองค่าที่คุณลบออกใหม่ไม่ใช่ค่าที่เก่าแก่ที่สุดซึ่งหลุดออก แต่แทนที่จะเป็นค่าเฉลี่ยของค่าก่อนหน้าตัวกรอง IIR ของ First-order จะมีประโยชน์ แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเมื่อคุณแนะนำว่าเอาต์พุต เป็นเหมือนกันสำหรับทุกสัญญาณเป็นระยะ ๆ ที่อัตราการสุ่มตัวอย่าง 10 กิโลเฮิรตซ์การป้อนคลื่นความถี่ 100Hz ลงในตัวกรองกล่อง 20 เฟสจะทำให้สัญญาณที่เพิ่มขึ้นอย่างสม่ำเสมอสำหรับ 20 ตัวอย่างอยู่สูง 30 หยดสม่ำเสมอสำหรับ 20 ตัวอย่างและอยู่ต่ำ สำหรับ 30 A แรกสั่ง IIR supercat กรอง 28 สิงหาคม 13 ที่ 15 31.will ผลคลื่นที่รุนแรงเริ่มเพิ่มขึ้นและค่อยๆระดับออกใกล้ แต่ไม่ได้ใส่ที่สูงสุดแล้วอย่างรวดเร็วเริ่มลดลงและค่อยๆระดับปิดใกล้ แต่ไม่ได้ที่อินพุท น้อยมาก supercat พฤติกรรมที่แตกต่างกัน Aug 28 13 at 15 32.One ก็คือค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายอาจจะหรืออาจจะไม่เป็นประโยชน์กับตัวกรอง IIR คุณจะได้รับตัวกรองที่ดีกับ Calcs ค่อนข้าง FIR คุณอธิบายสามารถให้คุณ รูปสี่เหลี่ยมผืนผ้าในเวลา - sinc in freq - และคุณสามารถ t จัดการด้าน lobes มันอาจจะดีคุ้มค่าที่จะโยนในจำนวนเต็มไม่กี่คูณเพื่อให้เป็น FIR ปรับสมมาตรที่ดีถ้าคุณสามารถประหยัดนาฬิกา ticks Scott Seidman 29 สิงหาคม 13 ที่ 13 50 ScottSeidman No ต้องคูณถ้าหนึ่งมีเพียงขั้นตอนของ FIR ทั้งสองเอาท์พุทค่าเฉลี่ยของการป้อนข้อมูลไปยังขั้นตอนนั้นและค่าที่เก็บไว้ก่อนหน้านี้และจากนั้นเก็บข้อมูลถ้ามีช่วงตัวเลขหนึ่งสามารถใช้ผลรวมมากกว่าเฉลี่ยไม่ว่าจะเป็น s ดีกว่าตัวกรองกล่องขึ้นอยู่กับโปรแกรมการตอบสนองขั้นตอนของตัวกรองกล่องที่มีความล่าช้ารวม 1ms ตัวอย่างเช่นจะมีการบีบ d2 dt น่ารังเกียจเมื่อการเปลี่ยนแปลงการป้อนข้อมูลและอีกครั้ง 1ms ต่อมา แต่จะมีขั้นต่ำที่เป็นไปได้ d dt สำหรับตัวกรองที่มี superms 1ms ล่าช้า 29 สิงหาคม 13 ที่ 15 25. เป็น mikeselectricstuff กล่าวว่าถ้าคุณต้องการจริงๆเพื่อลดความต้องการหน่วยความจำของคุณและคุณ don t ใจการตอบสนองต่อแรงกระตุ้นของคุณเป็นเลขแทนของชีพจรรูปสี่เหลี่ยมผืนผ้าฉัน จะไปสำหรับการเคลื่อนที่แบบเอ็กซ์เรย์แทน กรองความโกรธฉันใช้พวกเขาอย่างกว้างขวางกับชนิดของตัวกรองที่คุณ don t ต้อง buffer คุณ don t ต้องเก็บตัวอย่างที่ผ่านมา N เพียงหนึ่งดังนั้นความต้องการหน่วยความจำของคุณได้รับการลดลงโดยปัจจัยของ N. นอกจากนี้คุณ don t ต้องใด สำหรับ multiplications เฉพาะที่ถ้าคุณมีการเข้าถึงเลขคณิตลอยเลขใช้ทศนิยม multiplications มิฉะนั้นทำ multiplications จำนวนเต็มและเลื่อนไปทางขวา แต่เราอยู่ในปี 2012 และผมอยากจะแนะนำให้คุณใช้คอมไพเลอร์และ MCUs ที่ช่วยให้คุณ ในการทำงานกับตัวเลข floating-point นอกจากนี้หน่วยความจำที่มีประสิทธิภาพมากขึ้นและเร็วขึ้นคุณ don t ต้องปรับปรุงรายการในบัฟเฟอร์วงกลมใด ๆ ที่ฉันจะบอกว่ามันเป็นธรรมชาติมากขึ้นเพราะการตอบสนองแรงกระตุ้นเลขชี้ตรงกับลักษณะทางธรรมชาติจะทำงานในกรณีส่วนใหญ่ ได้ตอบ 20 เมษายนที่ 9 59.One กับตัวกรอง IIR เกือบสัมผัสโดย olin และ supercat แต่เห็นได้ชัดว่าละเลยโดยคนอื่น ๆ ก็คือการปัดเศษแนะนำบางอย่างไม่ถูกต้องและอาจตัดทรราชสมมติว่า N i อำนาจของสองและใช้เลขคณิตจำนวนเต็มเท่านั้นการเปลี่ยนสิทธิจะทำให้ LSBs ของตัวอย่างใหม่เป็นระบบอย่างเป็นระบบนั่นหมายความว่าระยะเวลาที่ชุดข้อมูลจะยาวนานเท่าใดค่าเฉลี่ยจะไม่นำค่าเหล่านี้เข้าสู่บัญชีตัวอย่างเช่นสมมติว่าช้า ลดลงชุด 8,8,8 8,7,7,7 7,6,6 และสมมติว่าค่าเฉลี่ยเป็นจริง 8 ที่จุดเริ่มต้นกำปั้น 7 ตัวอย่างจะนำค่าเฉลี่ยไป 7 ไม่ว่าสิ่งที่กรองความแข็งแรงเพียงแค่หนึ่งตัวอย่างเดียวกัน เรื่องราวสำหรับ 6 ฯลฯ ตอนนี้คิดว่าตรงข้ามซีรีย์ขึ้นค่าเฉลี่ยจะอยู่ที่ 7 ตลอดไปจนกว่าตัวอย่างมีขนาดใหญ่พอที่จะทำให้มันเปลี่ยนแปลงได้แน่นอนคุณสามารถแก้ไขความอคติโดยการเพิ่ม 1 2 N 2 แต่ ที่ได้รับรางวัล t จริงๆแก้ปัญหาความแม่นยำในกรณีที่ชุดลดลงจะอยู่ที่ 8 ตลอดจนตัวอย่างเป็น 8-1 2 N 2 สำหรับ N 4 ตัวอย่างใด ๆ เหนือศูนย์จะให้ค่าเฉลี่ยไม่เปลี่ยนแปลงผมเชื่อว่าการแก้ปัญหาสำหรับ นั่นหมายความว่าจะถือสะสมของ LSBs หายไป แต่ฉัน didn t ทำให้ไกลพอที่จะมีรหัสพร้อม, และฉันไม่แน่ใจว่ามันจะไม่เป็นอันตรายต่ออำนาจ IIR ในกรณีอื่น ๆ ของชุดเช่น 7,9,7,9 จะเฉลี่ย 8 แล้ว. Olin น้ำตกสองขั้นตอนของคุณจะต้องมีคำอธิบายด้วยคุณหมายถึงการถือครองค่าเฉลี่ยสองค่าด้วยผลลัพธ์จากการป้อนข้อมูลครั้งแรกเป็นอันดับที่สองในแต่ละรอบข้อมูลอะไรคือประโยชน์ของข้อมูลนี้ฉันมีข้อมูลจำนวน 4000 หุ้นและ tring เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับค่าข้อมูลทั้งหมด แต่เนื่องจากค่าเฉลี่ยเคลื่อนที่จะขึ้นอยู่กับข้อมูลก่อนหน้าและฉันไม่สามารถคำนวณ SMA 15 วันเป็นเวลา 14 วันข้าม 14 วันแรกและคำนวณ SMA ในส่วนที่เหลือของข้อมูล และจะต้องใช้ LINQ เพื่อให้บรรลุทุกคนสามารถให้ตัวอย่างหรือคำใบ้วิธีการใช้ LINQ ในการคำนวณค่าเฉลี่ยเคลื่อนที่ผลผลิตสำหรับค่าเฉลี่ยอยู่ที่ประมาณ 500 si จริงๆ don t เข้าใจว่าเป็นไปได้ที่จะได้รับค่าสูงที่ การย้ายเฉลี่ยโดยรวมอาร์เรย์ 07 2012 562 49 571 72.06 08 2012 565 84 580 32.06 11 2012 568 56 571 17.06 12 2012 569 55 576 16.06 13 2012 570 56 572 16.06 14 2012 570 63 571 53.06 15 2012 571 21 574 13.06 18 2012 572 78 585 78.06 19 2012 573 79 587 41.06 20 2012 574 23 585 74.06 21 2012 574 22 577 67.06 22 2012 575 63 582 10.06 25 2012 576 06 570 77.06 26 2012 576 68 572 03.06 27 2012 576 88 574 50.06 28 2012 576 7 569 05.06 29 2012 576 95 584 00.07 02 2012 578 37 592 52.07 03 2012 579 92 599 41.07 03 2012 581 74 599 41. อ้างจาก Leemx วันศุกร์ที่ 16 พฤศจิกายน พ. ศ. 2555 2 59 น. โดย Lisa Zhu เจ้าหน้าที่ Microsoft ประจำวันจันทร์ที่ 19 พฤศจิกายน พ. ศ. 2555 7 38 น. Linq related จาก Visual C General Friday, November 16, 2012 2 42 AM หากต้องการสร้างค่าเฉลี่ยเคลื่อนที่เราจะเริ่มต้นด้วยการสร้างช่วงตั้งแต่ 0 ถึงความยาวของรายการข้อมูล - ความยาวของระยะเวลาการย้ายจากนั้นสำหรับแต่ละค่าในช่วงเลือกองค์ประกอบ x ถึง x ยาวของ ย้ายระยะเวลาและคำนวณ average. All ในหนึ่งงบ LINQ ดีโปรดทราบว่านี้ไม่ได้มีประสิทธิภาพมากเนื่องจากคุณโดยทั่วไปย้ำกว่ารายการข้อมูลสำหรับทุกค่าในช่วงที่พวกเขาดูระบบนี้ช่วยให้ลายเซ็นของมากกว่า 60 cha แก้ไขโดย Arno Brouwer ศุกร์, พฤศจิกายน 23, 2012 4 42 PM. Marked เป็นคำตอบโดย Alexander Sun วันศุกร์, Decembe r 07, 2012 2 44 AM. Friday, November 23, 2012 4 41 PM. All replies. A ตัวอย่างของคำสั่ง LINQ ของคุณจะช่วยเพิ่มประสิทธิภาพการเพาะเลี้ยงเป็นรากของความชั่วร้ายทั้งหมด - Knuth. To สร้างค่าเฉลี่ยเคลื่อนที่ฉันจะเริ่มต้น โดยการสร้างช่วงตั้งแต่ 0 ถึงความยาวของรายการข้อมูล - ความยาวของระยะเวลาการเคลื่อนที่แล้วสำหรับแต่ละค่าในช่วงเลือกองค์ประกอบ x ถึง x ยาวของระยะเวลาการเคลื่อนที่และคำนวณ average. All ในงบ LINQ หนึ่งที่ดีโปรดทราบว่านี่ไม่ใช่ มีประสิทธิภาพมากเนื่องจากคุณเป็นพื้นย้ำผ่านรายการข้อมูลสำหรับทุกค่าในช่วงมองดูระบบนี้ช่วยให้ลายเซ็นของมากกว่า 60 cha. Edited โดย Arno Brouwer ศุกร์พฤศจิกายน 23, 2012 4 42 PM. Marked เป็นคำตอบโดย Alexander Sun Friday, December 07, 2012 2 44 น. วันที่ 23 พฤศจิกายน พ. ศ. 2555 4 41 น. ไมโครซอฟท์กำลังดำเนินการสำรวจความคิดเห็นออนไลน์ของคุณเกี่ยวกับเว็บไซต์ Msdn หากคุณเลือกที่จะเข้าร่วมการสำรวจออนไลน์จะนำเสนอแก่คุณ เมื่อคุณออกจากเว็บไซต์ Msdn เว็บคุณต้องการเข้าร่วมช่วยเราปรับปรุง M SDN เยี่ยมชมหน้า UserVoice ของเราเพื่อส่งและลงมติเกี่ยวกับแนวคิดต่างๆศูนย์ข้อมูลศูนย์การเรียนรู้

Comments