2009-08-17 2 views
3

Я пытаюсь получить качественный дескриптор количества статического звука или шума, присутствующих в аудиопотоке. Нормальным содержимым потока является голос или музыка.Измерение уровня звукового шума

Я experiementing с принятием STDDEV образцов, и что это даст мне ручку на наличие голоса против пустой шум канала (то есть. Высокая StdDev обычно указывает на голос или музыка)

Интересно, есть ли у кого-нибудь какие-то указатели на это.

ответ

3

Не отвечает ли пиковое значение ответа? Если вы смотрите на сигнал с хорошего АЦП, окружающий уровень должен быть в единицах 1 или 10, тогда как голос или музыка попадут в тысячи отсчетов. Есть ли какой-то автоматический контроль усиления, который делает эту стратегию неработоспособной?

Если вам нужно что-то более сложное, соотношение между пиком и RMS может быть немного более надежным, чем просто RMS-уровень (RMS = stddev). Чистый шум будет иметь отношение около 3-5, в то время как синусоиды, например, имеют отношение пика к RMS 1,4. Однако вы можете получить больше дискриминации, посмотрев на сигнал spectrum. Статичность обычно спектрально гладкая или ровная, а голос и музыка спектрально структурированы. Таким образом, преобразование Фурье может быть тем, что вы ищете. Предполагая сигнальную х, который содержит, скажем, 0,5 секунды стоит данных, вот некоторые Matlab код:

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

HANN функция применяется окно Hann для уменьшения утечек спектра, в то время как функция FFT быстро вычисляет преобразование Фурье. Теперь у вас есть несколько вариантов. Если вы хотите, чтобы определить, состоит ли сигнал х статическим или голос/музыки, принять пик соотношения 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 (log vertical).

Некоторые примечания:
1. Я выбрал 0,5 секунды для длины x, но я не уверен, какое оптимальное значение здесь. Если вы выберете слишком короткое значение, x не будет иметь много структуры. В этом случае компонент постоянного тока сигнала будет иметь много энергии. Я ожидаю, что вы все равно сможете использовать пик для RMS-дискриминатора, хотя, если вы сначала выбросите бит в Sx, соответствующий DC.
2. Я не уверен, какое хорошее значение для k есть, но это уравнение соответствует exponential averaging. Вероятно, вы можете экспериментировать с k, чтобы определить оптимальное значение. Это может работать лучше всего с коротким x.

0

Существуют различные виды шума. Белый, розовый, коричневый. Шум может исходить из многих мест. Является ли шум или сигнал шумностью 60 Гц?

Для белого шума я бы посмотрел на fft и нашел самое низкое значение, чтобы увидеть, что представляет собой ваш уровень шума.

Смежные вопросы