Nie wiem czy napisałem w dobrym dziale...

Chciałem użyć transformaty hilberta-huanga na sygnale który jest mocno zaszumiony. Aby móc użyć tej transformaty
muszę zastosować rozkład na mody empiryczne (EMD) . Rozkład ten mówi że dzielimy sygnał na mody empiryczne (tzw. IMF-y).

Imf musi spełniać dwa warunki :
(1) dla całego zbioru danych, ilość ekstremów i ilość miejsc zerowych muszą się sobie
równać (lub różnić o nie więcej niż 1).
(2) dla każdego punktu, wartość średnia z obwiedni zdefiniowanej przez lokalne maksima i
obwiedni zdefiniowanej przez lokalne minima jest równa zero.
m(t) = [u(t) + v(t)]/2
m - wartosć średnia
u(t) górna obwiednia
v(t) dolna obwiednia

I tutaj zaczynają się schody :/

Dzielę sygnał na kawałki - wyznaczam obwiednie dla max i min i wyliczam liczbę extremów(dla poszczególnego kawałka). Niestety rzadko się zdarza aby liczba ekstremów była równa liczbie przejść przez zero :/
poza tym nie rozumiem co oznacza drugi warunek...Ja to rozumiem tak że jak sprawdzimy każdy punkt na osi x to ich suma ma się równać zero. Czy dobrze rozumuje?

Może ktoś bawił się tym rozkładem albo wie co źle robię...byłbym wdzięczny : )
Może biorę za dużo próbek (jako imf przyjmuje 200 próbek)

pozdr...

ps. może wrzucę jak znajduję te maxima , minima i zera lokalne :)

void maximumExtrema() {
    for (int i = 1; i < testTable.length-1; i++) {
        if ( testTable[i + 1] < testTable[i]&& testTable[i-1] < testTable[i]) {
            list.add(testTable[i]);
            list9.add((short) i);
        }
    }

}

void minimumExtrema() {
    for (int i = 1; i < testTable.length-1; i++) {
        if ( testTable[i + 1] > testTable[i]&&testTable[i-1] > testTable[i]) {
            sec.add(testTable[i]);
            sec9.add((short) i);
        }
    }
}
void zeroCrossing(){
       for (int i = 0; i < testTable.length-1; i++) {
        if (testTable[i]>0 && testTable[i+1]<0  || testTable[i]<0 && testTable[i+1]>0) {
            zero.add(testTable[i]);
        }
    }
}

gdzie:

testTable - tablica w której znajdują się próbki sygnału
list , sec , zero kontener do którego wrzucam wyniki