سؤال

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

يعمل هذا بشكل جيد إذا كانت أعلى قيمة هي الذروة التي نبحث عنها ولكن إذا كان الجهاز لا يعمل بشكل صحيح يمكننا رؤية قمة ثانية والتي يمكن أن تكون أعلى من الذروة الأولية.نحن نأخذ 10 قراءات في الثانية من 16 جهازًا خلال فترة 90 ثانية.

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


نحن نستخدم LabVIEW وقد قمت بالتحقق من ذلك منتديات لافا وهناك عدد من الأمثلة المثيرة للاهتمام.يعد هذا جزءًا من برنامج الاختبار الخاص بنا ونحن نحاول تجنب استخدام عدد كبير جدًا من مكتبات VI غير القياسية، لذا كنت آمل الحصول على تعليقات حول العملية/الخوارزميات المعنية بدلاً من التعليمات البرمجية المحددة.

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

المحلول

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

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

نصائح أخرى

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

  1. بين أي نقطتين في بياناتك، (x(0), y(0)) و (x(n), y(n)), أضف ما يصل y(i + 1) - y(i) ل 0 <= i < n واتصل بهذا T ("السفر") وتعيين R ("يرتفع إلى y(n) - y(0) + k لصغيرة مناسبة k. T/R > 1 يشير إلى الذروة.يعمل هذا بشكل جيد إذا كان السفر الكبير بسبب الضوضاء غير محتمل أو إذا تم توزيع الضوضاء بشكل متماثل حول شكل منحنى أساسي.بالنسبة لتطبيقك، اقبل الذروة الأولى مع درجة أعلى من عتبة معينة، أو قم بتحليل منحنى السفر لكل قيم الارتفاع للحصول على خصائص أكثر إثارة للاهتمام.

  2. استخدم المرشحات المتطابقة لتسجيل التشابه مع شكل ذروة قياسي (بشكل أساسي، استخدم منتج نقطي تم تسويته مقابل بعض الأشكال للحصول على مقياس جيب التمام للتشابه)

  3. قم بتفكيك الشكل القياسي للذروة وتحقق من وجود قيم عالية (على الرغم من أنني غالبًا ما أجد 2 أقل حساسية للضوضاء بالنسبة لإخراج الأجهزة البسيطة).

  4. قم بتسوية البيانات وتحقق من وجود ثلاثة توائم من النقاط المتباعدة بشكل متساوٍ حيث، إذا x0 < x1 < x2, y1 > 0.5 * (y0 + y2), ، أو التحقق من المسافات الإقليدية مثل هذا: D((x0, y0), (x1, y1)) + D((x1, y1), (x2, y2)) > D((x0, y0),(x2, y2)), ، والذي يعتمد على عدم المساواة المثلث.سيوفر لك استخدام النسب البسيطة آلية تسجيل النقاط مرة أخرى.

  5. قم بملاءمة نموذج خليط 2-gaussian بسيط جدًا مع بياناتك (على سبيل المثال، تحتوي Numerical Recipes على جزء جميل من التعليمات البرمجية الجاهزة).خذ الذروة السابقة.وهذا سوف يتعامل بشكل صحيح مع القمم المتداخلة.

  6. ابحث عن أفضل تطابق في البيانات مع منحنى Gaussian أو Cauchy أو Poisson أو منحنى What-have-you البسيط.قم بتقييم هذا المنحنى على نطاق واسع واطرحه من نسخة البيانات بعد ملاحظة موقع الذروة.يكرر.لنأخذ على سبيل المثال الذروة الأولى التي تلبي معلماتها النموذجية (الانحراف المعياري على الأرجح، ولكن بعض التطبيقات قد تهتم بالتفرطح أو ميزات أخرى) بعض المعايير.احترس من القطع الأثرية التي تُركت عندما يتم طرح القمم من البيانات.قد يتم تحديد أفضل تطابق من خلال نوع نتيجة المباراة المقترحة في رقم 2 أعلاه.

لقد فعلت ما تفعله من قبل:العثور على القمم في بيانات تسلسل الحمض النووي، وإيجاد القمم في المشتقات المقدرة من المنحنيات المقاسة، وإيجاد القمم في الرسوم البيانية.

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

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

وقد تمت دراسة هذه المشكلة بشيء من التفصيل.

هناك مجموعة من التطبيقات الحديثة جدًا في TSpectrum* فئات من جذر (أداة تحليل فيزياء الجسيمات النووية/الجسيمية).يعمل الكود في بيانات أحادية إلى ثلاثية الأبعاد.

كود مصدر ROOT متاح، لذا يمكنك الحصول على هذا التنفيذ إذا كنت تريد ذلك.

من TSpectrum وثائق الطبقة:

تم نشر الخوارزميات المستخدمة في هذا الفصل في المراجع التالية:

[1] م.مورهاك وآخرون:أساليب القضاء على الخلفية لأطياف غاما-رين الصدفة متعددة الأبعاد.الأدوات النووية والأساليب في أبحاث الفيزياء A 401 (1997) 113- 132.

[2] م.مورهاك وآخرون:فعالة من الذهب الذهب واحد وثنائي الأبعاد وتطبيقها على تحلل أطياف أشعة جاما.الأدوات النووية والأساليب في أبحاث الفيزياء A 401 (1997) 385-408.

[3] م.مورهاك وآخرون:تحديد القمم في أطياف غاما-رين الصدفة متعددة الأبعاد.الأدوات النووية والأساليب في فيزياء البحوث A 443 (2000) ، 108-125.

يتم ربط الأوراق من وثائق الفصل لأولئك منكم الذين ليس لديهم اشتراك NIM عبر الإنترنت.


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

وأود أن أساهم في هذا الموضوع خوارزمية ذلك لقد طورت نفسي:

لأنه يقوم على مبدأ تشتت:إذا كانت نقطة البيانات الجديدة عبارة عن عدد معين من الانحرافات المعيارية بعيدًا عن بعض المتوسطات المتحركة، فإن إشارات الخوارزمية (وتسمى أيضًا z-score).الخوارزمية قوية جدًا لأنها تبني ملفًا متفرق المتوسط ​​المتحرك والانحراف، بحيث لا تفسد الإشارات العتبة.وبالتالي يتم تحديد الإشارات المستقبلية بنفس الدقة تقريبًا، بغض النظر عن كمية الإشارات السابقة.تأخذ الخوارزمية 3 مدخلات: lag = the lag of the moving window, threshold = the z-score at which the algorithm signals و influence = the influence (between 0 and 1) of new signals on the mean and standard deviation.على سبيل المثال، أ lag من 5 سيستخدم آخر 5 ملاحظات لتسهيل البيانات.أ threshold سوف تشير القيمة 3.5 إلى ما إذا كانت نقطة البيانات تبعد 3.5 انحرافات معيارية عن المتوسط ​​المتحرك.و influence 0.5 يعطي إشارات نصف من التأثير الذي تتمتع به نقاط البيانات العادية.وبالمثل، أ influence 0 يتجاهل الإشارات تمامًا لإعادة حساب العتبة الجديدة:وبالتالي فإن تأثير 0 هو الخيار الأقوى.

يعمل على النحو التالي:

كود مزيف

# Let y be a vector of timeseries data of at least length lag+2
# Let mean() be a function that calculates the mean
# Let std() be a function that calculates the standard deviaton
# Let absolute() be the absolute value function

# Settings (the ones below are examples: choose what is best for your data)
set lag to 5;          # lag 5 for the smoothing functions
set threshold to 3.5;  # 3.5 standard deviations for signal
set influence to 0.5;  # between 0 and 1, where 1 is normal influence, 0.5 is half

# Initialise variables
set signals to vector 0,...,0 of length of y;   # Initialise signal results
set filteredY to y(1,...,lag)                   # Initialise filtered series
set avgFilter to null;                          # Initialise average filter
set stdFilter to null;                          # Initialise std. filter
set avgFilter(lag) to mean(y(1,...,lag));       # Initialise first value
set stdFilter(lag) to std(y(1,...,lag));        # Initialise first value

for i=lag+1,...,t do
  if absolute(y(i) - avgFilter(i-1)) > threshold*stdFilter(i-1) then
    if y(i) > avgFilter(i-1)
      set signals(i) to +1;                     # Positive signal
    else
      set signals(i) to -1;                     # Negative signal
    end
    # Adjust the filters
    set filteredY(i) to influence*y(i) + (1-influence)*filteredY(i-1);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  else
    set signals(i) to 0;                        # No signal
    # Adjust the filters
    set filteredY(i) to y(i);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  end
end

تجريبي

Demonstration of robust thresholding algorithm

> الإجابة الأصلية

هذه الطريقة مأخوذة أساسًا من كتاب "الرؤية" لديفيد مار

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

ثم اكتشاف الحافة (سيقوم LOG بذلك)

ثم كانت حوافك هي حواف الميزات (مثل القمم).ابحث بين الحواف عن القمم، وقم بفرز القمم حسب الحجم، وبذلك تكون قد انتهيت.

لقد استخدمت الاختلافات في هذا وهي تعمل بشكل جيد للغاية.

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

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

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

يمكنك تطبيق بعض الانحراف المعياري إلى منطقك ولاحظ القمم التي تزيد عن x٪.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top