Підхід до пікового виявлення


24

Які існують пікові алгоритми виявлення? У мене є шумні дані, і я хотів би реалізувати пікове виявлення для цих даних. Дані зворотно, насправді я намагаюся визначити дно.

Ось знімок даних у Excel. Мені подобається виявляти обидва дна. Я думав про передачу даних через фільтр низьких частот і згодом робити ковзну середню, де я визначаю піки, і в межах ковзної середньої я роблю інший пошук. У мене нульовий фон DSP; це лише підхід здорового глузду. Я хотів би почути, що рекомендують експерти.

Введіть тут опис зображення


2
Які дві днища ви хочете виявити? Я бачу лише один очевидний. Чи знаєте ви, який у вас шум, або звідки він походить?
Джейсон R

Мені хотілося б знати, чи хочете ви реалізувати його на якомусь конкретному апаратному забезпеченні (обмеження ресурсів), оскільки це вплине на мою стратегію виявлення піку.
anasimtiaz

@JasonR фіолетовий очевидний. Однак гострий край є стороннім. В ідеалі я хочу, щоб це було поголене і ніж обчислити нижню точку. (отже, фільтр LP в моєму підході) Неочевидний світло-синій колір - це мінімальна точка правої сторони фіолетового піку. Фіолетовий насправді не хвилює, але світло-блакитний. Сюжет Excel не справедливий, але це з 12-бітного АЦП, де 4096 - 2В.
Ktuncer

@anasimtiaz віриш чи ні, це буде працювати на iPhone / Android, тому, мабуть, ми можемо сказати, це як ПК. Немає апаратних обмежень.
Ktuncer

@Ktuncer Я додав кілька зображень для вас, щоб побачити самі.
Космічний

Відповіді:


12

Ktuncer, тут є ряд методів. Один із способів, який я рекомендував би - це використовувати дискретну вейвлет-трансформацію (DWT) і, зокрема, подивитися на вейвлет Daubechies . Я б вибрав, скажімо, Daub-14 / Daub-Tetra.

В основному те, що вам дійсно потрібно зробити, - це "тенденція" вашого сигналу, а потім звідти зробіть хвилину чи максимум вибору. Це позбудеться ваших людей, що втратили життя. Перемогти вейвлет daub-14 / daub-tetra може допомогти вам це зробити, і це особливо допомагає, оскільки ви не знаєте природи свого сигналу. (Використовуючи daub-14, ви можете точно представити поліноміальні сигнали ступеня 14/2 = 7, і, схоже, вам більше не потрібно).

Розрахунок цього вейвлет-перетворення по суті "стискає" вашу енергію на кілька показників. Ці показники представляють ваги на базових векторах. Решта ваг (в ідеалі) буде майже нульовою. Коли у вашому сигналі (як і у вас) є шум, ті ваги, які зазвичай дорівнювали нулю, зараз мають деяку вагу, але ви можете просто нуль їх і «позначити» ваш сигнал. Після цього ви зможете просте максимум / хв. Виявлення.

Звертається більше деталей, ви можете надіслати мені електронний лист, якщо ви хочете обговорити, як це здійснити. Я раніше робив подібну роботу над цим.

EDIT: Ось декілька зображень, що ілюструють Daub-Tetra Denoiser:

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


1
Мені це подобається .. Чи є довідкова бібліотека для цього в matlab?
Ktuncer

@Ktuncer Стрільте мені електронний лист.
Космічний

4

Я далеко не експерт, але ось що я би робив:

Здається, у вас повільно змінюється сигнал, накладений на коливання. Піки, на які ви шукаєте, є дещо сильнішими коливаннями, тому я би їх виявив, використовуючи це.

  1. Х(Т)Y(т)

  2. Х-YσХ-Y

  3. |(Х-Y)(т)|>α×σα

Перевищення або підкреслення можна конкретно виявити, видаливши абсолютне значення та використовуючи належний тест. Це те, що ви шукаєте?


1
Цікавий підхід. Що таке σ? (Std. Dev?). Крім того, математика вбік, яка логіка за цим?
Ktuncer

σ - це стандартне відхилення. Ми використовуємо це як міру амплітуди коливання. На ваших даних це виглядає досить постійним у часі, тому це вказує на те, що це правильний підхід. Логіка полягає в тому, щоб сказати, що пік виявляється тоді, коли він більший за ці коливання, щоб ми були надійними у виявленні. Ви робите MATLAB? iw, ми мали б ваш сигнал, ми могли б принаймні легко позначити вершини.
Жан-Ів

4σ . Чому? Це в основному означає англійською мовою: "Відкиньте 99,99% усіх значень, які можуть бути шумом, і залиште лише значення, не пов'язані з шумом".
Космічний

@ user4749 Це допоможе вам отримати більш високі вершини, хоча я не впевнений, що він отримає загальні вершини, які ви шукаєте, (я припускаю, що ви шукаєте "широкі" вершини?)
Spacey

1
@ Жан-Ів Привіт! :-) Ти припускаєш, що шум тут гаразд? (Ось чому ми можемо стягнути поріг). Мені цікаво, що робити, якщо шум забарвлений?
Космічний

4

Пікове виявлення має досить багато застосувань для 1D або багатовимірних сигналів. Ось кілька прикладів, що показують, наскільки різноманітними можуть бути ці сигнали та їх інтерпретація:

  • Оригінальні 1D дані плаката;

  • Хоф трансформація зображення, кожен пік відповідає рядку в початковому зображенні; введіть тут опис зображення

  • автокореляція зображення, кожен пік відповідає частоті, що виявляє "періодичну картину"; введіть тут опис зображення

  • "узагальнене" перехресне співвідношення зображення та шаблону, кожен пік відповідає появі шаблону в зображенні (нас може зацікавити виявлення лише найкращого піку або декількох піків);

введіть тут опис зображення

  • Результат фільтрації зображення за куточками Гарріса, кожен пік відповідає куточку в оригінальному зображенні.

введіть тут опис зображення

Це визначення та методи виявлення піків, з якими я стикався - безумовно, є й інші, про які я або забув, або не знаю, і, сподіваюся, інші відповіді їх охоплять.

Техніка попередньої обробки включає згладжування та деноусування. @ Відповідь Мухаммеда стосується вейвлетів, і ви можете бачити різні їх використання в документації Mathematica WaveletThreshold (звідки я також брав свої приклади).

Тоді ви шукаєте максимуми. Залежно від вашої програми вам потрібні лише глобальні максимуми (наприклад, реєстрація зображень), кілька локальних максимумів (наприклад, виявлення рядків) або багато локальних максимумів (виявлення ключових точок): це можна зробити ітеративно, шукаючи найвище значення в даних потім стираючи область навколо вибраного піку тощо, поки найбільше значення, що залишилося, не перевищує поріг. Крім того, ви можете шукати локальні максимуми в межах певного розміру сусідства і зберігати лише ті локальні максимуми, значення яких перевищують поріг - деякі рекомендують зберігати локальні максимуми виходячи з їх відстані до решти локальних максимумів (далі кращий). У арсеналі також є морфологічні операції: розширені максимуми та перетворення верхньої шапки можуть бути придатними.

Ознайомтеся з результатами трьох цих методик на зображенні, відфільтрованому за куточками Гарріса:

введіть тут опис зображення

Більше того, деякі програми намагаються знайти піки при роздільній здатності пікселів. Інтерполяція, яка може бути специфічною для програми, стає корисною.

Наскільки мені відомо, сріблястої кулі немає, і дані підкажуть, які методи працюють найкраще.

Буде дійсно приємно отримати більше відповідей, особливо. що виходять з інших дисциплін.


Як ви отримали дані органу запитання для свого використання? Я не можу знайти його в чистому вигляді.
Лео Леопольд Герц 준영

1
Чи я? Я використовував інші приклади. Сьогодні, знову розглядаючи питання, я не бачу, як можна чітко витягти дані з запитання.
Маттіас Одісіо

-1

Я думаю, що один типовий алгоритм виявлення піку такий, як refє peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}

3
Я не спростував вашої відповіді, але я думаю, що її вважали поза темою. Цей ескіз визначає абсолютний мінімум послідовності. ОП шукає вершини, де потрібно мати справу з місцевістю та шумом.
Маттіас Одісіо

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