2009-08-17 98 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並找到最低值以查看噪底是多少。