Інший підхід (більше слів, менше коду), який може допомогти:
Розташування локальних максимумів і мінімумів - це також місця нульових перетинів першої похідної. Як правило, набагато простіше знайти нульові переправи, ніж безпосередньо знайти локальні максимуми та мінімуми.
На жаль, перша похідна має тенденцію до "посилення" шуму, тому коли в початкових даних присутній значний шум, першу похідну найкраще використовувати лише після того, як до оригінальних даних буде застосовано певну ступінь згладжування.
Оскільки згладжування - у найпростішому сенсі - фільтр низьких частот, згладжування найчастіше найкраще (ну, найпростіше) проводити за допомогою ядра згортки та "формувати" це ядро, що може забезпечити дивовижну кількість можливостей збереження / посилення можливостей. . Процес пошуку оптимального ядра може бути автоматизований за допомогою різних засобів, але найкращим може бути проста груба сила (досить швидка для пошуку невеликих ядер). Хороше ядро (за призначенням) масово спотворить вихідні дані, але воно НЕ вплине на розташування піків / долин, що цікавлять.
На щастя, досить часто відповідне ядро можна створити за допомогою простого SWAG ("освіченої здогадки"). Ширина згладжуючого ядра повинна бути трохи ширшою, ніж найширший очікуваний "цікавий" пік в оригінальних даних, а його форма буде нагадувати цей пік (одномасштабний вейвлет). Для середніх збережених ядер (яким повинен бути будь-який хороший фільтр згладжування) сума елементів ядра повинна бути точно рівною 1,00, а ядро має бути симетричним щодо його центру (це означає, що у нього буде непарна кількість елементів.
Враховуючи оптимальне згладжування ядра (або невелику кількість ядер, оптимізованих для різного вмісту даних), ступінь згладжування стає масштабним фактором ("посилення") ядра згортки.
Визначення "правильної" (оптимальної) ступеня згладжування (посилення ядра згортки) навіть може бути автоматизовано: порівняйте стандартне відхилення перших похідних даних зі стандартним відхиленням згладжених даних. Як співвідношення двох стандартних відхилень змінюється зі зміною ступеня згладжування кулачка, що використовується для прогнозування ефективних значень згладжування. Кілька ручних запусків даних (які є справді репрезентативними) повинні бути всіма необхідними.
Всі попередні рішення, розміщені вище, обчислюють першу похідну, але вони не розглядають це як статистичний показник, а також вищезазначені рішення не намагаються виконати функцію збереження / посилення згладжування (щоб допомогти тонким вершинам "стрибати вище" шуму).
Нарешті, погана новина: пошук "справжніх" піків стає королівським болем, коли шум також має функції, схожі на справжні піки (пропускна здатність, що перекривається). Наступне більш складне рішення, як правило, полягає у використанні більш тривалого ядра згортки ("ширшої діафрагми ядра"), що враховує взаємозв'язок між сусідніми "реальними" піками (наприклад, мінімальні або максимальні показники для пікового виникнення) або використовувати кілька згортання проходить за допомогою ядер, що мають різну ширину (але лише якщо це швидше: це основна математична істина, що лінійні згортки, які виконуються послідовно, завжди можна об'єднати в одну згортку). Але часто набагато простіше спочатку знайти послідовність корисних ядер (різної ширини) та з'єднати їх разом, ніж безпосередньо знайти остаточне ядро за один крок.
Сподіваємось, це надає достатньо інформації, щоб Google (і, можливо, хороший текст статистики) заповнив прогалини. Я дуже хочу, щоб у мене був час надати відпрацьований приклад або посилання на один. Якщо хтось натрапив на один онлайн, будь ласка, розмістіть його тут