আমার কাছে সিসমিক সিগন্যাল রয়েছে (i):
এখানে আমি একটি সর্বাধিক খুঁজে পেয়েছি: i = 152.54, y = 222.29 ম্যানুয়ালি এবং এটিকে লাল রঙে চক্রান্ত করেছেন।
আমি সমস্ত ম্যাক্সিমা স্বয়ংক্রিয়ভাবে সন্ধান করতে চাই।
আমি পড়েছি যে সাবটিজকি গোলে ফিল্টার (এসজিএফ) একটি সংকেত এবং এর ডেরিভেটিভস উভয়েরই স্মুথ অনুমানের জন্য ব্যবহার করা যেতে পারে এবং এসজিএফের একটি সুবিধা হল এটি অন্যান্য ফিল্টারগুলির চেয়ে মিনিমা এবং ম্যাক্সিমা সংরক্ষণ করে। এটি আমার ব্যবহারের জন্য দুর্দান্ত লাগছে।
আমি একটি মতলব স্ক্রিপ্ট পেয়েছি যা এসজিএফ সহগ তৈরি করে। এবং ডেরিভেটিভের জন্য চতুর্থ অর্ডার এসজিএফ সহগের জন্য এটি ব্যবহার করে। আমি একটি ছোট মতলব স্ক্রিপ্ট কোড করেছিলাম
- 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
আমি আমার স্ক্রিপ্টের জন্য পরীক্ষা করতে হয়েছিল যদি আকাঙ্ক্ষিত ফলাফল দেওয়ার জন্য ফাংশনটি পেতে নেতিবাচক থেকে ইতিবাচক পরিবর্তিত হয় তবে এটি আমাকে বিভ্রান্ত করে। সর্বাধিকের জন্য ডেরাইভেটিভকে কি ইতিবাচক থেকে নেতিবাচক দিকে যাওয়া উচিত নয়? ম্যাক্সিমা এবং মিনিমার মধ্যে পার্থক্য করার আরও ভাল উপায় আছে কি?
নীচে আমার সিগন্যালে ম্যাক্সিমা খুঁজে পেতে এই ফাংশনটি ব্যবহারের ফলাফল:
ফলাফলগুলি দেখতে দুর্দান্ত দেখাচ্ছে তবে আমি লক্ষ্য করেছি যে কিছু ম্যাক্সিমা পাওয়া যায় নি: i = 143.13, 190.88, 256.97।
তারা কি অন্য ম্যাক্সিমার কাছাকাছি যাওয়ার কারণে এটি?
আমি কীভাবে নিকটস্থ দুটি ম্যাক্সিমা নিয়ন্ত্রণ করতে পারি?
কোনও উত্তরের জন্য অগ্রিম ধন্যবাদ!