- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(Википедия)

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

Far Fields mic (Mic array) — незаметный герой в умной колонке - 4На самом деле -это не часть фурри-сьюта, а серьезный девайс для охотников и разведчиков.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Применяю сам [9]

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

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

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

Доводы за Things:

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

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

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

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

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

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

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

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

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

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

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

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

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

И напоминаю

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

Автор: Nick_Maverick

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/hobbi/300313

Ссылки в тексте:

[1] Это из Бондианы: https://ru.wikipedia.org/wiki/Q_(%D0%B1%D0%BE%D0%BD%D0%B4%D0%B8%D0%B0%D0%BD%D0%B0)

[2] https://forum.guns.ru: https://forum.guns.ru/forum_light_message/14/698118.html

[3] http://elektronicspy.narod.ru/next.html: http://elektronicspy.narod.ru/next.html

[4] Зерг- раш: http://lurkmore.to/Zerg_rush

[5] http://www.labbookpages.co.uk/audio/beamforming/delaySum.html: http://www.labbookpages.co.uk/audio/beamforming/delaySum.html

[6] по ссылке: https://developer.amazon.com/alexa-voice-service/dev-kits

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

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

[9] Применяю сам: https://www.matrix.one/products/voice

[10] свой демо-проект: https://github.com/NickZt/MATRIX-Voice-with-Android-Things

[11] ODAS: https://github.com/introlab/odas

[12] nikitasius: https://habr.com/users/nikitasius/

[13] Источник: https://habr.com/post/431144/?utm_campaign=431144