Перейти к содержанию
    

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

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

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

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, xvr сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, xvr said:

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

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

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, _4afc_ сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, варп said:

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. В процессе работы можно динамически подстраивать задержку по изменению внешней температуры, что бы не проводить калибровку постоянно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, xvr сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, xvr said:

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

Не совсем то, но возможно, пригодится: Adaptively Cancelling Server Fan Noise

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

6 hours ago, xvr said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, xvr said:

Тоже не совсем то, тут эха нет.

Если эха нет, то тогда просто вычитание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я нашёл как это называется: 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

xvr

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/8/2021 at 2:33 PM, petrov said:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/7/2021 at 9:24 AM, xvr said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...