Документация Engee

vmd

Разложение по вариационным модам.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • imf = vmd(x) — возвращает разложение сигнала x по вариационным модам. Используйте функцию vmd для разложения и упрощения сложных сигналов на конечное число функций разложения на внутренние моды (Intrinsic Mode Function, IMF), необходимых для выполнения спектрального анализа Гильберта.

  • imf,residual = vmd(x) — также возвращает остаточный сигнал residual, соответствующий разложению сигнала x по вариационным модам.

  • imf,residual,info = vmd(x) — возвращает дополнительную информацию info об IMF и остаточном сигнале для диагностических целей.

  • ___ = vmd(x,Name,Value) — выполняет разложение сигнала по вариационным модам с дополнительными параметрами, заданными одним или несколькими аргументами типа Name,Value.

  • vmd(___;out=:plot) — строит график исходного сигнала, IMF и остаточного сигнала в виде отдельных графиков на одном рисунке.

Аргументы

Входные аргументы

# x — сигнал во временной области с равномерной дискретизацией
вектор

Details

Сигнал во временной области с равномерной дискретизацией, заданный как вектор вещественных значений.

Входные аргументы «имя-значение»

Укажите необязательные пары аргументов в виде Name,Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.

Используйте запятые для разделения имени и значения, а Name заключите в кавычки.

# AbsoluteTolerance — абсолютная погрешность сходимости мод
5e−6 (по умолчанию) | положительный вещественный скаляр

Details

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

# RelativeTolerance — относительная погрешность сходимости мод
AbsoluteTolerance*1e3 (по умолчанию) | положительный вещественный скаляр

Details

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

Процесс оптимизации останавливается, когда одновременно выполняются условия AbsoluteTolerance и RelativeTolerance.

# MaxIterations — максимальное количество итераций оптимизации
500 (по умолчанию) | положительный целочисленный скаляр

Details

Максимальное количество итераций оптимизации, заданное как положительный целочисленный скаляр. Аргумент MaxIterations является одним из критериев остановки оптимизации, то есть оптимизация прекращается, когда количество итераций превышает значение MaxIterations.

Аргумент MaxIterations может быть задан только положительными целыми числами.

# NumIMFs — количество извлеченных IMF
5 (по умолчанию) | положительный целочисленный скаляр

Details

Количество извлеченных IMF, заданное как положительный целочисленный скаляр

# CentralFrequencies — начальные центральные частоты IMF
вектор

Details

Начальные центральные частоты IMF, заданные как вектор длины NumIMFs. Значения вектора должны находиться в пределах [0, 0.5] цикл/отсчет, что указывает на то, что истинные частоты находятся в пределах , где — частота дискретизации.

# InitialIMFs — начальные IMF
нулевая матрица (по умолчанию) | вещественная матрица

Details

Начальные IMF, заданные как вещественная матрица. Строки соответствуют временным отсчетам, а столбцы — модам.

# PenaltyFactor — штрафной коэффициент
1000 (по умолчанию) | положительный вещественный скаляр

Details

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

# InitialLM — начальный множитель Лагранжа
комплексный вектор нулей (по умолчанию) | комплексный вектор

Details

Начальный множитель Лагранжа, заданный как комплексный вектор. Диапазон начального множителя Лагранжа в частотной области составляет [0, 0.5] цикл/отсчет. Множитель обеспечивает соблюдение ограничений на восстановление. Длина множителя зависит от размера входного сигнала.

# LMUpdateRate — скорость обновления множителя Лагранжа
0.01 (по умолчанию) | вещественный скаляр

Details

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

# InitializeMethod — метод инициализации центральных частот
"peaks" (по умолчанию) | "random" | "grid"

Details

Метод инициализации центральных частот, заданный как "peaks", "random" или "grid".

  • "peaks" — инициализация центральных частот как пиковых значений сигнала в частотной области (по умолчанию). Если NumIMFs больше количества пиков в частотной области, функция vmd инициализирует оставшиеся центральные частоты случайным образом;

  • "random" — инициализация центральных частот как случайных чисел, равномерно распределенных в интервале [0, 0.5] цикл/отсчет;

  • "grid" — инициализация центральных частот как равномерно дискретизированной сетки в интервале [0, 0.5] цикл/отсчет.

# Display — переключение отображения хода выполнения в командном окне
false или 0 (по умолчанию) | true или 1

Details

Переключение отображения хода выполнения в командном окне, заданное как true (или 1) или false (или 0). Если указать true, функция будет отображать среднее абсолютное и относительное улучшение мод и центральных частот каждые 20 итераций, а также показывать информацию об окончательной остановке.

Задайте для аргумента Display значение 1, чтобы отобразить данные, или 0, чтобы скрыть данные.

# out — тип выходных данных
:none (по умолчанию) | :plot

Details

Тип выходных данных:

  • :none — функция возвращает данные;

  • :plot — функция возвращает график.

Выходные аргументы

# imf — функция разложения на внутренние моды
матрица

Details

Функции разложения на внутренние моды (Intrinsic Mode Function, IMF), возвращаемые в виде матрицы. Каждая imf представляет собой сигнал с амплитудной и частотной модуляцией, имеющий положительные и медленно изменяющиеся огибающие. Каждая мода имеет мгновенную частоту, которая не убывает, медленно изменяется и сосредоточена вокруг центрального значения. Используйте imf для применения преобразования Гильберта—Хуанга для спектрального анализа сигнала.

Аргумент imf возвращается в виде матрицы, каждый столбец которой является imf, если x — вектор.

# residual — остаточный сигнал
вектор-столбец

Details

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

Аргумент residual возвращается в виде вектора-столбца, если x — вектор.

# info — дополнительная информация для диагностики
структура

Details

Дополнительная информация для диагностики, возвращаемая в виде структуры со следующими полями:

  • ExitFlag — флаг завершения. Значение 0 указывает на остановку алгоритма при достижении максимального количества итераций. Значение 1 указывает на остановку алгоритма при достижении абсолютных и относительных допусков;

  • CentralFrequencies — центральные частоты IMF;

  • NumIterations — общее количество итераций;

  • AbsoluteImprovement — среднеквадратичное абсолютное улучшение сходимости IMF между двумя последними итерациями;

  • RelativeImprovement — среднее относительное улучшение сходимости IMF между двумя последними итерациями;

  • LagrangeMultiplier — множитель Лагранжа в частотной области на последней итерации.

Примеры

Разложение по вариационным модам кусочного сигнала

Details

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

Сигнал дискретизируется с частотой 1 кГц в течение 1 секунды. Построим графики для каждой отдельной компоненты и для составного сигнала.

fs = 1e3
t = 0:1/fs:1-1/fs

t_half = length(t) ÷ 2
t_first_half = t[1:t_half]
t_second_half = t[t_half+1:end]

quadratic_component = 6 .* t.^2
chirp_component = cos.(4π .* t .+ 10π .* t.^2)

cos_first_half = cos.(60π .* t_first_half)
cos_second_half = cos.(100π .* (t_second_half .- 10π))

cos_component = vcat(cos_first_half, cos_second_half)

x = quadratic_component .+ chirp_component .+ cos_component

p1 = plot(t, vcat(zeros(t_half), cos_second_half),
          xlabel="Time (s)",
          ylabel="Cosine",
          legend=false)

p2 = plot(t, vcat(cos_first_half, zeros(length(t_second_half))),
          xlabel="Time (s)",
          ylabel="Cosine",
          legend=false)

p3 = plot(t, chirp_component,
          xlabel="Time (s)",
          ylabel="Chirp",
          legend=false)

p4 = plot(t, quadratic_component,
          xlabel="Time (s)",
          ylabel="Quadratic trend",
          legend=false)

p5 = plot(t, x,
          xlabel="Time (s)",
          ylabel="Signal",
          legend=false,
          linewidth=2)

l = @layout [a{0.333w} b{0.333w} c{0.333w}
             d{0.333w} e{0.667w}]

plot(p1, p2, p3, p4, p5,
     layout=l,
     size=(800, 600))

vmd 1

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

import EngeeDSP.Functions: vmd

imf, res = vmd(x, "NumIMFs", 4)

p1 = plot(t, imf[:, 1],
          ylabel = "IMF1",
          showlegend = false,
          grid = true,
          xlabel = "Time (s)")

p2 = plot(t, imf[:, 2],
          ylabel = "IMF2",
          showlegend = false,
          grid = true,
          xlabel = "")

p3 = plot(t, imf[:, 3],
          ylabel = "IMF3",
          showlegend = false,
          grid = true,
          xlabel = "Time (s)")

p4 = plot(t, imf[:, 4],
          ylabel = "IMF4",
          showlegend = false,
          grid = true,
          xlabel = "Time (s)")

Восстановим сигнал, сложив модовые функции и остаток. Построим график и сравним исходный и восстановленный сигналы.

sig = sum(imf, dims=2) + res

p5 = plot(t, sig,
          linewidth = 1.5,
          label = "Reconstructed signal",
          xlabel = "Time (s)",
          ylabel = "Signal",
          legendfontsize = 7,
          legend = (0.45, 0.5))

plot!(p5, t, x,
      linestyle = :dash,
      linewidth = 2,
      label = "Original signal")

plot(p1, p2, p3, p4, p5,
     layout = l,
     size = (800, 600))

vmd 2

Вычислим норму разности между исходным и восстановленным сигналами.

import EngeeDSP.Functions: norm

norm(x-sig, Inf)
0.0

Дополнительно

Функции разложения на внутренние моды

Details

Функция vmd разлагает сигнал на небольшое число узкополосных внутренних мод (IMF):

IMF обладают следующими характеристиками:

  1. Каждая мода представляет собой сигнал с амплитудной и частотной модуляцией вида

    где — фаза моды, а — ее огибающая.

  2. Моды имеют положительные и медленно изменяющиеся огибающие.

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

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

Оптимизация

Details

Для вычисления и процедура находит оптимум расширенного лагранжиана

где скалярное произведение и вторая норма . Член регуляризации включает следующие шаги:

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

  2. Демодулирование аналитического сигнала до основной полосы частот с помощью умножения его на комплексную экспоненту.

  3. Оценка ширины полосы пропускания с помощью вычисления квадрата второй нормы градиента демодулированного аналитического сигнала.

Члены и обеспечивают соблюдение ограничения путем наложения квадратичного штрафа и включения множителя Лагранжа. Аргумент PenaltyFactor измеряет относительный вклад члена по сравнению с членами и .

Алгоритм решает задачу оптимизации, используя метод чередующихся направлений множителей, описанный в [1].

Алгоритмы

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

Множитель Лагранжа, введенный в разделе Оптимизация, имеет преобразование Фурье . Длина вектора множителя Лагранжа равна длине расширенного сигнала.

Если не указано иное в аргументе InitialIMFs, IMF инициализируются нулем. Инициализируйте аргумент CentralFrequencies, используя один из методов, указанных в аргументе InitializeMethod. Функция vmd итеративно обновляет моды до тех пор, пока не будет выполнено одно из следующих условий:

  • и выполняются совместно, при этом и задаются с использованием аргументов RelativeTolerance и AbsoluteTolerance соответственно;

  • Алгоритм превышает максимальное количество итераций, указанное в аргументе MaxIterations.

На -й итерации алгоритм выполняет следующие шаги:

  1. Перебирает мод сигнала (заданных с помощью аргумента NumIMFs) для вычисления:

    1. Сигналов в частотной области для каждой моды с использованием

      где — преобразование Фурье -й моды, вычисленное на -й итерации.

    2. -й центральной частоты с использованием

  2. Обновляет множитель Лагранжа, используя , где — скорость обновления множителя Лагранжа, задаваемая с помощью аргумента LMUpdateRate.

Литература

  1. Boyd, Stephen, Neal Parikh, Eric Chu, Borja Peleato, and Jonathan Eckstein. «Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers.» Foundations and Trends® in Machine Learning. Vol 3, Number 1, 2011, pp. 1–122.

  2. Dragomiretskiy, Konstantin, and Dominique Zosso. «Variational Mode Decomposition.» IEEE® Transactions on Signal Processing. Vol. 62, Number 3, 2014, pp. 531–534.

  3. Moody, George B., and Roger G. Mark. «The impact of the MIT-BIH Arrhythmia Database.» IEEE Engineering in Medicine and Biology Magazine. Vol. 20, No. 3, May–June 2001, pp. 45–50.