Przeczytałem wiele pytań na temat SO i, szczerze mówiąc, każde z nich nie opisuje żadnej konkretnej drogi. Niektórzy mówią „zrób FFT”, a niektórzy mówią „przekroczenie zera” itd. Ale posunąłem się tylko do zrozumienia, że cyfrowe wejście audio składa się z szeregu amplitud dla określonej częstotliwości i dobrze. Naprawdę nie wiem zbyt wiele poza tym.
Teraz znam twierdzenie Nyquista, częstotliwość, amplitudę, serie Fouriera itd., I to z 2-3 lat temu, kiedy robiłem to w moim programie uniwersyteckim w jakimś semestrze. Ale wtedy tak naprawdę nie uczono nas zbyt wiele na temat używania Fouriera w świecie rzeczywistym i nie zadałem sobie trudu, by wykopać więcej na ten temat poza nauką wystarczającą do zaliczenia przedmiotu. Ale teraz będę musiał użyć tego wszystkiego.
Oto migawka dźwięków, które próbuję wykryć:
Oczywiście dźwięki mają unikalne wykresy. Chcę tylko zrozumieć, jak wydobyć ich szczególne unikalne cechy dla ich unikalnych kolczastych linii na wykresie. Jak na przykład amplituda, częstotliwość itp. I na jak długo - choć to chyba banalne.
Chcę prosty krok po kroku, niejasną listę instrukcji - mogę wyszukiwać w terminologii, której nie rozumiem.
Może tak? -
Uzyskaj wejściowe dane audio
Spektrogram wykresu
Pobierz wykres spektrogramu dźwięku, który chcesz wykryć w cichym otoczeniu
Przestudiuj ten wykres - narysuj unikalne cechy tego dźwięku
Wykonaj jakąś funkcję, która może wykryć te szczególne cechy w transmisji audio na żywo, wykorzystując właściwości dźwięku znalezionego w (4)
Jeśli zostanie znalezione dopasowanie, cóż - zadanie zostało wykonane.
Poleruj algorytm, aby wyeliminować fałszywe negatywy.
Jestem zdezorientowany - jak przejść około 3,4,5. W szczególności 3 i 4. Ponieważ tworzę oprogramowanie, w którym użytkownik mógłby nagrywać dowolny dźwięk jako gest wprowadzony później, chciałbym, aby mój system mógł nagrać dowolny dźwięk i dopasować go do dźwięku na żywo kanał, aby wykryć ten gest dźwiękowy. Jak powiedzmy, kaszel, pstrykanie palcami, gwizdanie lub klaskanie. Lub mówiąc spółgłoski - lub lub lub . Prawie każdy dźwięk.
Myślałem o tym, aby użytkownik nagrał dźwięk, który chce przechowywać, jako gest w dość otoczeniu. A użytkownik wyda dźwięk tylko pomiędzy cichym wypełnieniem czasu ; 3 sekundy na początku i na końcu nagrania.
Powiedzmy, że przez pierwsze 3 sekundy mój system ustali, że prąd wejściowy to normalny cichy dźwięk tła. Nagła zmiana na wykresie oznaczałaby rozpoczęcie wprowadzania dźwięku. A kiedy to się skończy, nagrywanie będzie trwało kolejne 3 sekundy, a czas wypełniania będzie cichy . Zostanie to wykonane ręcznie przez użytkownika. Następnie automatycznie zapisuje charakterystykę tylko tej części, podczas której trwała nagła zmiana na wykresie - gdzieś pomiędzy czasami wypełnienia.
W ten sposób cechy tej części zostaną zapisane jako dane gestów tego dźwięku, które zostaną później wykorzystane do wykrycia tego konkretnego dźwięku w transmisji audio na żywo.
Problem w tym, że myślę o tym wszystkim w prostym języku angielskim. Muszę myśleć z matematyki i fizyki, aby móc efektywnie zaimplementować to w moim kodzie. Jestem tak cholernie nieświadomy tego, co napisać i gdzie napisać to w moim kodzie - nawet mając do dyspozycji tak wiele bibliotek i pytań dotyczących SO.
I przepraszam, jeśli to było długie.
źródło
Odpowiedzi:
Chociaż zgadzam się z jednym z komentarzy, że stosowanie technik rozpoznawania mowy może być dobrym początkiem, dźwięki te są różne i nie jestem świadomy, że ktoś przeprowadził jakiekolwiek badania w celu ich kategoryzacji (artykuł przytoczony przez Nathana wydaje się jedynie rozróżniać mowę i hałas), więc jeśli ktoś nie przedstawi czegoś, co temu zaprzecza, będziesz musiał wymyślić własną technikę, a to zajmie dużo nauki i dużo pracy. Najlepsze, co mogę zrobić, to zacząć.
Po pierwsze, nie oczekuj, że ktokolwiek będzie w stanie wyprodukować magiczną formułę. Nie ma równania, aby przejść od dźwięku do tego, czym jest dźwięk. Ludzie i komputery muszą się uczyć, wprowadzając dane, aby odgadnąć, jakie są dźwięki. Powodem, dla którego ludzie mówią w swoich odpowiedziach „użyj FFT” lub „użyj przejścia przez zero” jest to, że są to niektóre z podstawowych elementów składowych DSP używanych w rozpoznawaniu mowy i powiązanych algorytmach. Ale FFT i zerowa szybkość przekraczania są zwykle tylko pierwszymi krokami w tworzeniu zestawu parametrów opisujących dźwięk. Parametry te są następnie analizowane statystycznie (nie poprzez jakąś funkcję magiczną), aby określić, do której kategorii najprawdopodobniej należą. Zauważ, że powiedziałem „najprawdopodobniej”: nawet najlepsze wykrywanie mowy (i ludzki mózg!
Oto niektóre parametry, których możesz szukać:
Gdy będziesz mieć zestaw parametrów, które Twoim zdaniem pozwolą ci rozróżnić swoje dźwięki, będziesz musiał użyć metody statystycznej, aby je skategoryzować. Ukryty model Markowa jest często używany w mowie. Możesz także zajrzeć do regresji logistycznej, K-średnich, i jestem pewien, że istnieją inne możliwości, ale myślę, że HMM jest wypróbowany i prawdziwy.
źródło
Użyłem tego artykułu na końcu opartym na entropii, wskazując, kiedy próbowałem zignorować tego rodzaju dźwięki w rozmowach telefonicznych, używane do komputerowego rozpoznawania mowy, jeśli dźwięki, które próbujesz uchwycić, to mowa, to entropia może działać naprawdę dobrze, w przypadku muzyki może nie być użyteczne.
źródło
Myślę, że rekomendacje Bjorna są bardzo dobre, ale chcę podać dodatkowe informacje. Z twojego opisu brzmi to jak problem z identyfikacją barwy. Istnieją pewne badania w tym obszarze w kontekście muzyki komputerowej (identyfikacja różnych instrumentów jest przydatna, a można powiedzieć, że różnica między snapem a klaśnięciem wynika z barwy dźwięku). William Brentprzeprowadził badania w tej dziedzinie (poszukaj timbreID na swojej stronie) i stworzył oprogramowanie do wykorzystania w Pure Data. W każdej sytuacji, w której szukasz określonych zdarzeń, dobrym pomysłem byłoby wykonanie automatycznej segmentacji przez wykrycie początku. Ponieważ już bierzesz STFT, określenie początku nie wymagałoby zbyt wiele pracy dodatkowej (spójrz na wykrywanie początku strumienia spektralnego). Zarys systemu może być taki:
Trening
Klasyfikacja
Ten artykuł na temat perkusyjnej identyfikacji barwy może się przydać. Przedstawia definicje potencjalnych funkcji do obliczenia na podstawie przychodzącego dźwięku oraz metodę klasyfikacji autora. Będzie to działać dość dobrze w przypadku dźwięków perkusyjnych, ale może nie działać tak dobrze w przypadku mowy (wielu sylab), w takim przypadku bardziej odpowiednia byłaby metoda HMM. Podobnie dokładność wykrywania początku będzie się różnić w zależności od rodzaju poszukiwanych dźwięków.
Jeśli szczególnie martwisz się zatrzaskami i włącznikami światła, poświęć trochę czasu na zastanowienie się, które funkcje mogą dokładnie rozróżnić te dwa dźwięki.
źródło