Saturday, 2 December 2017

المرجح الحركة من المتوسط التصفية - ج


هل من الممكن تنفيذ متوسط ​​متحرك في C دون الحاجة إلى نافذة من العينات وجدت أنه يمكنني تحسين قليلا، عن طريق اختيار حجم النافذة التي هي قوة اثنين للسماح بتغيير قليلا بدلا من تقسيم، ولكن لا تحتاج فإن المخزن المؤقت يكون لطيفا. هل هناك طريقة للتعبير عن نتيجة متوسط ​​متحرك جديد فقط كدالة للنتيجة القديمة والعينة الجديدة حدد مثالا متحركا على سبيل المثال، عبر نافذة مكونة من 4 عينات لتكون: إضافة عينة جديدة ه: يمكن تنفيذ المتوسط ​​المتحرك بشكل متكرر ، ولكن لحساب دقيق للمتوسط ​​المتحرك عليك أن تتذكر أقدم عينة المدخلات في المجموع (أي في المثال الخاص بك). وبالنسبة للمتوسط ​​المتحرك N الذي تحسبه: حيث ين هي إشارة الخرج و شن هي إشارة الدخل. مكافئ. (1) يمكن أن تكون مكتوبة بشكل متكرر كما كنت دائما بحاجة إلى تذكر العينة شن-N من أجل حساب (2). وكما أشار كونراد تيرنر، يمكنك استخدام نافذة أسي طويلة (بلا حدود) بدلا من ذلك، والتي تسمح لك بحساب الإخراج فقط من المخرجات السابقة والإدخال الحالي: ولكن هذا ليس متوسط ​​متحرك (غير مرجح) قياسي ولكن بشكل أضعافا مضاعفة (حيث على الأقل من الناحية النظرية) لا تنسى أبدا أي شيء (الأوزان فقط تحصل على أصغر وأصغر للعينات بعيدة في الماضي). أنا نفذت المتوسط ​​المتحرك دون ذاكرة البند الفردية لبرنامج تتبع غس كتبته. أبدأ مع 1 عينة وتقسيم بنسبة 1 للحصول على متوسط ​​الحالي. ثم قم بإضافة عينة أنوث وتقسيمها 2 إلى المتوسط ​​الحالي. يستمر هذا حتى يصل إلى طول المتوسط. في كل مرة بعد ذلك، أضيف في العينة الجديدة، واحصل على المتوسط ​​وأزل هذا المتوسط ​​من المجموع. أنا لست رياضياتيا ولكن هذا يبدو وكأنه وسيلة جيدة للقيام بذلك. أنا أحسب أنه من شأنه أن يحول المعدة من رجل الرياضيات الحقيقي ولكن، اتضح أنها واحدة من الطرق المقبولة للقيام بذلك. ويعمل بشكل جيد. فقط تذكر أن ارتفاع طول الخاص بك أبطأ هو اتباع ما كنت تريد أن تتبع. وهذا قد لا يهم معظم الوقت ولكن عندما تتبع الأقمار الصناعية، إذا كنت بطيئا، يمكن أن يكون درب بعيدا عن الوضع الفعلي، وسوف تبدو سيئة. هل يمكن أن يكون هناك فجوة بين جلس والنقاط زائدة. اخترت بطول 15 تحديث 6 مرات في الدقيقة الواحدة للحصول على تجانس كافية ولا تحصل بعيدا جدا عن الوضع الفعلي جلس مع نقاط درب ممهدة. أجاب 16 نوفمبر 16 في 23:03 تهيئة العدد الإجمالي 0، count0 (في كل مرة رؤية قيمة جديدة ثم إدخال واحد (سكانف)، واحد إضافة توتالنوفالو، زيادة واحدة (عدد)، واحد معدل الفجوة (توتالكونت) سيكون هذا المتوسط ​​المتحرك أكثر من جميع المدخلات لحساب المتوسط ​​فوق المدخلات الأربعة الأخيرة فقط، يتطلب 4 مدخلات، ربما نسخ كل مدخلات إلى مدخلات قديمة، ثم حساب المتوسط ​​المتحرك الجديد، حيث أن مجموع المدخلات 4، مقسوما على 4 (التحول الصحيح 2 سيكون جيد إذا كانت جميع المدخلات إيجابية لجعل متوسط ​​الحساب أجاب فب 3 15 في 4:06 وهذا في الواقع حساب المتوسط ​​الكلي وليس المتوسط ​​المتحرك. كما يحصل العد أكبر تأثير أي عينة إدخال جديدة تصبح صغيرة تتلاشى نداش هيلمر فبراير 3 15 في 13:53 إجابتك 2017 ستاك إكسهانج، إنسي أحاول حساب المتوسط ​​المتحرك لإشارة، ويتم تحديث قيمة الإشارة (مزدوجة) في أوقات عشوائية، وأنا أبحث عن طريقة فعالة لحساب متوسط ​​الوقت المرجح اوفه r نافذة الوقت، في الوقت الحقيقي. أنا يمكن أن تفعل ذلك بلدي، ولكن أكثر تحديا مما اعتقدت. معظم الموارد إيف وجدت عبر الإنترنت بحساب المتوسط ​​المتحرك للإشارة الدورية، ولكن التحديثات الألغام في وقت عشوائي. لا أحد يعرف موارد جيدة لذلك خدعة هو ما يلي: يمكنك الحصول على التحديثات في أوقات عشوائية عن طريق تحديث الفراغ (وقت إنت، قيمة تعويم). ومع ذلك تحتاج أيضا إلى تتبع أيضا عندما يقع التحديث قبالة نافذة الوقت، لذلك قمت بتعيين إنذار الذي دعا في الوقت N الذي يزيل التحديث السابق من يجري النظر من أي وقت مضى مرة أخرى في الحساب. إذا كان هذا يحدث في الوقت الحقيقي يمكنك طلب نظام التشغيل لإجراء مكالمة إلى طريقة باطلة دروبوفولدستوديت (وقت إنت) ليتم استدعاؤها في الوقت N إذا كان هذا هو محاكاة، لا يمكنك الحصول على مساعدة من نظام التشغيل وتحتاج إلى تفعل ذلك يدويا. في محاكاة يمكنك استدعاء الأساليب مع الوقت الموردة كوسيطة (التي لا ترتبط مع الوقت الحقيقي). غير أن الافتراض المعقول هو أن النداءات مضمونة بحيث تكون الوسيطات الزمنية في ازدياد. في هذه الحالة تحتاج إلى الحفاظ على قائمة فرز من القيم الوقت التنبيه، ولكل تحديث وقراءة المكالمة التي تحقق إذا كان الوسيطة الوقت أكبر من رأس قائمة التنبيه. في حين أنه هو أكبر يمكنك القيام التنبيه المتعلقة معالجة (إسقاط قبالة أقدم تحديث)، وإزالة الرأس والتحقق مرة أخرى حتى يتم معالجة جميع أجهزة الإنذار قبل وقت معين. ثم قم بإجراء مكالمة التحديث. لقد افترضت حتى الآن أنه من الواضح ما سوف تفعله لحساب الفعلي، ولكنني سوف وضع فقط في حالة. افترض أن لديك طريقة تعويم القراءة (وقت إنت) التي تستخدم لقراءة القيم. والهدف من ذلك هو جعل هذه المكالمة فعالة قدر الإمكان. لذلك لا تحسب المتوسط ​​المتحرك في كل مرة تسمى طريقة القراءة. بدلا من ذلك كنت تحسب القيمة كما من التحديث الأخير أو التنبيه الأخير، قرص هذه القيمة من قبل بضع عمليات نقطة العائمة لحساب مرور الوقت منذ التحديث الأخير. (ط عدد ثابت من العمليات باستثناء ربما معالجة قائمة من أجهزة الإنذار مكدسة). نأمل أن يكون هذا واضحا - يجب أن يكون هذا خوارزمية بسيطة جدا وفعالة للغاية. مزيد من التحسين. واحدة من المشاكل المتبقية هو إذا كان عدد كبير من التحديثات يحدث في إطار الوقت، ثم هناك فترة طويلة التي لا توجد يقرأ ولا تحديثات، ومن ثم قراءة أو التحديث يأتي على طول. في هذه الحالة، سوف تكون الخوارزمية أعلاه غير فعالة في تحديث القيمة بشكل متزايد لكل من التحديثات التي تتساقط. هذا ليس ضروريا لأننا نهتم فقط التحديث الأخير وراء نافذة الوقت حتى إذا كان هناك وسيلة لسحب بكفاءة من جميع التحديثات القديمة، فإنه من شأنه أن يساعد. للقيام بذلك، يمكننا تعديل الخوارزمية لإجراء بحث ثنائي من التحديثات للعثور على التحديث الأخير قبل نافذة الوقت. إذا كان هناك عدد قليل نسبيا من التحديثات التي تحتاج إلى إسقاط ثم يمكن للمرء أن تحديث بشكل متزايد قيمة لكل تحديث انخفض. ولكن إذا كان هناك العديد من التحديثات التي تحتاج إلى إسقاط ثم واحد يمكن إعادة حساب القيمة من الصفر بعد إسقاط التحديثات القديمة. التذييل على الحوسبة الإضافية: يجب أن أوضح ما أعنيه بالحساب الإضافي أعلاه في الجملة قرص هذه القيمة من خلال بضع عمليات نقطة العائمة لحساب مرور الوقت منذ التحديث الأخير. الحساب الأولي غير التدريجي: ثم يتكرر على ديلاتيفوبديتس من أجل زيادة الوقت: موفينغفيراج (سوم لاستوبديت تيمسينسلاستوبديت) ويندلنغث. الآن إذا كان التحديث واحد بالضبط يقع قبالة النافذة ولكن لا تصل التحديثات الجديدة، وضبط المبلغ على النحو التالي: (لاحظ أنه هو بريفيوديت الذي له الطابع الزمني تعديلها لبدء آخر بداية النافذة). وإذا كان بالضبط تحديث واحد يدخل النافذة ولكن لا توجد تحديثات جديدة تسقط، وضبط المبلغ على النحو التالي: كما ينبغي أن يكون واضحا، وهذا هو رسم تقريبي ولكن نأمل أنه يبين كيف يمكنك الحفاظ على متوسط ​​مثل أنه هو O (1) العمليات في التحديث على أساس الاستهلاك. ولكن لاحظ مزيدا من التحسين في الفقرة السابقة. نلاحظ أيضا قضايا الاستقرار المشار إليها في إجابة قديمة، وهو ما يعني أن أخطاء نقطة العائمة قد تتراكم على عدد كبير من هذه العمليات الإضافية بحيث يكون هناك اختلاف عن نتيجة الحساب الكامل الذي له أهمية كبيرة للتطبيق. إذا كان التقريب على ما يرام و ثيريس الحد الأدنى من الوقت بين العينات، يمكنك محاولة فائقة أخذ العينات. يكون مصفوفة تمثل فترات زمنية متباعدة بالتساوي تكون أقصر من الحد الأدنى، وفي كل مرة يتم تخزين أحدث عينة تم استلامها. وكلما اقصر الفاصل الزمني كلما اقترب المتوسط ​​من القيمة الحقيقية. وينبغي ألا تتجاوز الفترة نصف الحد الأدنى أو أن تكون هناك فرصة لفقدان العينة. أجاب ديك 15 11 في 18:12 ثانكس فور ذي أنسور. أحد التحسينات التي ستكون هناك حاجة إليها في الواقع كوتاكاشيكوت قيمة المتوسط ​​الكلي لذلك نحن don39t حلقة في كل وقت. أيضا، قد يكون نقطة ثانوية، ولكن لن يكون أكثر كفاءة لاستخدام ديك أو قائمة لتخزين القيمة، لأننا نفترض أن التحديث سيأتي في الترتيب الصحيح. سيكون الإدراج أسرع من الخريطة. نداش آرثر ديك 16 11 في 08:55 نعم، هل يمكن أن ذاكرة التخزين المؤقت قيمة المبلغ. اطرح قيم العينات التي تمحوها، أضف قيم العينات التي تقوم بإدراجها. أيضا، نعم، ديكلتبايرلتسامبل، داتغتغ قد تكون أكثر كفاءة. لقد اخترت خريطة للقراءة، وسهولة استدعاء خريطة :: وبربوند. كما هو الحال دائما، كتابة التعليمات البرمجية الصحيحة أولا، ثم الملف الشخصي وقياس التغييرات الإضافية. نداش روب ديك 16 11 في 15:00 ملاحظة: يبدو أن هذا ليس الطريق إلى الاقتراب من هذا. تركها هنا للإشارة إلى ما هو الخطأ في هذا النهج. تحقق من التعليقات. تحديث - استنادا إلى تعليق أوليس. غير متأكد من عدم الاستقرار الذي يتحدث عنه رغم ذلك. استخدام خريطة فرز مرات وصول ضد القيم. عند وصول قيمة إضافة وقت وصول للخريطة فرزها جنبا إلى جنب مع قيمته وتحديث المتوسط ​​المتحرك. تحذير هذا هو الزائفة رمز: هناك. ليس تماما فليشد خارج ولكن تحصل على هذه الفكرة. أشياء يجب أن نلاحظها. كما قلت أعلاه هو رمز الزائفة. ستحتاج إلى اختيار خريطة مناسبة. لا إزالة أزواج كما كنت إيتيرات من خلال كما سوف تبطل التكرار وسيكون لديك للبدء من جديد. انظر تعليق أوليس أدناه أيضا. أجاب ديك 15 11 في 12:22 هذا don39t العمل: فإنه doesn39t تأخذ بعين الاعتبار ما هي نسبة من نافذة طول كل قيمة موجودة ل. أيضا، هذا النهج من إضافة ومن ثم طرح مستقرة فقط لأنواع عدد صحيح، لا يطفو. نداش أوليفر تشارلزورث 15 ديسمبر 11 في 12:29 أوليكارليزورث - آسف فاتني بعض النقاط الرئيسية في الوصف (مزدوجة والوزن المرجح). وسوف أقوم بتحديث. شكر. نداش دينيس ديك 15 11 في 12:33 الوقت الترجيح مشكلة أخرى بعد. ولكن هذا 39 ليس ما I39m الحديث عنه. كنت أشير إلى حقيقة أنه عندما تدخل قيمة جديدة لأول مرة نافذة الوقت، ومساهمتها في المتوسط ​​هو الحد الأدنى. وتستمر مساهمته في الزيادة حتى تدخل قيمة جديدة. نداش أوليفر تشارلزورث ديسمبر 15 11 في 12: 35I أعرف هذا يمكن تحقيقه مع دفعة كما في: ولكن أنا حقا ترغب في تجنب استخدام دفعة. لقد غوغلد ولم يتم العثور على أي أمثلة مناسبة أو مقروءة. أساسا أريد أن تتبع المتوسط ​​المتحرك لتيار مستمر من تيار من أرقام النقطة العائمة باستخدام أحدث 1000 أرقام كعينة البيانات. ما هي أسهل طريقة لتحقيق ذلك أنا جربت باستخدام صفيف دائري، المتوسط ​​المتحرك الأسي ومتوسط ​​متحرك أكثر بساطة وجدت أن النتائج من مجموعة دائرية تناسب احتياجاتي أفضل. سأل 12 يونيو 12 في 4:38 إذا احتياجاتك بسيطة، قد حاولت مجرد استخدام المتوسط ​​المتحرك الأسي. ببساطة، يمكنك إجراء متغير تراكم، وكما التعليمات البرمجية الخاصة بك ينظر في كل عينة، التعليمات البرمجية بتحديث تراكم مع القيمة الجديدة. يمكنك اختيار ألفا ثابت ما بين 0 و 1، وحساب هذا: تحتاج فقط إلى العثور على قيمة ألفا حيث تأثير عينة معينة يستمر فقط لحوالي 1000 عينة. هم، إم لا فعلا متأكد من أن هذا هو مناسب لك، والآن أن إيف وضعه هنا. المشكلة هي أن 1000 هو نافذة طويلة جدا لمتوسط ​​متحرك أسي إم غير متأكد من وجود ألفا التي من شأنها أن تنتشر المتوسط ​​على آخر 1000 أرقام، دون تدفق في حساب العائمة. ولكن إذا كنت تريد متوسط ​​أصغر، مثل 30 أرقام أو نحو ذلك، وهذا هو وسيلة سهلة جدا وسريعة للقيام بذلك. أجاب يونيو 12 12 في 4:44 1 على مشاركتك. ويمكن أن يسمح المتوسط ​​المتحرك الأسي للألفا بأن يكون متغيرا. لذلك يسمح هذا باستخدامها لحساب متوسطات قاعدة الوقت (على سبيل المثال وحدات البايت في الثانية). إذا كان الوقت منذ آخر تحديث تراكم هو أكثر من 1 ثانية، يمكنك السماح ألفا يكون 1.0. خلاف ذلك، يمكنك السماح ألفا يكون (أوسيكس منذ last1000000 الماضي). ندش ج 12 يونيو في 6:21 أساسا أريد أن تتبع المتوسط ​​المتحرك لتيار مستمر من تيار من أرقام النقطة العائمة باستخدام أحدث 1000 أرقام كعينة البيانات. لاحظ أن ما يلي يقوم بتحديث المجموع كعناصر كما أددريبلاسد، وتجنب مكلفة O (N) اجتياز لحساب المجموع - اللازمة للمتوسط ​​- عند الطلب. يتم إجراء إجمالي معلمة مختلفة من T لدعم على سبيل المثال. باستخدام طويلة طويلة عندما يبلغ مجموعها 1000 ثانية s، إنت لشار s، أو ضعف إلى مجموع تعويم s. هذا هو معيب بعض الشيء في أن الأمثلة يمكن أن تذهب الماضي إنتماكس - إذا كنت تهتم يمكنك استخدام طويلة غير موقعة. أو استخدام عضو بيانات بول إضافية لتسجيل عندما يتم تعبئة الحاوية لأول مرة في حين ركوب الدراجات نامبلز حول مجموعة (أفضل ثم تسميته شيء حميدة مثل بوس). أجاب 12 يونيو 12 في 5:19 واحد يفترض أن المشغل كوتفويد (عينة T) هو في الواقع كوتيفويد أوبيراتورلتلت (عينة T) كوت. نداش أوبليس يونيو 8 14 في 11:52 أوبليس أهه. رصدت جيدا. في الواقع كنت أعني أن يكون عاملا باطلا () (عينة T) ولكن بالطبع يمكنك استخدام أي تدوين كنت أحب. سوف إصلاح، وذلك بفضل. ندش توني D جون 8 14 في 14:27

No comments:

Post a Comment