Преобразование Гильберта – Хуанга: мгновенная частота
Я реализую "эмпирическую модовую декомпозицию" в 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 есть также некоторые инструменты и методы.