4

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

我一直在尝试获取样本的 stddev,这确实让我能够处理语音与空通道噪声的存在(即高 stddev 通常表示语音或音乐)

想知道是否有人对此有一些指示。

4

2 回答 2

4

峰值不给你答案吗?如果您正在查看来自良好 ADC 的信号,则环境电平应为 1 或 10 的计数,而语音或音乐将达到数千计数。是否有某种自动增益控制使这种策略不起作用?

如果您需要更复杂的东西,峰值与 RMS 比可能比简单的 RMS 电平 (RMS = stddev) 更可靠一些。纯噪声的比率约为 3-5,而正弦波的峰值与 RMS 比率为 1.4。但是,您可以通过查看信号的频谱来获得更多的辨别力。静态通常是光谱平滑甚至平坦的,而声音和音乐是光谱结构的。所以傅里叶变换可能是您正在寻找的。假设信号 x 包含 0.5 秒的数据,这里有一些 Matlab 代码:

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

HANN函数应用 Hann 窗来减少频谱泄漏,而FFT函数快速计算傅里叶变换。现在你有几个选择。如果要确定信号 x 是由静态还是语音/音乐组成,请取频谱的峰值与 RMS 比:

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

我希望纯静态的峰值与 RMS 比(再次)约为 3-5,而语音/音乐至少要高一个数量级。这利用了纯白噪声在时域和频域中具有相同“结构”这一事实。

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

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

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

一些注意事项:
1. 我为 x 的长度选择了 0.5 秒,但我不确定这里的最佳值是多少。如果你选择一个太短的值,x 将没有太多的结构。在这种情况下,信号的直流分量将具有很大的能量。我希望你仍然可以使用峰值到 RMS 鉴别器,但是,如果你首先扔掉 Sx 中对应于 DC 的 bin。
2. 我不确定 k 的好值是多少,但该方程对应于指数平均。您可能可以尝试使用 k 来找出最佳值。这可能最适合短 x。

于 2009-08-18T03:40:32.437 回答
0

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

对于白噪声,我会查看 fft 并找到最低值以查看您的本底噪声。

于 2009-08-30T17:41:24.780 回答