Преобразование Гильберта – Хуанга: мгновенная частота

Я реализую "эмпирическую модовую декомпозицию" в Java. Следующим шагом является преобразование Гильберта – Хуанга, и мне нужно найти, как получить "Мгновенную частоту". Кто-нибудь знает, как его получить?

Используя метод EMD, любой сложный набор данных может быть разложен на конечное и часто небольшое количество компонентов, которое представляет собой набор функций встроенного режима (IMF). Следующий шаг - преобразование Гильберта – Хуанга. Из этого я вычисляю фазу сигнала и после того, как должен вычислить мгновенную частоту, я ищу в коде Matlab, как в этой ссылке: http://read.pudn.com/downloads100/sourcecode/math/408870/emd/instfreq/archive/ifreq.m__.htm

но я этого не понимаю

Спасибо

2 ответа

Частота экземпляра может быть рассчитана в Python

def hilb(s, unwrap=False):
    from scipy.signal import hilbert
    H = hilbert(s)
    amp = np.abs(H)
    phase = np.arctan2(H.imag, H.real)
    if unwrap: phase = np.unwrap(phase)
    return amp, phase

inst_amp, phase = hilb(imf, unwrap=True)
inst_freq = np.diff(phase)

Преобразование Гильберта-Хуанга является комбинацией эмпирической модовой декомпозиции (EMD) и преобразования Гильберта.

Во-первых, EMD - это алгоритм, который предоставляет вам функции встроенного режима (IMF).

Затем преобразование Гильберта применяется к каждому из МВФ.

Из IMF преобразование Гильберта дает сигнал с задержкой фазы pi/2, из которого можно вычислить фазу, и производную по времени от фазы, которая пропорциональна мгновенной частоте.

Вы найдете интересные учебные пособия и подробности об алгоритмических вариациях EMD на этой странице: http://perso.ens-lyon.fr/patrick.flandrin/emd.html

Вы можете обработать данные своего сигнала, используя преобразование Гильберта-Хуанга (HHT), которое является комбинацией эмпирической модовой декомпозиции (EMD) и анализа спектра Гильберта (HSA) с Matlab или Python. В Matlab или Python есть метод HHT, который вы можете использовать напрямую, и вам не нужно самостоятельно рассчитывать мгновенную частоту (IF).

Например с Matlab:

Во-первых, вы можете получить IMF и остаток, реализовав emd для передачи данных, код: [IMF, остаток, информация] = emd(сигнал,'интерполяция','pchip', 'дисплей', 0);

Тогда IF, то есть IMFINSF, может быть получен с помощью hht(IMF, fs), в котором fs - частота выборки [P,F,T,IMFINSF,IMFINSE]=hht(IMF,fs);

Кроме того, в Python есть также некоторые инструменты и методы.

Другие вопросы по тегам