Przede wszystkim widziałem podobny wątek, jednak różni się on nieco od tego, co próbuję osiągnąć. Buduję robota, który będzie podążał za osobą, która go nazywa. Moim pomysłem jest użycie 3 lub 4 mikrofonów - tj. W następującym układzie, aby określić, z którego kierunku został wywołany robot:
Gdzie S jest źródłem, A, B i C są mikrofonami. Pomysł polega na obliczeniu korelacji fazowej sygnałów zarejestrowanych z par AB, AC, BC i na podstawie tej konstrukcji wektor, który będzie wskazywał na źródło przy użyciu pewnego rodzaju triangulacji. System nie musi nawet działać w czasie rzeczywistym, ponieważ zostanie aktywowany głosem - sygnały ze wszystkich mikrofonów będą nagrywane jednocześnie, głos będzie próbkowany tylko z jednego mikrofonu, a jeśli pasuje do sygnatury głosowej, korelacja faz zostanie obliczona na podstawie ostatnia część sekundy w celu obliczenia kierunku. Zdaję sobie sprawę, że może to nie działać zbyt dobrze, tj. Gdy robot jest wywoływany z innego pokoju lub gdy występuje wiele odbić.
To tylko mój pomysł, ale nigdy nie próbowałem czegoś takiego i mam kilka pytań, zanim zbuduję rzeczywisty sprzęt, który wykona zadanie:
- Czy to typowy sposób na zrobienie tego? (tj. używane w telefonach do eliminacji hałasu?) Jakie są inne możliwe podejścia?
- Czy można jakoś obliczyć korelację fazową między 3 źródłami? (tj. w celu przyspieszenia obliczeń)
- Czy częstotliwość próbkowania 22 kHz i głębokość 12 bitów są wystarczające dla tego systemu? Szczególnie martwi mnie głębokość bitów.
- Czy mikrofony powinny być umieszczone w osobnych rurkach, aby poprawić separację?
źródło
Odpowiedzi:
Aby rozszerzyć odpowiedź Müllera,
Najlepszym rozwiązaniem byłoby skierowanie ich twarzą do góry, w ten sposób wszyscy otrzymają podobny dźwięk, a jedyne, co jest w nich wyjątkowe, to ich fizyczne rozmieszczenie, które będzie miało bezpośredni wpływ na fazę. Fala sinusoidalna 6 kHz ma długość fali wynoszącą
Edytować
Czułem, że to pytanie nr 2 wygląda fajnie, więc postanowiłem spróbować rozwiązać je samodzielnie.
Jeśli znasz algebrę liniową, możesz sobie wyobrazić, że umieściłeś mikrofony w trójkącie, w którym każdy mikrofon znajduje się 4 mm od siebie, co daje kąty wewnętrzne .60°
Załóżmy więc, że są w tej konfiguracji:
Będę...
Tak więc następujące rzeczy są prawdziwe:
To daje nam:
A produktem krzyżowym jest po prostuAB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯
Informacja o Z, to tylko śmieci, które nas nie interesują. Gdy zmieniają się sygnały wejściowe, wektor krzyżowy będzie się wahał do przodu i do tyłu w kierunku źródła. Połowa czasu będzie więc wskazywała prosto na źródło (ignorując odbicia i inne pasożyty). A przez drugą połowę czasu będzie wskazywać 180 stopni od źródła.83–√
Mówię o który można uprościć do , a następnie obróć radiany w stopniach.arctan(−2a−2b−4c23√(b−a)) arctan(a+b+2c3√(a−b))
Tak więc otrzymujesz następujące równanie:
Ale w połowie przypadków informacja jest dosłownie w 100% błędna, więc jak ... należy to zrobić w 100%?
Cóż, jeśli prowadzi , to źródło nie może być bliżej B.a b
Innymi słowy, po prostu zrób coś takiego:
Być może chcesz zareagować tylko wtedy, gdy źródło dźwięku wychodzi z określonego kąta pionowego, jeśli ludzie rozmawiają nad mikrofonem => zmiana fazy 0 => nic nie rób. Ludzie rozmawiają obok niego poziomo => zmiana fazy => reakcja.
Możesz więc ustawić ten próg na coś niskiego, na przykład 0,1 lub 0,01. Nie jestem do końca pewien, zależy od głośności i częstotliwości oraz pasożytów, sprawdź to sam.
Innym powodem, dla którego należy zastosować równanie wartości bezwzględnej, jest przejście przez zero, może wystąpić moment, w którym kierunek wskaże niewłaściwy kierunek. Choć będzie to tylko 1% czasu, jeśli nawet to. Możesz więc dołączyć filtr LP pierwszego rzędu do kierunku.
A jeśli chcesz zareagować na określoną głośność, po prostu zsumuj 3 mikrofony razem i porównaj to z pewną wartością wyzwalania. Średnia wartość mikrofonów byłaby ich sumą podzieloną przez 3, ale nie musisz dzielić przez 3, jeśli zwiększysz wartość wyzwalania o współczynnik 3.
Mam problemy z oznaczeniem kodu jako C / C # / C ++ lub JS lub innego, więc niestety kod będzie czarno-biały, wbrew moim życzeniom. No cóż, powodzenia w twoim przedsięwzięciu. Brzmi zabawnie.
Istnieje również szansa 50/50, że kierunek będzie oddalony o 180% od źródła w 99% przypadków. Jestem mistrzem w popełnianiu takich błędów. Korekcją tego byłoby po prostu odwrócenie instrukcji if, kiedy należy dodać 180 stopni.
źródło
źródło