Obliczanie pochodnych

9

Mam serię danych (pojedyncza tablica). Jeśli wezmę te dane i wykreślę je, widzę, że istnieje wiele pików. Jeśli jednak powiększę fragment danych, zauważę, że występuje znaczny hałas.

Lubię wykrywać, ile szczytów danych zużywa mało czasu i energii procesora. Pomyślałem o wykryciu stoków tych szczytów (może być ostry lub gładki wzrost lub spadek) i spojrzałem na liczbę stoków, aby określić liczbę szczytów. (2 stoki dodatnie i ujemne dla każdego piku)

Jakieś wskazówki, jak mogę obliczyć zbocza w obecności hałasu?

Kod wejdzie do systemu osadzonego, pamięć jest ograniczona, więc najlepiej lubię implementować coś, co nie wymaga znaczącej kopii danych.

Ktuncer
źródło
1
Brzmisz jak w sklepie, prosząc o coś, czego potrzebujesz
2
Jeśli szum ma stosunkowo wysoką częstotliwość, możesz przefiltrować dane przez filtr dolnoprzepustowy
Paul R
4
Czy możesz opublikować jeden lub więcej przykładowych wykresów swoich danych? Pomoże nam to zobaczyć, jak to wygląda. Wykrywanie pików zwykle nie odbywa się za pomocą estymacji pochodnych, ponieważ obliczanie pochodnej sygnału jest bardzo wrażliwe na szum (jest to operacja górnoprzepustowa). Sygnał zainteresowania może mieć cechy, które można wykorzystać. Ponadto zawsze istnieje kompromis między prawdopodobieństwem prawidłowego wykrycia piku a prawdopodobieństwem fałszywego zadeklarowania piku, który tak naprawdę nie jest interesujący. Co jest ważniejsze dla twojej aplikacji?
Jason R
2
Jeśli potrafisz stworzyć fabułę, byłoby to pomocne.
Jason R
1
Chcesz wykryć piki, możesz poszukać detekcji piku (patrz dsp.stackexchange.com/questions/1302/peak-detection-approach ).
Geerten

Odpowiedzi:

1

Zależy to od rodzaju szumu i rodzaju sygnału. Pokaż przykład, jeśli chcesz dobrą odpowiedź. Ale to powiedziawszy, ogólnie rzecz biorąc, prawdopodobnie chcesz filtrować sygnał dolnoprzepustowy. Gdybym był tobą, wziąłbym spektrum mocy Fouriera, aby sprawdzić, czy większość szumów to wysoka częstotliwość, a sygnał, na którym mi zależy, głównie w niższym zakresie. Jeśli się pokrywają, to jest życie. Musiałbym więcej myśleć o rzeczach.

Jednym filtrem dolnoprzepustowym, który w wielu przypadkach jest dobry na zaszumiony sygnał, jest filtr Savitzky-Golay. Jest to opisane w Przepisach numerycznych, a dla Pythona jest funkcja w Książce kucharskiej Python Numpy. To tylko splot z małym jądrem. Rozmiar okna wybierasz na podstawie szerokości pików lub innych elementów, wystarczająco szerokich, aby wytłumić hałas, ale nie szerszych niż cechy. Może być mały, powiedzmy pięć punktów, lub większy jak dziesiątki, może sto.

Ty również wybierasz porządek wielomianowy - zwykle używam 2 lub 4. Zamówienie 2 jest w porządku, gdy okno jest małe, <10 punktów lub obejmuje mniej niż pół cyklu mniej więcej (jeśli twój sygnał przypomina sinusoidę), podczas gdy zamówienie 4 jest lepiej dopasowuje zniekształcone kształty pików, ale lubi mieć około 9 lub więcej punktów. Ale wiele zależy od kształtu i częstotliwości hałasu.

Jak powiedziano w komentarzach, znalezienie instrumentów pochodnych prawdopodobnie nie jest najlepszą strategią, ale jeśli mimo to chcesz znaleźć instrumenty pochodne, filtr Savitzky-Golay może to zrobić - jednocześnie wygładzając i raportując pochodną zamiast sygnału.

DarenW
źródło