मापा संकेत का पीक पहचान

हम एक डेटा अधिग्रहण कार्ड का उपयोग ऐसे डिवाइस से रीडिंग लेने के लिए करते हैं जो उसके सिग्नल को चोटी तक बढ़ाता है और फिर मूल मान के पास वापस आ जाता है। शिखर मूल्य को खोजने के लिए हम वर्तमान में उच्चतम पढ़ने के लिए सरणी खोजते हैं और हमारे गणना में उपयोग किए जाने वाले शीर्ष मूल्य के समय को निर्धारित करने के लिए इंडेक्स का उपयोग करते हैं।

यह अच्छी तरह से काम करता है यदि उच्चतम मूल्य वह चरम है जिसे हम ढूंढ रहे हैं, लेकिन यदि डिवाइस सही तरीके से काम नहीं कर रहा है तो हम दूसरी चोटी देख सकते हैं जो प्रारंभिक चोटी से अधिक हो सकता है। हम 90 सेकंड की अवधि में 16 उपकरणों से 10 रीडिंग लेते हैं।

मेरे प्रारंभिक विचार रीडिंग जांच के माध्यम से चक्र को देखना है कि क्या पिछले और अगले बिंदु चोटी को खोजने और चोटियों की एक सरणी बनाने के लिए वर्तमान से कम हैं या नहीं। हो सकता है कि हमें सिस्टम में शोर की अनुमति देने के लिए वर्तमान स्थिति के दोनों तरफ औसत बिंदुओं को देखना चाहिए। क्या यह आगे बढ़ने का सबसे अच्छा तरीका है या बेहतर तकनीकें हैं?


हम प्रयोगशाला का उपयोग करते हैं और मैंने LAVA फ़ोरम की जांच की है और वहां कई संख्याएं हैं दिलचस्प उदाहरण यह हमारे परीक्षण सॉफ्टवेयर का हिस्सा है और हम बहुत से गैर-मानक VI पुस्तकालयों का उपयोग करने से बचने की कोशिश कर रहे हैं, इसलिए मैं विशिष्ट कोड की बजाय शामिल प्रक्रिया / एल्गोरिदम पर प्रतिक्रिया की उम्मीद कर रहा था।

0
जोड़ा संपादित
विचारों: 2

9 उत्तर

आप औसत संकेत सिग्नल करने का प्रयास कर सकते हैं, यानी प्रत्येक बिंदु के लिए, आसपास के 3 या अधिक बिंदुओं के साथ औसत औसत। अगर शोर ब्लिप विशाल हैं, तो यह भी मदद नहीं कर सकता है।

मुझे एहसास है कि यह भाषा अज्ञेयवादी थी, लेकिन अनुमान लगाया गया है कि आप लैबव्यू का उपयोग कर रहे हैं, बहुत सारे प्री-पैक किए गए सिग्नल प्रोसेसिंग VIs हैं जो LabView के साथ आते हैं जिनका उपयोग आप चिकनाई और शोर में कमी करने के लिए कर सकते हैं। इस प्रकार की चीज़ पर अधिक विशिष्ट सहायता प्राप्त करने के लिए एनआई फ़ोरम एक बेहतरीन जगह है।

0
जोड़ा

आप अपने तर्क में कुछ मानक निर्णय लागू कर सकते हैं और x% पर चोटियों की सूचना ले सकते हैं।

0
जोड़ा

मुझे लगता है कि आप एक अपेक्षित, उदाहरण सिग्नल के साथ अपने सिग्नल क्रॉस-सहसंबंध करना चाहते हैं। लेकिन, यह इतना लंबा समय रहा है क्योंकि मैंने सिग्नल प्रोसेसिंग का अध्ययन किया था और फिर भी मैंने ज्यादा नोटिस नहीं लिया था।

0
जोड़ा

मैं इस थ्रेड में एक एल्गोरिदम में योगदान देना चाहता हूं कि मैंने स्वयं विकसित किया है :

यह फैलाव के सिद्धांत पर आधारित है: यदि कोई नया डेटापॉइंट मानक का दिया गया x संख्या है कुछ चलने वाले अर्थों से विचलन, एल्गोरिदम सिग्नल (जिसे z-score भी कहा जाता है)। एल्गोरिदम बहुत मजबूत है क्योंकि यह एक अलग चलने का मतलब और विचलन बनाता है, जैसे सिग्नल थ्रेसहोल्ड को दूषित नहीं करते हैं। इसलिए पिछले सिग्नल की मात्रा के बावजूद भविष्य के संकेतों को लगभग समान सटीकता के साथ पहचाना जाता है। एल्गोरिदम में 3 इनपुट होते हैं: lag = चलती विंडो का अंतराल , threshold = z-score जिस पर एल्गोरिदम सिग्नल और effect = प्रभाव (बीच के बीच) 0 और 1) औसत और मानक विचलन पर नए सिग्नल के । उदाहरण के लिए, 5 का lag डेटा को सुचारू बनाने के लिए पिछले 5 अवलोकनों का उपयोग करेगा। 3.5 का एक थ्रेसहोल्ड सिग्नल करेगा यदि डेटापॉइंट 3.5 मानक विचलन चलने वाले माध्य से दूर है। और 0.5 का प्रभाव सामान्य डेटापॉइंट्स के प्रभाव के आधा संकेत देता है। इसी तरह, 0 का effect नया थ्रेसहोल्ड पुन: गणना करने के लिए पूरी तरह सिग्नल को अनदेखा करता है: इसलिए 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

डेमो

डेमोnstration of robust thresholding algorithm

> Original answer

0
जोड़ा
@ ब्रैंडन ब्राउन जो बहुत मुश्किल नहीं होना चाहिए? बस मूल एल्गोरिदम को संशोधित करें जैसे प्रत्येक बार सिग्नल होता है, जो विवरण आप चाहते हैं उसे सहेजें। जैसे एक चर लागू करें जो एक चोटी शुरू होने पर "झंडे" को लागू करता है, आपको आवश्यक मूल्यों का ट्रैक रखें और चोटी बंद होने पर उन्हें बचाएं।
जोड़ा लेखक Jean-Paul, स्रोत
अगर मैं न केवल चोटियों का पता लगाना चाहता हूं, बल्कि चोटी बनाने वाली व्यक्तिगत तरंगों को भी अलग करता हूं, तो मैं इस एल्गोरिदम के साथ ऐसा कैसे कर सकता हूं? मैं न केवल चरम मूल्य चाहता हूं बल्कि मैं चौड़ाई / अवधि और पता लगाए गए स्पाइक्स के उदय / ढलान को जानना चाहता हूं
जोड़ा लेखक Brandon Brown, स्रोत

कुछ समस्या में इस समस्या का अध्ययन किया गया है।

रूट </<कोड> TSpectrum * कक्षाओं में बहुत अद्यतित कार्यान्वयन का एक सेट है। ए> (एक परमाणु / कण भौतिकी विश्लेषण उपकरण)। कोड एक से त्रि-आयामी डेटा में काम करता है।

रूट स्रोत कोड उपलब्ध है, इसलिए यदि आप चाहें तो इस कार्यान्वयन को पकड़ सकते हैं।

TSpectrum क्लास दस्तावेज़ से:

इस वर्ग में उपयोग किए गए एल्गोरिदम निम्नलिखित संदर्भों में प्रकाशित किए गए हैं:

<�पी> [1] एम। मोरहाक एट अल .: पृष्ठभूमि   के लिए उन्मूलन तरीकों   बहुआयामी संयोग गामा-रे   स्पेक्ट्रा। परमाणु उपकरण और   भौतिकी अनुसंधान ए 401 में तरीके   (1 99 7) 113-   132।      <�पी> [2] एम। मोरहाक एट अल .: कुशल एक- और द्वि-आयामी गोल्ड   deconvolution और इसके आवेदन के लिए   गामा-रे स्पेक्ट्रा अपघटन।   परमाणु उपकरण और तरीके   भौतिकी अनुसंधान ए 401 (1 99 7) 385-408।      <�पी> [3] एम। मोरहाक एट अल .: चोटियों की पहचान में   बहुआयामी संयोग गामा-रे   स्पेक्ट्रा। परमाणु उपकरण और   रिसर्च फिजिक्स ए में तरीके   443 (2000), 108-125।

कागजात दस्तावेजों से उन लोगों के लिए लिंक किए गए हैं जिनके पास एनआईएम ऑनलाइन सदस्यता नहीं है।


क्या किया जाता है इसका संक्षिप्त संस्करण यह है कि हिस्टोग्राम शोर को खत्म करने के लिए चपटा हुआ है, और फिर स्थानीय अधिकतममा को चक्करदार हिस्टोग्राम में ब्रूट फोर्स द्वारा पता चला है।

0
जोड़ा

यह विधि मूल रूप से डेविड मैर की पुस्तक "विजन" से है

गॉसियन आपके चोटी की अपेक्षित चौड़ाई के साथ अपने सिग्नल को धुंधला कर देता है। यह शोर स्पाइक्स से छुटकारा पाता है और आपका चरण डेटा अवांछित है।

फिर किनारे का पता लगाना (लॉग करेंगे)

फिर आपके किनारों की विशेषताओं (चोटियों की तरह) थे। चोटियों के किनारों के बीच देखो, आकार के आधार पर चोटियों को क्रमबद्ध करें, और आप कर चुके हैं।

मैंने इस पर विविधताएं उपयोग की हैं और वे बहुत अच्छी तरह से काम करते हैं।

0
जोड़ा

बहुत सारे और क्लासिक पीक डिटेक्शन विधियों के बहुत सारे हैं, जिनमें से कोई भी काम कर सकता है। आपको देखना होगा कि, विशेष रूप से, आपके डेटा की गुणवत्ता को सीमित करता है। यहां बुनियादी विवरण दिए गए हैं:

  1. Between any two points in your data, (x(0), y(0)) and (x(n), y(n)), add up y(i + 1) - y(i) for 0 <= i < n and call this T ("travel") and set R ("rise") to y(n) - y(0) + k for suitably small k. T/R > 1 indicates a peak. This works OK if large travel due to noise is unlikely or if noise distributes symmetrically around a base curve shape. For your application, accept the earliest peak with a score above a given threshold, or analyze the curve of travel per rise values for more interesting properties.

  2. Use matched filters to score similarity to a standard peak shape (essentially, use a normalized dot-product against some shape to get a cosine-metric of similarity)

  3. Deconvolve against a standard peak shape and check for high values (though I often find 2 to be less sensitive to noise for simple instrumentation output).

  4. Smooth the data and check for triplets of equally spaced points where, if x0 < x1 < x2, y1 > 0.5 * (y0 + y2), or check Euclidean distances like this: D((x0, y0), (x1, y1)) + D((x1, y1), (x2, y2)) > D((x0, y0),(x2, y2)), which relies on the triangle inequality. Using simple ratios will again provide you a scoring mechanism.

  5. Fit a very simple 2-gaussian mixture model to your data (for example, Numerical Recipes has a nice ready-made chunk of code). Take the earlier peak. This will deal correctly with overlapping peaks.

  6. Find the best match in the data to a simple Gaussian, Cauchy, Poisson, or what-have-you curve. Evaluate this curve over a broad range and subtract it from a copy of the data after noting it's peak location. Repeat. Take the earliest peak whose model parameters (standard deviation probably, but some applications might care about kurtosis or other features) meet some criterion. Watch out for artifacts left behind when peaks are subtracted from the data. Best match might be determined by the kind of match scoring suggested in #2 above.

मैंने पहले किया है कि आप पहले क्या कर रहे हैं: डीएनए अनुक्रम डेटा में चोटियों को ढूंढना, मापा घटता से अनुमानित डेरिवेटिव्स में चोटियों को ढूंढना, और हिस्टोग्राम में चोटियों को ढूंढना।

मैं आपको उचित बेसलाइनिंग पर ध्यान से भाग लेने के लिए प्रोत्साहित करता हूं। वीनर फ़िल्टरिंग या अन्य फ़िल्टरिंग या सरल हिस्टोग्राम विश्लेषण शोर की उपस्थिति में बेसलाइन के लिए अक्सर एक आसान तरीका है।

अंत में, यदि आपका डेटा आम तौर पर शोर है और आप कार्ड से डेटा को बिना संदर्भित एकल-अंत आउटपुट (या यहां तक ​​कि संदर्भित, केवल अंतर नहीं) के रूप में प्राप्त कर रहे हैं, और यदि आप प्रत्येक डेटा बिंदु में बहुत से अवलोकनों का औसत कर रहे हैं, तो उनको सॉर्ट करने का प्रयास करें अवलोकन और पहले और आखिरी चतुर्भुज को दूर करना और औसत बनी हुई है। ऐसी कई बाहरी उन्मूलन रणनीतियां हैं जो वास्तव में उपयोगी हो सकती हैं।

0
जोड़ा
इस उत्तर में बहुत अच्छी भाषा अज्ञेय जानकारी है - विशेष रूप से मुझे न्यूमेरिकल रेसिपी कोड पता है जो गॉसियन फिट बैठता है क्योंकि हम इसे यहां एफएफटी आउटपुट पर काम करते हैं।
जोड़ा लेखक Brendan, स्रोत
"उपयुक्त रूप से छोटे के लिए" के बारे में, क्या सभी गणनाओं के लिए निरंतर मूल्य है? आप इसे कैसे चुनते हैं? उचित रूप से छोटा मतलब क्या है?
जोड़ा लेखक Loren, स्रोत
वाह, इस सारी जानकारी के लिए धन्यवाद। मैं अपनी चरम पहचान समस्या को हल करने और हल करने के लिए इन रणनीतियों (खराब) में से कई रहा हूं लेकिन मैं बिंदु 1 पर एक बेहतर नज़र डालने जा रहा हूं। इस विशाल मात्रा में डेटा के लिए धन्यवाद। जॉन।
जोड़ा लेखक John Ballinger, स्रोत
यह ओवरफ्लो को रोकने के लिए है: जब आप टी द्वारा आर को विभाजित करते हैं, यदि वक्र फ्लैट या लगभग फ्लैट है या पहले और अंतिम वाई मान बराबर या लगभग बराबर हैं, तो आर शून्य पर या उसके करीब होगा। जब अनुपात शून्य के नजदीक न हो तो अनुपात को फेंकने से बचने के लिए पर्याप्त रूप से छोटा छोटा होगा। यह ज्यादातर व्यावहारिक, अनुभवजन्य पदार्थ है। यह सिर्फ शून्य-विभाजन को रोकने के लिए है, जिसे आप किसी अन्य तरीके से करने का विकल्प चुन सकते हैं।
जोड़ा लेखक Thomas Kammeyer, स्रोत

मैं उपकरण के बारे में बहुत कुछ नहीं जानता, इसलिए यह पूरी तरह से अव्यवहारिक हो सकता है, लेकिन फिर यह एक उपयोगी अलग दिशा हो सकता है। यदि आप जानते हैं कि रीडिंग कैसे विफल हो सकती है, और ऐसी विफलताओं को देखते हुए चोटियों के बीच एक निश्चित अंतराल है, तो प्रत्येक अंतराल पर ढाल वंश क्यों न करें। यदि वंश आपको उस क्षेत्र में वापस लाता है जिसे आपने पहले खोजा है, तो आप इसे छोड़ सकते हैं। नमूना सतह के आकार के आधार पर, यह आपको खोज से तेजी से चोटियों को खोजने में भी मदद कर सकता है।

0
जोड़ा

वांछित चोटी और अवांछित दूसरे चोटी के बीच गुणात्मक अंतर है? यदि दोनों चोटियों "तेज" हैं - यानी समय अवधि में कम - आवृत्ति डोमेन (एफएफटी करके) में सिग्नल को देखते समय आपको अधिकांश बैंडों पर ऊर्जा मिल जाएगी। लेकिन अगर "अच्छा" शिखर पर निर्भरता पर ऊर्जा मौजूद होती है जो "खराब" चोटी में मौजूद नहीं होती है, या इसके विपरीत, आप उन्हें इस तरह से स्वचालित रूप से अलग करने में सक्षम हो सकते हैं।

0
जोड़ा