Rozpoznawanie obiektów za pomocą dźwięku

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Darrell » 25 maja 2013 14:26

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
blad.png
Błąd wyskakujący na końcu wraz z "żarówką" od kiedy zaczyna występować. A po lewej przebieg jaki pokazuje chart.
Ostatnio zmieniony 26 maja 2013 17:41 przez Darrell, łącznie zmieniany 1 raz.

milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Re: Rozpoznawanie obiektu za pomocą dźwięku

Post autor: milten » 25 maja 2013 19:29

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ł.
Ostatnio zmieniony 25 maja 2013 19:34 przez milten, łącznie zmieniany 1 raz.
Obrazek

Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Rozpoznawanie obiektu za pomocą dźwięku

Post autor: Darrell » 26 maja 2013 14:58

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ąć?

milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: milten » 26 maja 2013 18:35

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.
Obrazek

Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Góras » 26 maja 2013 22:10

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 ;)

Awatar użytkownika
jogurt_owocowy
Posty: 1316
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Been thanked: 1 time
Kontakt:

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: jogurt_owocowy » 26 maja 2013 23:52

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.

Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Darrell » 27 maja 2013 03:09

Gó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 ;)
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 Read :-?

@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ć?

Awatar użytkownika
jogurt_owocowy
Posty: 1316
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Been thanked: 1 time
Kontakt:

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: jogurt_owocowy » 27 maja 2013 13:57

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ć?
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.
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:

Obrazek
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!

Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Darrell » 31 maja 2013 18:47

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...
Załączniki
cokolwiek.png
cokolwiek.png (9.48 KiB) Przejrzano 9102 razy

Awatar użytkownika
jogurt_owocowy
Posty: 1316
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Been thanked: 1 time
Kontakt:

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: jogurt_owocowy » 31 maja 2013 23:16

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ć.

Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Darrell » 01 cze 2013 14:36

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?
Załączniki
Odczyt dzwieku wave.vi
(13.62 KiB) Pobrany 198 razy

Awatar użytkownika
jogurt_owocowy
Posty: 1316
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Been thanked: 1 time
Kontakt:

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: jogurt_owocowy » 01 cze 2013 15:52

jogurt_owocowy pisze:Wrzuć plik z nagraniem

Darrell
Posty: 19
Rejestracja: 25 maja 2013 13:56
Wersja środowiska: LabVIEW 2010

Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Darrell » 01 cze 2013 16:10

Przepraszam, źle przeczytałem.
Załączniki
dzwiek_e.rar
(254.58 KiB) Pobrany 200 razy

Awatar użytkownika
jogurt_owocowy
Posty: 1316
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Been thanked: 1 time
Kontakt:

Re: Rozpoznawanie obiektów za pomocą dźwięku

Post autor: jogurt_owocowy » 01 cze 2013 17:32

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ą.
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ą.
nagrałem dźwięk struny gitarowej E4 przy pomocy zwykłego mikrofonu. Efekt wyszedł mizerny
Spróbuj jeszcze raz z programem z załącznika. Analizowany jest pierwszy kanał (zwróć uwagę na Index Array za Sound File Read Simple).
Załączniki
mozart2.vi
LabVIEW 2009
(37.86 KiB) Pobrany 214 razy

Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Rozpoznawanie obiektów za pomocą dźwięku

Post autor: Jamal79 » 03 cze 2013 08:00

Wnioskujac z tematu, myslalem ze ktos chce zbudowac sonar. Niemile zaskoczenie.

ODPOWIEDZ