Настройка шумоподавления - интеллектуальное объединение сигналов микрофона
Я построил установку шумоподавления с двумя микрофонами и двумя разными микрофонными предусилителями, которые идут на два разных канала стереозаписи.
Вот образец
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 дюйма друг от друга.
Ожидайте, что эта настройка также отменит значительную часть вашего сигнала ниже частоты среза, если есть утечка.