Rozpoznawanie obiektów za pomocą dźwięku
Rozpoznawanie obiektów za pomocą dźwięku
Tworzę program, który ma rozpoznawac głos męski/damski. LabVIEW miałem przez jeden semestr na uczelni i przyznam się, że orłem w tym temacie to ja nie jestem. Na podstawie jakiegoś starego, wygrzebanego z neta projektu zrobiłem rejestrowanie dźwięku z mikrofonu i pokazanie przebiegu za pomocą Waveform Chart. Mój problem polega na tym, że program niby działa, ale nie pokazuje przebiegu. Niby przez pierwsze 3 sekundy coś pokazuje, ale potem się zatrzymuje i nic nie widać, dodam, że na osi czasu pokazuje się od razu czas rzędu "3 4xx xxx xxx" . Poza tym wyskakuje błąd na końcu, którego także nie mogę zrozumieć. Załączam screen'y i proszę o pomoc.
- Załączniki
Ostatnio zmieniony 26 maja 2013 17:41 przez Darrell, łącznie zmieniany 1 raz.
Re: Rozpoznawanie obiektu za pomocą dźwięku
W przykładach LabVIEW (Help->Find Examples) masz przykład jak ciągle odbierać próbki z mikrofonu. Zwie się on Continuous Sound Input.vi. Na jego podstawie zbuduj aplikację do nagrywania dźwięku.
Błąd, który u Ciebie występuje mówi o tym, że nie masz aktywnego zadania nagrywania. Mogło to spowodować przepełnienie bufora odczytu.
Najogólniej aplikacje źle zrobiłeś, bo po skonfigurowaniu (VI z kluczem) nagrywanie już się rozpoczęło i zanim nacisnąłeś start bufor się przepełnił.
Błąd, który u Ciebie występuje mówi o tym, że nie masz aktywnego zadania nagrywania. Mogło to spowodować przepełnienie bufora odczytu.
Najogólniej aplikacje źle zrobiłeś, bo po skonfigurowaniu (VI z kluczem) nagrywanie już się rozpoczęło i zanim nacisnąłeś start bufor się przepełnił.
Ostatnio zmieniony 25 maja 2013 19:34 przez milten, łącznie zmieniany 1 raz.
Rozpoznawanie obiektu za pomocą dźwięku
W przykładzie także występuje mi ten błąd. W takim wypadku musze jakoś wymusić/włączyć aktywne zadanie nagrywania? Czy zwyczajnie coś mi to blokuje i trzeba to naprawić/usunąć?
Re: Rozpoznawanie obiektów za pomocą dźwięku
Jak przykład Ci źle działa, to musisz mieć coś u siebie nie tak. U mnie włączyłem go i było widać przebiegi bez żadnych błędów.
Rozpoznawanie obiektów za pomocą dźwięku
Darrell spróbuj pozmieniać parametry 'Number of Samples/ch' i 'Sound Format' dla Sound Input Configure. U mnie przy zmianie Number of Samples/ch na 10000 program zaczął działać (wcześniej też otrzymywałam ten sam błąd, co Ty). Jeśli nie zadziała będziemy dumać dalej ;)
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Rozpoznawanie obiektów za pomocą dźwięku
Jak już uporasz się z mikrofonem, to zerknij to tego wątku poświęconego nieco innemu tematowi związanemu z analizą dźwięku.
Re: Rozpoznawanie obiektów za pomocą dźwięku
Racja, zmniejszyłem trochę liczbę próbek na kanał i działa lepiej Niestety bufor odczytu ciągle przepełniony i taka mała ciekawostka: po zmniejszeniu w.w. parametru program działa w porządku, ale już z "żarówą" działa tylko do pierwszej iteracji, potem błąd wyskakuje po bloku Sound Input ReadGóras pisze:Darrell spróbuj pozmieniać parametry 'Number of Samples/ch' i 'Sound Format' dla Sound Input Configure. U mnie przy zmianie Number of Samples/ch na 10000 program zaczął działać (wcześniej też otrzymywałam ten sam błąd, co Ty). Jeśli nie zadziała będziemy dumać dalej ;)
@jogurt_owocowy tak już wcześniej byłem w tamtym temacie, nawet napisałem Ci PW i widzę, że uaktualniłeś go Temat bardzo pomocny
Pytanie, czy jeśli bufor odczytu jest przepełniony to program jednak rejestruje cały sygnał i tylko zwyczajnie go nie widać na "charcie"? Drugie pytanie, sygnał odebrany z mikrofonu ma postać sygnału cyfrowego z zniekształceniami, szumami, harmonicznymi itp. i taki sygnał, żeby go analizować, trzeba najpierw przekształcić poprzez FFT (za pomoca np. Spectral Measurements). Po przekształceniu jeśli się nie mylę, to otrzymamy sygnał w formie ciągu matematycznego(sumy elementów jakie składają sie na cały sygnał). W jaki sposób dalej go mogę analizować?
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Rozpoznawanie obiektów za pomocą dźwięku
To nie jest prosta sprawa i zależy od tego, jaki sygnał chcesz analizować, ale załóżmy, że będzie to mowa z pewnymi uproszczeniami.taki sygnał, żeby go analizować, trzeba najpierw przekształcić poprzez FFT (za pomoca np. Spectral Measurements). Po przekształceniu jeśli się nie mylę, to otrzymamy sygnał w formie ciągu matematycznego(sumy elementów jakie składają sie na cały sygnał). W jaki sposób dalej go mogę analizować?
Aby zrobić prosty system rozpoznawania płci mówcy, możesz wykorzystać częstotliwość podstawową tonu krtaniowego (F0), który jest generowany przez struny głosowe w trakcie artykulacji dźwięcznych segmentów mowy (np. samogłosek). Struny głosowe u kobiet są krótsze niż u mężczyzn, dlatego kobiecy ton krtaniowy jest wyższy. Według tego źródła częstotliwość F0 zawiera się w przedziale 85-180 Hz u mężczyzn i 165-255 Hz u kobiet.
W normalnej mowie segmenty dźwięczne przeplatają się z innymi, co stwarza dodatkowe trudności, więc (żeby było prościej) załóżmy, że Twój system rozpoznawania będzie prosił użytkownika o artykulację samogłoski przez np. 2 sekundy i na podstawie takiego sygnału będziesz robił rozpoznawanie.
Masz sygnał w dziedzinie czasu, jak sobie policzysz i narysujesz jego widmo amplitudowe, to zobaczysz coś takiego:
http://sail.usc.edu/~lgoldste/General_P ... r/SFb.html
Twój sygnał jest okresowy, więc widmo ma charakter prążkowy. Częstotliwość pierwszego prążka to szukana przez Ciebie wartość F0 (na obrazku - 100 Hz). Używając funkcji z paletki Waveform Measurements spróbuj wyznaczyć jej wartość dla różnych sygnałów (najlepiej nagraj je wcześniej i pracuj na nagraniach). Jak już Ci się to uda, to sprawa będzie prosta: wartość F0 mniejsza niż 165 Hz -> mężczyzna; większa niż 180 Hz -> kobieta. W przedziale 165-180 Hz -> ...?
Powodzenia!
Rozpoznawanie obiektów za pomocą dźwięku
Dziękuję za ten pomysł, myślę, że uda się coś z tego zrobić.
Próbójąc zrobić odczyt ścieżki z pliku wav. napotykam problem. Do odczytu pliku użyłem bardzo uproszczonej wersji progamu autorstwa @jogurt_owocowy. Chciałem się czegoś nauczyć i sprawdzić jak by program odczytał częstotliwość z przebiegu bez żadnej filtracji. W tym celu nagrałem dźwięk struny gitarowej E4 przy pomocy zwykłego mikrofonu. Efekt wyszedł mizerny, a właściwie zerowy. Wydawało mi się, że powinno pokazać cokolwiek. Dziwi mnie jeszcze czerwony trójkącik przy wartości Y w elemencie Build Wfm...
Próbójąc zrobić odczyt ścieżki z pliku wav. napotykam problem. Do odczytu pliku użyłem bardzo uproszczonej wersji progamu autorstwa @jogurt_owocowy. Chciałem się czegoś nauczyć i sprawdzić jak by program odczytał częstotliwość z przebiegu bez żadnej filtracji. W tym celu nagrałem dźwięk struny gitarowej E4 przy pomocy zwykłego mikrofonu. Efekt wyszedł mizerny, a właściwie zerowy. Wydawało mi się, że powinno pokazać cokolwiek. Dziwi mnie jeszcze czerwony trójkącik przy wartości Y w elemencie Build Wfm...
- Załączniki
-
- cokolwiek.png (9.48 KiB) Przejrzano 18921 razy
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Rozpoznawanie obiektów za pomocą dźwięku
Czerwony trójkącik pojawia się, gdy LabVIEW dokonuje konwersji typów danych - wejście Y klocka Build Waveform jest tablicą liczb (próbek sygnału), a Ty podłączasz do niego tablicę waveformów. LabVIEW to łyka, ale efekt automatycznej konwersji jest daleki od zamierzonego - wynikowy sygnał ma dwie próbki, więc na pewno nie jest to to, co chcesz otrzymać.
Wrzuć plik z nagraniem, bo z samego obrazka ciężko coś więcej wywróżyć.
Wrzuć plik z nagraniem, bo z samego obrazka ciężko coś więcej wywróżyć.
Re: Rozpoznawanie obiektów za pomocą dźwięku
Wybaczcie, że może pytam o banalne rzeczy, ale niestety musze ten program zrobić. Słabo znam środowisko LV, ale próbuję nadrabiać praktycznie jak i teoretycznie. W załączniku plik do programu.
Wyjście data (Sound File Read) jest tablicą przebiegów, czyli wszystkich przebiegów składających się na daną ścieżkę dźwiękową. Mi zależy tylko na odczytaniu częstotliwości przebiegu dominującego. Czyli musze jakoś przefiltrować tą tablicę przebiegów?
Wyjście data (Sound File Read) jest tablicą przebiegów, czyli wszystkich przebiegów składających się na daną ścieżkę dźwiękową. Mi zależy tylko na odczytaniu częstotliwości przebiegu dominującego. Czyli musze jakoś przefiltrować tą tablicę przebiegów?
- Załączniki
-
- Odczyt dzwieku wave.vi
- (13.62 KiB) Pobrany 490 razy
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Rozpoznawanie obiektów za pomocą dźwięku
jogurt_owocowy pisze:Wrzuć plik z nagraniem
Rozpoznawanie obiektów za pomocą dźwięku
Przepraszam, źle przeczytałem.
- Załączniki
-
- dzwiek_e.rar
- (254.58 KiB) Pobrany 483 razy
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Rozpoznawanie obiektów za pomocą dźwięku
Sound File Read Simple na wyjściu wyrzuca Ci tablicę sygnałów z poszczególnych kanałów. Twój plik jest stereofoniczny, więc na wyjściu dostajesz tablicę dwuelementową.Wyjście data (Sound File Read) jest tablicą przebiegów, czyli wszystkich przebiegów składających się na daną ścieżkę dźwiękową.
Spróbuj jeszcze raz z programem z załącznika. Analizowany jest pierwszy kanał (zwróć uwagę na Index Array za Sound File Read Simple).nagrałem dźwięk struny gitarowej E4 przy pomocy zwykłego mikrofonu. Efekt wyszedł mizerny
- Załączniki
-
- mozart2.vi
- LabVIEW 2009
- (37.86 KiB) Pobrany 496 razy
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Rozpoznawanie obiektów za pomocą dźwięku
Wnioskujac z tematu, myslalem ze ktos chce zbudowac sonar. Niemile zaskoczenie.