การเคลื่อนไหวที่รวดเร็ว เฉลี่ย -C ++

การเคลื่อนไหวที่รวดเร็ว เฉลี่ย -C ++

Forex   ของ เนปาล
ไบนารี ตัวเลือก ผลไม้ชนิดหนึ่ง
ที่ดีที่สุด -forex- ร้อย บัญชี


Bollinger วง ไบนารี ซื้อขาย Etrading ออนไลน์ อินโดนีเซีย ฟุตบอล -trading- ระบบ 15 นาที ผลกำไร Forex- การจัดการเงิน - Excel แผ่น Bollinger วง - แผนภูมิ รูปแบบ Binary ตัวเลือก -trading- สด

ในใบสมัครซื้อขายของฉันฉันมีเห็บอยู่ของราคาหุ้น ฉันต้องการรักษา SMA ให้สมมติว่าฉันต้องการ SMA จากเทียน 20 ดวงโดยที่ระยะเวลาของเทียนแต่ละอันอยู่ที่ 10 วินาที ซึ่งหมายความว่าทุก 10 วินาทีฉันมีจุดตรวจที่: ฉันปิดเทียนปัจจุบันและเก็บราคาเฉลี่ยสำหรับ 10 วินาทีล่าสุด เฉลี่ย (สูงสุด - นาที) 2 ฉันเริ่มต้นเทียนใหม่และเก็บราคาล่าสุด ฉันทำความสะอาดเทียนล้าสมัยแล้ว ฉันอัพเดตราคาล่าสุดของเทียนขึ้นรูปและคำนวณ SMA ดังนั้นเมื่อเห็บฉันต้องคำนวณ SMA ในกรณีส่วนใหญ่จะมีการเปลี่ยนแปลงเฉพาะราคาของเทียนที่ผ่านมา (ทำให้เราใช้ราคาล่าสุด) ครั้งต่อ 10 วินาทีฉันต้องทำงานพิเศษเพิ่มเติมเล็กน้อย - ฉันต้องลืมค่าเฉลี่ยของเทียนที่ล้าสมัยและเก็บค่าเฉลี่ยของเทียนที่เพิ่งสร้างขึ้น คุณสามารถแนะนำวิธีการดำเนินการนี้ด้วยเวลาแฝงต่ำที่สุดความต้องการแฝงต่ำเป็นสิ่งจำเป็นหลัก ถาม 28 เม.ย. 14 เวลา 10:21 น. ไม่แน่ใจว่านี่เป็นวิธีการที่คุณต้องการหรือไม่ แต่นี่คือพีดีเอสสำหรับ SMA ที่รวดเร็วมาก Simple Moving Average: สมมติว่าข้อมูลของคุณมาในรูปแบบของสตรีมบางส่วนและเก็บไว้ในที่เก็บหน่วยความจำอย่างต่อเนื่อง (อย่างน้อยด้วยที่อยู่ที่ทำแผนที่อย่างต่อเนื่อง) ด้วยวิธีนี้การเพิ่มสองครั้งและการคูณ (ด้วย 12000) คุณสามารถสร้างค่าเฉลี่ยเคลื่อนที่ที่ตามมาสำหรับ เห็บใหม่ ค่าเฉลี่ยเคลื่อนที่ที่ระบุ: นั่นคือทางเลือกที่ดีตามที่กล่าวมาข้างต้น: นี่ไม่ใช่ค่าเฉลี่ยเคลื่อนที่เฉลี่ยของ N-day ค่าเฉลี่ยถ่วงน้ำหนักที่มีน้ำหนักเฉลี่ย 87 เท่าในช่วง N วันที่ผ่านมาเกือบจะถึงสิบวัน หมายเหตุเกี่ยวกับการเพิ่มประสิทธิภาพของคอมไพเลอร์: โปรดทราบว่าการเปิดใช้ตัวเลือก SSE หรือ AVX ถ้ามีจะช่วยให้สามารถเร่งความเร็วของอัลกอริทึมเหล่านี้ได้มากขึ้นเนื่องจากการคำนวณหลายแบบสามารถปั่นออกได้ในรอบซีพียูเดียว อัลกอริธึมไม่น่าจะก่อให้เกิดข้อผิดพลาดเว้นแต่พื้นที่หน่วยความจำที่ใช้จะถูกเปลี่ยนแปลงโดยเธรดอื่น เกี่ยวกับการคำนวณใหม่ทั้งหมด วิธีการเพิ่มความเร็วโค้ดของคุณคือการถ่ายโอนกระบวนการดังกล่าวไปยังเธรดอื่นดังนั้นจึงไม่สามารถปิดกั้นการประมวลผลการคำนวณ MA หลักของคุณได้ เนื่องจากเป็นงานที่เป็นอิสระมันจะง่ายมากที่จะ parallelize รหัสนี้ 14 กรกฎาคม 14 เวลา 12:30 ดังนั้นคุณต้องมีคิวของขนาดคงที่สวยมากที่คุณมีประสิทธิภาพสามารถเพิ่มรายการใหม่และลบรายการที่เก่าแก่ที่สุด เพื่อลบออกจากยอดรวมของคุณ) ทำไมไม่ std :: queue นี้สามารถนั่งอยู่ด้านบนของภาชนะต่างๆ แต่ถ้าคุณจริงๆมีเพียง 20 องค์ประกอบฉันสงสัยว่าเวกเตอร์จะทำงานได้ดี (ลบรายการต้องย้ายรายการอื่น ๆ ทั้งหมดลงหนึ่ง - แต่ย้ายหน่วยต่อเนื่องกันของหน่วยความจำได้อย่างรวดเร็ว.) คุณอาจต้องการเปรียบเทียบประสิทธิภาพกับ deque หรือรายการแม้ว่า (คำตอบอาจขึ้นอยู่กับสิ่งที่คุณจัดเก็บไว้สำหรับเทียนแต่ละดวง - เพียง floatdoubleint เดียวหรือโครงสร้างที่ซับซ้อนมากขึ้น) ฉันรู้ว่านี่ทำได้ด้วยการเพิ่มตาม: แต่ฉันต้องการหลีกเลี่ยงการเพิ่ม ฉันมี googled และไม่พบตัวอย่างที่เหมาะสมหรืออ่านได้ โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของสตรีมกระแสข้อมูลจำนวนจุดลอยโดยใช้ตัวเลข 1000 ครั้งล่าสุดเป็นตัวอย่างข้อมูล วิธีที่ง่ายที่สุดในการทำแบบทดสอบนี้คือการใช้อาร์เรย์แบบวงกลมค่าเฉลี่ยเคลื่อนที่แบบเสวนาและค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายกว่าและพบว่าผลลัพธ์จากอาร์เรย์แบบวงกลมเหมาะกับความต้องการของฉันมากที่สุด ถาม 12 มิ.ย. 12 เวลา 4:38 หากความต้องการของคุณเรียบง่ายคุณอาจลองใช้ค่าเฉลี่ยเคลื่อนที่แบบเสวนา ใส่เพียงแค่คุณสร้างตัวแปรสะสมและเมื่อโค้ดของคุณดูที่ตัวอย่างแต่ละโค้ดจะอัปเดตข้อมูลสะสมด้วยค่าใหม่ คุณสามารถเลือกค่า alpha คงที่ระหว่าง 0 ถึง 1 และคำนวณค่านี้: คุณเพียงแค่หาค่า alpha ที่ผลของตัวอย่างที่กำหนดจะใช้เวลาประมาณ 1000 ตัวอย่างเท่านั้น อืมฉันไม่แน่ใจว่านี่เหมาะกับคุณแล้วตอนนี้ฉันวางมันไว้ที่นี่แล้ว ปัญหาคือ 1000 เป็นหน้าต่างยาวสวยสำหรับค่าเฉลี่ยเคลื่อนที่ที่อธิบายไม่แน่ใจว่ามีอัลฟาที่จะกระจายค่าเฉลี่ยมากกว่า 1000 หมายเลขล่าสุดโดยไม่ต้อง underflow ในการคำนวณจุดลอย แต่ถ้าคุณต้องการค่าเฉลี่ยที่เล็กลงเช่น 30 ตัวเลขหรือมากกว่านี่เป็นวิธีที่ง่ายและรวดเร็วในการดำเนินการ ตอบ 12 มิ.ย. 12 เวลา 4:44 1 ในโพสต์ของคุณ ค่าเฉลี่ยเคลื่อนที่ที่อธิบายได้จะทำให้ตัวแปรอัลฟ่าเป็นตัวแปรได้ ดังนั้นจึงช่วยให้สามารถใช้คำนวณค่าเฉลี่ยของฐานเวลา (เช่นไบต์ต่อวินาที) ถ้าเวลานับตั้งแต่การอัปเดตสะสมครั้งล่าสุดเป็นเวลามากกว่า 1 วินาทีคุณจะยอมให้ alpha เป็น 1.0 มิเช่นนั้นคุณสามารถปล่อยให้ alpha เป็น (usecs ตั้งแต่ update1000000 ครั้งล่าสุด) ndash jxh Jun 12 12 at 6:21 โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของกระแสอย่างต่อเนื่องของกระแสตัวเลขจุดลอยใช้ล่าสุด 1000 หมายเลขเป็นตัวอย่างข้อมูล โปรดทราบว่าด้านล่างปรับปรุงชุดค่าผสมทั้งหมดเป็นองค์ประกอบที่เพิ่มขึ้นโดยไม่ต้องเสียค่าใช้จ่ายในการคำนวณ O (N) traversal เพื่อคำนวณผลรวม - จำเป็นสำหรับค่าเฉลี่ย - ตามความต้องการ ทั้งหมดถูกกำหนดเป็นพารามิเตอร์อื่นจาก T เพื่อสนับสนุนเช่น ใช้ยาวนานเมื่อรวม 1000 ยาว s, int สำหรับ char s หรือ double เพื่อรวม float s นี่เป็นบิตที่มีข้อบกพร่องในการที่ numsamples อาจผ่าน INTMAX - ถ้าคุณสนใจคุณสามารถใช้ unsigned long long หรือใช้สมาชิกข้อมูล bool พิเศษเพื่อบันทึกเมื่อเติมคอนเทนเนอร์เป็นครั้งแรกในขณะที่วนรอบ numsamples รอบ (ดีที่สุดแล้วเปลี่ยนชื่อบางอย่างที่ไม่เป็นอันตรายเช่น pos) ตอบ 12 มิ.ย. 12 at 5:19 สมมติว่าตัวดำเนินการ quotvoid (T sample) quot ก็คือ quotvoid operatorltlt (T sample) quot ndash o วันที่ 8 มิ.ย. 14 เวลา 11:52 น. oPhút ahhh เห็นดี จริงฉันตั้งใจจะให้โมฆะดำเนิน () (T ตัวอย่าง) แต่แน่นอนคุณสามารถใช้สิ่งที่คุณต้องการสัญกรณ์. จะแก้ไขขอบคุณ ndash Tony D มิ.ย. 8 14 เวลา 14: 27 ตามที่คนอื่น ๆ พูดถึงคุณควรพิจารณาตัวกรอง IIR (การตอบสนองต่ออิมพัลส์ไม่ จำกัด ) แทนที่จะใช้ตัวกรองฟิลเตอร์ FIR ที่คุณกำลังใช้อยู่ มีมากขึ้นไปได้ แต่ในตอนแรกอย่างรวดเร็วตัวกรอง FIR จะถูกนำมาใช้เป็นตัวคั่นที่ชัดเจนและตัวกรอง IIR ที่มีสมการ ตัวกรอง IIR ที่ฉันใช้เป็นจำนวนมากในไมโครคอนโทรลเลอร์คือตัวกรองสัญญาณขาเดียวแบบขั้วเดียว นี่คือดิจิตอลเทียบเท่าของตัวกรองสัญญาณ R-C แบบง่าย สำหรับแอปพลิเคชันส่วนใหญ่คุณลักษณะเหล่านี้จะมีลักษณะที่ดีกว่าตัวกรองช่องที่คุณใช้อยู่ การใช้ส่วนใหญ่ของตัวกรองกล่องที่ฉันพบเป็นผลมาจากคนที่ไม่ให้ความสนใจในคลาสการประมวลผลสัญญาณดิจิทัลไม่ใช่จากลักษณะเฉพาะของพวกเขา ถ้าคุณต้องการลดความถี่สูงที่คุณรู้ว่าเป็นสัญญาณรบกวนตัวกรองสัญญาณขาเดียวแบบขั้วเดียวจะดีกว่า วิธีที่ดีที่สุดในการใช้งานแบบดิจิทัลในไมโครคอนโทรลเลอร์คือ: FILT lt - FILT FF (NEW - FILT) FILT เป็นสถานะที่มีความคงทน นี่เป็นตัวแปรเดียวที่คุณต้องใช้เพื่อคำนวณตัวกรองนี้ NEW เป็นค่าใหม่ที่ตัวกรองจะได้รับการอัปเดตด้วยการทำซ้ำนี้ FF คือส่วนของตัวกรอง ซึ่งจะปรับความหนักเบาของตัวกรอง ดูที่ขั้นตอนนี้และดูว่าสำหรับ FF 0 ตัวกรองเป็นแบบอนันต์หนักเนื่องจากผลลัพธ์ไม่เคยเปลี่ยนแปลง สำหรับ FF 1 จริงๆไม่มีตัวกรองเลยตั้งแต่เอาท์พุททำตาม input ค่าที่เป็นประโยชน์อยู่ระหว่าง ในระบบขนาดเล็กที่คุณเลือก FF เป็น 12 N เพื่อให้คูณด้วย FF สามารถทำได้เป็น shift ขวาโดย N บิต ตัวอย่างเช่น FF อาจเป็น 116 และคูณด้วย FF ดังนั้นจึงมีการเลื่อนทางขวาเป็น 4 บิต มิเช่นนั้นตัวกรองนี้จะต้องมีเพียงหนึ่งคำเดียวลบออกและเพิ่มหนึ่งครั้งแม้ว่าตัวเลขจะต้องกว้างกว่าค่าอินพุท (มากกว่าความแม่นยำเชิงตัวเลขในส่วนที่แยกต่างหากด้านล่าง) ฉันมักจะใช้เวลาอ่านโฆษณาอย่างมีนัยสำคัญได้เร็วกว่าที่จำเป็นและใช้ตัวกรองเหล่านี้สองตัวเรียงกัน นี่คือดิจิตอลเทียบเท่าของตัวกรอง R-C สองชุดและลดลง 12 dBoctave เหนือความถี่ rolloff อย่างไรก็ตามสำหรับการอ่านโฆษณามักจะมีความเกี่ยวข้องมากขึ้นในการดูตัวกรองในโดเมนเวลาโดยพิจารณาการตอบกลับขั้นตอน นี่จะบอกคุณว่าระบบของคุณจะเห็นการเปลี่ยนแปลงอย่างไรเมื่อสิ่งที่คุณกำลังวัดการเปลี่ยนแปลง เพื่ออำนวยความสะดวกในการออกแบบตัวกรองเหล่านี้ (ซึ่งหมายถึงการเลือก FF และการตัดสินใจว่าจะให้น้ำตกมากเพียงใด) ฉันใช้ FILTBITS ของโปรแกรม คุณระบุจำนวนของบิต shift สำหรับแต่ละเฟรมในชุดตัวกรองแบบเรียงกันและคำนวณค่าการตอบสนองขั้นตอนและค่าอื่น ๆ ที่จริงฉันมักจะใช้นี้ผ่าน wrapper script PLOTFILT ของฉัน การดำเนินการนี้จะเรียกใช้ FILTBITS ซึ่งจะสร้างไฟล์ CSV จากนั้นแปลงไฟล์ CSV ตัวอย่างเช่นนี่คือผลของ PLOTFILT 4 4: พารามิเตอร์สองตัวของ PLOTFILT หมายความว่าจะมีตัวกรองสองแบบเรียงตามลำดับชั้นดังกล่าวข้างต้น ค่าของ 4 ระบุจำนวนของกะบิตเพื่อให้เกิดการคูณด้วย FF ทั้งสองค่า FF จึงเป็น 116 ในกรณีนี้ การติดตามสีแดงคือการตอบสนองต่อหน่วยและเป็นสิ่งสำคัญที่ต้องดู ตัวอย่างเช่นข้อมูลนี้บอกให้คุณทราบว่าหากข้อมูลอินพุตเปลี่ยนแปลงทันทีผลลัพธ์ของตัวกรองรวมจะกำหนดให้เท่ากับ 90 ค่าใหม่ใน 60 ซ้ำ ถ้าคุณสนใจเกี่ยวกับเวลาการตั้งถิ่นฐาน 95 แล้วคุณต้องรอประมาณ 73 ซ้ำและสำหรับเวลาการตกตะกอนเพียง 26 ซ้ำ ร่องรอยสีเขียวแสดงให้เห็นว่าคุณได้รับเอาท์พุทจากการขยายความกว้างเต็มรูปแบบเดียว นี้จะช่วยให้คุณมีความคิดของการปราบปรามเสียงสุ่ม ดูเหมือนว่าไม่มีตัวอย่างใดจะทำให้เกิดการเปลี่ยนแปลงในเอาต์พุตมากกว่า 2.5 ร่องรอยสีน้ำเงินคือการให้ความรู้สึกอัตนัยของสิ่งที่ตัวกรองนี้ทำด้วยเสียงสีขาว นี่ไม่ใช่การทดสอบอย่างเข้มงวดเนื่องจากไม่มีการรับประกันว่าเนื้อหาใดเป็นตัวเลขสุ่มที่เลือกเป็นสัญญาณเสียงรบกวนสีขาวสำหรับการทำงานของ PLOTFILT นี้ เพียงเพื่อให้คุณรู้สึกขรุขระของเท่าใดก็จะถูกแบนและเรียบเป็นอย่างไร PLOTFILT บางที FILTBITS และสิ่งที่มีประโยชน์อื่น ๆ โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเฟิร์มแวร์ของ PIC มีอยู่ในซอฟต์แวร์ PIC Development Tools ที่หน้าดาวน์โหลดซอฟต์แวร์ของฉัน เพิ่มความแม่นยำเชิงตัวเลขที่ฉันเห็นจากความคิดเห็นและตอนนี้เป็นคำตอบใหม่ที่มีความสนใจในการพูดคุยเกี่ยวกับจำนวนบิตที่จำเป็นในการใช้ตัวกรองนี้ โปรดทราบว่าคูณด้วย FF จะสร้างบิตใหม่ Log 2 (FF) ด้านล่างจุดไบนารี ในระบบขนาดเล็ก FF มักจะได้รับเลือกให้เป็น 12 N เพื่อให้การคูณนี้เกิดขึ้นจริงโดยการเปลี่ยน N บิตที่ถูกต้อง FILT จึงเป็นจำนวนเต็มจุดคงที่ โปรดทราบว่านี้ไม่ได้เปลี่ยนคณิตศาสตร์ใด ๆ จากมุมมองของตัวประมวลผล ตัวอย่างเช่นถ้าคุณกำลังกรองการอ่านโฆษณา 10 บิตและ N 4 (FF 116) คุณต้องใช้เศษเศษส่วนด้านล่าง 10 บิตจำนวนเต็ม AD อ่าน โปรเซสเซอร์ส่วนใหญ่คุณจะต้องดำเนินการเป็นจำนวนเต็ม 16 บิตเนื่องจากการอ่านค่า 10 บิต AD ในกรณีนี้คุณยังคงสามารถดำเนินการได้ตามจำนวนเต็ม 16 บิตเดิม แต่เริ่มต้นด้วยการอ่านค่า AD ด้านซ้ายที่เปลี่ยนไป 4 บิต โปรเซสเซอร์ไม่ทราบความแตกต่างและไม่จำเป็นต้องทำ การทำคณิตศาสตร์กับจำนวนเต็ม 16 บิตทั้งหมดใช้งานได้ไม่ว่าคุณจะคิดว่าเป็น 12.4 จุดคงที่หรือจำนวนเต็ม 16 บิตจริง (16.0 จุดคงที่) โดยทั่วไปคุณจำเป็นต้องเพิ่มบิต N แต่ละขั้วกรองหากคุณไม่ต้องการเพิ่มเสียงเนื่องจากการแสดงตัวเลข ในตัวอย่างข้างต้นตัวกรองที่สองของสองจะต้องมี 1044 18 บิตเพื่อไม่สูญเสียข้อมูล ในทางปฏิบัติบนเครื่อง 8 บิตซึ่งหมายความว่าคุณต้องใช้ค่าบิต 24 เทคนิคเฉพาะขั้วที่สองของสองจะต้องมีค่ามากขึ้น แต่สำหรับความเรียบง่ายของเฟิร์มผมมักจะใช้การแทนเดียวกันและด้วยรหัสเดียวกันสำหรับเสาทั้งหมดของตัวกรอง ฉันมักจะเขียนโปรแกรมย่อยหรือแมโครเพื่อทำการดำเนินการของเสากรองหนึ่งตัวจากนั้นจึงนำไปใช้กับเสาแต่ละอัน ไม่ว่าจะเป็นโปรแกรมย่อยหรือแมโครขึ้นอยู่กับว่าวงจรหรือหน่วยความจำโปรแกรมมีความสำคัญมากกว่าในโครงการนั้นหรือไม่ ไม่ว่าจะด้วยวิธีใดก็ตามฉันใช้สถานะการขูดขีดเพื่อส่ง NEW เข้าไปใน subroutinemacro ซึ่งอัปเดต FILT แต่ยังโหลดข้อมูลที่เป็นสถานะการขีดข่วนเหมือนเดิม NEW ซึ่งทำให้ง่ายต่อการใช้เสาหลายอันเนื่องจาก FILT อัปเดตของเสาเดียวคือ NEW ของหน้าถัดไป เมื่อโปรแกรมย่อยมีประโยชน์ที่จะมีจุดชี้ไปที่ FILT ระหว่างทางซึ่งได้รับการอัปเดตเป็นเพียง FILT เมื่อออกไป ด้วยวิธีนี้ subroutine จะทำงานกับตัวกรองข้อมูลที่ต่อเนื่องในหน่วยความจำโดยอัตโนมัติถ้าเรียกว่าหลายครั้ง กับแมโครคุณไม่จำเป็นต้องชี้ตั้งแต่คุณผ่านในที่อยู่ในการทำงานในแต่ละซ้ำ ตัวอย่างโค้ดนี่คือตัวอย่างของมาโครตามที่อธิบายข้างต้นสำหรับ PIC 18: และนี่คือแมโครที่คล้ายกันสำหรับ PIC 24 หรือ dsPIC 30 หรือ 33: ทั้งสองตัวอย่างนี้ถูกใช้เป็นแมโครโดยใช้ตัวประมวลผลแอ็กเซสเซอร์ของ PIC ของฉัน ซึ่งมีความสามารถมากขึ้นกว่าสิ่งอำนวยความสะดวกที่มีมาโครภายในตัวใดตัวหนึ่ง ปัญหาอื่นที่ควรจะกล่าวถึงคือการใช้เฟิร์มแวร์ คุณสามารถเขียนโพรโทคอลต่ำผ่านโพรเซสเซอร์ได้เพียงครั้งเดียวจากนั้นใช้หลายครั้ง ในความเป็นจริงฉันมักจะเขียนเช่น subroutine เพื่อนำตัวชี้ในหน่วยความจำไปยังสถานะตัวกรองแล้วมีมันล่วงหน้าตัวชี้เพื่อที่จะสามารถเรียกได้อย่างต่อเนื่องในการรับรู้หลายตัวกรองเสา ndash Olin Lathrop Apr 20 12 at 15:03 1. ขอบคุณมากสำหรับคำตอบของคุณ - ทั้งหมด ฉันตัดสินใจที่จะใช้ตัวกรอง IIR นี้ แต่ตัวกรองนี้ไม่ได้ใช้เป็นตัวกรอง LowPass มาตรฐานเพราะฉันต้องการเฉลี่ยค่าตัวนับและเปรียบเทียบเพื่อตรวจจับการเปลี่ยนแปลงในช่วงที่กำหนด เนื่องจากค่าเหล่านี้มีมิติแตกต่างกันไปโดยขึ้นอยู่กับฮาร์ดแวร์ที่ฉันต้องการใช้โดยเฉลี่ยเพื่อให้สามารถตอบสนองต่อการเปลี่ยนแปลงเฉพาะฮาร์ดแวร์เหล่านี้ได้โดยอัตโนมัติ ถ้าคุณสามารถอยู่กับข้อ จำกัด ของจำนวนสองรายการโดยเฉลี่ย (เช่น 2,4,8,16,32 ฯลฯ ) จากนั้นหารสามารถทำได้อย่างง่ายดายและมีประสิทธิภาพใน micro ประสิทธิภาพต่ำโดยไม่มีการทุ่มเทแบ่งเพราะสามารถทำได้เป็นบิตเปลี่ยน การเปลี่ยนสิทธิแต่ละครั้งเป็นหนึ่งในพลังของสองเช่น: OP คิดว่าเขามีปัญหาสองข้อแบ่งใน PIC16 และหน่วยความจำสำหรับบัฟเฟอร์แหวนของเขา คำตอบนี้แสดงให้เห็นว่าการหารไม่ใช่เรื่องยาก เป็นที่ยอมรับมันไม่ได้อยู่ที่ปัญหาหน่วยความจำ แต่ระบบ SE ช่วยให้คำตอบบางส่วนและผู้ใช้สามารถใช้อะไรจากคำตอบสำหรับตัวเองหรือแม้กระทั่งการแก้ไขและรวมคำตอบของผู้อื่น เนื่องจากบางส่วนของคำตอบอื่น ๆ ต้องการการดำเนินการแบ่งพวกเขาจะไม่เหมือนกันเหมือนกันเนื่องจากพวกเขาไม่แสดงวิธีการได้อย่างมีประสิทธิภาพบรรลุนี้บน PIC16 มีคำตอบสำหรับตัวกรองค่าเฉลี่ยเคลื่อนที่ที่แท้จริง (aka boxcar filter) ที่มีความต้องการหน่วยความจำน้อยกว่าถ้าคุณไม่เข้าใจการสุ่มตัวอย่าง เรียกว่าตัวกรองแบบผสมผสาน (cascaded integrator-comb filter) (CIC) แนวคิดคือคุณมีผู้ผสานรวมที่คุณใช้ความแตกต่างในช่วงเวลาหนึ่งและอุปกรณ์ประหยัดหน่วยความจำที่สำคัญคือโดยการสุ่มตัวอย่างคุณไม่จำเป็นต้องเก็บค่าของ Integrator ทุกตัว สามารถใช้งานได้โดยใช้ pseudocode ต่อไปนี้: ความยาวเฉลี่ยที่มีประสิทธิภาพของการเคลื่อนไหวของคุณคือ decimationFactorstatesize แต่คุณต้องเก็บตัวอย่างไว้ทั่ว เห็นได้ชัดว่าคุณสามารถทำงานได้ดีขึ้นหาก stateize และ decimationFactor ของคุณมีอำนาจเท่ากับ 2 เพื่อให้ส่วนแบ่งและตัวดำเนินการที่เหลือถูกแทนที่ด้วย shift และ mask-ands Postscript: ฉันเห็นด้วยกับ Olin ว่าคุณควรพิจารณาตัวกรอง IIR แบบธรรมดาก่อนที่จะใช้ตัวกรองเฉลี่ยที่เคลื่อนที่ หากคุณไม่จำเป็นต้องใช้ null-frequency ของตัวกรองรถกระบะตัวกรองความถี่ต่ำ 1 ขั้วหรือ 2 เสาจะทำงานได้ดี ในทางตรงกันข้ามถ้าคุณกำลังกรองเพื่อให้เป็นไปตามวัตถุประสงค์ของการ decimation (การป้อนข้อมูลที่มีอัตราการสุ่มตัวอย่างสูงและค่าเฉลี่ยสำหรับการใช้งานโดยกระบวนการที่มีอัตราต่ำ) ตัวกรอง CIC อาจเป็นเพียงสิ่งที่คุณกำลังมองหา (โดยเฉพาะถ้าคุณสามารถใช้ stateize1 และหลีกเลี่ยง ringbuffer ทั้งหมดด้วยค่า integrator เดียวก่อนหน้านี้) Theres บางการวิเคราะห์ในเชิงลึกของคณิตศาสตร์ที่อยู่เบื้องหลังการใช้ตัวกรอง IIR คำสั่งแรกที่ Olin Lathrop ได้อธิบายไว้แล้วในการประมวลผลสัญญาณสแตก สมการสำหรับตัวกรอง IIR คือ: สามารถใช้งานได้โดยใช้ตัวเลขจำนวนเต็มเท่านั้นและไม่มีส่วนใดโดยใช้รหัสต่อไปนี้ (อาจจำเป็นต้องมีการดีบักขณะที่กำลังพิมพ์จากหน่วยความจำ) ตัวกรองนี้ใกล้เคียงกับค่าเฉลี่ยเคลื่อนที่ของ ตัวอย่าง K ล่าสุดโดยการกำหนดค่า alpha เป็น 1K ทำเช่นนี้ในรหัสก่อนหน้าโดยกำหนด ing BITS เพื่อ LOG2 (K) เช่นสำหรับ K 16 ชุด BITS ถึง 4 สำหรับ K 4 ตั้ง BITS เป็น 2 ฯลฯ (ตรวจสอบรหัสไม่ได้ระบุไว้ที่นี่ทันทีที่ฉันได้รับการเปลี่ยนแปลงและ แก้ไขคำตอบนี้ถ้าจำเป็น.) ตอบ 23 มิถุนายน 12 ที่ 4:04 Heres เดียวขั้วต่ำผ่านตัวกรอง (ค่าเฉลี่ยเคลื่อนที่ด้วย cutoff ความถี่ CutoffFrequency) ง่ายมากเร็วมากใช้งานได้ดีและไม่มีค่าใช้จ่ายหน่วยความจำเกือบ หมายเหตุ: ตัวแปรทั้งหมดมีขอบเขตเกินกว่าฟังก์ชันตัวกรองยกเว้นการส่งผ่านข้อมูลใหม่หมายเหตุ: นี่เป็นตัวกรองแบบขั้นตอนเดียว หลายขั้นตอนสามารถต่อเข้าด้วยกันเพื่อเพิ่มความคมชัดของตัวกรอง ถ้าคุณใช้มากกว่าหนึ่งขั้นตอนคุณจะต้องปรับ DecayFactor (เกี่ยวข้องกับ Cutoff-Frequency) เพื่อชดเชย และเห็นได้ชัดว่าสิ่งที่คุณต้องมีคือสายสองเส้นวางไว้ที่ใดก็ได้พวกเขาไม่จำเป็นต้องใช้ฟังก์ชันของตัวเอง ตัวกรองนี้มีเวลาในการเล่นทางไกลก่อนที่ค่าเฉลี่ยเคลื่อนที่จะเป็นค่าของสัญญาณขาเข้า ถ้าคุณต้องการหลีกเลี่ยงเวลาที่เพิ่มขึ้นคุณสามารถเริ่มต้น MovingAverage ให้เป็นค่าแรกของ newInput แทน 0 และหวังว่าการป้อนข้อมูลใหม่ไม่ได้เป็นข้อผิดพลาด (CutoffFrequencySampleRate) มีช่วงระหว่าง 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. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ออนไลน์บทที่ 19 เกี่ยวกับตัวกรอง recursive: dspguidech19.htm PS สำหรับกระบวนทัศน์ Moving Average วิธีการที่แตกต่างในการตั้งค่า DecayFactor และ AmplitudeFactor ที่อาจเกี่ยวข้องกับความต้องการของคุณมากขึ้นให้สมมติว่าคุณต้องการก่อนหน้านี้ประมาณ 6 รายการโดยเฉลี่ยด้วยกันทำเป็น discretely คุณเพิ่ม 6 รายการและหารด้วย 6 ดังนั้น คุณสามารถตั้งค่า AmplitudeFactor เป็น 16 และ DecayFactor ไปที่ (1.0 - AmplitudeFactor) ได้ ตอบวันที่ 14 พฤษภาคมเวลา 12: 00 น. ทุกคนได้ให้ความเห็นอย่างละเอียดเกี่ยวกับประโยชน์ของ IIR กับ FIR และในส่วนของอำนาจของทั้งสองฝ่าย Id ต้องการให้รายละเอียดการใช้งาน ด้านล่างทำงานได้ดีกับไมโครคอนโทรลเลอร์ขนาดเล็กที่ไม่มี FPU ไม่มีการคูณและถ้าคุณเก็บกำลังของ N ไว้ 2 ส่วนทั้งหมดจะถูกขยับบิตรอบเดียว บัฟเฟอร์แหวน FIR พื้นฐาน: เก็บบัฟเฟอร์ที่กำลังทำงานของค่า N ล่าสุดและค่า SUM ที่ใช้งานอยู่ทั้งหมดในบัฟเฟอร์ ทุกครั้งที่มีตัวอย่างใหม่ให้ลบค่าที่เก่าแก่ที่สุดในบัฟเฟอร์จาก SUM แทนที่ด้วยตัวอย่างใหม่ให้เพิ่มตัวอย่างใหม่เป็น SUM และ SUMN ออก การแก้ไขบัฟเฟอร์วงแหวน IIR: ให้ SUM ที่ทำงานอยู่ของค่า N ล่าสุด ทุกครั้งที่มีตัวอย่างใหม่เข้ามา SUM - SUMN ให้เพิ่มตัวอย่างใหม่และเอาต์พุต SUMN ตอบอ่าน 28 สิงหาคม 13 เวลา 13:45 หากอ่านหนังสือคุณถูกต้องคุณจะอธิบายตัวกรอง IIR แรกที่สั่งซื้อค่าที่คุณลบออกไม่ใช่ค่าที่เก่าแก่ที่สุดซึ่งหลุดออก แต่แทนที่จะเป็นค่าเฉลี่ยของค่าก่อนหน้า ตัวกรอง IIR ในลำดับแรกอาจเป็นประโยชน์ แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเมื่อคุณแนะนำว่าเอาท์พุทจะเหมือนกันสำหรับสัญญาณเป็นระยะ ๆ อัตราการสุ่มตัวอย่าง 10 กิโลเฮิรตซ์การป้อนคลื่นความถี่ 100Hz ลงในตัวกรองกล่อง 20 ขั้นตอนจะให้สัญญาณที่เพิ่มขึ้นอย่างสม่ำเสมอสำหรับ 20 ตัวอย่างอยู่สูง 30 หยดสม่ำเสมอสำหรับ 20 ตัวอย่างและอยู่ต่ำกว่า 30 ลำดับแรก ตัวกรอง IIR ndash supercat Aug 28 13 at 15:31 จะทำให้คลื่นที่เริ่มเพิ่มขึ้นอย่างรวดเร็วและค่อยๆลดระดับลงใกล้ (แต่ไม่ถึง) ค่าอินพุตสูงสุดจากนั้นจะเริ่มลดลงอย่างรวดเร็วและค่อยๆลดระดับลงใกล้ (แต่ไม่น้อยกว่า) ค่าต่ำสุดที่ป้อน พฤติกรรมที่แตกต่างกันมาก ndash supercat Aug 28 13 at 15:32 ประเด็นหนึ่งก็คือค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายอาจเป็นประโยชน์หรือไม่ก็ได้ ด้วยตัวกรอง IIR คุณจะได้รับตัวกรองที่ดีกับ calcs ค่อนข้างน้อย FIR ที่คุณอธิบายสามารถให้สี่เหลี่ยมผืนผ้าได้ในเวลาเดียวเท่านั้นคือ sinc in freq และคุณไม่สามารถจัดการด้านข้างได้ มันอาจจะคุ้มค่าที่จะโยนในจำนวนเต็มไม่กี่คูณเพื่อทำให้มันสมมาตรปรับ FIR ที่ดีถ้าคุณสามารถสำรองนาฬิกาเห็บ ScottSeidman: ความจำเป็นในการคูณถ้าหนึ่งมีเพียงขั้นตอนของ FIR ทั้งสองเอาท์พุทค่าเฉลี่ยของการป้อนข้อมูลไปยังขั้นตอนนั้นและค่าที่เก็บไว้ก่อนหน้านี้และจากนั้นเก็บข้อมูล (ถ้ามี ช่วงตัวเลขหนึ่งสามารถใช้ผลรวมมากกว่าค่าเฉลี่ย) (การตอบสนองขั้นตอนของตัวกรองกล่องที่มีความล่าช้าโดยรวมของ 1ms ตัวอย่างเช่นจะมีการขัดขวาง d2dt ที่น่ารังเกียจเมื่อมีการเปลี่ยนแปลงการป้อนข้อมูลและอีก 1 ล้านครั้งในภายหลัง แต่จะมีค่าต่ำสุด ddt ที่เป็นไปได้สำหรับตัวกรองที่มีความล่าช้าทั้งหมด 1ms) เมื่อ mikeselectricstuff กล่าวว่าถ้าคุณต้องการจริงๆเพื่อลดความต้องการหน่วยความจำของคุณและคุณ dont ใจตอบสนองต่อแรงกระตุ้นของคุณเป็นเลขชี้กำลัง (แทนชีพจรสี่เหลี่ยมผืนผ้า) ฉันจะไปสำหรับตัวกรองเฉลี่ยเลขยกกำลัง. . ฉันใช้พวกเขาอย่างกว้างขวาง ด้วยตัวกรองชนิดดังกล่าวคุณไม่จำเป็นต้องมีบัฟเฟอร์ใด ๆ คุณไม่ต้องเก็บตัวอย่างที่ผ่านมา N แค่หนึ่ง. ดังนั้นความต้องการหน่วยความจำของคุณได้รับการลดลงโดยปัจจัยของเอ็นนอกจากนี้คุณไม่จำเป็นต้องแบ่งใด ๆ สำหรับที่ เฉพาะ multiplications ถ้าคุณมีการเข้าถึงเลขคณิตลอยตัวใช้ multiplications ทศนิยม มิฉะนั้นให้ทำ multiplications จำนวนเต็มและเลื่อนไปทางขวา อย่างไรก็ตามเราอยู่ในปี 2012 และขอแนะนำให้คุณใช้คอมไพเลอร์ (และ MCU) ที่ช่วยให้คุณสามารถทำงานกับตัวเลขลอยตัวได้ นอกเหนือจากหน่วยความจำที่มีประสิทธิภาพมากขึ้นและเร็วขึ้น (คุณ dont ต้องปรับปรุงรายการในวงกลม buffer ใด ๆ ) ฉันจะบอกว่ามันเป็นธรรมชาติมากขึ้น เนื่องจากการตอบสนองของแรงกระตุ้นเลขชี้กำลังจะตรงกับลักษณะการทำงานของธรรมชาติในกรณีส่วนใหญ่ ตอบเมื่อ 20 เมษายน 2012 เวลา 9:59 น. ปัญหาหนึ่งที่มีตัวกรอง IIR เกือบสัมผัสกับ olin และ supercat แต่เห็นได้ชัดว่าถูกมองข้ามโดยคนอื่น ๆ ก็คือการปัดเศษลงแนะนำข้อมูลบางอย่างที่ไม่ถูกต้อง (และอาจเกิดขึ้นได้ biastruncation) สมมติว่า N เป็นพลังของสองและใช้เลขคณิตจำนวนเต็มเท่านั้นการเปลี่ยนสิทธิจะทำให้ LSBs ของตัวอย่างใหม่เป็นระบบ นั่นหมายความว่าระยะเวลาที่เคยเป็นแบบนี้ค่าเฉลี่ยจะไม่นำมาพิจารณา ตัวอย่างเช่นสมมุติว่าชุดที่ลดลงอย่างช้าๆ (8,8,8. 8,7,7,7 .7,6,6) และสมมติว่าค่าเฉลี่ยมีค่าเริ่มต้นอยู่ที่ 8 ตัวอย่างกำปั้น 7 จะนำค่าเฉลี่ยไปที่ 7 โดยไม่คำนึงถึงความแข็งแรงของตัวกรอง เพียงแค่หนึ่งตัวอย่างเท่านั้น เรื่องเดียวกันสำหรับ 6 ฯลฯ ตอนนี้คิดว่าตรงข้าม ซีรีส์ขึ้น ค่าเฉลี่ยจะอยู่ที่ 7 ตลอดไปจนกว่าตัวอย่างจะใหญ่พอที่จะทำให้การเปลี่ยนแปลง แน่นอนคุณสามารถแก้ไขอคติโดยการเพิ่ม 12N2 แต่ที่เคยชินจริงๆแก้ปัญหาความแม่นยำ ในกรณีนี้ซีรีส์ที่ลดลงจะคงอยู่ตลอดไปที่ 8 จนกว่าตัวอย่างจะเป็น 8-12 (N2) สำหรับ N4 ตัวอย่างเช่นตัวอย่างใด ๆ ที่อยู่เหนือศูนย์จะทำให้ค่าเฉลี่ยไม่เปลี่ยนแปลง ผมเชื่อว่าการแก้ปัญหาแบบนี้จะถือเป็นการสะสมแอ็คเซสเซอร LSB ที่หายไป แต่ฉันไม่ได้ทำให้ไกลพอที่จะมีรหัสพร้อมและ Im ไม่แน่ใจว่าจะไม่เป็นอันตรายต่ออำนาจ IIR ในกรณีอื่น ๆ บางชุด (ตัวอย่างเช่น 7,9,7,9 จะเฉลี่ย 8 แล้ว) โอลินน้ำตกสองขั้นตอนของคุณก็จะต้องมีคำอธิบายบ้าง คุณหมายถึงการถือครองค่าเฉลี่ยสองค่าด้วยผลลัพธ์จากการนับครั้งแรกเป็นวินาทีในแต่ละการทำซ้ำ ประโยชน์อะไรจากนี้
Forex -trading- ค่าธรรมเนียม
Forex- กลยุทธ์ ลับ เปิดตัว แผ่น