2013-07-19 3 views
-3

Я построил настройку шумоподавления с двумя микрофонами и двумя различными микрофонными предусилителями, которые идут на два разных канала стереозаписи.Настройка шумоподавления - разумное соединение сигналов микрофона

Вот пример

http://filestore.to/?d=U5FN2IH96K

Я попытался

char ergebnis[80];             
sprintf(ergebnis, "%s.neu.raw", Datei); 
FILE* ausgabe = fopen(ergebnis, "wb"); 
FILE* f = fopen(Datei, "rb"); 

if (f == NULL) 
{ 
    return; 
} 

int i = -1; 
int r1 = 0; 
int r2 = 0; 
int l1 = 0; 
int l2 = 0; 
int l = 0; 
int r = 0; 
int wo = 0; 
int dif = 0; 

while (wo != EOF) 
{ 
    wo = getc(f); 
    i++; 

    if (i == 0) 
    { 
     r1 = (unsigned)wo; 
    } 

    if (i == 1) 
    { 
     r2 = (unsigned)wo; 
     r = (r2 << 8) + r1; //r1 | r2 << 8; 
    } 

    if (i == 2) 
    { 
     l1 = (unsigned)wo; 
    } 

    if (i == 3) 
    { 
     l2 = (unsigned)wo; 
     l = (l2 << 8) + l1; //l1 | l2 << 8; 
     dif = r - (l * 2); 
     putc((char)((unsigned)dif  & 0xff), ausgabe); 
     putc((char)(((unsigned)dif >> 8) & 0xff), ausgabe); 
     i = -1; 
    } 
} 

когда волшебство происходит в

dif = r - (l * 2); 

Но это не устраняет шум вокруг него, все это это создает трескные звуки.

Как я мог подойти к этой задаче с помощью моей установки? Я предпочитаю практические решения «читать эту статью, которую понимает только автор статьи».

Пока мы на нем, как мне нормализовать окончательный монофонический выход, чтобы сделать его максимально громким без обрезки?

ответ

2

Я не знаю, почему вы бы ожидать, что это

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 дюйма друг от друга.

Ожидайте, что эта настройка отменяет значительную часть вашего сигнала ниже частоты среза, если есть кровотечение.

+0

Кроме того, исходный подход OP не учитывает фазовые соотношения между двумя сигналами, которые будут возникать из-за пространственного размещения двух микрофонов и результирующей длины пути к звуку. Здесь предполагается, что шумовой сигнал падает на оба микрофона в том же образце. В этом случае разница в пути должна быть несколько меньше 7 мм. – marko

+0

Как я сказал «не только по амплитуде, но и по времени». –

+0

@BjornRoche «Что в этом случае?» l = шум, r = источник + шум. Настройка выглядит следующим образом: http://zuz.mimekunst.com/Nutzerbilder/1374261145.png Вид шума - это вода, падающая на керамику. Какова ваша рекомендация по поводу потрескивания звуков? –