Программа шумоподавления

Если бы вы написали программу, которая принимает вход от микрофона, меняет его местами (расставляет его по фазе, устанавливая 1 в 0 и 0 в 1), и воспроизводит его из динамиков, может ли это отменить звук?Волновая физика говорит, что если гребни совпадают с впадинами, возникают деструктивные помехи, поэтому их можно использовать здесь для достижения уменьшенного шума, если не устранить его «полностью».Я могу себе представить, что это не сработает из-за усложнения реверса звука или даже из-за того, что обратное воспроизведение и воспроизведение занимает слишком много времени, так что звуковая волна прошла.Если бы мне нужно было связать язык, чтобы сделать это, он должен был быть или c ++, или java (я, по крайней мере, компетентен в обоих).
4 голоса | спросил Jean Valjean 19 42015vEurope/Moscow11bEurope/MoscowThu, 19 Nov 2015 02:37:15 +0300 2015, 02:37:15

2 ответа


0
Да, это отменит звук.Примерно так и работает Surround Sound: вычитая левый /правый каналы, воспроизводя их в 3-м динамике и инвертируя сэмплы, играя из 4-го, вы получаете интересные пространственные эффекты.Кроме того, вы не захотите просто переключать все биты, вы получите шум;вместо этого вы хотите отрицать.С небольшим буфером сэмплирования вы будете достаточно быстрыми, чтобы подавлять волны определенных частот.Когда они атакуют и затухают, вы будете отставать, но пока волна поддерживается, вы можете эффективно ее отменить.С большими буферами выборок, очевидно, задержка увеличивается, так как заполнение буфера сэмплами занимает больше времени.Размер буфера определяет, как часто происходит прерывание устройства, когда программа копирует входные выборки в выходной буфер, применяя к ним операцию.Обычно записи производятся с частотой 44,1 кГц, что означает, что много сэмплов в секунду.Если вы установите в буфере 256 сэмплов, вы будете получать уведомления 44100/256 раз в секунду, что нужно обработать 256 сэмплов.При 256 выборках вы будете отставать от 256/44100 = 0,0058 секунд или 5,8 миллисекунд.Звук распространяется со скоростью около 340 м /с, поэтому звуковая волна переместилась бы на 1,97 метра (340 * 5,8 мс).Эта длина волны соответствует частоте 172 Гц (44100/256).Это означает, что вы можете эффективно подавлять только те частоты, которые имеют более низкую частоту, потому что частоты с более высокой частотой «перемещаются» более одного раза в течение 5,8 мс и, таким образом, превышают максимальную «частоту дискретизации», если хотите.Для 64 выборок частота будет 44100/64 = 689 Гц.И это максимальная частота!Это означает, что вы можете отменить басы и базовую частоту человеческого голоса, но не гармоники.Типичная ОС имеет тактовую частоту, установленную на 500, 1000 или 2000 Гц, что означает, в лучшем случае, вы можете использовать буфер сэмплов примерно от двух до трех, что дает максимальную частоту 500, 1000 или 2000 Гц.Телефоны обычно имеют максимальную частоту около 3500 Гц.Вы можете увеличить частоту системных часов до 32 кГц и напрямую опрашивать АЦП, чтобы достичь таких частот.Тем не менее, вам, вероятно, придется припаять один к вашему LPT и запустить собственную ОС, что означает, что о Java не может быть и речи, или использовать встроенную систему реального времени, работающую на Java (см. Комментарий @zapl дляссылки).Одна вещь, которую я забыл упомянуть, это то, что вам нужно будет учитывать положение источника звука, микрофона и динамика.В идеале все 3 находятся в одном месте, поэтому нет задержки.Но это почти никогда не имеет место, что означает, что вы получите интерференционную картину: в комнате будут пятна, где звук отключен, между точками, где его нет.
ответил Kenney 19 42015vEurope/Moscow11bEurope/MoscowThu, 19 Nov 2015 03:14:29 +0300 2015, 03:14:29
0
Вы не можете сделать это в программном обеспечении, с c ++ или даже в сборке - задержка простого зеркального отображения выходного сигнала на динамиках будет более 6 мс на большинстве компьютеров.Даже если бы задержка составляла всего 0,1 мс, результирующий звук (при условии, что он идеально микширован) в лучшем случае звучал бы так, как будто он был дискретизирован с частотой 10 кГц (не очень хорошо).
ответил sunny-lan 19 42015vEurope/Moscow11bEurope/MoscowThu, 19 Nov 2015 02:52:41 +0300 2015, 02:52:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132