2008-08-06 18 views
50

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

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

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


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

उत्तर

8

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

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

0

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

2

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

0

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

6

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

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

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

TSpectrum वर्ग प्रलेखन से:

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

[1] M.Morhac एट अल।: बहुआयामी संयोग गामा-रे स्पेक्ट्रा के लिए उन्मूलन विधियां। परमाणु उपकरण और भौतिकी अनुसंधान में तरीके एक 401 (1997) 113- 132.

[2] M.Morhac एट अल .: कुशल एक और दो आयामी गोल्ड deconvolution और gamma- के उनके आवेदन रे स्पेक्ट्रा अपघटन। परमाणु उपकरण और तरीके भौतिकी अनुसंधान ए 401 (1 99 7) 385-408।

[3] एम। मोरहाक एट अल .: में चोटी की पहचान बहुआयामी संयोग गामा-रे स्पेक्ट्रा। परमाणु उपकरण और अनुसंधान भौतिकी के तरीके 443 (2000), 108-125।

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


क्या किया है लघु संस्करण है कि हिस्टोग्राम शोर को खत्म करने चपटा, और उसके बाद स्थानीय मॅक्सिमा चपटा हिस्टोग्राम में जानवर बल द्वारा पता लगाया जाता है।

4

इस विधि डेविड मार की पुस्तक "विजन" अपने चोटियों की उम्मीद चौड़ाई के साथ अपने सिग्नल

गाऊसी कलंक से मूल रूप से है। यह शोर स्पाइक्स से छुटकारा पाता है और आपका चरण डेटा अवांछित है।

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

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

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

0

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

82

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

  1. किन्हीं दो बिंदुओं के बीच अपने डेटा में

    , (x(0), y(0)) और (x(n), y(n)), 0 <= i < n के लिए y(i + 1) - y(i) को जोड़ने और कॉल इस T ("यात्रा") और सेट R उपयुक्त रूप से के लिए y(n) - y(0) + k को ("वृद्धि") छोटा kT/R > 1 एक चोटी को इंगित करता है। यह ठीक काम करता है अगर शोर के कारण बड़ी यात्रा असंभव है या यदि शोर आधार वक्र आकार के आसपास समरूप रूप से वितरित करता है। अपने आवेदन के लिए, किसी दिए गए थ्रेसहोल्ड के ऊपर स्कोर के साथ सबसे पुराना शिखर स्वीकार करें, या अधिक दिलचस्प गुणों के लिए यात्रा प्रति वृद्धि मूल्यों के वक्र का विश्लेषण करें।

  2. उपयोग मिलान किया फिल्टर एक मानक शिखर आकार के समानता स्कोर करने के लिए (अनिवार्य रूप से, कुछ आकार के खिलाफ एक सामान्यीकृत डॉट उत्पाद का उपयोग कोज्या-मीट्रिक समानता की प्राप्त करने के लिए) एक मानक शिखर आकार और जांच के खिलाफ

  3. Deconvolve उच्च मूल्यों के लिए (हालांकि मुझे अक्सर सरल उपकरण उत्पादन के लिए शोर के प्रति संवेदनशील होने के लिए 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-गाऊशियन मिश्रण मॉडल फिट करें (उदाहरण के लिए, न्यूमेरिकल व्यंजनों में कोड का एक अच्छा तैयार-निर्मित हिस्सा है)। पहले चोटी ले लो। यह ओवरलैपिंग चोटियों के साथ सही ढंग से सौदा करेगा।

  6. एक सरल गाऊसी, कॉची, प्वासों, या क्या-है-आप वक्र करने के लिए डेटा में सबसे अच्छा मैच का पता लगाएं। एक विस्तृत श्रृंखला पर इस वक्र का मूल्यांकन करें और इसे अपने चरम स्थान पर ध्यान देने के बाद डेटा की एक प्रति से घटाएं। दोहराएँ। सबसे शुरुआती चोटी लें जिसका मॉडल पैरामीटर (मानक विचलन संभवतः, लेकिन कुछ अनुप्रयोगों को कुर्टोसिस या अन्य सुविधाओं के बारे में परवाह हो सकती है) कुछ मानदंडों को पूरा करते हैं। चोटी को डेटा से घटाए जाने पर कलाकृतियों के पीछे देखें। बेस्ट मैच को उपरोक्त # 2 में सुझाए गए मिलान स्कोरिंग के प्रकार से निर्धारित किया जा सकता है।

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

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

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

+0

वाह, इस जानकारी के लिए धन्यवाद। मैं अपनी चरम पहचान समस्या को हल करने और हल करने के लिए इन रणनीतियों (खराब) में से कई रहा हूं लेकिन मैं बिंदु 1 पर एक बेहतर नज़र डालने जा रहा हूं। इस विशाल मात्रा में डेटा के लिए धन्यवाद। जॉन। –

+0

इस उत्तर में बहुत बेहतर भाषा अज्ञेय जानकारी है - विशेष रूप से मुझे न्यूमेरिकल रेसिपी कोड पता है जो गॉसियन फिट बैठता है क्योंकि हम इसे यहां एफएफटी आउटपुट पर काम करते हैं। – Brendan

+0

"उपयुक्त रूप से छोटे के लिए" के बारे में, क्या सभी गणनाओं के लिए निरंतर मूल्य है? आप इसे कैसे चुनते हैं? उचित रूप से छोटा मतलब क्या है? – Loren

5

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

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

> Original answer

संबंधित मुद्दे