Прежде всего, я видел похожую тему, однако она немного отличается от того, чего я пытаюсь достичь. Я создаю робота, который будет следовать за человеком, который его называет. Моя идея состоит в том, чтобы использовать 3 или 4 микрофона, то есть в следующем порядке, чтобы определить, из какого направления был вызван робот:
Где S - источник, A, B и C - микрофоны. Идея состоит в том, чтобы рассчитать фазовую корреляцию сигналов, записанных от пар AB, AC, BC и на основе этого построить вектор, который будет указывать на источник, используя своего рода триангуляцию. Системе даже не нужно работать в режиме реального времени, потому что она будет активирована голосом - сигналы со всех микрофонов будут записываться одновременно, голос будет дискретизироваться только с одного микрофона, и, если он соответствует голосовой подписи, фазовая корреляция будет вычислена из последняя доля секунды, чтобы вычислить направление. Я знаю, что это может работать не очень хорошо, например, когда робот вызывается из другой комнаты или когда есть несколько отражений.
Это просто идея, которая у меня была, но я никогда не пробовал ничего подобного, и у меня есть несколько вопросов, прежде чем я создам реальное оборудование, которое будет выполнять эту работу:
- Это типичный способ сделать это? (т. е. используется в телефонах для подавления шума?) Каковы другие возможные подходы?
- Можно ли как-то рассчитать фазовую корреляцию между 3 источниками одновременно? (т.е. чтобы ускорить вычисления)
- Достаточна ли частота дискретизации 22 кГц и глубина 12 бит для этой системы? Я особенно обеспокоен глубиной в битах.
- Следует ли размещать микрофоны в отдельных трубках для улучшения разделения?
источник
Ответы:
Чтобы расширить ответ Мюллера,
редактировать
Мне показалось, что этот вопрос № 2 выглядит забавно, поэтому я решил попытаться решить его самостоятельно.
Если вы знаете свою линейную алгебру, то можете представить, что вы поместили микрофоны в треугольник, где каждый микрофон находится на расстоянии 4 мм друг от друга, а внутренние углы составляют .60°
Итак, давайте предположим, что они находятся в этой конфигурации:
Я буду...
Так что следующие вещи верны:
Это дает нам:
И перекрестный продукт простоAB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯
Информация о Z, , просто бесполезна, нас не интересует. При изменении входных сигналов кросс-вектор будет качаться взад и вперед в направлении источника. Таким образом, половину времени он будет указывать прямо на источник (игнорируя отражения и другие паразиты). А в остальное время он будет указывать на 180 градусов от источника.83–√
Я говорю о который можно упростить до , а затем поверните радианы в градусы.arctan(−2a−2b−4c23√(b−a)) arctan(a+b+2c3√(a−b))
Итак, в результате вы получите следующее уравнение:
Но половину времени информация буквально на 100% неверна, так как ... нужно ли ... исправлять это в 100% случаев?
Хорошо, если ведет , то источник не может быть ближе к B.a b
Другими словами, просто сделайте что-то простое, как это:
И, возможно, вы захотите реагировать, только если источник звука исходит от определенного вертикального угла, если люди разговаривают над микрофонами => 0 изменение фазы => ничего не делать. Люди говорят горизонтально рядом с ним => некоторые изменения фазы => реагируют.
Так что вы можете установить этот порог на что-то низкое, например, 0,1 или 0,01. Я не совсем уверен, зависит от объема и частоты и от паразитиков, проверьте сами.
Еще одна причина, по которой следует использовать уравнение абсолютного значения, - для пересечения нуля может быть небольшой момент, когда направление будет указывать в неправильном направлении. Хотя это будет только на 1% времени, если даже это. Таким образом, вы можете прикрепить LP-фильтр первого порядка к направлению.
А если вы хотите отреагировать на конкретную громкость, просто сложите 3 микрофона вместе и сравните их с каким-то значением триггера. Среднее значение микрофонов - это их сумма, деленная на 3, но вам не нужно делить на 3, если вы увеличите значение триггера в 3 раза.
У меня проблемы с маркировкой кода как C / C # / C ++ или JS или любого другого, поэтому, к сожалению, код будет черным по белому вопреки моим пожеланиям. Ну что ж, удачи на вашем предприятии. Звучит смешно.
Также есть вероятность 50/50, что направление будет 180 от источника в 99% случаев. Я мастер в совершении таких ошибок. Исправление для этого было бы просто инвертировать операторы if, когда следует добавить 180 градусов.
источник
источник