Як я можу використовувати фільтр Savitzky Golay для пошуку локальних максимумів (між зразками) в дискретно дискретизованому 1D-сигналі?


9

У мене сейсмічний сигнал y (i): введіть тут опис зображення

Тут я знайшов один максимум: i = 152,54, y = 222,29 вручну і накреслив його червоним кольором.

Я хочу знайти всі максимуми автоматично.

Я читав, що фільтр Savitzky Golay (SGF) може бути використаний для пошуку згладжених оцінок як сигналу, так і його похідних, і що однією з переваг SGF є те, що він зберігає мінімуми і максимуми набагато краще, ніж інші фільтри. Це чудово звучить для мого використання.

Я знайшов сценарій Matlab, який генерує коефіцієнти SGF. І використовував це для встановлення, що коефіцієнти SGF четвертого порядку для похідної. Я зашифрував невеликий сценарій Matlab, що

  1. знаходить похідну сигналу, перетворюючи сигнал на коефіцієнти SGF четвертого порядку для похідної
  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

Хоча я не знайомий з цим специфічним типом фільтрів, виходячи з показаного вами сюжету, я б здогадався, що максимуми, які не знайдені вашим процесом, просто суперечать тим, що властиво процесу. Будь-який вид "згладжування" означає, що існує деякий час локальне розмазування сигналу, що викликає інтерес, таким чином, якщо є дві піки поблизу, можливо, вони будуть об'єднані в одну. Можливо, що фільтр нижчого порядку може представити менше такої поведінки, ймовірно, за рахунок кількості вирівнювання, яке ви отримуєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.