Настройка шумоподавления - интеллектуальное объединение сигналов микрофона

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

Вот образец

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);

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам