المتوسط ​​المتحرك الأسي الذي تم أخذ عينات منه في أوقات مختلفة

StackOverflow https://stackoverflow.com/questions/1023860

سؤال

لدي قيمة مستمرة أرغب في حسابها المتوسط ​​المتحرك الأسي.عادةً ما أستخدم الصيغة القياسية لهذا:

  • سن = αY + (1-α)Sن-1

اينن هو المتوسط ​​الجديد، α هو ألفا، Y هو العينة، وSن-1 هو المتوسط ​​السابق.

لسوء الحظ، نظرًا لوجود مشكلات مختلفة، ليس لدي وقت عينة ثابت.ربما أعلم أنه يمكنني أخذ عينة على الأكثر، على سبيل المثال، مرة واحدة في كل مللي ثانية، ولكن نظرًا لعوامل خارجة عن إرادتي، قد لا أتمكن من أخذ عينة لعدة أجزاء من الثانية في المرة الواحدة.ومع ذلك، فإن الحالة الأكثر شيوعًا على الأرجح هي أنني أقوم بإجراء عينة بسيطة في وقت مبكر أو متأخر قليلاً:بدلاً من أخذ العينات عند 0 و1 و2 مللي ثانية.أقوم بإجراء عينة عند 0 و0.9 و2.1 مللي ثانية.أتوقع أنه، بغض النظر عن التأخير، فإن تكرار أخذ العينات سيكون أعلى بكثير من حد نيكويست، وبالتالي لا داعي للقلق بشأن الاسم المستعار.

أعتقد أنه يمكنني التعامل مع هذا بطريقة معقولة إلى حد ما من خلال تغيير قيمة ألفا بشكل مناسب، بناءً على طول الفترة الزمنية منذ آخر عينة.

جزء من تفكيري بأن هذا سينجح هو أن المتوسط ​​المتحرك الأسي "يحوم خطيًا" بين نقطة البيانات السابقة والنقطة الحالية.إذا أخذنا بعين الاعتبار حساب EMA لقائمة العينات التالية على فترات t:[0،1،2،3،4].يجب أن نحصل على نفس النتيجة إذا استخدمنا الفاصل الزمني 2t، حيث تصبح المدخلات [0،2،4]، أليس كذلك؟إذا كانت EMA قد افترضت ذلك، عند t2 كانت القيمة 2 منذ t0, ، سيكون هذا هو نفس حساب الفاصل الزمني t على [0,2,2,4,4]، وهو ما لا يحدث.أو هل هذا منطقي على الإطلاق؟

هل يمكن لأحد أن يقول لي كيفية تغيير ألفا بشكل مناسب؟"يرجى إظهار عملك." أي ، أرني الرياضيات التي تثبت أن طريقتك تفعل الشيء الصحيح حقًا.

هل كانت مفيدة؟

المحلول

تعتمد هذه الإجابة على فهمي الجيد لمرشحات الترددات المنخفضة ("المتوسط ​​المتحرك الأسي" هو في الواقع مجرد مرشح تمرير منخفض أحادي القطب)، ولكن فهمي الضبابي لما تبحث عنه.أعتقد أن ما تريده هو ما يلي:

أولاً، يمكنك تبسيط المعادلة قليلاً (تبدو أكثر تعقيدًا ولكنها أسهل في البرمجة).سأستخدم "Y" للإخراج و"X" للإدخال (بدلاً من S للإخراج وY للإدخال، كما فعلت).

ين = αX + (1-α)Yن-1 → ين = صن-1 + α(X - Yن-1)

الذي رموز ل:

 Y += alpha * (X-Y);

ثانيًا، قيمة α هنا تساوي 1-e-Δt/τ حيث Δt هو الوقت بين العينات، وτ هو الثابت الزمني لمرشح التردد المنخفض.أقول "يساوي" بين علامتي الاقتباس لأن هذا يعمل بشكل جيد عندما تكون Δt/τ صغيرة مقارنة بـ 1، و α = 1-e-Δt/τ ≈ Δt/τ.(ولكن ليس صغيرًا جدًا:سوف تواجه مشكلات في القياس، وما لم تلجأ إلى بعض التقنيات الغريبة، فستحتاج عادةً إلى N بتات إضافية من الدقة في متغير الحالة S، حيث N = -log2(ألفا).) بالنسبة للقيم الأكبر من Δt/τ، يبدأ تأثير التصفية في الاختفاء، حتى تصل إلى النقطة التي يقترب فيها α من 1 وتقوم فقط بتعيين الإدخال إلى الإخراج.

يجب أن يعمل هذا بشكل صحيح مع قيم مختلفة لـ Δt (لا يعد اختلاف Δt مهمًا جدًا طالما أن alpha صغير، وإلا فسوف تواجه بعض مشكلات Nyquist الغريبة / التعرجات / وما إلى ذلك)، وإذا كنت تعمل على معالج عندما يكون الضرب أرخص من القسمة، أو تكون مسائل النقاط الثابتة مهمة، قم بحساب ω = 1/τ مسبقًا، وفكر في محاولة تقريب صيغة α.

إذا كنت تريد حقًا معرفة كيفية اشتقاق الصيغة

α = 1-ه-Δt/τ

ثم فكر في مصدر المعادلة التفاضلية:

Y + τ dY/dt = X

والتي، عندما تكون X دالة خطوة وحدة، يكون لها الحل Y = 1 - e-ر/τ.بالنسبة للقيم الصغيرة لـ Δt، يمكن تقريب المشتق بواسطة ΔY/Δt، العائد

ص + τ ΔY/Δt = X

ΔY/Δt = (X-Y)/τ

ΔY = (X-Y)(Δt/τ) = α(X-Y)

و"استقراء" α = 1-e-Δt/τ يأتي من محاولة مطابقة السلوك مع حالة وظيفة خطوة الوحدة.

نصائح أخرى

الق نظرة هنا: http://www.eckner.com/research.html

انظر الرابط الثاني :""خوارزميات السلاسل الزمنية غير المتساوية:المتوسطات المتحركة والمشغلين المتداولين الآخرين "

أعتقد أن المستند يصف بالضبط خوارزميات البرمجة التي تحتاجها.

هذه ليست إجابة كاملة، ولكنها قد تكون بداية واحدة.لقد وصلت إلى هذا الحد خلال ساعة أو نحو ذلك من اللعب؛أقوم بنشره كمثال لما أبحث عنه، وربما مصدر إلهام للآخرين الذين يعملون على حل المشكلة.

أبدأ مع س0, وهو المتوسط ​​الناتج عن المتوسط ​​السابق S-1 والعينة Y0 اتخذت في ر0.(ر1 - ر0) هو الفاصل الزمني للعينة وتم ضبط α على ما هو مناسب للفاصل الزمني للعينة والفترة التي أرغب في حساب المتوسط ​​خلالها.

لقد فكرت فيما يحدث إذا فاتني العينة في t1 وبدلاً من ذلك عليك الاكتفاء بالعينة Y2 اتخذت في ر2؟حسنًا، يمكننا أن نبدأ بتوسيع المعادلة لنرى ما الذي كان سيحدث لو كان لدينا Y1:

  • س2 = αY2 + (1-α)س1, ، اين1 = αY1 + (1-α)س0

أستعاض:

  • س2 = αY2 + (1-α)(αY1 + (1-α)س0)
  • س2 = αY2 + (1-α)αY1 + (1-α)(1-α)س0
  • س2 = αY2 + (1-α)αY1 + (1-α)2س0

ألاحظ أن المتسلسلة تبدو ممتدة إلى ما لا نهاية بهذه الطريقة، لأنه يمكننا استبدال Sن في الجانب الأيمن إلى أجل غير مسمى:

  • س2 = αY2 + (1-α)αY1 + (1-α)2(ألفا0 + (1-α)س-1)
  • س2 = αY2 + (1-α)αY1 + (1-α)2αY0 + (1-α)3س-1
  • إلخ.

حسنًا، إنها ليست كثيرة حدود حقًا (سخيفة بالنسبة لي)، ولكن إذا ضربنا الحد الأولي بواحد، فسنرى بعد ذلك نمطًا:

  • س2 = (1-α)0αY2 + (1-α)αY1 + (1-α)2αY0 + (1-α)3س-1

جلالة:إنها سلسلة أسية. مفاجأة كيل! تخيل أن الخروج من المعادلة لمتوسط ​​متحرك أسي!

على أية حال، لدي هذا x0 + س1 + س2 + س3 + ...الأمر يسير، وأنا متأكد من أنني أشم e أو اللوغاريتم الطبيعي يدور هنا، لكن لا أستطيع تذكر المكان الذي كنت أتجه إليه بعد ذلك قبل نفاد الوقت.

أي إجابة على هذا السؤال، أو أي دليل على صحة مثل هذه الإجابة، تعتمد بشكل كبير على البيانات التي تقوم بقياسها.

إذا تم أخذ العينات الخاصة بك في ر0=0 مللي ثانية، ر1=0.9 مللي ثانية و ر2=2.1ms ، لكن اختيارك لـ α يعتمد على فترات زمنية تبلغ 1 مللي ثانية، وبالتالي تريد α مضبوطًا محليًان فإن إثبات صحة الاختيار يعني معرفة قيم العينة عند t=1ms و t=2ms.

وهذا يقودنا إلى السؤال:هل يمكنك استيفاء بياناتك بشكل معقول للحصول على تخمينات معقولة لما قد تكون عليه القيم الوسطى؟أو هل يمكنك حتى استيفاء المتوسط ​​نفسه؟

إذا لم يكن أي من هذين ممكنًا، فبقدر ما أرى، فإن الاختيار المنطقي للقيمة الوسطية Y(t) هو أحدث المتوسط ​​المحسوب, ، أي.ص(ر) ≈ سن حيث n هو الحد الأقصى بحيث يكون tن<ر.

هذا الاختيار له نتيجة بسيطة:اترك α وشأنه، مهما كان فارق التوقيت.

من ناحية أخرى، إذا كان من الممكن استيفاء القيم الخاصة بك، فسيعطيك هذا عينات ذات فواصل ثابتة متوسطة.وأخيرًا، إذا كان من الممكن استيفاء المتوسط ​​نفسه، فإن ذلك من شأنه أن يجعل السؤال بلا معنى.

باستخدام α مختلفة قليلاً تساوي (1-αالذي من السؤال)، الصيغة الأساسية لإضافة قيمة جديدة Y إلى المتوسط ​​الحالي S0 يشبه هذا:

س(ص،س0) =

(1-α)Y + αS0 =

ص - αY + αS0 =

ص + α(س0-ص)

إذا أضفنا الآن طول الفاصل الزمني t وافترضنا أن α فقط يعتمد على ذلك t، فستبدو هذه الصيغة كما يلي:

ق(ص،ر،س0) = ص + αر0-ص)

الآن افترض أن ر = ر1 + ر2.إذا تم إنشاء المتوسط ​​عن طريق إضافة قيمتين من Y لفترات زمنية t1 و ت2, ، يبدو المتوسط ​​الناتج كما يلي:

س(ص،ر2, ، س(ص،ر1،س0)) =

ص + ألفار2(س(ص،ر1،س0) - ي) =

ص + ألفار2((ص + أر10-ص)) - ص) =

ص + ألفار2αر10-ص)

إذا كان هذا المتوسط ​​يجب أن يكون هو نفسه كما لو كان سيتم إضافة الفاصل الزمني بأكمله مرة واحدة، فإنه يتبع ذلك αر = αر1αر2.تعريف α الذي يستوفي هذا المطلب سيكون:

αس := أس (بالنسبة لبعض ثابت A)

لأن:

αر = أر = أر1 + ر2 = Aر1 أر2 = αر1αر2

وينتج عن هذا دالة المتوسط ​​التالية:

ق(ص،ر،س0) = ص + أر0-ص)

لم أختبر هذا حقًا، ولكن إذا كانت الافتراضات التي قمت بها تناسب السيناريو الخاص بك، فهذا يبدو كدالة متوسط ​​يمكنها التعامل مع الاختلافات في فترات أخذ العينات بشكل جيد.

لنفترض أننا نرغب في إنشاء متوسط ​​متناقص أسي على دالة مستمرة.ومع ذلك، ليس لدينا كل قيم تلك الدالة، بل لدينا عينات قليلة فقط.ستشكل هذه الصيغة متوسطًا مرجحًا للعينات الموجودة لدينا مع الأوزان التي ستكون لها في المتوسط ​​المستمر.

المضاعفن = ألفاوقتن-وقتن-1

مجموعن = فالن + مجموعن-1* المضاعفن

عددن = 1 + العدن-1* المضاعفن

متوسطن = مجموعن/عددن

سأترك alpha القيمة وحدها، وملء البيانات المفقودة.

نظرًا لأنك لا تعرف ما يحدث خلال الوقت الذي لا يمكنك فيه أخذ العينة، فيمكنك ملء تلك العينات بالأصفار، أو الاحتفاظ بالقيمة السابقة ثابتة واستخدام تلك القيم لـ EMA.أو بعض الاستيفاء العكسي بمجرد حصولك على عينة جديدة، واملأ القيم المفقودة، وأعد حساب EMA.

ما أحاول الوصول إليه هو أن لديك مدخلات x[n] الذي لديه ثقوب.لا توجد طريقة للالتفاف على حقيقة أنك تفتقد البيانات.لذلك يمكنك استخدام تعليق الأمر الصفري، أو ضبطه على الصفر، أو نوع من الاستيفاء بينهما x[n] و x[n+M], ، أين M هو عدد العينات المفقودة وبداية الفجوة.ربما حتى باستخدام القيم من قبل n.

هذا مشابه لمشكلة مفتوحة في قائمة المهام الخاصة بي.لدي مخطط واحد تم وضعه إلى حد ما ولكن ليس لدي عمل رياضي لدعم هذا الاقتراح حتى الآن.

تحديث وملخص:أرغب في الحفاظ على عامل التجانس (ألفا) مستقلاً عن عامل التعويض (الذي أشير إليه باسم بيتا هنا).إجابة جيسون الممتازة التي تم قبولها بالفعل هنا تعمل بشكل رائع بالنسبة لي.

الخطوة الأولى.

  • إذا كان بإمكانك أيضًا قياس الوقت منذ أخذ العينة الأخيرة (بمضاعفات مقربة لوقت أخذ العينات الثابت - لذا فإن 7.8 مللي ثانية منذ آخر عينة ستكون 8 وحدات)، فيمكن استخدام ذلك لتطبيق التجانس عدة مرات.قم بتطبيق الصيغة 8 مرات في هذه الحالة.لقد قمت بشكل فعال بإجراء تجانس أكثر انحيازًا نحو القيمة الحالية.

الخطوة الثانية.

  • للحصول على تجانس أفضل، نحتاج إلى تعديل ألفا أثناء تطبيق الصيغة 8 مرات في الحالة السابقة.

ما الذي سيفتقده تقريب التجانس هذا؟

  • لقد فاته بالفعل 7 عينات في المثال أعلاه
  • تم تقريب هذا في الخطوة 1 باستخدام أ المسطح إعادة تطبيق القيمة الحالية 7 مرات إضافية
  • إذا قمنا بتحديد عامل تقريبي بيتا التي سيتم تطبيقها جنبا إلى جنب مع ألفا (مثل alpha*beta بدلاً من alpha فقط)، سنفترض أن العينات السبعة المفقودة كانت تتغير بسلاسة بين قيم العينة السابقة والحالية.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top