मैं विवेकपूर्ण रूप से नमूना 1 डी सिग्नल में स्थानीय मैक्सिमा (नमूनों के बीच) को खोजने के लिए सावित्ज़की गोले फ़िल्टर का उपयोग कैसे करूं?


9

मेरे पास एक भूकंपीय संकेत y (i) है: यहाँ छवि विवरण दर्ज करें

यहां मैंने एक अधिकतम पाया: i = 152.54, y = 222.29 मैन्युअल रूप से और इसे लाल रंग में प्लॉट किया।

मैं सभी मैक्सिमा को स्वचालित रूप से ढूंढना चाहता हूं।

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

मुझे एक मैटलैब स्क्रिप्ट मिली जो SGF गुणांक उत्पन्न करती है। और इसका उपयोग यह पता लगाने के लिए किया गया कि व्युत्पन्न के लिए 4 वें क्रम SGF गुणांक। मैंने एक छोटी मतलाब लिपि को कोडित किया

  1. व्युत्पन्न के लिए SGF गुणांक के 4 वें क्रम के साथ संकेत को हल करके संकेत के व्युत्पन्न का पता लगाता है
  2. नमूनों की जोड़ी पाता है (i, i + 1) जहां व्युत्पन्न परिवर्तन पर हस्ताक्षर करते हैं
  3. I और I + 1 के बीच रैखिक प्रक्षेप द्वारा व्युत्पन्न के शून्य को पार करना पाता है

स्क्रिप्ट:

function [maxX,maxY] = findLocalMax(y)
% Kernel for 4th order Savitzky-Golay filter for finding derivative:
d4 = [0.0724 -0.1195 -0.1625 -0.1061 0 0.1061 0.1625 0.1195 -0.0724];

dy = conv(y,d4,'same'); % derivative

[m n] = size(dy);
maxX = [];
maxY = [];
for i = 1 : n - 1
  if dy(i) < 0 && dy(i+1) > 0 % max somewhere between i and i+1
    a = dy(i)/(dy(i) - dy(i+1)); % linear interpolation
    mx = i + a;
    maxX = [maxX mx];
    my = y(i)*(1-a) + y(i+1)*a; % linear interpolation
    maxY = [maxY my];
  end
end

अगर मुझे वांछित परिणाम देने के लिए फ़ंक्शन प्राप्त करने के लिए नकारात्मक से सकारात्मक में परिवर्तन होता है, तो मेरी स्क्रिप्ट का परीक्षण करने के लिए मुझे Im करना होगा, हालांकि यह मुझे भ्रमित करता है। क्या सकारात्मक से नकारात्मक तक अधिकतम जाने के लिए व्युत्पन्न नहीं होना चाहिए? क्या मैक्सिमा और मिनिमा के बीच अंतर करने का कुछ बेहतर तरीका है?

नीचे मेरे संकेत पर अधिकतम खोजने के लिए इस फ़ंक्शन का उपयोग करने का परिणाम है: यहाँ छवि विवरण दर्ज करें

परिणाम अच्छे लगते हैं, लेकिन मैं ध्यान देता हूं कि कुछ मैक्सिमा नहीं पाई जाती हैं: i = 143.13, 190.88, 256.97।

क्या यह इसलिए है क्योंकि वे अन्य मैक्सिमा के करीब हैं?

मैं निकटतम दो अधिकतम कैसे नियंत्रित कर सकता हूं?

किसी भी जवाब के लिए अग्रिम धन्यवाद!


क्या आप फ़िल्टर आउटपुट को प्लॉट कर सकते हैं?
जिम क्ले

जवाबों:


5

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.