Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pliki .wav - rozpoznawanie obiektów, sieci neuronowe

27 Gru 2011 14:28 3718 12
  • Poziom 9  
    Witam,

    posiadam pliki w formacie .wav. Są to minutowe nagrania, na których (wśród szumów wiatru, ciszy i szczekania psów) słychać od czasu do czasu przejeżdżający pociąg, lub przelatujący samolot. W zasadzie mam opracować program, który będzie rozpoznawał na podstawie dźwięku cóż to za pojazd/obiekt było słychać.
    Pomysł jest taki, aby wyciągnąć z danego sygnału wektor cech, który możnaby wprowadzać pod klasyfikator zbudowany na sieci neuronowej (ale to już przyszłość, nie wybiegajmy).
    Pracuje na Matlabie i LabView (kolejność nieprzpypadkowa).

    Pierwsze co rzuciło mi się na myśl to analiza częstotliwościowa takiego sygnału. Niestety wyniki takiej analizy nie są tak różowe jak te, które wykonywałem np. na zajęciach podczas studiów (no, ale tam operowaliśmy na sygnałąch deterministycznych (czasem z dodatkiem szumu)).

    Udało mi się zestawić kilka wykresów przedstawiających reprezentację sygnału, natęzenie, reprezetnacje FFT, ale raczej bez sensu, żeby to tutaj pokazywać (zwłaszcza, ze mam coś problem z obrazkami). Natomaist, gdyby ktos był w stanie pomóc i chciał/miał czas zerknąć na te wykresy moge podesłać na maila (to jest mały pliczek PDF).

    Chciałbym poznać opinię osób moze bardziej doświadczonych w Analizie sygnałów na temat jak można do takego problemu podejść. Co należało by zrobić. Może analiza częstotliwościowa takiego sygnału jest tutaj całkiem chybionym pomysłem.

    Z takich przyziemnych i konkretnych problemów to nie umiem zbudować obwiedni widma amplitudowego w Matlabie.

    Proszę o pomoc.

    Pozdrawiam.
  • Admin grupy Projektowanie
    Pomysł analizy częstotliwościowej nie jest chybiony.
    Należy zebrać kilkanaście reprezentantów danej grupy dźwięków,
    a następnie zobaczyć podobieństwa oraz różnice po między innymi wzorcami.

    Dzięki temu na sieć zostaną podane najbardziej znaczące dane,
    może się okazać że sygnał należy poddać wstępnej obróbce (np. normalizacja, filtracja).

    Analiza dźwięków jest dość skomplikowana,
    jednak mniej złożona niż np. analiza mowy.

    Często dla określonej grupy wzorców pasują specyficznie dopasowane metody,
    np. w analizie mowy np. LPC

    Obrazki można umieszczać zgodnie z:
    Link
  • Pomocny post
    Poziom 13  
    Wszystko rozbija się o znalezienie takich cech sygnału które pozwolą sklasyfikować sygnały.
    To jak je potem sklasyfikujesz to już mniejszy problem. Czy to będzie NN, k-means czy klasyfikator liniowy lub nieliniowy to już zależy co da większą skuteczność. Wydaje mi się natomiast że normalizacja to rzecz obowiązkowa. Podzielenie przez max(abs(x)) i odjęcie średniej uniezależni Cię od sprzętu na jakim pracujesz. Co do szukania tonalności to polecam na początek proste sprawy. W dziedzinie czasu - kurtoza (chociaż ze względu na różnorodność sygnałów może się nie sprawdzić) i autokorelacja, w dziedzinie częstotliwości - płaskość widmowa, kurtoza. Metod jest na prawdę wiele wszystko zależy od sygnału i jak biegły jesteś w DSP
    Aha oprócz filtracji, możesz też wyeksponować tonalności poprzez uśrednianie widma.

    Co do obwiedni widma to nie za bardzo rozumiem. Nie działa
    20*log10( abs(fft(x)))?
    Chyba że chcesz aproksymować takie widmo?
    Może pomoże f-cja polyval i polyfit. Dostaniesz krzywą która aproksymuje widmo.
    Możesz też uśrednić widmo poprzez spectrum.estmethod
  • Poziom 9  
    To się porobiło...
    Chyba będę musiał zacząć od początku.

    Może tak: Chciałem otrzymać widmo amplitudowe w dziedzinie częstotliwości. Postaram się pokazać w maire przejrzyście co upisałem (nie wiem któego tego syntaxa użyć, żeby było w miare):

    Kod: scilab
    Zaloguj się, aby zobaczyć kod


    Nie wiem czy to co tu upisałem jest w ogóle z sensem, jakby było coś nie jasnego proszę pytać, może sobie to zbyt pokomplikowałem. Tak czy siak wykres wychodzi z ogromnym "pikiem" w okolicach wartości 0. Uciąłem więc wszystkie próbki, któych wartośc jest większa niż 2000 i ten wykres jest bardziej przejrzysty. Ponieważ nadal mam problem z uploadem plików jakoś sobie muszę radzić:
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    Na pierwszym wykresie na pliku jest cisza, na drugim natomaist wyraźnie słychać pociąg. Można by jeszcze ten wykres zzoomować, ale myślę, ze mniej wiecej widać różnicę.

    I teraz chciałem zrobić obwiednię, a w zasadzie aproksymacje, o której Pan tu wspomina. Ale pozostańmy chwilę przy tej obwiedni i i przy Pana wzorze.
    Użyłem wzoru jaki Pan podał po prostu go przepisując a także używając go jako 20*log10(Yy). I wychodzą różne rzeczy:
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    I teraz pytanie brzmi - co łaczy i co dzieli te dwa wykresy? Po prostu niepokoi mnei fakt, ze Pan przedstawia widmo amplitudowe jako (abs(fft(x)) a ja w troszke inny sposób, a te wykresy się aż tak różnią. Wiadomo, że mają prawo, bo wyniki mojej analizy i prostego abs(fft(x)) są różne. W każdym razie sprowadza się to do tego, czy poprawne jest moje rozumowanie w kodzie, który przedstawiłem wyżej. Także tutaj bardzo proszę o komentarz, pomoc.

    Co do autkorelacji, zrobię ją. O płaskości widmowej coś mi się obiło o uszy, ale nie jestem pewien czy jestem w stanei sie jej podjac. Co do kurtozy, pierwszy raz się spotkałem z tym pojęciem. Chciałbym zapytać co ta liczba ma pokazać. Internet tłuamczy to dość zawile, a mnei zależy żeby wiedzieć konkretnie co ta kurtoza poakzuje w teorii i co sugeruje w praktyce (nawet w tym konkretnym przypakdu). Ponadto nie wiem czy dobrze używam tej funkcji. Użyłem jej na sygnale:
    kurtosis(y)
    wychodzi 2.9218 (dla ciszy) i 8.9344 (dla pociągu)
    Nie wiem jak go użyć w dziedzinie częstotliwości (zakałdając nawet, ze poprawnie użyłem w dziedzinie czasu). Czy to ma być samo widmo, czyli, np. konkretnie u mnie
    kurtosis(Y)
    czy może
    kurtosis(Yy)
    a może jeszcze inaczej.

    Jeszcze wracając do aproksymacji. Te funkcje, które Pan zasugerował mają jakąś niezrozumiałą dla mnie składnię. Czytałem o nich, jeszcze sie rozczytam dokładnie, ale na chwilę obecną nie umiem ich zastosować. Nie mogę sie rozeznać np. czym jest ten drugi argument w funkcji polyval.

    Z góry dziękuję za pomoc.
    Bardzo już pomogliście.

    Pozdrawiam
  • Poziom 13  
    Oj tam od razu Pan, jeszcze tak stary nie jestem ;)
    Ale do rzeczy.
    Po pierwsze, nie wiem czy dobrze robisz, że liczysz fft z całego sygnału. Nie wiem dokładnie w jaki sposób ma działać Twój algorytm, ale zwróć uwagę na przypadek, gdy w połowie nagrania będzie jechał pociąg a w połowie nagrania już nie. Jak wtedy sklasyfikujesz przypadek? Poza tym pojawiająca się tonalność trochę zaniknie, bo fft będzie brany z całego sygnału.
    Wydaje mi się, że dobrze by było wycinać sygnał oknami np o dł 1024
    Wtedy każde okno klasyfikujesz osobno i np z całego wav'a możesz dokładnie określić w którym momencie przejeżdża pociąg. Poza tym wektory będą krótsze i szybciej się to będzie liczyło.
    Co do rysunków, to pierwsze rysunki jakie pokazałeś, przedstawiają widmo w skali liniowej, drugie natomiast w skali logarytmicznej (pozbywasz się tego pika i widmo jest trochę bardziej czytelne). Tylko tym się różnią. Coś dziwnego natomiast stało się z drugim rysunkiem w skali log. Czemu nie jest on symetryczny. Może masz różne częstotliwości próbkowania (Fs)?? Wtedy konieczny jest resampling sygnału (pamiętaj że sygnał wtedy skraca się w czasie).
    Zwróć też uwagę, że Yy liczysz z połowy widma, które jest symetryczne (własność DFT). Po prostu pozbywasz się tego niepotrzebnego odbicia, które to pojawia się powyżej częstotliwości Fs/2. Jeśli będziesz chciał aproksymować widmo, to zdecydowanie lepiej jest to robić właśnie na jego połowie.
    Co do kurtozy (dobrze użyłeś i jak widać chyba to działa) to jest to miara rozkładu sygnału. Kurtozę powinno stosować się raczej do sygnałów czasowych. Zwróć uwagę, że jeśli masz szum w dziedzinie czasu, to zazwyczaj jest to szum o rozkładzie gaussowskim lub normalnym. Jeśli jest to szum gaussowski to wartości chwilowe sygnału kumulują się wokół jednej wartości np 0 (jeśli od sygnału odejmiesz wartość średnią), jak utworzysz z tego histogram to masz normalną krzywą gaussa. Z kolei każda tonalność to pewne odstępstwo od tych wartości, ale też z góry określone. Histogram takiego sygnału będzie bardziej spłaszczony. Kurtoza mierzy właśnie to odkształcenie rozkładu sygnału (mam nadzieję że nic nie pomieszałem).
    Z płaskością widmową jest jeszcze łatwiej. Jest to zwyczajnie stosunek średniej geometrycznej sygnału do średniej arytmetycznej. Czyli w Matlabie to będzie geomin(x)/mean(x)

    p = polyfit(x,y,n)
    p - współczynniki wielomianu (potrzebne do polyval)
    x - oś x w Twoim przypadku to 1:length (Yy)
    y - to widmo, u Ciebie to Yy
    n - stopień wielomianu, nie przesadź daj na początek np 3

    y = polyval(p,x)
    y - szukana aproksymacja
    reszta j/w
  • Poziom 9  
    Ja chcę wyciągnąć z takiego sygnału tylko informację CO słychać w sygnale (czy to samochód, czy pociąg, czy samolot, czy jeszcze coś innego), nie interesuje mnei informacja kiedy on się pojawił. Zgodnie jednak z tym co piszesz "zokienkowanie" sygnału ułątwi wyciąganie tych charakterystycznych dla każdego cech, czy tak?

    Nie wiem czy 1024 nie jest za mały, ale to kwestia testowania. Sygnał posiada częstotliwość próbkowania 44100. Także mam troche obawę, że wystarczy, że zawieje mocniej wiatr, albo pies szczeknie i coś tu się już wysypie. Jeżeli odpowiedź na pytanie z pierwszego akapitu jest twierdząca, to pewnie zajmę się takim właśnie rozwiązaniem.

    Widmo w skali logarytmicznej nazwałeś obwiednią. Ten drugi może nie jest symetryczny właśnie dlatego, że jest brany z Yy (który z kolei liczony jest z połowy widma). Istotną infomracją natomiast jest dla mnie to, że ten wykres powinien być symetryczny. :)

    Czyli zgodnie z tym co piszesz - zostawić takie przekształcenie FFT jakie mam i przeprowadzać aproksymacje na połowie tego sygnału (czyli u mnie na Y (czy Yy?))?

    Jaka jest różnica pomiędzy moim foureirem a (abs(fft))? Tylko taka, że pozbywam się symetrii i usprawniam liczenie (przez NFFT)?

    Co do kurtozy, chyba nadal nie do końca rozumiem. Zakłądajac, że w moim sygnale występuje szum o rozkładzie normalnym to kurtoza będzie po prostu mniej więcej średnią tego sygnału? A po odjęciu tej średniej, jeżeli ta wartość będzie wciąż dodatnia, to co to oznacza? Im większa to...co?

    Co do płaskości widmowej - co konkretnie ma ta płaskość pokazać? Na co wskazuje?

    Co do polyfitów i polyvalów. Wynik tego polyvala można bezpośrednio wrzucić do plot i porównać z wykresem 20*log10(Yy)?

    Dziwnie to wychodzi.
    Kod: scilab
    Zaloguj się, aby zobaczyć kod

    Ze stopniem wielomianu kolejno 3,5 i 10 wykresy przedstawiają się następująco:
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowePliki .wav - rozpoznawanie obiektów, sieci neuronowePliki .wav - rozpoznawanie obiektów, sieci neuronowe

    Nie jestem pewien czy to tak miało wyglądać...
  • Pomocny post
    Poziom 13  
    santo144 napisał:
    Ja chcę wyciągnąć z takiego sygnału tylko informację CO słychać w sygnale (czy to samochód, czy pociąg, czy samolot, czy jeszcze coś innego), nie interesuje mnei informacja kiedy on się pojawił. Zgodnie jednak z tym co piszesz "zokienkowanie" sygnału ułątwi wyciąganie tych charakterystycznych dla każdego cech, czy tak?


    Tak, powinno to ułatwić wyłuskanie informacji czy zjawisko wystąpiło czy nie, ale z drugiej strony jeśli masz TYLKO 2 stany (CISZA i obiekt) to jasne że widmo z całego sygnału będzie się różniło pomiędzy tymi przypadkami. Obiekt zawsze będzie miał większą energię niż cisza. Natomiast jeśli zamiast ciszy będziesz miał np dobrze słyszalny szum lasu, czy cokolwiek innego o poziomie energetycznym zbliżonym do obiektu, to wtedy możesz mieć problem z detekcją na całych sygnałach.

    Cytat:

    Nie wiem czy 1024 nie jest za mały, ale to kwestia testowania. Sygnał posiada częstotliwość próbkowania 44100. Także mam troche obawę, że wystarczy, że zawieje mocniej wiatr, albo pies szczeknie i coś tu się już wysypie. Jeżeli odpowiedź na pytanie z pierwszego akapitu jest twierdząca, to pewnie zajmę się takim właśnie rozwiązaniem.

    No tak w takim przypadku może być za mało. Podałem tylko przykład. Możesz podzielić sygnał np na 10 części i w ten sposób szukać. Czas trwania sygnału z obiektu to na pewno ok sekundy, więc możesz sobie zrobić takie okno, aby w czasie trwało np 1s. Oczywiście to tylko przykład. Musisz popróbować.

    Cytat:

    Widmo w skali logarytmicznej nazwałeś obwiednią. Ten drugi może nie jest symetryczny właśnie dlatego, że jest brany z Yy (który z kolei liczony jest z połowy widma). Istotną infomracją natomiast jest dla mnie to, że ten wykres powinien być symetryczny. :)


    To nie do końca tak. Widmo w skali log to po prosu widmo w skali log, nic więcej. Pytanie jest czym dla Ciebie jest obwiednia. Jeśli szukasz linii która łączy lokalne maksima prążków widma to żadna z podanych przeze mnie metod nie "zadziała". Jeśli chcesz, żeby widmo nie było takie "poszarpane", "szumiące" to możesz to widmo wygładzić poprzez uśrednianie w czasie (wtedy okna będą potrzebne). Jeśli widmo z dwóch kolejnych okien przyjmie wartość losową, to będą to inne wartości (szum będzie wyglądał inaczej) jeśli z tego policzysz średnią to wynik będzie trochę bardziej wygładzony. Coś w ten deseń.

    Cytat:

    Czyli zgodnie z tym co piszesz - zostawić takie przekształcenie FFT jakie mam i przeprowadzać aproksymacje na połowie tego sygnału (czyli u mnie na Y (czy Yy?))?


    Aproksymację przeprowadzić lepiej na połowie widma.

    Cytat:

    Jaka jest różnica pomiędzy moim foureirem a (abs(fft))? Tylko taka, że pozbywam się symetrii i usprawniam liczenie (przez NFFT)?

    Nie, tutaj nie pozbywasz się symetrii. Licząc FFT z linijki
    Code:
    Y=fft(y,NFFT); %Fourier


    liczysz normalnego Fouriera o długości NFFT. A że długość NFFT to długość sygnału, wg mnie ta wielkość jest zbędna. Sama funkcja fft(y) liczy Fouriera o długości równej długości sygnału. Drugi argument tej funkcji stosuje się jak masz sygnał o dł. np x a chcesz zrobić Fouriera dłuższego.
    Ty też liczysz DFT symetryczne. Tej symetrii pozbywasz się tutaj
    Code:
    Yy=2*abs(Y(1:NFFT/2+1)); %moduł itd (sam już do końca nie wiem co tu jest)


    Napisałeś że dokładnie nie wiesz co tu się dzieje, to już tłumaczę. Ponieważ Y jest zespolone, to bierzesz z niego wartość bezwzględną (moduł - abs). Ale moduł nie z całego wyliczonego fft tylko właśnie z połowy (1:NFFT/2+1) czyli dokładnie tutaj pozbywasz się symetrycznego odbicia.

    Cytat:

    Co do kurtozy, chyba nadal nie do końca rozumiem. Zakłądajac, że w moim sygnale występuje szum o rozkładzie normalnym to kurtoza będzie po prostu mniej więcej średnią tego sygnału? A po odjęciu tej średniej, jeżeli ta wartość będzie wciąż dodatnia, to co to oznacza? Im większa to...co?

    Z tego co pamiętam kurtoza, dla rozkładu Gaussowskiego pokazuje 3 lub zero (w zależności od zastosowanego wzoru) Im więcej tonalności w sygnale, tym Kurtoza chyba się zwiększa. Ale tego na 100% nie pamiętam.
    Cytat:
    Co do płaskości widmowej - co konkretnie ma ta płaskość pokazać? Na co wskazuje?


    Jest co cecha stosowane w analizie mowy. Też wskazuje inne wartości dla sygnałów tonalnych a inne dla sygnałów o charakterze szumu.
    Cytat:

    Co do polyfitów i polyvalów. Wynik tego polyvala można bezpośrednio wrzucić do plot i porównać z wykresem 20*log10(Yy)?

    Dziwnie to wychodzi.
    Kod: scilab
    Zaloguj się, aby zobaczyć kod

    Ze stopniem wielomianu kolejno 3,5 i 10 wykresy przedstawiają się następująco:
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowePliki .wav - rozpoznawanie obiektów, sieci neuronowePliki .wav - rozpoznawanie obiektów, sieci neuronowe

    Nie jestem pewien czy to tak miało wyglądać...

    Pokazuje źle, bo robisz aproksymację z widma liniowego, a rysunek pokazany jest na widmie log.

    EDIT.
    Uzupełniłem jeszcze wypowiedź dotyczącą liczenia fft, więc jak przeczytałeś to wcześniej to wróć do tego punktu.
    Wracając jeszcze do rozpoznawania przypadków, to być może nie trzeba będzie wchodzić w jakieś skomplikowane cechy. Może samo liczenie np energii sygnału wystarczy.
    Może zrób tak jak by Ci się chciało. Wstaw widma sygnałów które chciałbyś rozpoznawać (po jednym przykładzie z każdego rodzaju). Widma najlepiej w skali log i zwykłe ( z tego co wiem masz do sklasyfikowania ciszę, pociąg i samolot - coś jeszcze?). Najlepiej jakby to był "czysty przypadek", tzn jak sygnał przedstawia tylko i wyłącznie jakiś obiekt. Najlepiej wyciąć sobie jakichś "reprezentantów" w programie do edycji wav i z nich robić fft. Może jakaś mądra głowa tutaj wymyśli coś sensownego.
    Z resztą proces uczenia algorytmów powinien odbywać się na takich właśnie "reprezentantach".
  • Poziom 43  
    ->santo144 Podział na małe okna ma jeszcze tę zaletę, że widmo może się przesuwać w czasie np. w wyniku zjawiska Dopplera. Analizując całość będziesz miał rozmyte widmo. Może warto obejrzeć spektrogram, odpowiednio dobierając wielkość okna?.
  • Poziom 9  
    Dziękuję za wskazówki i wyjaśnienia neijasności. Wykresy aproksymacji zastosowałem faktycznie fatalnie.

    Poszedłem za radą. Zokienkowałem sygnał. Analizuję każdą sekundę z osobna.
    Dla każdego sekundowego sygnału liczę Foureira (tak jak poprzednio, czyli pozbywam sie symetryczności) i z całego tego Fouriera liczę srednią i kurtoze.
    Nastepnie wrzucam te wartości do macierzy i kreślę dwa 60-punktowe wykresy.
    Poniżej wynik takiej analizy dla "ciszy".
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    Następnie zestawienie wykresów sygnału gdzie WYRAŹNIE słychać przejeżdząjący pociąg (między ~5 a ~35 sekundą).
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    Następnie zestawienie wykresów gdzie również słychać pociąg, ale tak jakby troche dalej. Jest to inny reprezentant pociągu, ale jeszcze w miare podobny.
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    Poniżej mam wykresy gdzie wyraźnie słychać pociąg pomiędzy ~23-52 sekundą. Natomiast w ~50 sekundzie wiatr, lub pęd powietrza z tego pociągu uderza w mikrofon i efekt jest jak widać.
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe
    Ostatnie zestawienie wykresów przedstawia samolot. Dość wyraźnie chociaż ucięty pod koniec. Widać natomaist, ze ten samolot zaczyna być słychać gdzieś w ~50 sekundzie.
    Pliki .wav - rozpoznawanie obiektów, sieci neuronowe

    Z wykresów wynika, że rozpoznania można dokonać na podstawie wartości średnich widma amplitudowego. Tam gdzie ta wartość oscyluje w okolicach 2 są to pociągi. Warto zwrócić uwagę, że przekraczajac wartość 2, kurtoza znaczniej odbiega od wartości bliskiej 0. Samolot (szkoda, ze znalazłem tylko jeden) to wartość bliska 0,5. Cisza oscyluje wokół wartości 0,09-0,1. Nie sądzę jednak, aby to było aż tak piękne, ponieważ może się okazać, że w bardziej skomplikowanych przypadkach (a wybrałem raczej te mneij skomplikowane) te wartości będą inne i być może będę musiał uzależnić decyzję programu od większej ilości cech niż tlyko srednia i kurtoza. Zresztą widać, że średnia i kurtoza zachowują się dość analogicznie.

    Myślałem też, żeby jakoś się jeszcze uczepić widm tych "sekudnowych sygnałów" w skali logarytmicznej, nie wiem tlyko jak to mniej więcej przedstawić.

    Co o tym myślicie? Czy takie rozwiazanie jest w maire sensowne?

    Pozdrawiam
  • Pomocny post
    Poziom 13  
    No widzisz, coś już się "dzieje".
    Kolega Jarek, też dobrze podpowiada. Spróbuj pooglądać sygnały na spektrogramach.
    Jest do tego prosta funkcja w Matlabie (spectrogram). To są właśnie widma sygnałów w czasie o które pytałeś. Powstaje 2wymiarowy obraz gdzie na jednej osi masz czas a na drugiej masz częstotliwości.

    Myślę, że lepszym rozwiązaniem niż średnia z widma będzie liczenie energii sygnału.
    E = sum(x.^2) z odcinków sekundowych. W ogóle możesz się pokusić o "bramkowanie" sygnału. Tzn cisza będzie miała małą energię, więc w ogóle nie będziesz jej brał pod uwagę. Natomiast wszystko co przekroczy jakiś tam próg energii wrzucisz na NN albo jakiś inny klasyfikator i będziesz mógł rozpoznać co to jest za pomocą cech.
  • Poziom 9  
    Skorzystałem także z energii sygnału. Okienkuje sygnał i do uczenia NN wykorzystuje konkretne sekundy z poszczególnych sygnałów. Do NN przesyłam energię sygnału oraz średnią i kurtozę z widma z konkretnej sekundy. Szukam czegoś jeszcze.

    Pozostaje jednak problem z samym NN. Nigdy wcześniej nie używałem i nei wiem jakie ilości takich reprezentantów są zdrowe.
    Kod: scilab
    Zaloguj się, aby zobaczyć kod

    Ten net.trainParam.epochs to jest z helpa i w zasadzie domyślam się do czego służy, ale nie wiem jakie wartości może/powinien przyjmować.
    Ta liczba 20 (w nawiasie kwadratowym) jest liczbą neuronów ukrytych (o ile dobrze rozumiem). Także nie wiem jakie liczby wypróbowywać. Za każdym razem to uczenie wychodzi jakoś inaczej i zasada "im więcej tym lepiej" jakoś nie za bardzo działa. Podobnie przedstawia się sytuacja z funkcjami tansig, logsig i purelin. Nie wiem jakie funkcje i w jakich ilośćiach warto wypróbować.

    Z góry dziękuję za kolejną porcję pomocy.

    Pozdrawiam

    EDIT:
    Jeszcze taki pomysł mi się nasunął. Prócz plików na których wśród szumu słychać pociąg czy samolot mam też pliki gdzie słychać TYLKO szum wiatru, szczekanie psów etc. Czy możnaby było wykorzystać takie pliki to "odfiltrowania/odszumienia" plików badanych? Jeśli tak to w jaki sposób?
  • Poziom 15  
    Jeśli mogę zasugerować inne podejście, może coś nasunie ;) Wczytanie pliku, normalizacja i ramkowanie. Należy jeszcze wybrać zbiór który będzie już wstępnie sklasyfikowany i posłuży jako baza. Następnie obliczenie współczynników MFCC analizy cepstralnej dla każdej ramki, potem obliczenie dystansu z metryki DTW do wszystkich nagrań w bazie i klasyfikacja przy użyciu np. algorytmu k-NN.
  • Poziom 9  
    W zasadzie jest już po zawodach, ale dla własnego rozwoju możemy podyskutować.

    Napisałem m-plik, w którym wczytywane są przykładowe sygnały. Użytkownik wskazuje konkretne sekundy, a następnie określa co taka sekunda reprezentuje. W taki sposób są tworzone macierze do uczenia NN.
    Zaciekawiło mnie natomiast to liczenie współczynników MFCC i innych dystansów, metryk etc. Obawiam się, że moja wiedza jest za mała, podjerzewam, że ma to jakiś zwiazek z analizą sygnału przedstawionego w skali logarytmicznej, natomaist o co w zasadzie konkretnie chodzi - nie mam pojęcia.

    Pozdrawiam