मेरे पास एक भूकंपीय संकेत y (i) है:
यहां मैंने एक अधिकतम पाया: i = 152.54, y = 222.29 मैन्युअल रूप से और इसे लाल रंग में प्लॉट किया।
मैं सभी मैक्सिमा को स्वचालित रूप से ढूंढना चाहता हूं।
मैंने पढ़ा कि सेवित्स्की गोले फ़िल्टर (SGF) का उपयोग सिग्नल और इसके डेरिवेटिव दोनों के सुचारू अनुमानों को खोजने के लिए किया जा सकता है, और SGF के लाभों में से एक यह है कि यह अन्य फिल्टर की तुलना में मिनिमा और मैक्सिमा को बहुत बेहतर बनाए रखता है। यह मेरे उपयोग के लिए बहुत अच्छा लगता है।
मुझे एक मैटलैब स्क्रिप्ट मिली जो SGF गुणांक उत्पन्न करती है। और इसका उपयोग यह पता लगाने के लिए किया गया कि व्युत्पन्न के लिए 4 वें क्रम SGF गुणांक। मैंने एक छोटी मतलाब लिपि को कोडित किया
- व्युत्पन्न के लिए SGF गुणांक के 4 वें क्रम के साथ संकेत को हल करके संकेत के व्युत्पन्न का पता लगाता है
- नमूनों की जोड़ी पाता है (i, i + 1) जहां व्युत्पन्न परिवर्तन पर हस्ताक्षर करते हैं
- 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।
क्या यह इसलिए है क्योंकि वे अन्य मैक्सिमा के करीब हैं?
मैं निकटतम दो अधिकतम कैसे नियंत्रित कर सकता हूं?
किसी भी जवाब के लिए अग्रिम धन्यवाद!