Какой алгоритм используется для шумоподавления в наушниках?
Я хочу программировать программное обеспечение для шумоподавления в режиме реального времени, так же, как это происходит в наушниках с активным шумоподавлением. Есть ли открытые алгоритмы или, по крайней мере, научные статьи по этому поводу? Поиск Google нашел информацию только о шумоподавлении не в реальном времени.
1 ответ
Наушники с активным шумоподавлением в дополнение ко всем обычным схемам наушников, имеют микрофон и дополнительные специальные схемы. На базовом уровне микрофон наушников улавливает окружающий шум вокруг вас и передает его в специальные схемы. Специальная схема интерпретирует звуки и имитирует их в обратной (противоположной) манере. Инвертированный звук, который он издает, передается через динамики наушников и подавляет окружающий шум вокруг вас.
Все это основано на интерференции звуковых волн. Когда мешают 2 волны противоположных фаз, в результате не будет звука. (это работает и со светом.)
Вам следует заглянуть на страницу Википедии, посвященную интерференции волн, чтобы найти правильную фазу, которую вы должны произвести для устранения внешнего шума.
Для синусоидальной системы:
Давайте возьмем 2 волны:
а также
Мы хотим выразить полученную волну как:
Учитывая A1, вы хотите найти A2 такой, что A0 = 0
Это означает, что для Phi1 нужно найти Phi2 такой, что A0 = 0
Вы можете доказать, что:
И, решив A0 = 0, вы получите частоту волны, которую нужно создать, чтобы устранить шум. Это называется деструктивными помехами.
Звуковые волны не в одном измерении... поэтому вы просто получите разрушительные помехи в одном направлении:
Теперь вам просто нужно найти кое-что из звуковых сигналов...
Я постараюсь ответить на ваш комментарий.
Первый:
2D проблема не намного сложнее, чем 1D.
Внешний шум может быть приблизительным как источник, расположенный на бесконечности. Вы создадите деструктивный шум с источником в наушниках, и вы можете предположить, что амплитуда одинакова на одинаковом расстоянии от источника.
Вы должны записать это на оси, оси Y (может быть полезно использовать полярные координаты)
и вы сможете получить амплитуду в каждой точке на плане, используя простые формулы тригонометрии, такие как:
: \ sin (A + B) = \ sin A \ cdot \ cos B + \ cos A \ cdot \ sin B
: \ cos (A + B) = \ cos A \ cdot \ cos B - \ sin A \ cdot \ sin B
: \ sin (A - B) = \ sin A \ cdot \ cos B - \ cos A \ cdot \ sin B
: \ cos (A - B) = \ cos A \ cdot \ cos B + \ sin A \ cdot \ sin B
Во- вторых:
Все задержки смоделированы в "Фи" вашего разрушительного источника. Можно просто адаптировать Рассчитанный Фи, чтобы он учитывал задержку.
Вам может потребоваться более конкретная информация о звуке, так как моя информация очень теоретическая для любых типов волн.