roboforum.ru

Технический форум по робототехнике.

направление источника звука

Re: направление источника звука

boez » 12 окт 2011, 15:37

Вообще формула простая, я думаю автор до нее дошел, осталось только правильно ловить фронты звука.

alfa = arccos((t2-t1)*Vs/L), где t2-t1 - разность времени, Vs - скорость звука, L - база (расстояние между микрофонами).

На самом деле можно сразу вычислить базу в микросекундах: T = 10^6*L/Vs. Vs=340 м/с, 1 см = 29.4 мкс.

Тогда alfa = arccos((t2-t1)/T).

Если источник звука близко - будет небольшое отклонение от этой формулы, в связи с тем, что фронт звуковой волны - окружность, а не прямая, но для расстояний бОльших 3-4 баз этим можно пренебречь.

"У каждого говорящего базовая частота основного тона индивидуальна и обусловлена особенностями строения гортани. В среднем для мужского голоса она составляет от 80 до 210 Гц, для женского — от 150 до 320 Гц" (с) вики. Буква А - это не И, будем считать что не выше 200 даже у детей. 200 гц = 5 мс, 1 мс = 340 мм, т.е. 5 мс это полтора метра, а то и больше. Значит, робот вполне может работать с отдельными фронтами гласного звука, наловить скажем несколько десятков разностей фронтов, усреднить, выкинуть самые "непохожие" чтобы не портили статистику и уже результат подставить в формулу выше. Естественно arccos считать не библиотечной функцией, а по таблице приближенно.

Кстати, сразу видно что АЦП аврки тут не сильно подходит, потому как у него одно преобразование пары значений - 130 мкс, да еще и не одновременно, а у нас разброс фронтов при расстоянии 10 см около 300 мкс максимум, получаем меньше 3 градаций возможных. Но! АЦП аврки можно разогнать, тут бродил пример вообще с видеосигналом. Но я считаю, что обычных ног порта должно хватать, главное правильно намерять и хорошо усреднить.

Re: направление источника звука

shadowjack » 12 окт 2011, 15:39

С компаратором - не ахти получится. Нужно цифровать оба канала и, варьируя задержку между ними, находить максимум корреляции. Только, боюсь, микроконтроллер слабоват окажется - на ПЛИСе можно попробовать. Или на PC для отработки алгоритма.

Re: направление источника звука

chinga » 12 окт 2011, 15:43

alfa = arccos((t2-t1)*Vs/L), где t2-t1 - разность времени, Vs - скорость звука, L - база (расстояние между микрофонами).

формула та уже есть в коде на 1 странице) но еще туда не дошли) проблема в том, время правильно не считывает) показывает то 10, и на следующий хлопок может показать выше 1000.
если время правильно находит, то дальше чуть легче чисто вычислений.

Re: направление источника звука

Vovan » 12 окт 2011, 15:50

2chinga:
chinga писал(а):"))" и ")" ничего не означает
этого я не знал :oops: , позор мне...
chinga писал(а):человек, не может повернуть голову точно туда откуда издастся звук.
это точно!
chinga писал(а):примерно может определить.
неа, только предположить...
chinga писал(а):и еще, человек может определить звук самого хлопка и его отраженные сигналы, и мк все сигналы.
это я не понял :(
chinga писал(а):но теперь какой способ можно применить?

ИМХО усреднение - нужный способ. А варианты либо усреднять механически (см.выше что я писАл), либо математически, как описАл boez :)
2boez:
boez писал(а):Но я считаю, что обычных ног порта должно хватать, главное правильно намерять и хорошо усреднить.
+1. АЦП тут явно не в струю...

Re: направление источника звука

chinga » 12 окт 2011, 15:55

Нужно цифровать оба канала и, варьируя задержку между ними, находить максимум корреляции.

а как одновременно цифровать два канала?
как я делал, берет данные первая ножка, а в это время данные со второй ножки не будут другими? то есть когда звук издаться, и первый примет точные данные, а второй, боюсь, исчезнет пока первый будет обрабатываться. или не так?
и еще, человек может определить звук самого хлопка и его отраженные сигналы, и мк все сигналы.

мы же слышим эхо? а микрофон принимает все) даже ветер.
либо математически, как описАл boez :)

это я и делаю, но дело не доходит до градусов. время не можем точно определить.

Re: направление источника звука

Vovan » 12 окт 2011, 17:25

дык звук же уже цифрой идет с компаратора, или как?
Как определить время, ужЕ ведь описано неоднократно, ну а градусы - величина зависимая от ентого времени.
Вот forum68/topic7990.html тут еще обсуждали, помоему подробно описано...

Re: направление источника звука

chinga » 12 окт 2011, 18:55

дык звук же уже цифрой идет с компаратора, или как?

ну да) с компаратор
проблема в этом, время не могу точно находить.

Добавлено спустя 12 минут 3 секунды:
завтра попробую расстояние между микрофонами уменьшить.

Re: направление источника звука

Michael_K » 12 окт 2011, 19:51

HarryStar писал(а):У вас какой-то странный алгоритм судя по коду. Или по крайней мере очень непрозрачно написан.

Плюс стопятьсот.
Как пишете, так и работает.
Не нужно НИЧЕГО предполагать.

Re: направление источника звука

Radist » 12 окт 2011, 20:03

Пора отделить мух от котлет. С математикой вроде разобрались, осталась проблема измерения времени. Попробую кратко резюмировать проблему топикстартера. Уши - это не просто микрофоны, а датчики, выдающие сигнал 0/1 (ничего не слышу/ой, что-то услышал). Насколько я понял после микрофона стоит полосовой фильтр (или ФНЧ), затем стоит компаратор. Фильтром отстраиваемся от ветра и прочего ВЧ шума, компаратором отстраиваемся от переотражений и эха от стен. Далее задача тривиальная - читать две ноги порта на предмет их изменения, включить таймер при изменении, снова читать две ноги порта до нужного изменения, выключить таймер. Никакого АЦП нет и не надо!!! Топикстартер говорит, что время каждый раз разное и грешит на свою программу. Я бы посоветовал подключить оба выхода компараторов к двухканальному осциллографу и понаблюдать как они себя ведут. Если ведут себя как положено - косяк в программе, если фронты скачут как зайцы - ковырять схемотехнику датчиков. Все это еще на первой странице написал Vovan.

Re: направление источника звука

chinga » 12 окт 2011, 21:09

У вас какой-то странный алгоритм судя по коду. Или по крайней мере очень непрозрачно написан

что непонятного там?

Плюс стопятьсот.
Как пишете, так и работает.
Не нужно НИЧЕГО предполагать.

это вы к чему?)

Я бы посоветовал подключить оба выхода компараторов к двухканальному осциллографу и понаблюдать как они себя ведут. Если ведут себя как положено - косяк в программе, если фронты скачут как зайцы - ковырять схемотехнику датчиков.

постараюсь завтра проверить.

Re: направление источника звука

Michael_K » 12 окт 2011, 21:16

Это я к тому, что с логикой у вас в программе туго.
Вы _предполагаете_, что все происходит так, как вам хочется.

Re: направление источника звука

boez » 12 окт 2011, 21:36

Вот как бы делал я:

Код: Выделить всёРазвернуть
unsigned char oldport, newport, dir;
unsigned short cnt;


while((oldport=PINA & 3) != 0x00);

while ((newport=PINA) == oldport) cnt++;

dir=0;
if (newport == 0x03) {
    if (oldport == 0x01) dir=1;
    if (oldport == 0x02) dir=2;
}

На выходе получаем dir=0 - неправильно измерено, dir=1 - условно слева, dir=2 - условно справа, count - временная разность |t1-t2| в условных единицах.

А датчики надо изучать - что они выдают, есть там выпрямитель или нет. Т.е. условно на одно полусекундное "А" они дают 1 импульс или 50?

Re: направление источника звука

Michael_K » 12 окт 2011, 21:55

boez писал(а):Вот как бы делал я:

Написана, имхо, шляпа. Очевидно, oldport всегда равен нулю?

Нету там выпрямителя никакого. Тупо компаратор.
Хорошо, если только 50 :)

Re: направление источника звука

chinga » 12 окт 2011, 22:36

что все происходит так, как вам хочется

а как еще надо делать?
Т.е. условно на одно полусекундное "А" они дают 1 импульс или 50?

просто один скачек и все кажется.

Re: направление источника звука

Michael_K » 12 окт 2011, 22:51

chinga писал(а):
что все происходит так, как вам хочется

а как еще надо делать?

Вы пропустили подчеркнутое слово, я для кого подчеркивал?
Уже третий раз говорю - не предполагать!


Rambler\'s Top100 Mail.ru counter