Определение направления звука с помощью нескольких микрофонов

9

Прежде всего, я видел похожую тему, однако она немного отличается от того, чего я пытаюсь достичь. Я создаю робота, который будет следовать за человеком, который его называет. Моя идея состоит в том, чтобы использовать 3 или 4 микрофона, то есть в следующем порядке, чтобы определить, из какого направления был вызван робот:

введите описание изображения здесь

Где S - источник, A, B и C - микрофоны. Идея состоит в том, чтобы рассчитать фазовую корреляцию сигналов, записанных от пар AB, AC, BC и на основе этого построить вектор, который будет указывать на источник, используя своего рода триангуляцию. Системе даже не нужно работать в режиме реального времени, потому что она будет активирована голосом - сигналы со всех микрофонов будут записываться одновременно, голос будет дискретизироваться только с одного микрофона, и, если он соответствует голосовой подписи, фазовая корреляция будет вычислена из последняя доля секунды, чтобы вычислить направление. Я знаю, что это может работать не очень хорошо, например, когда робот вызывается из другой комнаты или когда есть несколько отражений.

Это просто идея, которая у меня была, но я никогда не пробовал ничего подобного, и у меня есть несколько вопросов, прежде чем я создам реальное оборудование, которое будет выполнять эту работу:

  1. Это типичный способ сделать это? (т. е. используется в телефонах для подавления шума?) Каковы другие возможные подходы?
  2. Можно ли как-то рассчитать фазовую корреляцию между 3 источниками одновременно? (т.е. чтобы ускорить вычисления)
  3. Достаточна ли частота дискретизации 22 кГц и глубина 12 бит для этой системы? Я особенно обеспокоен глубиной в битах.
  4. Следует ли размещать микрофоны в отдельных трубках для улучшения разделения?
Макс Валчак
источник
1
Вот интересная статья , возможно, вы ее видели. Похоже, что автор закончил тем, что поставил четвертый микрофон над остальными тремя, чтобы справиться с источником звука над массивом. Кроме того, это выглядит довольно похоже на ваш план (по крайней мере, на мой неподготовленный глаз).
Гость
Общим термином для части фазовой корреляции является формирование луча. Обычная система формирования луча использует линейный набор микрофонов, и я не уверен, что поле «зрения» для ваших микрофонов действительно позволит большую триангуляцию.
pscheidler
Что касается триангуляции, я думаю, вы могли бы установить два или три массива на некотором расстоянии друг от друга и найти пересечение лучей. Может решить 2-лучевой вырожденный случай с помощью «эй робота ...» (робот поворачивается лицом к вам) ... «иди сюда!»
Гость
На самом деле, это может сработать, если добавить еще один микрофон. Проверьте это , это вариант решения Гарри. Равносторонний треугольник становится прямоугольным, и добавляется еще один микрофон, чтобы сформировать другой треугольник. Из каждого треугольника мы отбрасываем луч и берем среднее значение этих двух лучей, чтобы получить точный вектор направления. Обратите внимание на два «глаза» в демоверсии. Они расположены так, что лучи, проходящие через них, будут триангулировать положение, когда источник находится прямо перед роботом или позади него. Попробуйте это с источником при любом y = 0.
Гость
1
@FilipePin, вы прочитали ответы и описание проблемы полностью? Это не может работать так, потому что вы не можете знать, как каждый пик энергии от каждого микрофона соотносится с другими микрофонами - поэтому вам нужна фазовая корреляция, итеративная ближайшая точка или какой-либо другой алгоритм регистрации (регистрация не относится к записи здесь, но для сопоставления одного сигнала с другим) для сопоставления записанных сигналов и обнаружения их взаимного сдвига в течение некоторого временного окна
Макс

Ответы:

7

Чтобы расширить ответ Мюллера,

  1. Следует ли размещать микрофоны в отдельных трубках для улучшения разделения?


  1. speed of soundsound frequency=343 m/s6 kHz=5.71 mm

редактировать

Мне показалось, что этот вопрос № 2 выглядит забавно, поэтому я решил попытаться решить его самостоятельно.

  1. Можно ли как-то рассчитать фазовую корреляцию между 3 источниками одновременно? (т.е. чтобы ускорить вычисления)

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

Итак, давайте предположим, что они находятся в этой конфигурации:

       C
      / \
     /   \
    /     \
   /       \
  /         \
 A - - - - - B

Я буду...

  • используйте номенклатуру которая является вектором, указывающим от кAB¯AB
  • называют мое происхождениеA
  • напишите все числа в мм
  • использовать 3D математику, но в конечном итоге с 2D-направлением
  • установите вертикальное положение микрофонов в их фактическую форму волны. Таким образом , эти уравнения основаны на звуковую волну , которая выглядит как это .
  • Рассчитайте перекрестное произведение этих микрофонов на основе их положения и формы волны, затем проигнорируйте информацию о высоте от этого перекрестного произведения и используйте arctan, чтобы определить фактическое направление источника.
  • позвонить выходной сигнал микрофона в положении , вызов выходе микрофона в положении , вызов выхода микрофона в положенииaAbBcC

Так что следующие вещи верны:

  • A=(0,0,a)
  • B=(4,0,b)
  • C=(2,4222=23,c)

Это дает нам:

  • AB¯=(4,0,ab)
  • AC¯=(2,23,ac)

И перекрестный продукт простоAB¯×AC¯

AB¯×AC¯=(40ab)×(223ac)=(0(ac)(ab)23(ab)24(ac)42302)=(23(ba)2a2b4c83)

Информация о Z, , просто бесполезна, нас не интересует. При изменении входных сигналов кросс-вектор будет качаться взад и вперед в направлении источника. Таким образом, половину времени он будет указывать прямо на источник (игнорируя отражения и другие паразиты). А в остальное время он будет указывать на 180 градусов от источника.83

Я говорю о который можно упростить до , а затем поверните радианы в градусы.arctan(2a2b4c23(ba))arctan(a+b+2c3(ab))

Итак, в результате вы получите следующее уравнение:

arctan(a+b+2c3(ab))180π


Но половину времени информация буквально на 100% неверна, так как ... нужно ли ... исправлять это в 100% случаев?

Хорошо, если ведет , то источник не может быть ближе к B.ab

Другими словами, просто сделайте что-то простое, как это:

source_direction=atan2(a+b+2c,\sqrt{3}*(a-b))*180/pi;
if(a>b){
   if(b>c){//a>b>c
     possible_center_direction=240; //A is closest, then B, last C
   }else if(a>c){//a>c>b
     possible_center_direction=180; //A is closest, then C last B
   }else{//c>a>b
     possible_center_direction=120; //C is closest, then A last B
   }
}else{
   if(c>b){//c>b>a
     possible_center_direction=60; //C is closest, then B, last A
   }else if(a>c){//b>a>c
     possible_center_direction=300; //B is closest, then A, last C
   }else{//b>c>a
     possible_center_direction=0; //B is closest, then C, last A
   }
}

//if the source is out of bounds, then rotate it by 180 degrees.
if((possible_center_direction+60)<source_direction){
  if(source_direction<(possible_center_direction-60)){
    source_direction=(source_direction+180)%360;
  }
}

И, возможно, вы захотите реагировать, только если источник звука исходит от определенного вертикального угла, если люди разговаривают над микрофонами => 0 изменение фазы => ничего не делать. Люди говорят горизонтально рядом с ним => некоторые изменения фазы => реагируют.

|P|=Px2+Py2=3(ab)2+(a+b+2c)2

Так что вы можете установить этот порог на что-то низкое, например, 0,1 или 0,01. Я не совсем уверен, зависит от объема и частоты и от паразитиков, проверьте сами.

Еще одна причина, по которой следует использовать уравнение абсолютного значения, - для пересечения нуля может быть небольшой момент, когда направление будет указывать в неправильном направлении. Хотя это будет только на 1% времени, если даже это. Таким образом, вы можете прикрепить LP-фильтр первого порядка к направлению.

true_true_direction = true_true_direction*0.9+source_direction*0.1;

А если вы хотите отреагировать на конкретную громкость, просто сложите 3 микрофона вместе и сравните их с каким-то значением триггера. Среднее значение микрофонов - это их сумма, деленная на 3, но вам не нужно делить на 3, если вы увеличите значение триггера в 3 раза.


У меня проблемы с маркировкой кода как C / C # / C ++ или JS или любого другого, поэтому, к сожалению, код будет черным по белому вопреки моим пожеланиям. Ну что ж, удачи на вашем предприятии. Звучит смешно.

Также есть вероятность 50/50, что направление будет 180 от источника в 99% случаев. Я мастер в совершении таких ошибок. Исправление для этого было бы просто инвертировать операторы if, когда следует добавить 180 градусов.

Гарри Свенссон
источник
Интересно, действительно ли фаза необходима, или каждый микрофон может просто искать какую-то опознаваемую особенность. Если все микрофоны слышат «эй робот», то не могут ли они выстроить начало звука «бах» и игнорировать фазу? Тогда вам не нужно размещать микрофоны так близко друг к другу ...
Гость,
1
@HarrySvensson, я понимаю, что ты имеешь в виду. Я думал, что вы могли бы использовать что-то вроде вашего подхода, за исключением того, что , и будут через миллисекунды с момента, когда первый микрофон услышит звук. Я поиграл с этим здесь , но он не выстраивается идеально, когда источник, микрофон и центр робота не находятся в одной линии. Я думаю, что это может быть "хорошо", хотя, проверьте это. Ошибка не так страшна, когда источник находится далеко от микрофонов. Я уверен, что это можно исправить, но математика ускользает от меня. б вabc
Гость
1
Не уверен, что когда-либо видел подсвечивание кода, работающее здесь на SE.DSP. Позвольте мне проверить в Зале Учителя и посмотреть, что они говорят. Похоже, кто-то спрашивал о Meta некоторое время назад, но никаких действий не предпринималось: dsp.meta.stackexchange.com/questions/133/…
Питер К.
1
Пожалуйста, зайдите и оставьте комментарий на Meta.DSP. Я добавил тег <kbd> feature-request </ kbd>, который должен хотя бы увидеть какое-то участие, но нам нужны голоса. Если на сайте Chemistry.SE она включена, мы обязательно должны это сделать! :-) dsp.meta.stackexchange.com/questions/133/…
Питер К.
1
@endolith Вы правы, я удалил эту часть. Спасибо.
Гарри Свенссон
4
  1. Да, это кажется разумным и типичным.
  2. Точно так же вы можете использовать три сигнала микрофона одновременно (не проходя «обход» через ваши три пары корреляций). Ищите «МУЗЫКА» и «ESPRIT» в приложениях направления прибытия.
  3. Очень вероятно, что это так. Вы не стремитесь к высокому качеству звука, вы стремитесь к хорошим корреляционным свойствам, и несколько бит здесь и там, вероятно, не будут создавать или разрушать систему. С другой стороны, более высокая частота дискретизации, такая как очень распространенные 44,1 кГц или 48 кГц, мгновенно удвоит угловую точность, весьма вероятно, на той же длине наблюдения.
Маркус Мюллер
источник