Методы сглаживания сигналов

Сглаживание сигнала – это всегда головная боль, каждый фильтр имеет свои параметры и эффективность очень уязвима к ним, а значит. Что можно сделать, чтобы найти наилучший подход к конечному требуемому сигналу? Продолжайте читать.

Шум в сигналах так же естественен, как и существование сигнала, его происхождение может быть от разных путей, и это может привести к проблемам получения информации из сигналов и других видов графиков.

Правда в том, что не существует идеального метода удаления шума из сигналов, он во многом зависит от природы сигнала и того, что из него предполагается получить. Давайте посмотрим, какие методы я нахожу более полезными!

LOESS

LOESS или локально оцененное сглаживание точечной диаграммы — это тип фильтра, выбранный в 5-й позиции сверху.

Этот фильтр работает, повторяя простую операцию вдоль сигнала:

· Длина окна должна быть определена

· После определения вычисляется линия регрессии, взвешивающая точки, расположенные ближе к середине окна, чем те, которые находятся в границах. Традиционной функцией веса, используемой для LOESS, является функция веса трикуба:

Где x — расстояние от точки данных до точки подгоняемой кривой.

· Вычисляемая строка объявляется как часть функции

· После этого окно продвигается в сигнале.

Этот метод имеет в качестве основного преимущества то, что является очень гибким, только размер окна должен быть определен. Таким образом, следует учитывать, что если окно достаточно маленькое, оно становится более чувствительным к шуму и наоборот, если оно достаточно широкое.

Но у этого метода есть недостатки, такие как вычислительная стоимость и распределение образцов. Если данные разрежены, фильтр теряет эффективность.

В Python есть функция для реализации этого фильтра вstatsmodels.

Фильтр Хампель

Если выбросы в сигнале являются вашей главной проблемой, вам следует рассмотреть возможность использования фильтра Хампеля. Фильтр Хампеля является членом класса медианных фильтров, он вычисляет медианное значение окна, состоящего из выборки. Он также вычисляет стандартное отклонение каждой выборки относительно медианы окна. Если выборка лежит далеко от предопределенного параметра, которыйnраз больше MAD (медианное абсолютное отклонение), он заменяется медианным значением окна для этой выборки.

Этот фильтр имеет два преимущества:

· С точки зрения юзабилити, очень легко установить параметры. Единственными параметрами, которые могут быть установлены, являются длина окна и значение порогового значения для MAD.

· Этот фильтр чувствителен к выбросам и очень полезен для их обнаружения и стирания.

Вы можете использовать этот фильтр для удаления выбросов или шума из сигнала, я лично рекомендую вам использовать его в финансовых данных, где вы можете легко найти явления «черного лебедя» и резкие изменения цены акций.

При обработке сигналов очень полезно находить возможные аппаратные выбросы и сглаживать шум.

В качестве слабого места я бы сказал, что это способ установки параметров, я имею в виду, что если ширина окна достаточно мала, фильтр становится более чувствительным. То же самое происходит, если порог для обнаружения выброса очень низок. Как пользователь, вы должны подсчитать длину вашего сигнала и то, что вы хотите извлечь из него, прежде чем настраивать параметры.

Вы можете использовать этот фильтр в Python с помощью этогорепозитория.

Я скоро опубликую пример использования фильтра Hampel!

Частотные фильтры.

Иногда источник шума не является полностью случайным (с точки зрения частоты), и вам может потребоваться удалить только определенную частоту сигнала. Здесь появляются частотные фильтры.

Существует 4 основных типа частотных фильтров:

·Фильтр нижних частот: Этот тип фильтра удаляет частоты, которые выше частоты среза.

·Фильтр высоких частот: В фильтре высоких частот выполняется операция, противоположная, чем в фильтре нижних частот.

·Полосовой проходной и полосовой стоп-фильтры: Идея этих фильтров заключается в том, чтобы быть более избирательными, чем фильтры нижних и высоких частот. В полосных фильтрах пользователь может выбрать, какие частоты могут пройти фильтр.

Почему эта группа фильтров входит в мой топ-3? Что ж, ответ прост, бесконечные случаи использования и приложения в реальной жизни. Это правда, что эти фильтры могут быть немного запутанными в первый раз, когда они используются, потому что параметры не так интуитивно понятны, как, например, в фильтрах Hampel. Но в интернете есть тонны ресурсов для глубокого понимания того, как работают эти фильтры. Я, вероятно, напишу пост о частотных фильтрах в будущем.

В Python реализация этих фильтров довольно проста, проверить использование фильтра Баттерворта можно по следующейссылке. Вы заметите, что существует множество различных фильтров в зависимости от частоты, это было обобщение, потому что для каждого вида фильтра может быть написан целый пост.

Фильтры скользящей средней

Если то, что вы хотите извлечь из сигнала, является локальным трендом, я настоятельно рекомендую вам использовать этот вид фильтров. Фильтры скользящей средней широко используются в финансах, являясь сглаженным сигналом одним из важнейших индикаторов. Для климатических данных эта фильтрация также весьма полезна, поскольку тенденция легко интерпретируется. Существуют различные типы фильтров скользящих средних.

·Простая скользящая средняя: невзвешенное среднее для предыдущих точек данных. В науке и технике среднее значение обычно берется из равного числа данных по обе стороны от центрального значения. Это гарантирует, что изменения в среднем значении согласуются с изменениями в данных, а не смещаются во времени. Простой фильтр скользящей средней может быть вычислен довольно дешево в вычислительном выражении на данных в реальном времени.

·Средневзвешенная скользящая средняя: Средневзвешенное значение — это среднее значение, которое имеет множители для придания различного веса данным в разных позициях в выбранном окне. Взвешенная скользящая средняя представляет собойсверткуданных с фиксированной функцией взвешивания. Одним из приложений является удалениепикселизациииз цифрового графического изображения. В финансах веса выше в более близких выборках к точке и ниже в менее свежих данных.

Как видно, средневзвешенная скользящая средняя более точна к значениям сигнала, чем простая скользящая средняя (WMA и SMA).

·Экспоненциальная скользящая средняя: это фильтрбесконечного импульсного откликапервого порядка, который использует весовые коэффициенты в качестве WMA, но они уменьшаютсяэкспоненциально,не достигая нуля.

EMA лучше подходит к сигналу, чем SMA из-за взвешивания самых последних значений.

Есть больше приложений, использующих скользящие средние, лично мне они нравятся из-за простоты использования и того, насколько визуально это результат.

Фильтр Савицкого-Голея ?.

Фильтр Савицкого-Голея является для меня победителем куриного ужина этого топа. Он основан на полиномиальной регрессии (степениk) с равным разделением по меньшей мереk + 1баллов для определения нового значения для каждой точки. Конечным результатом является функция, похожая на функцию enter, но сглаженная. Это достигается с помощьюсвертки. Подгонка последовательных подмножеств смежных точек данныхполиномомнизкой степени методомлинейных наименьших квадратов. Когда точки данных расположены равным интервалом, можно найти аналитическое решение уравнений наименьших квадратов в виде единого набора «коэффициентов свертки», которые могут быть применены ко всем подмножествам данных, чтобы дать оценки сглаженного сигнала (или производных от сглаженного сигнала) в центральной точке каждого подмножества.

Основным и наиболее важным преимуществом данного фильтра, является то, что он стремится сохранить основные характеристики исходного распределения в виде относительных максимальных и минимальных значений. Ширина пиков тоже сохраняется, чего не бывает при других методах фильтрации.

Фильтр Савицкого-Голея — это тип фильтра нижних частот, идея которого состоит в том, чтобы сделать для каждой точки наименьшее квадратное соответствие с полиномом высокого порядка над окном нечетного размера, центрированным в анализируемой точке.

Параметры очень легко установить, длина окна должна быть нечетной и больше, чем используемый полиномиальный порядок. Полиномиальный порядок также используется в качестве параметра.

Как видно на рисунке выше, для той же длины окна изменение порядка полиномов обеспечивает другой выходной сигнал, самый высокий порядок, самый высокий чувствительность к сигналу.

Реализация в Python очень проста, а документация понятна.

Источник