Главная » Хабрахабр » Far Fields mic (Mic array) — незаметный герой в умной колонке

Far Fields mic (Mic array) — незаметный герой в умной колонке

В этой статье я хочу рассказать о своем давнем увлечении — изучении и работе с far fields mic (mic array) — массивами микрофонов.

Мой скромный рассказ, надеюсь возможно, поможет вам понять, почему умная колонка- помощник, сделанный строго по туториалу работает хорошо только при условии полного отсутствия шумов. Статья будет интересна увлекающимся построением своих голосовых помощников, она ответит на некоторые вопросы людям, воспринимающим инженерное дело как искусство, а также желающим попробовать себя в роли Q (Это из Бондианы). И так плохо там, где они есть, например на кухне.

Это было в году так 87 и это была Yamaha MSX. Много лет тому назад я увлекся программированием, писать код я начал просто потому, что мудрые учителя разрешали играть только в игры, написанные самостоятельно. Все строго по мудрости: «Выбери себе работу по душе, и тебе не придётся работать ни одного дня в своей жизни» (Конфуций). На эту тему тогда же был первый стартап.

Даже хобби с кодом — ну кроме катания на роликах, для разминки мозгов и "не забуду матан" это работа с Far Fields mic (Mic array). И вот прошли годы, и я по прежнему пишу код. Зря что ли преподаватели время со мною тратили.

Что это такое и где применяется

Их мы находим и в системах видео-конференц-связи. В голосовом помощнике, который слушает вас, обычно присутствует массив микрофонов. При коллективном общении, львиная доля внимания уделяется речи, мы естественно, не постоянно при общении смотрим на говорящего, а говорить точно в микрофон или гарнитуру, это сковывает и неудобно.

К примеру в iPhone 3G/3GS он был единственный, в четвертом поколении айфонов их было два, а в пятом насчитывалось уже три микрофона. Практически каждый, уважающий клиента, производитель мобильников использует в своих творениях от 2 и более микрофонов, (да, да за этими дырочками сверху, снизу, сзади сидят микрофоны). И все это для лучшей слышимости звука. В общем то, это тоже массив микрофонов.

Но вернемся к нашим голосовым помощникам

Как же увеличить дальность слышания?

"нужны большие уши"

Простая идея: если для того, чтоб услышать того кто рядом, достаточно одного микрофона, то для того чтоб услышать издалека, нужно применить более дорогой микрофон с отражателем, похожий на ушки у лисичек-фенеков:

(Википедия)


На самом деле -это не часть фурри-сьюта, а серьезный девайс для охотников и разведчиков.

То же, только на резонаторных трубках

В среде обитания.

(Взято с https://forum.guns.ru)

Диаметр зеркала от 200мм до 1,5м

(больше такого см http://elektronicspy.narod.ru/next.html)

«Нужно больше микрофонов»

Зерг- раш только микрофонами. Или может, если поставить много дешевых микрофонов, то количество перейдет в качество и все получится?

Правда с большим количеством матана, но работает. Странно, но это работает и в реальной жизни. И расскажем мы про это в следующем разделе.

А как научиться слышать дальше без красивых рупоров?

А вот если нужно услышать что то с другого направления, то нужно сделать "финт ушами" и физически перенацелить систему в другом направлении. Одна из проблем рупорных систем — это то что хорошо слышно то, что в фокусе.

И про соотношение сигнал\шум у систем с микрофонными матрицами как то лучше по сравнению с обычным микрофоном.

Подробнее в разделе про Beamforming. В массивах микрофонов, как и в их ближайших родственниках — ФАР (фазированных антенных решетках) ничего поворачивать не нужно. Легко видеть:

Несфокусированный микрофон (левая картинка) записывает все звуки со всех направлений, а не только тот, что нужно.

На правой картинке, микрофон внимательно слушает только один источник. Откуда же большая дальность? Примерно как рупор, но на матановой тяге. Как бы сфокусировавшись, получает сигнал только избранного источника, а не кашу из возможных источников шумов, а чистый сигнал просто усилить (сделать громче), не применяя сложных техник шумоподавления.

Что же не так с шумоподавлением?

Эта неразборчивость видна русскоговорящим, которые хотят услышать от собеседника вот эти шипящие. У применения сложного шумоподавление уйма недостатков — значит, уйдет часть сигнала, вместе с частью сигнала изменится звук, и на слух это выглядит как характерное окрашивание звука шумодавом и как результат неразборчивость. Это создаёт некоторые проблемы, ведь в разговорной речи вот это все слышно, и как раз помогает оценивать состояние и отношение к вам собеседника. Ну и как дополнительно — в результате шумоподавления слушающий не слышит вообще никаких опознавательных сигналов, связывающих его с собеседником (дыхания, сопения и других шумов, сопровождающих живую речь). Ну а если вас слушает голосовой помощник — шумоподавление затрудняет распознавание как ключевой фразы, так и речи после. Отсутствие их (шумов) пока мы слышим голос вызывает неприятные ощущения и снижает уровень восприятия, понимания ну и идентификации. Правда есть лайфхак — распознавалку нужно обучать на выборке, записанной с учетом искажений от именно используемого шумопонижения.

Те, кому знакомы слова cocktail party problem могут пока сходить на кофе или коктейль, и провести натурный эксперимент, те у кого настроение почитать, продолжают дальше.

Кратко о матане, на котором оно работает:

DOA Estimation (определение направления на источник звука) и формирование луча (beamforming)

Буду краток: делается это с помощью белой, серой или темной магии (зависит от предпочитаемой темы в IDE) и матана.

Наиболее простой и легкий для понимания способ -delay & sum (DAS and FDAS) — лучеформирование на базе задержки и суммирования.

Для визуалов:

(Взято с http://www.labbookpages.co.uk/audio/beamforming/delaySum.html)

Лайфхак: Не забываем про разную длину волн и для каждой частоты рассчитываем свою разницу фаз tn

Примерная диаграмма направленности будет выглядеть как то так

Подробнее и с формулами

Очень напоминает по вкусу градиентный спуск, знаете ли. Не забывшие как раскуривать матан могут причаститься к JIO-RLS (Joint Iterative Subspace Adaptive reduced-rank least squares).

После применения определения направления на источник, и как результат этого, слышим только тот источник, что нужен, избавляемся от шумов и реверберации среды, даже той, которая слабо различима на слух (эффект Хааса). Итак резюмируем: обычными методами добится сравнимого с матричным микрофоном качества сложно.

Голосовой помощник — как это выглядит изнутри

Итак как выглядит схема обработки звука у матерого голосового помощника:

Потом звук этого луча начинаем распознавать, обычно для качественного распознавания ресурсов устройства недостаточно, и чаще всего сигнал уходит для распознавания в облако (На выбор Microsoft, Google, Amazon). Сигнал с массива микрофонов поступает на устройство, в котором мы формируем луч на источник звука (beamforming), тем самым убирая помехи.

Внимательный читатель заметит: А на картинке с описанием есть какой то квадратик Нот word, а почему не сразу распознавание, как обещали?

Зачем на схеме нарисован этот наверное лишний квадратик?

Поэтому распознавать начинаем, только когда поняли, что от нас этого таки точно хотят — и для этого сказали специальное заклинание — ок гугл, сири или алекса, ну или кортану позвали. А потому что постоянно транслировать сигнал изо всех источников шумов в интернет для прослушивания распознавания никаких ресурсов не хватит. В построении классификатора есть тоже много интересного, но сегодня не об этом. А классификатор Нот word — чаще всего нейронка и работает прямо на устройстве.

И на самом деле схема выглядит вот так:


(каракули мои)

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

Дальнейший этап- распознавание в облаке, многократно освещен в интернете, по нему множество туториалов.

Как вы можете приобщится к этому празднику матана

Обзор существующих девбордов: один из наиболее полных — по ссылке. Проще всего купить dev board.

Наиболее дружелюбные для начинающих:

https://www.seeedstudio.com/ReSpeaker-4-Mic-Array-for-Raspberry-Pi-p-2941.html

https://www.seeedstudio.com/ReSpeaker-Mic-Array-v2-0-p-3053.html

основан на XMOS XVF-3000.

Применяю сам

Сделана так как мне нравится — FPGA с открытым интерфейсом управляет микрофонами матрицы, общение с ней по SDA.

Мои подвиги по скрещиванию Android Things и Mic Array:

К этой плате (Voice) конечно есть немало примеров, но вот мне как раз удобно использовать ее под Things.

Доводы за Things:

Можно построить гибкий и мощный инструмент:

  • удобно что можно с экраном использовать как отдельный прибор
  • можно использовать как headless устройство, т.е сделать передачу по сети (создать апи для передачи на другое устройство)
  • удобная отладка
  • много библиотек в том числе для передачи по сети;
  • инструментов для анализа — много.
  • а если показалось мало, то возможно подключение Сишных библиотек

Например я использую:

  • анализ звуковых файлов,
  • HRTF,
  • Тренировка\построение классификаторов.

Да и потом если придется портировать/переписывать код в какой нибудь эмбед, то как то проще это делать с Java кода.

К сожалению, пример от авторов платы для Things был немного неработоспособен, поэтому я сделал свой демо-проект (естественно — я же ж могу).

Вкратце о чем там — всю черную магию по быстрому опросу микрофонов, FFT делаем на C++, а визуализацию, анализ, сетевое взаимодействие — на Java.

Планы на будущее развитие

Источник планов ну и заодно вдохновения: ODAS.

Вот хочу сделать то же, только на Things и без глюков.

  • Потому что ODAS немного неудобен при использовании.
  • Мне нужен нормальный инструмент для работы
  • Потому что могу и мне нравится эта тема
  • Использованные аппаратно программные средства отвечают сложности задачи.

Мои планы строятся на базе этого (моего же) репозитория.

И напоминаю

"Если вам есть что дополнить или критиковать, не стесняйтесь писать об этом в комментариях, ибо одна голова хуже двух, две хуже чем три, а n-1 хуже чем n" nikitasius


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] Учебный курс по React, часть 1: обзор курса, причины популярности React, ReactDOM и JSX

Представляем вашему вниманию первые 5 занятий учебного курса по React для начинающих. Оригинал курса на английском, состоящий из 48 уроков, опубликован на платформе Scrimba.com. Возможности этой платформы позволяют, слушая ведущего, иногда ставить воспроизведение на паузу и самостоятельно, в том же ...

[Перевод] Разбираем лямбда-выражения в Java

Мы открыли его для себя совсем недавно, но уже по достоинству оценили его возможности. От переводчика: LambdaMetafactory, пожалуй, один из самых недооценённых механизмов Java 8. 0 фреймворка CUBA улучшена производительность за счет отказа от рефлективных вызовов в пользу генерации лямбда ...