2009-08-17 100 views
3

我试图获得音频流中存在的静态或噪声量的定性句柄。流的正常内容是语音或音乐。测量音频噪声水平

我已经experiementing与取样品的STDDEV,这确实给我一些处理语音与空信道噪声的情况下(即高STDDEV通常表明语音或音乐)

想知道是否有人有这方面的一些指针。

回答

3

峰值是不是给你答案?如果你正在查看一个好的ADC的信号,环境电平应该在1或10的计数,而语音或音乐将达到成千上万的计数。是否有某种自动增益控制可以使此策略无效?

如果您需要更复杂的东西,峰值与RMS比率可能比简单RMS水平(RMS = stddev)更可靠。纯噪声的比例约为3-5,而正弦波的RMS与RMS比值为1.4。但是,您可以通过查看信号的spectrum来获得更多的歧视。静态通常在光谱上平滑或甚至平坦,而声音和音乐在光谱上是结构化的。所以傅立叶变换可能是你正在寻找的。假设一个包含信号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)) 

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

如果你想获得的噪声水平的数字估计,可以在SX随着时间的计算功率,使用平均:

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

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

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

0

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

对于白噪声,我会看看fft并找到最低值以查看噪底是多少。