-4

我用两个麦克风和两个不同的麦克风前置放大器构建了一个噪音消除装置,这些前置放大器用于立体声录音的两个不同通道。

这是一个示例

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

但这并不能消除它周围的噪音,它所做的只是产生噼啪声。

我怎么能用我的设置来完成这个任务呢?我更喜欢实用的解决方案,而不是“阅读只有论文作者理解的论文”。

当我们这样做时,我如何标准化最终的单声道输出以使其尽可能响亮而不削波?

4

1 回答 1

2

我不知道你为什么会期待这个

dif = r - (l * 2);

消除噪音,但我可以告诉你为什么它“创造[s]噼啪声”。diff 中的值通常会超出 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

因此,如果麦克风相距 3 英寸,您的滤波器应具有 1116 Hz 的截止频率。

如果有泄漏,预计此设置也会消除截止频率以下的大量信号。

于 2013-07-19T14:48:33.963 回答