Python conf in Kharkiv, Nov 16 with Intel, Elastic engineering leaders. Prices go up 21.10

Far Fields mic (Mic array), или Как научить вашего голосового помощника слышать лучше

Plan: To bother about the best method of accomplishing an accidental result. [Ambrose Bierce, The Enlarged Devil’s Dictionary.].

В этой статье я хочу рассказать о своем давнем увлечении — изучении и работе с far fields mic (mic array) — массивами микрофонов. Статья будет интересна увлекающимся построением своих голосовых помощников, она ответит на некоторые вопросы людям, воспринимающим инженерное дело как искусство, а также желающим попробовать себя в роли Q (Это из Бондианы).

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

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

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

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

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

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

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

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

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

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

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

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

Больше такого см elektronicspy.narod.ru/next.html

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

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

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

Соотношение сигнал\шум у систем с микрофонными матрицами как то лучше. Легко видеть:

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

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

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

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

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

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

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

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

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

Рисунки взяты www.labbookpages.co.uk/...​beamforming/delaySum.html

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

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

Подробнее и с формулами на www.labbookpages.co.uk/...​beamforming/delaySum.html

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

Очень напоминает по вкусу градиентный спуск, знаете ли.

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

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

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

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

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

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

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

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

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

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

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

Проще всего купить dev board. Обзор существующих девбордов: один из наиболее полных — developer.amazon.com/...​xa-voice-service/dev-kits

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

www.seeedstudio.com/...​-Raspberry-Pi-p-2941.html

www.seeedstudio.com/...​ic-Array-v2-0-p-3053.html

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

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

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

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

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

Доводы за Things:

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

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

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

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

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

github.com/...​Voice-with-Android-Things

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

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

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

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

  • Потому что ODAS немного неудобен при использовании.
  • Мне нужен нормальный инструмент для работы
  • Потому что могу и мне нравится эта тема
  • Использованные аппаратно программные средства отвечают сложности задачи.
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Да, кто будет подобное делать. Не забывайте их рассчитывать, слишком плотное расположение микрофонов даст вам возможность слышать летучих мышей, но никак не поможет с речью. Выше 5kHz речи нет. Обычно достаточно не выше 3.2-3.6 kHz.

Отличная тематика, спасибо. Возможно ещё такое развитие сюжета:

hackaday.com/...​-eyes-to-real-time-audio

Это уже не просто микрофонная решётка с регулируемой диаграммой направленности, а самодельная акустическая камера на 1024 «пикселя» из дешевых MEMS—микрофонов и FPGA. Вот профессиональный вариант исполнения той же идеи: www.sorama.eu/cam1k

Впрочем, для голосовых помощников подобное излишне. Это уже ниша технической диагностики и продвинутых охранных систем.

Возможно, конечно. Вообще то у всего вот этого есть прямо таки необходимость в приборах для поверки и калибровки. Вот потому то и ОДАС принят текущей целью.

Не совсем понятно, на кой хрен здесь матан, если как ты правильно выразился — можно сэкономить на качестве, насобачив количество. Благо амплитуду увеличить задача не ахти какая.

Как я понимаю: есть массив микрофонов. Если применить совсем чуть-чуть матана, то хватит двух. И по скорости достижения достаточно громкого сигнала можно определить направление.

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

Решение, если это для носимых устройств, может быть весьма и весьма примитивно: обычный пластиковый резонатор. Но в этом случае, я считаю, есть место рынку даже не отдельного гаджета к устройству, а отдельной модели устройства с очень качественным звуком. Это целый рынок, который пока ещё толком не открывали.

Чёрной магии по опросу микрофонов не нужно. Нужно посмотреть в сторону биологии. Там всё устроено как раз таки по принципу нескольких резонаторов. Поставив между микрофонами преграду, не пропускающую «высоких» частот 2кГц и выше, но достаточно легко проницаемую для для 600Гц и ниже, ты можешь с лёгкостью определить направление даже на двух микриках. Сигнал низкой частоты позволяет в принципе определить наличие сигнала, и когда его нет — воспринимать вообще ничего не нужно. Но придётся постоянно мониторить наличие низкочастотного шума, чтобы повышать порог. Говорящий неосознанно занимается тем же самым, потому когда ему важен микрофон — амплитуду тоже поднимет.

Белой магии, а именно, чтобы в едущей маршрутке было слышно как в студии звукозаписи — увы, не существует.

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

Правильнее — сосредоточиться на одной проблеме, и найти такую нишу, где можно выпустить продукт, к которому крупные игроки поначалу отнесутся скептически. Да и проиграть там будет недорого стоить.

Голосовой помощник — не лучшее применение, как по мне. Слишком уж неочевидна выгода для покупателя.

PS. Всё-таки, на 2 микрофонах мне кажется куда интереснее работать. Не так затратно по ресурсам, можно наплевать на производительность железа, и потом выпустить базовый дешёвый продукт именно на 2 микрах. Чем хоть как-то выделиться, и уже имея репутацию на простой цацке — сделать сложную — не сильно дороже в производстве, но сильно дороже на рынке. И совсем уж дорого — военные решения.

PPS. И надо быть готовыми, что это захочет купить (или украсть) предполагаемый противник. И разумеется, применить. Так что самый вкусный матан лучше оставить при себе, чтобы работал только в железе, откуда достать его будет затруднительно. А это значит, не выводить на рынок самый сильный продукт вообще.

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

Не совсем понятно, на кой хрен здесь матан, если как ты правильно выразился — можно сэкономить на качестве, насобачив количество. Благо амплитуду увеличить задача не ахти какая.

Нет. Это та же антенная решетка и диаграмма направленности сильно зависит от частот. Микрофонную решетку обычно делают на 1000-1500 Гц.
Простейшая 4 микрофона по квадрату со стороной или диагональю 11 см (когда-то считал, но уже забыл точно). Если больше микрофонов, то чуть сложнее, ну и можно шире диапазон частотный сделать.
Как считать антенную решетку? Есть куча учебников и на русском и куча прог, что это уже считают за тебя.
Ну и микрофонные решетки давно используют там, где это нужно (в частности для разделения голосов говорящих или для получения сигнала там, где один микрофон не справиться).
Ну и можно написать математику и прогу, что будет работать по любому заданному расположению микрофонов, но тут уже без матана не обойтись.

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

Так что у ТС ничего нового, а все давно известное старое. Но он таки просто сделал — молодец. Большинство дальше разговоров не идут, как и я .

В том-то и дело, что в идеальном случае пашет математика. А вот в реале имеются препятствия, не говоря уж о габаритных ограничения, и стоимости их обхода. Потому количество в качество перевести можно, но всё упрётся в габариты.

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

А вот есть ли сейчас эпитаксиальные микрофоны, которые позволяют дёшево нанести на плату примитивные датчики звука, и при этом не боятся температуры при классической пайке в печи — даже не знаю. Знаю что такие разработки велись. Хотя в этом случае их бы клеили плёночкой прямо на дисплей телефона.

Ага, длина волны у речи большая. Отсюда и размеры. Посему больше 4 по углам квадрата и уже размерчики не маленькие.
А если ты их наклеишь рядом, то получишь антенную решетку для мышей летучих или подобного.

Так что для приема речевого сигнала с большого расстояния чуть другое юзают. Длинную трубку сложную и чувствительный микрофон на ее конце. Устройства похожи на ружья.

А ещё — прекрасная отражаемость этой волны в упругой среде.

А вот есть ли сейчас эпитаксиальные микрофоны, которые позволяют дёшево нанести на плату примитивные датчики звука, и при этом не боятся температуры при классической пайке в печи

Эпитаксиальных нет, зато есть MEMS mic, формфактор— небольшой микросхемы, пайка волной, как то так

Ну и можно написать математику и прогу, что будет работать по любому заданному расположению микрофонов, но тут уже без матана не обойтись.

Вообще то самое вкусное тут в DOA estimation. И проблема качество/выч ресурсы ну и матан да.

Странно что на форуме а не в ленте, очень интересно и познавательно!

Значит проблема, поднятая в ней, не прошла кастинг на актуальность

Подписаться на комментарии