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

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

Вот образец

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

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

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

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


person Brutus Cruciatus    schedule 19.07.2013    source источник


Ответы (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 дюймов друг от друга.

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

person Bjorn Roche    schedule 19.07.2013
comment
Кроме того, исходный подход OP не учитывает фазовые соотношения между двумя сигналами, что произойдет из-за пространственного размещения двух микрофонов и, как следствие, разной длины пути к звуку. Здесь предполагается, что шумовой сигнал падает на оба микрофона в одном и том же образце. Для этого разница в длине пути должна быть несколько меньше 7 мм. - person marko; 19.07.2013
comment
Как я уже сказал, не только по амплитуде, но и по времени. - person Bjorn Roche; 19.07.2013
comment
@BjornRoche Что в данном случае? l = шум, r = источник + шум. Настройка выглядит следующим образом: шума вода, падающая на керамику. Каковы ваши рекомендации по борьбе с потрескивающими звуками? - person Brutus Cruciatus; 19.07.2013
comment
@Марко, я согласен. Я не учитывал разность фаз. Учитывая необработанный файл, который я приложил, как бы вы его определили. Он должен оставаться постоянным после того, как выяснится, я полагаю, учитывая фиксированную настройку, но слегка движущийся источник голоса. - person Brutus Cruciatus; 19.07.2013
comment
@BjornRoche Амплитуда должна быть зафиксирована 2 в dif = r - (l * 2); - person Brutus Cruciatus; 19.07.2013
comment
Корреляция @PeakReconstructionWavelength может быть одним из способов определения задержки между сигналами. Однако предпосылка, на которой вы основывали свой код выше (например, суперпозиция с одним инвертированным сигналом), полностью нарушена, и никакая компенсация задержки не поможет в этом. Пожалуйста, прочитайте литературу по этому вопросу и, если необходимо, изучите необходимую теорию - вы не получите серебряную пулю здесь, на StackOverflow. И любое решение, которое вы получите, не будет состоять из нескольких строк кода. - person marko; 19.07.2013
comment
@Marko Хорошо, какой документ ближе всего к моей проблеме, который вы можете порекомендовать? - person Brutus Cruciatus; 20.07.2013
comment
@PeakReconstructionWavelength диаграмма, на которую вы ссылаетесь, не имеет смысла. Кроме того, ваша формула определенно НЕ фиксирует амплитуду; это вызывает проблему. - person Bjorn Roche; 20.07.2013
comment
@PeakReconstructionWavelength: Марко прав. Для этого есть несколько методов, но все они сложны, и я не знаю ни о каких библиотеках. Предполагая, что ваши микрофоны действительно представляют l=шум и r=сигнал+шум (например, один микрофон рядом с источником, один микрофон дальше или направленные микрофоны, направленные в разные стороны и т. д.), шум, скорее всего, будет более коррелирован в низкие частоты (отсечка будет зависеть, в том числе, и от того, насколько далеко друг от друга находятся микрофоны). Вы можете обрезать сигнал l и вычесть его из r, и вы можете что-то получить, но это зависит от вашей настройки. - person Bjorn Roche; 20.07.2013
comment
@BjornRoche диаграмма, на которую вы ссылаетесь, не имеет смысла, иначе я ее не понимаю, но я бы никогда не стала искать причину в себе. Если я этого не понимаю, значит, это не имеет смысла. Нет, сэр, это имеет смысл, это просто не имеет смысла для вас. Если вы пишете что-то подобное, вам нужно пояснить, почему вы этого не понимаете. - person Brutus Cruciatus; 20.07.2013
comment
Я рад, что диаграмма имеет для вас смысл, но на вас, как на человеке, которому нужна бесплатная помощь, лежит ответственность за то, чтобы сделать себя ясным и понятным, и эта диаграмма так мало дает, что вам лучше начать все сначала. - person Bjorn Roche; 20.07.2013
comment
@BjornRoche Скажи мне, чего ты не понимаешь, я готов уточнить, но сейчас я не могу понять, почему кто-то этого не понимает, поэтому я понятия не имею, что объяснять. Но ради улучшения ситуации посмотрите на это фото i.imgur.com/b5NWdF4.jpg Так как он плохо освещен, я нарисовал несколько линий, чтобы было понятно положение ящика. Вы видите микрофон1 (обведено вверху, равно r) и микрофон2 (обведено внизу, равно l). - person Brutus Cruciatus; 22.07.2013
comment
Похоже, у вас есть какая-то коробка с одним микрофоном сверху и одним сбоку. Мы до сих пор не знаем, что это за микрофоны, где находится ваш источник шума или где находится ваш источник сигнала. После 12 комментариев и недостаточно информации, чтобы ответить на этот вопрос, я просто обновлю свой ответ чем-то общим. - person Bjorn Roche; 22.07.2013
comment
@BjornRoche Электретные микрофоны. Источник шума находится на расстоянии около 1,5 м от микрофона 2 (л), лицом к микрофону 2 (л), источник сигнала находится на расстоянии около 10 см от микрофона 1 (р), лицом к микрофону 1 (р). После 12 комментариев и недостаточно информации, чтобы ответить на этот вопрос, я просто обновлю свой ответ чем-то общим. Слушай, сбавь тон. Чтобы получить ответы, нужно задавать правильные вопросы. Вы начали это делать, и я ответил на каждый ваш реальный вопрос. Микрофоны выглядят как elektronikhandel-online.net/.media/145108546997.png. не предназначены для использования в качестве направленных микрофонов - person Brutus Cruciatus; 22.07.2013
comment
@BjornRoche Диагональное расстояние между микрофонами составляет 7 сантиметров или 2,75 дюйма. По вашему расчету у меня частота среза 1215 Гц. Итак, что вы имеете в виду: создайте программный фильтр нижних частот с частотой среза 1215 Гц, затем используйте dif = r - g * lp (l) вместо dif = r - (l * 2);. Вы бы использовали stackoverflow.com/questions/13882038/ для этого с float RC = 1.0/(1215*2*3.14);? - person Brutus Cruciatus; 22.07.2013
comment
Вы могли бы использовать этот фильтр. Лучше использовать фильтр более высокого порядка. Второй заказ должен сделать. blog.bjornroche.com/2012/08/basic-audio-eqs. html - person Bjorn Roche; 22.07.2013
comment
При близком расположении микрофонов и столь удаленных источниках звука, особенно если они всенаправленные, предположение о том, что l = шум1 и r = сигнал + шум2, нарушается. - person Bjorn Roche; 22.07.2013
comment
@BjornRoche Поскольку я не мог понять ваш код, я использовал свою ссылку. Я не слышу большой разницы, но, по крайней мере, нет отсечения. Вот мой код: pastebin.com/TkxgtXZP Пожалуйста, скажите мне, делает ли он то, что должен делать в соответствии с моей целью в этой теме. PS: Как нормализовать вывод? Каково максимальное значение для dif (+ и -) без отсечения? - person Brutus Cruciatus; 26.07.2013