python पायथन/SciPy के लिए पीक-खोज एल्गोरिदम




fft hough-transform (6)

scipy.signal.find_peaks_cwt नामक scipy में एक फ़ंक्शन है जो आपकी आवश्यकताओं के लिए उपयुक्त है, हालांकि मुझे इसके साथ अनुभव नहीं है इसलिए मैं अनुशंसा नहीं कर सकता ..

docs.scipy.org/doc/scipy/reference/generated/…

मैं पहले व्युत्पन्न या कुछ के शून्य-क्रॉसिंग को ढूंढकर खुद कुछ लिख सकता हूं, लेकिन यह मानक पुस्तकालयों में शामिल होने के लिए एक सामान्य-पर्याप्त कार्य जैसा लगता है। किसी को भी पता है?

मेरा विशेष आवेदन एक 2 डी सरणी है, लेकिन आमतौर पर इसका उपयोग एफएफटी, आदि में चोटियों को खोजने के लिए किया जाएगा।

विशेष रूप से, इस तरह की समस्याओं में, कई मजबूत चोटियों होते हैं, और फिर बहुत छोटे "चोटियों" जो शोर के कारण होते हैं जिन्हें अनदेखा किया जाना चाहिए। ये सिर्फ उदाहरण हैं; मेरा वास्तविक डेटा नहीं:

1-आयामी चोटियों:

2-आयामी चोटियों:

चोटी-खोज एल्गोरिदम को इन चोटियों का स्थान मिलेगा (न केवल उनके मूल्य), और आदर्श रूप से वास्तविक अंतर-नमूना शिखर पाएंगे, न केवल अधिकतम मूल्य वाले सूचकांक, शायद क्वाड्रैटिक इंटरपोलेशन या कुछ का उपयोग कर।

आम तौर पर आप केवल कुछ मजबूत चोटियों की परवाह करते हैं, इसलिए उन्हें या तो चुना जाएगा क्योंकि वे एक निश्चित दहलीज से ऊपर हैं, या क्योंकि वे आदेशित सूची के पहले एन शिखर हैं, जो आयाम द्वारा क्रमबद्ध हैं।

जैसा कि मैंने कहा, मुझे पता है कि इस तरह कुछ कैसे लिखना है। मैं सिर्फ यह पूछ रहा हूं कि कोई पूर्व-मौजूदा फ़ंक्शन या पैकेज है जो अच्छी तरह से काम करने के लिए जाना जाता है।

अद्यतन करें:

मैंने एक MATLAB स्क्रिप्ट का अनुवाद किया और यह 1-डी मामले के लिए सौभाग्य से काम करता है, लेकिन बेहतर हो सकता है।

अद्यतन अद्यतन:

sixtenbe 1-डी मामले के लिए एक बेहतर संस्करण बनाया


मुझे नहीं लगता कि आप जो खोज रहे हैं वह SciPy द्वारा प्रदान किया जाता है। मैं इस स्थिति में खुद कोड लिखूंगा।

Spcip इंटरपोलेशन और scipy.interpolate से smoothing काफी अच्छा है और चोटी फिटिंग में और फिर अपने अधिकतम स्थान खोजने में काफी मददगार हो सकता है।


सबसे पहले चीजें, "शिखर" की परिभाषा अस्पष्ट है अगर आगे के विनिर्देशों के बिना। उदाहरण के लिए, निम्नलिखित श्रृंखला के लिए, क्या आप 5-4-5 एक चोटी या दो कॉल करेंगे?

1-2-1-2-1-1-5-4-5-1-1-5-1

इस मामले में, आपको कम से कम दो थ्रेसहोल्ड की आवश्यकता होगी: 1) केवल ऊपर एक उच्च दहलीज जो चरम मूल्य को चोटी के रूप में पंजीकृत कर सकती है; और 2) एक कम दहलीज ताकि नीचे दिए गए छोटे मूल्यों से अलग चरम मूल्य दो चोटियों बन जाएंगे।

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


उन लोगों के लिए जो निश्चित नहीं हैं कि पाइथन में किस चरम-खोज एल्गोरिदम का उपयोग करना है, यहां विकल्पों का एक त्वरित अवलोकन: https://github.com/MonsieurV/py-findpeaks

खुद को MatLab findpeaks फ़ंक्शन के समतुल्य बनाना चाहते हैं, मैंने पाया है कि मार्कोस डुएर्टे से detect_peaks फ़ंक्शन एक अच्छी पकड़ है।

उपयोग करने में बहुत आसान है:

import numpy as np
from vector import vector, plot_peaks
from libs import detect_peaks
print('Detect peaks with minimum height and distance filters.')
indexes = detect_peaks.detect_peaks(vector, mph=7, mpd=2)
print('Peaks are: %s' % (indexes))

जो आपको देगा:


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

ऐसा लगता है कि आपके चोटियों को स्पष्ट रूप से परिभाषित किया गया है और शोर में छिपे नहीं हैं। यह मामला है कि मैं चोटियों को खोजने के लिए चिकनी savtizky-golay derivatives का उपयोग करने की अनुशंसा करता हूं (यदि आप ऊपर दिए गए डेटा को अलग करते हैं तो आपको झूठी सकारात्मक गड़बड़ी होगी।)। यह एक बहुत ही प्रभावी तकनीक है और इसे लागू करने में बहुत आसान है (आपको मैट्रिक्स क्लास डब्ल्यू / मूल संचालन की आवश्यकता है)। यदि आपको बस पहले एसजी व्युत्पन्न के शून्य क्रॉसिंग मिलते हैं तो मुझे लगता है कि आप खुश होंगे।


डेटा के आउटलेटर्स को खोजने के लिए मानक सांख्यिकीय कार्य और विधियां हैं, जो शायद आपको पहले मामले में चाहिए। डेरिवेटिव का उपयोग करना आपके दूसरे को हल करेगा। मुझे एक ऐसी विधि के लिए निश्चित नहीं है जो निरंतर कार्य और नमूना डेटा दोनों हल करता है।







hough-transform