Я не знаю, почему вы ожидаете этого
dif = r - (l * 2);
для подавления шума, но я могу сказать вам, почему он «создает потрескивающие звуки». Значение в dif часто выходит за пределы диапазона 16-битного звука. Когда это происходит, ваша простая функция преобразования:
putc((char)( (unsigned)dif & 0xff), ausgabe);
putc((char)(((unsigned)dif >> 8) & 0xff), ausgabe);
не удастся. Вместо плавной кривой ваш звук будет прыгать от больших положительных до больших отрицательных значений. Если это вас смущает, может быть, этот пост поможет< /а>.
Даже если вы решите эту проблему, несколько вещей неясны, не в последнюю очередь это то, что для работы активного шумоподавления вы обычно предполагаете, что один микрофон обеспечивает источник шума, а другой обеспечивает сигнал + шум. Что есть что в данном случае? Вы просто поставили два микрофона рядом друг с другом и надеялись услышать какой-нибудь источник звука с меньшим количеством окружающего шума после некоторых простых арифметических действий? Это не сработает, так как они оба слышат разные комбинации сигнала и шума (не только по амплитуде, но и по времени). Итак, вам нужно ответить 1. какой микрофон является источником сигнала, а какой источником шума? 2. какой шум вы пытаетесь отключить? 3. Что отличает микрофоны в их способности слышать сигнал и шум? 4. и т.д.
Обновление. Мне до сих пор неясны ваши настройки, но вот что может помочь:
У вас может быть установка, в которой ваш сигнал сильный в одном микрофоне и слабый в другом, а шум применяется к обоим микрофонам. По всей вероятности, будет утечка сигнала в оба микрофона. Тем не менее будем считать
l = noise1
r = signal + noise2
Обратите внимание, что я не предполагал одинаковые значения шума для l и r, это отражает реальность того, что два микрофона будут улавливать разные значения шума из-за временных задержек и других факторов. Однако часто бывает так (и может быть, а может и не быть в вашей установке), что шум1 и шум2 коррелируют на низких частотах. Таким образом, если у нас есть фильтр нижних частот lp, мы можем добиться некоторого снижения шума на низких частотах следующим образом:
out = r - lp(l) = signal + noise2 - lp(noise1)
Это, конечно, предполагает, что уровень шума на l и r одинаков, что может быть или не быть, в зависимости от вашей настройки. Вы можете оставить ручной параметр для этой цели для ручной настройки в конце:
out = r - g*lp(l)
где g — ваш параметр настройки, близкий к 1. Я полагаю, что в некоторых высококлассных системах шумоподавления g постоянно настраивается автоматически.
Остается только выбрать частоту среза для вашего фильтра 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 дюймов друг от друга.
Ожидайте, что эта настройка также отменит значительную часть вашего сигнала ниже частоты среза, если есть просачивание.
person
Bjorn Roche
schedule
19.07.2013