代码之家  ›  专栏  ›  技术社区  ›  Trevor Harrison

测量音频噪声级

  •  3
  • Trevor Harrison  · 技术社区  · 16 年前

    我试图对音频流中的静态或噪声量进行定性处理。流的正常内容是声音或音乐。

    我对样本的stdev进行了测试,这确实让我对语音和空通道噪声的存在有了一些了解(例如,高stdev通常表示语音或音乐)。

    想知道是否还有人对此有意见。

    2 回复  |  直到 16 年前
        1
  •  3
  •   mtrw    16 年前

    峰值不是给你答案吗?如果你在看一个好的ADC信号,环境电平应该在1或10的计数,而声音或音乐将上升到数千的计数。是否有某种自动增益控制使这种策略不起作用?

    如果您需要更复杂的内容,那么峰与均方根的比率可能比简单的均方根级别(rms=stdev)要可靠一些。纯噪声的比值约为3-5,而正弦波的峰均方根比为1.4。但是,通过查看 spectrum 信号的。静态的通常是壮观的平滑,甚至平坦,而声音和音乐是壮观的结构。所以傅立叶变换可能是你想要的。假设一个包含0.5秒数据的信号x,这里有一些matlab代码:

    Sx = fft(x .* hann(length(x), 'periodic'))
    

    这个 HANN 函数应用汉恩窗来减少光谱泄漏,而 FFT 函数快速计算傅立叶变换。现在你有几个选择。如果要确定信号x是由静态还是语音/音乐组成,请采用频谱的峰均方根比:

    pk2rms = max(abs(Sx))/sqrt(sum(abs(Sx).^2)/length(Sx))
    

    我希望纯静态的峰均方根比在3-5左右(再次),而声音/音乐至少要高出一个数量级。这充分利用了纯白噪声在时间和频率域具有相同的“结构”这一事实。

    如果要获得噪声级的数值估计,可以使用平均值计算随时间变化的Sx功率:

    Gxx = ((k-1)*Gxx + Sx.*conj(Sx))/k
    

    随着时间的推移,Gxx中的峰值应该来来去去去去,但是您应该看到一个与噪声地板相对应的恒定最小值。一般来说,在db(对数垂直)尺度上,音频频谱更容易观察到。

    一些注释:
    1。我选择了0.5秒作为x的长度,但我不确定这里的最佳值是什么。如果选择的值太短,X将没有太多的结构。在这种情况下,信号的直流分量会有很大的能量。不过,如果您首先在sx中抛出与dc对应的bin,那么您仍然可以使用peak-to-rms鉴别器。
    2。我不知道k的好值是多少,但这个方程对应 exponential averaging . 你可能可以用k做实验,找出一个最佳值。这可能对短x最有效。

        2
  •  0
  •   Nosredna    16 年前

    有各种各样的噪音。白色、粉色、棕色。噪音可能来自许多地方。60赫兹的嗡嗡声是噪声还是信号?

    对于白噪声,我会查看FFT并找到最低值,以了解您的噪声地板是什么。

    推荐文章