logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Klasyfikacja sygnału z wykorzystam ML i uczenia głębokiego - ekstrakcja cech

Waldus321 03 Lip 2024 15:34 303 6
REKLAMA
  • #1 21141691
    Waldus321
    Poziom 3  
    Dzień dobry,

    W ramach pracy przejściowej mam nauczyć model ML albo NN, który ma rozpoznawać dwa sygnały (klasyfikacja binarna). Bez wdawania się w zbędne szczegóły, są to sygnały uzyskane z kart pomiarowych (rodzaj drgań mechanicznych). Jednak tu pojawiają się problemy, ponieważ nie jestem w stanie wyciągnąć cech charakterystycznych dla danego rodzaju sygnału. Dominujące częstotliwości dla jednego, jak i drugiego sygnału, są w jednym pasmie.

    Wykres PSD z sygnałami w kolorze czerwonym i niebieskim na tle białym.

    Wykres PSD uzyskany metodą Welcha (częstotliwość próbkowania fs = 50000 Hz). Na czerwono sygnały oznaczone jako 1, a na niebiesko jako 0.

    Kolejny problem z tymi sygnałami jest taki, że mam ich bardzo mało - w sumie mam ich 120, przy czym mają one różne długości: od 20 000 do 1 000 000 próbek. Jeżeli chodzi o przygotowanie danych, to na sygnałach wykonywałem StandardScaler (od każdej próbki odejmowałem wartość średnią ze wszystkich sygnałów i dzieliłem przez odchylenie standardowe. W teorii to powinno zmniejszyć wariancję). Jako próby wyciągnięcia cech charakterystycznych z domeny czasu wyciągałem: wartość średnią, odchylenie standardowe, max wartość, min wartość, ptp, współczynnik szczytu, skośność, kurtozę, odchylenie bezwzględne, RMS i entropię. Jednak na podstawie tych danych i algorytmu jakim jest RandomForest, nie byłem w stanie klasyfikować sygnałów (dokładność dla zbioru testowego to 53 procent).

    Następnie próbowałem wyciągnąć cechy z domeny częstotliwościowej. Próbowałem do tego wykorzystać PSD. Na podstawie różnej ilości punktów w wykresie próbowałem wyciągać cechy z wykorzystaniem konwolucji jednowymiarowej połączonej z maxpoolem, a jako klasyfikację wykorzystałem warstwy LSTM, żeby wyciągać sekwencyjne cechy. Tutaj udało mi się trochę lepiej, uzyskałem dokładność na poziomie 81 procent.

    Następną metodą, jaką próbowałem, było robienie spektrogramów i przepuszczanie ich przez sieć VGG. Dla tej metody uzyskałem maksymalną dokładność na poziomie 77 procent. Ostatnią metodą, jaką próbowałem, było wykorzystanie STFT. Sygnał "kroiłem" na mniejsze kawałki i z każdego z nich robiłem obraz STFT. Następnie te wszystkie obrazy sklejałem w jeden pakiet i przepuszczałem przez sieć typu VGG. Tutaj miałem dokładność na poziomie 82 procent.

    Jednak te wszystkie dokładności, jakie uzyskałem, są wciąż za małe, bo jako wymóg podany od prowadzącego było uzyskanie ponad 90 procent. Skoczyły mi się już pomysły, w jaki sposób mogę wyciągnąć cechy charakterystyczne dla sygnałów. Ma ktoś jakiś pomysł na to, ewentualnie czy mógłby ktoś polecić jakąś specjalistyczną architekturę sieci neuronowej stworzoną do tego? Ja próbowałem jeszcze ArchNet i WaveNet. Żadna z nich nie działa (w ogóle się nie uczy dla zbioru treningowego).

    Z góry dziękuje za pomoc
  • REKLAMA
  • #2 21142262
    TechEkspert
    Redaktor
    Czym różnią się te sygnały, jak różni się natura ich powstawania, jaki jest sposób akwizycji?
  • REKLAMA
  • #3 21142280
    Waldus321
    Poziom 3  
    Są to odczyty z kotew górniczych które powstają podczas ich rwania. Dokładniej mówiąc są to naprężenia jakie na nich powstają podczas takiego procesu. Są dwa rodzaje sygnałów ze względu na to ze mamy dwa rodzaje kotew, Mianowice kotew górna i dolną.
  • #4 21142284
    __Grzegorz__
    Poziom 30  
    Zostań przy STFT.
    Skróć okna czasowe, dodaj 0 przed FT aby zwiększyć jej rozdzielczość i otrzymanymi spektogramami ucz sieć.
    Do 90% już całkiem niedaleko...
  • REKLAMA
  • #5 21142291
    Waldus321
    Poziom 3  
    __Grzegorz__ napisał:
    Zostań przy STFT.
    dodaj 0 przed FT


    chodzi tu o to żeby do stworzenia STFT użyć większej ilości pkt?

    Dodano po 8 [minuty]:

    A co do STFT czytałem jeszcze ostatnio artykuł właśnie o klasyfikacji sygnałów z użyciem deep lerningu i tam autor podzielił sygnał na cześć I i Q (In-phase, quadrature) i dopiero z tego wyliczał STFT. Tylko że on tego używał do klasyfikacji sygnałów 5G wifi itd. I tu moje pytanie ja to próbowałem zrobić i model mi się w ogóle nie uczy. Ja to robiłem w ten sposób ze z FFT wyciągałem część rzeczywistą (ja traktowałem jako Q) i część urojoną i ją tratowałem jako I. Nie wiem czy to jest prawidłowe podejście do wyliczenia tych komponentów. Jeśli nie to prosił bym o nakierunkowanie jak to policzyć.
  • #6 21142586
    __Grzegorz__
    Poziom 30  
    W temat próbkowania kwadraturowego (I,Q) nie wchodziłbym.
    Twój sygnał nie niesie informacji w konstelacjach QAM (czy innych podobnych) :)
    A jak chcesz to sprawdzić osobiście, to wygeneruj sobie sygnał analityczny.

    Masz sygnał rzeczywisty i szukałbym cech zawartych w spektrogramach tych sygnałów.

    Zespolone wyniki FFT musisz sprowadzić do amplitudy (sqrt(re^2 + im^2)).
    Fazę bym sobie darował, bo będzie w sumie przypadkowa.

    Ale od początku...
    Dysponujesz nagraniami o różnej długości.
    Jeżeli są to nagrania zdarzeń zrywania kotew, to sprawdziłbym czy te dłuższe w większości nie są "puste", albo czy nie zawierają nagrań kilku zdarzeń.
    I z tych nagrań wyodrębniłbym takie zdarzenia i tylko je. Reszta do kosza.
    W ten sposób bardziej precyzyjnie definiujesz dane wejściowe.

    Możesz wrzucić przykładowe nagrania (np. najkrótsze i najdłuższe)?
  • REKLAMA
  • #7 21142734
    Waldus321
    Poziom 3  
    __Grzegorz__ napisał:

    Jeżeli są to nagrania zdarzeń zrywania kotew, to sprawdziłbym czy te dłuższe w większości nie są "puste", albo czy nie zawierają nagrań kilku zdarzeń.
    I z tych nagrań wyodrębniłbym takie zdarzenia i tylko je. Reszta do kosza.
    (np. najkrótsze i najdłuższe)?


    Aktualnie robię cos w tym stylu. Zrobiłem delikatna selekcje sygnałów i odrzuciłem te najdłuższe i najkrótsze i z początkowego przedziału miedzy 1 000 000 a 20 000 próbek wybrałem przedział od 200 000 do 500 000. Następnie skróciłem wszystkie sygnały do 200 000 próbek. Próbowałem tez używać zero-paddingu ale to dawało marne efekty.

    __Grzegorz__ napisał:

    Możesz wrzucić przykładowe nagrania (np. najkrótsze i najdłuższe)?
    (np. najkrótsze i najdłuższe)?


    Wrzucam tutaj STFT (nperseg = 1000, okno='hann') i FFT

    Klasyfikacja sygnału z wykorzystam ML i uczenia głębokiego - ekstrakcja cech
    Najdłuższy sygnał (1 000 000 pkt)

    Klasyfikacja sygnału z wykorzystam ML i uczenia głębokiego - ekstrakcja cech
    Sygnał o długość (200 000 pkt)

    Klasyfikacja sygnału z wykorzystam ML i uczenia głębokiego - ekstrakcja cech
    Najkrótszy sygnał (50 000 pkt)

    Dodano po 15 [minuty]:

    Tak jeszcze bawiłem się wczoraj z tym stft i udało mi się uzyskać dokładności na zbiorze walidacyjnym na poziomie 88.9 procenta w pojedynczych epokach i 85.19 stałe. Na sygnał nałożyłem filtr Butterwortha (dolnoprzepustowy o cutoff = 5000 Hz i rzedzie =9). Następnie podziemiem sygnał na 8 segmentów i z każdego wyliczyłem stft (nperseg = 256 i noverlap = 128) Architektura sieci to Conv2d + LSTM.

    Klasyfikacja sygnału z wykorzystam ML i uczenia głębokiego - ekstrakcja cech
    Architektura sieci

    Próbowałem jakoś dostroić warstwy i pobawić się wielkościami okna ale nie udało mi się uzyskać lepszych efektów,
REKLAMA