Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

EMD: Интуитивный разбор сигналов

Эмпирическое разложение мод (EMD) позволяет разделять сложные сигналы на чистые колебательные компоненты без жестких предположений. Метод извлекает внутренние функции мод (IMF) прямо из данных, что полезно для анализа временных рядов в финансах, медицине и нейронауках. В статье разбирают алгоритм, примеры кода и ограничения EMD.

22 ноября 2025 г.
8 мин
9

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

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

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

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

Пример данных сигнала магнитоэнцефалографии (MEG)
Рисунок 1: Пример данных сигнала магнитоэнцефалографии (MEG). (Изображение автора)

Сигналы окружают нас повсюду. И почти все они не соответствуют требованиям классических моделей временных рядов.

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

В составе одного сигнала часто присутствуют:

  • медленные тренды
  • периодические колебания
  • короткие всплески
  • случайный шум
  • скрытые ритмы, которые не видны сразу

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

Именно это предлагает разложение сигналов на основе данных.

Эта статья — первая часть серии из трех материалов о адаптивном разложении:

  1. EMD — Эмпирическое разложение мод (сегодня)
  2. VMD — Вариационное разложение мод (далее)
  3. MVMD — Многомерное вариационное разложение мод (далее)

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

Эмпирическое разложение мод

Эмпирическое разложение мод представили Хуан и соавторы в 1998 году как часть преобразования Хилберта–Хуана.

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

Каждая IMF отражает колебание в сигнале — от самых быстрых до самых медленных трендов.

Посмотрите на рисунок 2 ниже:

Сверху — исходный сигнал.

Ниже — несколько IMF, каждая из которых захватывает разный слой колебаний, скрытых в данных.

IMF₁ включает самые быстрые изменения.
IMF₂ фиксирует чуть более медленный ритм.

Последняя IMF плюс остаток показывают медленный тренд или базовую линию.

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

Исходный сигнал и пять IMF, упорядоченные от высокочастотных к низкочастотным компонентам
Рисунок 2: Исходный сигнал (сверху) и 5 IMF (снизу), упорядоченные от высокочастотных к низкочастотным компонентам. (Изображение автора)

Математика за EMD

Любой сигнал x(t) разлагается с помощью EMD так:

Формула разложения сигнала на IMF и остаток

Где:

  • Ci(t) — это внутренние функции мод (IMF)
  • IMF₁ захватывает самые быстрые колебания
  • IMF₂ фиксирует более медленное колебание и так далее…
  • r(t) — это остаток — медленный тренд или базовая линия
  • Сумма всех IMF плюс остаток точно восстанавливает исходный сигнал.

IMF — это чистое колебание, полученное прямо из данных.

Оно должно удовлетворять двум простым условиям:

  1. Число пересечений нуля примерно равно числу экстремумов
    → Колебание ведет себя стабильно.
  2. Среднее верхней и нижней оболочек примерно равно нулю
    → Колебание локально симметрично, без долгосрочной информации.

Эти два правила делают IMF по сути основанными на данных и адаптивными, в отличие от Фурье или вейвлетов, которые навязывают сигналу фиксированные формы.

Интуиция алгоритма EMD

Алгоритм EMD на удивление понятен. Вот цикл извлечения:

  1. Начните с сигнала.
  2. Найдите все локальные максимумы и минимумы.
  3. Интерполируйте их, чтобы получить верхнюю и нижнюю оболочки
    (см. рисунок 3).
  4. Вычислите среднее обеих оболочек.
  5. Вычтите это среднее из сигнала.

Получится кандидат на IMF.

6. Затем проверьте два условия IMF:

  • Совпадает ли число пересечений нуля и экстремумов?
  • Примерно равно ли нулю среднее его оболочек?

Если да → Извлечена IMF₁.
Если нет → Повторите процесс (это называется просеиванием), пока условия не выполнятся.

7. Получив IMF₁ (самое быстрое колебание):

  • Вычтите ее из исходного сигнала,
  • Остаток станет новым сигналом,
  • И повторите процесс для IMF₂, IMF₃ и так далее.

Это продолжается, пока не останется осмысленных колебаний.

Что уйдет в конце — остаточный тренд r(t).

Одна итерация EMD: исходный сигнал, оболочки и локальное среднее
Рисунок 3: Одна итерация EMD. Сверху: исходный сигнал (синий). Посередине: верхняя и нижняя оболочки (красные). Снизу: локальное среднее (черное). (Изображение автора)

EMD на практике

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

Смешаем три компонента:

  • Низкочастотное колебание (около 5 Гц)
  • Высокочастотное колебание (около 30 Гц)
  • Немного случайного белого шума

После суммирования всего в один запутанный сигнал применим метод EMD.

import numpy as np
import matplotlib.pyplot as plt
# --- Parameters ---
Fs = 500 # Sampling frequency (Hz)
t_end = 2 # Duration in seconds
N = Fs * t_end # Total number of samples
t = np.linspace(0, t_end, N, endpoint=False)
# --- Components ---
# 1. Low-frequency component (Alpha-band equivalent)
f1 = 5
s1 = 2 * np.sin(2 * np.pi * f1 * t)
# 2. High-frequency component (Gamma-band equivalent)
f2 = 30
s2 = 1.5 * np.sin(2 * np.pi * f2 * t)
# 3. White noise
noise = 0.5 * np.random.randn(N)
# --- Composite Signal ---
signal = s1 + s2 + noise
# Plot the synthetic signal
plt.figure(figsize=(12, 4))
plt.plot(t, signal)
plt.title(f'Synthetic Signal (Components at {f1} Hz and {f2} Hz)')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.tight_layout()
plt.show()
Синтетический сигнал с несколькими частотами
Рисунок 4: Синтетический сигнал, содержащий несколько частот. (Изображение автора)

Важный момент:

EMD сама определяет число IMF.
Она разлагает сигнал, пока не сработает критерий остановки — обычно когда:

  • больше нельзя извлечь колебательную структуру
  • или остаток становится монотонным трендом
  • или процесс просеивания стабилизируется

(Можно задать максимальное число IMF, но алгоритм обычно останавливается сам.)

from PyEMD import EMD
# Initialize EMD
emd = EMD()
IMFs = emd.emd(signal, max_imf=10)
# Plot Original Signal and IMFs
fig, axes = plt.subplots(IMFs.shape[0] + 1, 1, figsize=(10, 2 * IMFs.shape[0]))
fig.suptitle('EMD Decomposition Results', fontsize=14)
axes[0].plot(t, signal)
axes[0].set_title('Original Signal')
axes[0].set_xlim(t[0], t[-1])
axes[0].grid(True)
for n, imf in enumerate(IMFs):
    axes[n + 1].plot(t, imf, 'g')
    axes[n + 1].set_title(f"IMF {n+1}")
    axes[n + 1].set_xlim(t[0], t[-1])
    axes[n + 1].grid(True)
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
Разложение синтетического сигнала с помощью EMD
Рисунок 5: Разложение синтетического сигнала с помощью EMD. (Изображение автора)

Ограничения EMD

EMD мощна, но имеет несколько недостатков:

  • Смешивание мод: разные частоты могут попасть в одну IMF.
  • Чрезмерное разделение: EMD сама решает число IMF и может выделить слишком много.
  • Чувствительность к шуму: небольшие изменения шума сильно влияют на IMF.
  • Отсутствие строгой математической основы: результаты не всегда стабильны или уникальны.

Из-за этих проблем появились улучшенные варианты (EEMD, CEEMDAN), но они все равно эмпирические.

Именно поэтому разработали методы вроде VMD — о них расскажем в следующей статье серии.