Jak wykryć „szybkie” zmiany w przetwarzaniu sygnału

12

Pracuję nad projektem, w którym mierzymy lutowność komponentów. Zmierzony sygnał jest zaszumiony. Musimy przetwarzać sygnał w czasie rzeczywistym, abyśmy mogli rozpoznać zmianę, która rozpoczyna się w czasie 5000 milisekund.

Mój system pobiera próbkę rzeczywistej wartości co 10 milisekund - ale można ją dostosować do wolniejszego próbkowania.

  1. Jak mogę wykryć ten spadek po 5000 milisekundach?
  2. Co sądzisz o stosunku sygnału do szumu? Czy powinniśmy się skupić i spróbować uzyskać lepszy sygnał?
  3. Istnieje problem polegający na tym, że każdy pomiar ma inne wyniki, a czasem spadek jest jeszcze mniejszy niż w tym przykładzie.

Przykładowy sygnał Przykładowy sygnał 2 Przykładowy sygnał 3

Odsyłacz do plików danych (nie są one takie same jak pliki używane na wykresach, ale pokazują najnowszy status systemu)

  1. https://docs.google.com/open?id=0B3wRYK5WB4afV0NEMlZNRHJzVkk
  2. https://docs.google.com/open?id=0B3wRYK5WB4afZ3lIVzhubl9iV0E
  3. https://docs.google.com/open?id=0B3wRYK5WB4afUktnMmxfNHJsQmc
  4. https://docs.google.com/open?id=0B3wRYK5WB4afRmxVYjItQ09PbE0
  5. https://docs.google.com/open?id=0B3wRYK5WB4afU3RhYUxBQzNzVDQ
Petr
źródło
5
Wygląda na to, że masz stosunkowo niewielki stosunek sygnału do szumu. Podobnie jak w przypadku większości problemów z wykrywaniem, należy rozważyć równowagę między prawdopodobieństwem prawidłowego wykrycia wskazanej funkcji a prawdopodobieństwem fałszywego zadeklarowania jej obecności. Co jest ważniejsze dla twojej aplikacji? Czy masz jakieś wymagania dotyczące opóźnienia wykrywania?
Jason R
2
„Hałas” przypomina bardziej zakłócenia na określonej częstotliwości. Jeśli tak jest (wykres spektrum pomoże), odpowiednie filtrowanie wykona większość pracy.
Juancho,
W rzeczywistości wykrycie tej funkcji jest bardzo ważne. Ale mogę żyć z pewnym opóźnieniem, ale muszę dostosować końcową pozycję zatrzymania, ponieważ nie wiem dokładnie, gdzie część dotyka lutu, i muszę kontrolować głębokość zanurzenia. Na przykład, jeśli wiem, że zanurzenie powinno wynosić 0,5 mm, obliczam teoretyczne położenie według idealnego rozmiaru globuli lutowniczej, ale potem muszę dokonać korekty rzeczywistego rozmiaru globuli wykrywanego przez dotyk - pojawia się jako zmiana w mocy.
Petr
Całe narzędzie pomiarowe znajduje się na sprężynach, dzięki czemu może się swobodnie poruszać, ale powoduje również hałas, a także mamy stałe sprężyny dla całego zakresu pomiarów, i oczywiście problemy te pojawiają się, gdy używa się najwyższej czułości, gdzie mierzone siły są strasznie mały.
Petr
Juancho - może to może pomóc, ale jak mogę to rozwiązać dla różnych części części, powodując różne częstotliwości? Również ten komponent zmienia się, gdy część jest zanurzona w lutu, ponieważ proces zwilżania zmniejsza poziom hałasu, ale dzieje się tak tylko w przypadku większych części, tutaj jest prawie tak samo, gdy wchodzi lub wychodzi.
Petr

Odpowiedzi:

4

Zwykle opisuję ten problem jako wykrywanie nachylenia. Jeśli obliczysz regresję liniową na ruchomym oknie, pokazana kropla będzie widoczna jako znacząca zmiana znaku nachylenia i / lub wielkości. Takie podejście oferuje szereg czynników, które będą wymagały „strojenia”: na przykład częstotliwość próbkowania, rozmiar okna itp. Wpłyną na odporność (odporność na zakłócenia) detektora znaku nachylenia. Tutaj można zastosować niektóre z powyższych komentarzy. Każde filtrowanie lub tłumienie szumów, które można zastosować przed dopasowaniem linii, poprawi Twoje wyniki.

Powrót 1986
źródło
2

Zrobiłem to, obliczając statystykę T średniej lewej części danych w porównaniu z prawą częścią danych. Zakłada się, że wiesz, gdzie jest punkt przejścia, którego oczywiście nie znasz.

Więc wypróbuj kilkaset punktów podziału wzdłuż osi czasu i znajdź ten z najbardziej znaczącą statystyką T.

u_left, u_right : mean of left and right portion
s_left, s_right : SD of left and right portion
n_left, n_right : number of samples on left and right (subtract one from each for the one degree of freedom)

se = sqrt(s_left^2 / n_left^2 + s_right^2 / n_right^2)
T = (u_left - u_right) / se

Możesz to zrobić jako wyszukiwanie binarne. Wypróbuj 10 punktów danych, znajdź dwa największe, a następnie spróbuj 10 punktów między nimi itp. W ten sposób możesz uzyskać dość precyzyjny punkt przejścia. Nie twierdzę, że dokładność. :-)

Poinformuj nas jak to idzie!

PS Możesz obliczyć średnie i sd jako sumy bieżące, co zmniejsza złożoność obliczania tej funkcji podziału dla każdej możliwej liczby od N ^ 2 do N. Wykonując to, prawdopodobnie możesz sobie pozwolić na obliczenie statystyki T w każdym możliwym punkcie podziału.

MattD
źródło