আমি কীভাবে একটি বিচ্ছিন্নভাবে নমুনাযুক্ত 1 ডি সংকেতে স্থানীয় ম্যাক্সিমা (নমুনাগুলির মধ্যে) সন্ধান করতে একটি সাভিৎস্কি গোলে ফিল্টার ব্যবহার করব?


9

আমার কাছে সিসমিক সিগন্যাল রয়েছে (i): এখানে চিত্র বর্ণনা লিখুন

এখানে আমি একটি সর্বাধিক খুঁজে পেয়েছি: i = 152.54, y = 222.29 ম্যানুয়ালি এবং এটিকে লাল রঙে চক্রান্ত করেছেন।

আমি সমস্ত ম্যাক্সিমা স্বয়ংক্রিয়ভাবে সন্ধান করতে চাই।

আমি পড়েছি যে সাবটিজকি গোলে ফিল্টার (এসজিএফ) একটি সংকেত এবং এর ডেরিভেটিভস উভয়েরই স্মুথ অনুমানের জন্য ব্যবহার করা যেতে পারে এবং এসজিএফের একটি সুবিধা হল এটি অন্যান্য ফিল্টারগুলির চেয়ে মিনিমা এবং ম্যাক্সিমা সংরক্ষণ করে। এটি আমার ব্যবহারের জন্য দুর্দান্ত লাগছে।

আমি একটি মতলব স্ক্রিপ্ট পেয়েছি যা এসজিএফ সহগ তৈরি করে। এবং ডেরিভেটিভের জন্য চতুর্থ অর্ডার এসজিএফ সহগের জন্য এটি ব্যবহার করে। আমি একটি ছোট মতলব স্ক্রিপ্ট কোড করেছিলাম

  1. 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

আমি আমার স্ক্রিপ্টের জন্য পরীক্ষা করতে হয়েছিল যদি আকাঙ্ক্ষিত ফলাফল দেওয়ার জন্য ফাংশনটি পেতে নেতিবাচক থেকে ইতিবাচক পরিবর্তিত হয় তবে এটি আমাকে বিভ্রান্ত করে। সর্বাধিকের জন্য ডেরাইভেটিভকে কি ইতিবাচক থেকে নেতিবাচক দিকে যাওয়া উচিত নয়? ম্যাক্সিমা এবং মিনিমার মধ্যে পার্থক্য করার আরও ভাল উপায় আছে কি?

নীচে আমার সিগন্যালে ম্যাক্সিমা খুঁজে পেতে এই ফাংশনটি ব্যবহারের ফলাফল: এখানে চিত্র বর্ণনা লিখুন

ফলাফলগুলি দেখতে দুর্দান্ত দেখাচ্ছে তবে আমি লক্ষ্য করেছি যে কিছু ম্যাক্সিমা পাওয়া যায় নি: i = 143.13, 190.88, 256.97।

তারা কি অন্য ম্যাক্সিমার কাছাকাছি যাওয়ার কারণে এটি?

আমি কীভাবে নিকটস্থ দুটি ম্যাক্সিমা নিয়ন্ত্রণ করতে পারি?

কোনও উত্তরের জন্য অগ্রিম ধন্যবাদ!


আপনি কি ফিল্টার আউটপুট প্লট করতে পারেন?
জিম ক্লে

উত্তর:


5

আপনি যে প্ল্যাটফর্মটি দেখিয়েছেন তার উপর ভিত্তি করে আমি এই নির্দিষ্ট ধরণের ফিল্টারটির সাথে পরিচিত নই, আমি অনুমান করব যে আপনার প্রক্রিয়াটি যে ম্যাক্সিমা খুঁজে পাচ্ছে না কেবল সেই প্রক্রিয়াটির অন্তর্নিহিত সময় রেজোলিউশনের বিপরীতে রয়েছে। যে কোনও ধরণের "স্মুথিং" বলতে বোঝায় যে আগ্রহের সিগন্যালের কিছু সময়-স্থানীয় দুর্গন্ধ রয়েছে, যেমন যদি কাছাকাছি দুটি শৃঙ্গ থাকে, তবে তাদের একত্রিত হওয়ার সম্ভাবনা রয়েছে। এটি সম্ভবত সম্ভব যে কোনও নিম্ন-অর্ডার ফিল্টার এই আচরণের কম উপস্থিত হতে পারে, সম্ভবত আপনি যে পরিমাণ মসৃণতা পান তা ব্যয় করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.