Я не знаю, почему вы бы ожидать, что это
dif = r - (l * 2);
отменить шум, но я могу сказать вам, почему это «создать [S] звуки Crackling». Значение в diff часто выходит за пределы диапазона 16-битного звука. Когда это произойдет, ваша простая функция преобразования:
putc((char)((unsigned)dif & 0xff), ausgabe);
putc((char)(((unsigned)dif >> 8) & 0xff), ausgabe);
не работает. Вместо гладкой кривой ваш звук будет переходить от больших положительных значений к большим отрицательным. Если это вас смущает, maybe this post will help.
Даже если вы решите эту проблему, некоторые вещи не ясны, не в последнюю очередь из-за того, что для активного отключения шума для работы вы обычно предполагаете, что один микрофон обеспечивает источник шума, а другой обеспечивает сигнал + шум , Что в этом случае? Вы просто поместили два микрофона рядом друг с другом и надеетесь услышать некоторый источник звука с меньшим окружающим шумом после некоторой простой арифметики? Это не сработает, поскольку они слышат разные комбинации сигналов и шума (не только по амплитуде, но и по времени). Поэтому вам нужно ответить 1. какой микрофон является источником сигнала и который является источником шума? 2. Какой шум вы пытаетесь отменить? 3. что отличает микрофоны от их способности слышать сигнал и шум? 4. и т.д.
Update: Я до сих пор не ясно, на вашей установке, но вот то, что может помочь:
Вы можете иметь установку, где ваш сигнал сильный в один микрофон и слаб в другой, и шум применяется к обоим микрофонам. Вполне вероятно, что в обоих микрофонах будет протечка сигнала. Тем не менее, мы будем считать
l = noise1
r = signal + noise2
Обратите внимание, что я не предполагаюсь, один и то же значением шума для л и г, это отражает тот факт, что два Майкса будет подбирая различные значения шума из-за временные задержки и другие факторы. Однако часто бывает (и может быть, может быть, и не так) в вашей настройке), что noise1 и noise2 коррелируются на низких частотах.Таким образом, если мы имеем фильтр низких частот, LP, мы можем достичь некоторого снижения уровня шума на низких частотах следующим образом:
out = r - lp(l) = signal + noise2 - lp(noise1)
Это, конечно, подразумевает, что уровень шума при л и т одно и то же, которые могут быть или не быть, в зависимости от вашей установки. Вы можете оставить ручной параметр для этой цели для ручной настройки в конце:
out = r - g*lp(l)
где g- ваш параметр настройки и близко к 1. Я считаю, в некоторых системах снижения уровня шума высокого класса, г постоянно настраивается автоматически.
Выбор частоты среза для фильтра lp - это все, что осталось. Аппроксимация, которую вы можете использовать, состоит в том, что самая высокая частота, которую вы можете отменить, имеет длину волны, равную 1/4 расстояния между микрофонами. Разумеется, я ДЕЙСТВИТЕЛЬНО размахиваю руками, потому что это зависит от того, откуда звучит звук, как направляются ваши микрофоны и так далее, но это отправная точка. Пример расчет
для микрофонов, которые 3 дюйма друг от друга:
Speed of sound = 13 397 inches/sec
desired wavelength = 4*3 inches = 12 inches
frequency = 13,397/12 = 1116 Hz
Таким образом, ваш фильтр должен иметь частоту среза 1116 Гц, если микрофонам 3 дюйма друг от друга.
Ожидайте, что эта настройка отменяет значительную часть вашего сигнала ниже частоты среза, если есть кровотечение.
Кроме того, исходный подход OP не учитывает фазовые соотношения между двумя сигналами, которые будут возникать из-за пространственного размещения двух микрофонов и результирующей длины пути к звуку. Здесь предполагается, что шумовой сигнал падает на оба микрофона в том же образце. В этом случае разница в пути должна быть несколько меньше 7 мм. – marko
Как я сказал «не только по амплитуде, но и по времени». –
@BjornRoche «Что в этом случае?» l = шум, r = источник + шум. Настройка выглядит следующим образом: http://zuz.mimekunst.com/Nutzerbilder/1374261145.png Вид шума - это вода, падающая на керамику. Какова ваша рекомендация по поводу потрескивания звуков? –