Jump to content

    
Sign in to follow this  
xvr

Нужен алгоритм подавления локального источника звука

Recommended Posts

Господа, есть такая задача:

На расстоянии 10 см друг от друга установлены динамик и микрофон (диаграммы направленности обоих перпендикулярны линии, их соединяющей и направленны в одну сторону)

Требуется в сигнале с микрофона подавить сигнал динамика (по сути это устройство громкой связи). Сигнал на динамике известен.

Пытался что нибудь по этому поводу найти в Интернете, но не могу сформулировать запрос - это не local feedback cancellation, ни noice cancellation. Не подскажете, как это хоть называется? А если сразу в алгоритм ткнёте, совсем хорошо будет.

Возможно Адаптивный фильтр поможет?

Ещё момент - всё это крутится будет на на DSP, а на ESP32, так что алгоритм желательно попроще.

И ещё момент - можно поставить ещё один микрофон (между динамиком и исходным микрофоном), если это кардинально поможет выделить полезный сигнал.

 

Share this post


Link to post
Share on other sites
1 час назад, xvr сказал:

но не могу сформулировать запрос

Может вести поиск в направлении дуплексной связи? В громкоговорящей связи эти проблемы решают уже лет сто...

https://www.multicom.ru/ats-likbez/tipy-svyazi/

Share this post


Link to post
Share on other sites
1 hour ago, xvr said:

На расстоянии 10 см друг от друга установлены динамик и микрофон (диаграммы направленности обоих перпендикулярны линии, их соединяющей и направленны в одну сторону)

Требуется в сигнале с микрофона подавить сигнал динамика (по сути это устройство громкой связи). Сигнал на динамике известен.

Ещё момент - всё это крутится будет на на DSP, а на ESP32, так что алгоритм желательно попроще.

И ещё момент - можно поставить ещё один микрофон (между динамиком и исходным микрофоном), если это кардинально поможет выделить полезный сигнал.

Поставить 2 микрофона у рта говорящего. Один ближе на 1см ко рту, другой дальше от рта.

Передавать разницу между этими микрофонами, вычитать можно аналогово.

 

Количество динамиков вокруг и их сигнал - без разницы.

Share this post


Link to post
Share on other sites
1 час назад, _4afc_ сказал:

Поставить 2 микрофона у рта говорящего

Увы, мне кажется - всё не так просто... Чем акустический сигнал изо рта отличается от акустического сигнала из динамика? Фактически - ничем... Как микрофоны должны эти сигналы различать?

------------

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

Share this post


Link to post
Share on other sites
23 minutes ago, варп said:

Увы, мне кажется - всё не так просто... Чем акустический сигнал изо рта отличается от акустического сигнала из динамика? Фактически - ничем... Как микрофоны должны эти сигналы различать?

 

Уровень акустического сигнала в ближней зоне затухает квадратично от расстояния, в дальней линейно.

Зона определяется длиной волны.

 

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

Share this post


Link to post
Share on other sites
2 hours ago, варп said:

В громкоговорящей связи эти проблемы решают уже лет сто...

https://www.multicom.ru/ats-likbez/tipy-svyazi/

Это да. Увы на сайте одна реклама :( (Не считая ликбеза по видам связи, что мало чем поможет). Но поищу ...

 

2 hours ago, _4afc_ said:

Один ближе на 1см ко рту, другой дальше от рта.

Такая геометрия увы невозможна - прибор (с динамиком и микрофоном) плоский и расположен параллельно говорящему, вынести микрофон некуда

1 hour ago, x893 said:

echo cancellation

Тоже не совсем то, тут эха нет. Тут независимые каналы. Но за наводку спасибо, поищу что нибудь в этом направлении тоже

31 minutes ago, варп said:

если в сигнал приходящий от абонента (сигнал динамика) подмешать какие-нибудь метки

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

 

 

Можно попробовать сделать компенсацию. Сигнал для динамика задержать, пропустить через фильтр (который будет обратным к АЧХ динамика + микрофона) и вычесть из микрофонного. Для настройки фильтра и задержки сделать специальный режим калибровки (это можно):

  1. Откалибровать задержку - динамик воспроизводит пачки импульсов, микрофон принимает. Вычисляем задержку.
  2. Настраиваем фильтр - динамик воспроизводит белый шум, крутим настройки фильтра, минимизируя энергию принятого сигнала (после фильтра)

Увы, это всё похоже довольно затратно по вычислениям и я не уверен, что будет работать

NB. В процессе работы можно динамически подстраивать задержку по изменению внешней температуры, что бы не проводить калибровку постоянно.

Share this post


Link to post
Share on other sites
1 час назад, xvr сказал:

Увы, это всё похоже довольно затратно по вычислениям и я не уверен, что будет работать

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

-------------

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

Share this post


Link to post
Share on other sites

 

6 hours ago, xvr said:

Требуется в сигнале с микрофона подавить сигнал динамика (по сути это устройство громкой связи). Сигнал на динамике известен.

Пытался что нибудь по этому поводу найти в Интернете, но не могу сформулировать запрос - это не local feedback cancellation, ни noice cancellation. Не подскажете, как это хоть называется? А если сразу в алгоритм ткнёте, совсем хорошо будет.

Эээм, вычитание? Ничего больше тут не надо.

Share this post


Link to post
Share on other sites

Я нашёл как это называется: AEC - Acoustic Echo Cancellation (или AES - Acoustic Echo Suppression) Делается на основе Адаптивного фильтра. Ещё к AEC в обязательном порядке прилагается DTD - Double Talk Detection (что бы система на пошла в разнос когда одновременно говорят с 2х сторон).

Нашёл несколько статей (в том числе с полным листингом алгоритмов в Матлабе).

Есть реализации для DSP. В частности для AD SigmaDSP (но они хотят денег за лицензию, причём не просто денег, а отчислений за каждое устройство, где они используются) - https://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/adialgorithms/aec

Кстати, здесь была приведена глубина FIR фильтра - 640 (в другой статье - около 1000). Боюсь, что ESP32 на одном таком фильтре загнётся :(

 

Есть готовый чип для звуковой обработки (от XMOS) - XVF3100 (VocalFusion серия), но он один стоит денег (около 1000р на али). И корпус у него не очень подходящий для ручной пайки :(((

https://www.xmos.ai/vocalfusion-voice-interfaces/#3510

 

Есть нечто у китайцев на основе WS9623 (с разными суффиксам). Готовая BT гарнитура с AEC и прочим. Готовая плата с ним + усилитель + 2 микрофона на Али стоит около 400р, что очень привлекательно, но интерфейс только BT :(

 

Есть готовая плата AEC (на том же ali) за 1500р, но у неё аналоговый микрофон (хотел применить I2S) и непонятная м/сх (наименование стёрто, в сопроводительном тесте названа digitalDSPEcho процессором) - https://www.aliexpress.com/item/4000749444769.html?spm=a2g0s.8937460.0.0.18b02e0eKdke2X Документация отсутствует (в лучших традициях)

 

Копаю дальше

Acoustic Echo Cancellation.pdf

Acoustic Echo Cancellation and Doubletalk Detection Using Estimated Loudspeaker Impulse Responses.pdf

Acoustic Feedback Cancellation For Public Address Systems.pdf

Share this post


Link to post
Share on other sites

xvr

Кстати, здесь была приведена глубина FIR фильтра - 640 (в другой статье - около 1000). Боюсь, что ESP32 на одном таком фильтре загнётся :(

Длинные адаптивные фильтры не делают в лоб в виде обычного FIR фильтра. Например в частотной области настраивают, банк полосовых фильтров реализуется с помощью быстрых алгоритмов полифазной фильтрации и БПФ, экономия в вычисления достигается за счёт децимации(блочной обработки с перекрытием), плюс сам адаптивный фильтр настраивается быстрее за счёт ортогональности полосовых фильтров. 

Share this post


Link to post
Share on other sites
On 8/8/2021 at 2:33 PM, petrov said:

Длинные адаптивные фильтры не делают в лоб в виде обычного FIR фильтра.

Очень надеюсь. Нашёл в ESP32 реализацию AEC и прочей обработки (сорцов нет, одни *.a). Попробую, что получится

 

Share this post


Link to post
Share on other sites
On 8/7/2021 at 9:24 AM, xvr said:

Требуется в сигнале с микрофона подавить сигнал динамика (по сути это устройство громкой связи).

Много лет назад произведено миллионы телефонных аппаратов  с громкой связью на MC34118 (ЭКР1436ХА2). В корпусе  ТА стоит динамик и микрофон практически рядом. Эта микросхема работает не с сигналами, а с уровнями сигналов, что значительно упростит цифровую обработку. Можно быстро спаять макет с этой микросхемой, проверить подходит ли такой алгоритм по качеству, а затем реализовать на процессоре то, что выполняет данная микросхема. Проверять необходимо с разными микрофонами и динамиками. Микрофоны как правило имеют разброс по чувствительности до двух раз в одной партии и неравномерную частотную характеристику. В динамиках разброс меньше, но тоже есть.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this