Analiza 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.
klndora
Posty: 4
Rejestracja: 18 gru 2007 09:23
Kontakt:

Analiza dźwięku

Post autor: klndora »

Pracujemy nad projektem, który ma działać jak kamerton (program który bedzie sprawdzał częstotliwośc dźwięku z mikrofonu i porównywał ją z wzorcową). Problem pojawia się na samym początku, ponieważ nie wiemy jak sprawdzić częstotliwość zadanego dźwięku.
Próbowałyśmy zadać sygnał do funkcji Tone Measurements2 i następnie odczytac częstotliwość. Ta funkcja reaguje na sygnał, ale częstotliwości, które wyrzuca nijak mają się do tego, czego mogłybysmy się spodziewać (tysieczne częsci Hz dla głosu). Funkcja ta doskonale się sprawdza, gdy podany zostanie jej sygnał z generatora, np. sinusoida.
Prosimy o pomoc.
P.S. Nie mamy zbyt dużego doświadczenia. Pracujemy na labview 7.1.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

A sygnał z mikrofonu to co to za sygnał? Mowa? Muzyka?
Funkcja ta doskonale się sprawdza, gdy podany zostanie jej sygnał z generatora, np. sinusoida.
Na syntetycznym polu na pewno działa lepiej, ale w rzeczywistym zastosowaniu też będzie działać tylko potrzeba trochę wysiłku żeby ją do tego zmusić ;)
klndora
Posty: 4
Rejestracja: 18 gru 2007 09:23
Kontakt:

Analiza dźwięku

Post autor: klndora »

Sprawdzamy na mowie (co nie zmiania faktu, że częstotliwość powinna być rzędu setek)

A na czym miałby polegać ten wysiłek?
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

Sprawdzamy na mowie (co nie zmiania faktu, że częstotliwość powinna być rzędu setek)
A gdzie jest napisane, że tak powinno być? Nie, to byłoby za proste. Ogólnie rozumiana częstotliwość sygnału w przypadku mowy, to, nie wdając się w szczegóły, dość delikatna sprawa. Odrębna sprawa to sposób działania algorytmu wyznaczania częstotliwości sygnału, bo te mogą być różne.
Zrezygnuj(cie) z mowy na rzecz innych sygnałów testowych: grajcie na harmonijce, cymbałkach, gitarze albo ewentualnie użyjcie gotowej muzyki. Od razu będzie lepiej.
klndora
Posty: 4
Rejestracja: 18 gru 2007 09:23
Kontakt:

Analiza dźwięku

Post autor: klndora »

Próbowałyśmy z fletem, działo się to samo. Nadal nie wiemy co zrobić, żeby wszystko działało jak należy. Z Labview mamy do czynienia od 2 miesięcy.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Analiza dźwięku

Post autor: jogurt_owocowy »

Nagrajcie ten flet na wava, wrzućcie tu i coś z tym fantem zrobimy.
EDIT: Przypomniało mi się... spróbujcie wykorzystać funkcję Extract Single Tone Information (o ile ją macie, bo chyba nie we wszystkich wersjach jest).
A flet nagrajcie swoją drogą - najlepiej jakiś "Wlazł kotek..." ]
Ostatnio zmieniony 18 gru 2007 10:55 przez jogurt_owocowy, łącznie zmieniany 1 raz.
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: Analiza dźwięku

Post autor: vugie »

Po prostu przebija się takt muzyki, czy rytm mowy.
Proponuję odfiltrować przed obróbką wszystko poniżej 20 Hz.
Jak długie są badane próbki? Sensowne byłoby pocięcie próbki na nachodzące na siebie części i analizować jak w nich zmienia się dominujący ton.
Wszystko zależy od tego jaki jest cel znajdowania takiej częstotliwości, w końcu wiadomo, że w takiej próbce dźwięk o konkretnej częstotliwości trwa dosyć krótko. Domyślam się że chodzi o rozpoznawanie głosu, czy instrumentu... W tym wypadku trzeba raczej wyznaczać pewne sygnatury.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

Tak mnie jakoś natchnęło... :)
mozart-panel.gif
mozart-panel.gif (16.92 KiB) Przejrzano 15819 razy
No więc tak:
Gdzieś na necie znalazłem mp3kę z "Wlazkotkiem". "Utwór" został przefiltrowany górnoprzepustowo od 400 Hz i zapisany do wava (w archiwum).
Teraz co się dzieje w programie?
Po wczytaniu wektor próbek zamieniany jest na waveform i wpuszczany do pętli While.
2. (Zielona ramka) W pętli za pomocą Get Waveform Subset brane są kolejne ramki sygnału o długości framelength (domyślnie 0,2s).
Wielkość przesunięcia pomiędzy jedną a drugą ramką określa kontrolka frameshift (domyślnie też 0,2s). Teraz każda ramka podawana jest na wejście klocka Extract Single Tone Information, który na wyjściu zwraca częstotliwość dominującą w tej ramce i rysuje przebieg kolejno wykrytych częstotliwości z użyciem Charta.
Na tym można by było skończyć, ale gdzie tam... teraz będzie najlepsze :D
Nad górną pętlą jest tablica częstotliwości odpowiadających kolejnym nutkom do-re-mi-... W żółtej ramce jest wyszukiwana częstotliwość z tablicy o wartości najbliższej częstotliwości wykrytej poprzez odjęcie wykrytej wartości częstotliwości od tablicy i znalezienie gdzie moduł z różnicy jest minimalny.
Znaleziona częstotliwość odpowiada stosownej nutce. Jeśli bieżąca nutka jest inna niż poprzednia to wykonywane jest wnętrze Case'a, gdzie jest ona dodawana do wektora z partyturą. Żeby było jeszcze fajniej generowany jest na szybko prostokąt o wykrytej częstotliwości (ładniej brzmi niż sinus) i odgrywany jest przez kartę dźwiękową dzięki czemu można się na własne uszy przekonać jak działa analizator.
Na koniec wektor z nutami jest zamieniany na tablicę 2D żeby to ładniej wyglądało.
mozart-diagram.gif
Nutki to odpowiednio obrobione Picture Ringi, a partytura to tablica z nich zrobiona. Zerowy element Ringa to pusta pięciolinia, a pierwszy - klucz wiolinowy, nuty zaczynają się od drugiego stąd dodanie dwójki do znalezionego indeksu za bloczkiem Array Max & Min.
Pozdrawiam, miłej zabawy :)
PS. Tak naprawdę te akurat nuty (C5, D5, ...) powinny być o oktawę wyżej na pięciolinii, ale akurat takie obrazki były na Wiki ]
Załączniki
mozart.zip
(1.2 MiB) Pobrany 395 razy
Ostatnio zmieniony 18 gru 2007 22:05 przez jogurt_owocowy, łącznie zmieniany 8 razy.
klndora
Posty: 4
Rejestracja: 18 gru 2007 09:23
Kontakt:

Analiza dźwięku

Post autor: klndora »

Dzięki wielkie za takie zaangażowanie! W okresie światecznym projekt leżał odłogiem, ale dzieki Twojej pomocy wszystko ruszyło! Jeszcze raz bardzo dziękujemy! :-)
Magda i Dorota
szajo
Posty: 5
Rejestracja: 21 sty 2008 16:21
Kontakt:

Re: Analiza dźwięku

Post autor: szajo »

dopiszę tutaj... a jak zrobić coś takiego.

wgrywam do programu jakiś plik (np. wav) i moge zmienic jego tempo (szybkość) ale bez zmiany wysokości utworu (tonacji).
:-({|=
z góry dzięki
pozdrawiam
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

No to trochę bardziej złożona sprawa. Napisz trochę więcej szczegółów, co to za sygnał, którego długość chcesz zmieniać i po co?
szajo
Posty: 5
Rejestracja: 21 sty 2008 16:21
Kontakt:

Analiza dźwięku

Post autor: szajo »

np. chce zmieniać plik wav zwiększać jego szybkość lub zmniejszać pozostając nadal w tej samej tonacji.
powód - takie mam zadanie :)
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

Co to za sygnał (a nie co to za plik)?
To taka operacja na otwartym sercu i pytanie co chce się uzyskać. Możliwe, że inaczej trzeba będzie postępować z sygnałem mowy (gdzie liczy się wartość informacyjna, a ewentualne zakłócenia są dopuszczalne o ile nie zmniejszają zrozumiałości), a inaczej z muzyką (gdzie trzasków nikt nie lubi).

Ja spróbowałbym czegoś takiego. Najpierw sygnał rozciągnąć/ścisnąć nie dbając o zmianę tonacji, a potem w dziedzinie częstotliwości odpowiednio przesunąć do tonacji właściwej np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.

Pozdrawiam :]
szajo
Posty: 5
Rejestracja: 21 sty 2008 16:21
Kontakt:

Analiza dźwięku

Post autor: szajo »

nie zrozumiałam więc pytania (co to za sygnał), prosze wybaczyć w tych sprawach jestem laikiem. Nie jest dla mnie ważne czy to mowa czy muzyka i jak bardzo będą słyszalne trzaski, czy słowa będą zrozumiałe. Chodzi o samo zademonstrowanie efektu time stretching. Oczywiście zrozumiałość i jakość dźwięku po efekcie powinna być "znośna" :)
np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
może faktycznie ... a na pewno tonacja będzie taka sama?
Póki co nie wychodzi mi żadne rozwiązanie... gdzies popełniam błąd i w efekcie nie działa nic :) będę walczyć :)
pozdrawiam :)
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Analiza dźwięku

Post autor: jogurt_owocowy »

np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
może faktycznie ... a na pewno tonacja będzie taka sama?
No nie ma siły żeby było inaczej. Dwukrotne rozciągnięcie dwukrotnie zwiększy wszystkie częstotliwości w sygnale, więc trzeba je będzie ponownie dwukrotnie zmniejszyć. Takie rozwiązanie jest o tyle sympatyczne z "demonstracyjnego" punktu widzenia , że jest przejrzyste i można posłuchać sygnału pośredniego.
W Wikipedii jest opisany algorytm działający od razu w dziedzinie częstotliwości (sekcja Phase vocoder) prawdopodobnie efektywniejszy obliczeniowo no i sprawdzony.
Póki co nie wychodzi mi żadne rozwiązanie... gdzies popełniam błąd i w efekcie nie działa nic
Pochwal się swoim viajem to może coś razem wymyślimy ]
ODPOWIEDZ