Стоит задача измерении уровня звука и реагировании на его падение. Например, установлен микрофон в зале заседаний. Нужно отследить момент когда все притихли или микрофон отключился.
Приложение получает ссылку файл или поток аудио и слушает.
Посредством DirectShow есть возможность получить сигнал в виде РСМ. Вот только непонятно как его интерпретировать, т.е. как получать уровень сигнала из амплитуд РСМ.
Буду благодарен за любые ссылки и указания по этому вопросу.
Здравствуйте, msorc, Вы писали:
M>Посредством DirectShow есть возможность получить сигнал в виде РСМ. Вот только непонятно как его интерпретировать, т.е. как получать уровень сигнала из амплитуд РСМ.
Вечная панацея в этих вопросах — Быстрое Преобразование Фурье (БПФ, FFT — на вражеском). Получил спектр, оценил его на предмет допустимого минимального значения уровня сигнала и принял решение — все просто. Документации и исходников не просто много, а полно. Удачи!
Здравствуйте, Tharnum, Вы писали:
M>>Посредством DirectShow есть возможность получить сигнал в виде РСМ. Вот только непонятно как его интерпретировать, т.е. как получать уровень сигнала из амплитуд РСМ.
T>Вечная панацея в этих вопросах — Быстрое Преобразование Фурье (БПФ, FFT — на вражеском). Получил спектр, оценил его на предмет допустимого минимального значения уровня сигнала
Народ, вы решили групповое издевательство устроить? Один спрашивает, как по амплитудным значениям получить уровень сигнала, когда эти амплитудные значения и есть уровни сигнала, только мгновенные, и надо тупо найти хоть среднее арифметическое. Другой в ответ советует преобразование Фурье, которое здесь ну совершенно ни к чему... Может, еще Wavelet посоветуете?
E>Народ, вы решили групповое издевательство устроить? Один спрашивает, как по амплитудным значениям получить уровень сигнала, когда эти амплитудные значения и есть уровни сигнала, только мгновенные, и надо тупо найти хоть среднее арифметическое. Другой в ответ советует преобразование Фурье, которое здесь ну совершенно ни к чему... Может, еще Wavelet посоветуете?
Конечно, а для распознавания падения уровня совершенно необходимо обучить нейросеть
Здравствуйте, emusic, Вы писали:
E>Народ, вы решили групповое издевательство устроить? Один спрашивает, как по амплитудным значениям получить уровень сигнала, когда эти амплитудные значения и есть уровни сигнала, только мгновенные, и надо тупо найти хоть среднее арифметическое. Другой в ответ советует преобразование Фурье, которое здесь ну совершенно ни к чему... Может, еще Wavelet посоветуете?
А почему нет? С помощью фурье образа можно отбросить фон (галдежь в зале), проверяя только полосу 200-1500 Гц, паузы в речи выделить, чтобы не отрубать микрофон в то время, когда дядька будет листик переворачивать и т.д. А что даст среднее арифметическое сигнала? Да-да, получатся значения, стремящиеся к нулю...
Можно, в принципе, брать минимумы и максимумы на коротком промежутке. Однако, при плотном шуме в помещении (даже при маленьких значениях диапазона голоса человека) они будут достаточно большими. Учтите, что низкие частоты имеют большую амплитуду.
Здравствуйте, emusic, Вы писали:
E>Народ, вы решили групповое издевательство устроить? Один спрашивает, как по амплитудным значениям получить уровень сигнала, когда эти амплитудные значения и есть уровни сигнала, только мгновенные, и надо тупо найти хоть среднее арифметическое. Другой в ответ советует преобразование Фурье, которое здесь ну совершенно ни к чему... Может, еще Wavelet посоветуете?
А вы уважаемый сильно умный? Так дали бы лучше бы ссылочку человеку, который первый раз с этим столкнулся, вместо своего пафосного ответа.
Здравствуйте, Tharnum, Вы писали:
T>А почему нет? С помощью фурье образа можно отбросить фон (галдежь в зале), проверяя только полосу 200-1500 Гц, паузы в речи выделить, чтобы не отрубать микрофон в то время, когда дядька будет листик переворачивать и т.д.
Для этого по уши хватит банального усреднения. На худой конец — среднего квадратичного. Индикатор уровня на пульте или магнитофоне про Фурье ничего не знает, но великолепно показывает, есть в зале шум, или нет
T> А что даст среднее арифметическое сигнала? Да-да, получатся значения, стремящиеся к нулю...
Да, если без головы суммировать — так и будет А если голову включить, и догадаться выпрямить (получить абсолютное значение) — все чудесным образом исправляется
T>Можно, в принципе, брать минимумы и максимумы на коротком промежутке.
Это без толку — нужно хоть какое-то интегрирование.
Здравствуйте, msorc, Вы писали:
M>А вы уважаемый сильно умный?
Такой ответ вполне уместен для песочницы, младших классов средней школы или дешевой пролетарской пивнушки. Здесь — вряд ли.
M> Так дали бы лучше бы ссылочку человеку, который первый раз с этим столкнулся, вместо своего пафосного ответа.
Во-первых, коллекций ссылок никто давно не держит — есть Яндекс, Google, Alta Vista и т.п. Где при минимальных усилиях находятся просто вагоны информации на эту тему. Так что для дачи ссылочки мне придется поработать за Вас — Вы этого хотите?
Во-вторых, невозможно мало-мальски успешно работать в области звука, настолько не дружа с математикой, даже в объеме школьного курса. А чтоб сообразить, как из мгновенных значений сделать усредненные, достаточно уровня шестого-седьмого классов. Так что не обижаться надо, а взять хотя бы элементарный справочник.
Здравствуйте, emusic, Вы писали:
T>> А что даст среднее арифметическое сигнала? Да-да, получатся значения, стремящиеся к нулю... E>Да, если без головы суммировать — так и будет А если голову включить, и догадаться выпрямить (получить абсолютное значение) — все чудесным образом исправляется
Сгенерируйте "коричневый" шум и посмотрите, какой уровень будет. Но коричневый шум — не признак того, что кто-то общается, хотя ваш метод именно об этом и будет говорить. А обычно гул, присутствующий в зале, очень его напоминает, а тем более, когда паршивый микрофон.
Здравствуйте, Tharnum, Вы писали:
T>Сгенерируйте "коричневый" шум и посмотрите, какой уровень будет.
В смысле — "какой"? Если интенсивность шума такова, что почти забивает голос говорящего в микрофон — средняя амплитуда будет сравнимой. Для интенсивности, субъективно не мешающей, она будет на уровне нескольких процентов от максимума.
T> Но коричневый шум — не признак того, что кто-то общается, хотя ваш метод именно об этом и будет говорить. А обычно гул, присутствующий в зале, очень его напоминает, а тем более, когда паршивый микрофон.
Откуда в тихом (когда никто достаточно громко не болтает) зале возьмется гул, уровень которого сравним с гулом говорящего в микрофон? Вот стоит в зале пульт с индикаторами. Пока в зале тихо — индикаторы на нулях. Начинается галдеж, двигание стульев, ходьба — индикаторы поднимаются процентов на 10-15-20. Когда тишина и говорит выступающий — поднимаются на 40-50-70 и выше.
Если бы по условиям задачи требовалось непрерывно отслеживать, имеются ли в зале посторонние шумы, помимо голоса выступающего — тогда только и имеет смысл привлекать Фурье и прочие сложные виды анализа...
Здравствуйте, emusic, Вы писали:
E>В смысле — "какой"? Если интенсивность шума такова, что почти забивает голос говорящего в микрофон — средняя амплитуда будет сравнимой. Для интенсивности, субъективно не мешающей, она будет на уровне нескольких процентов от максимума.
Коричневый шум имеет большие амплитуды на низких частотах, которые могут быть соизмеримы с довольно громким голосом
E>Откуда в тихом (когда никто достаточно громко не болтает) зале возьмется гул, уровень которого сравним с гулом говорящего в микрофон? Вот стоит в зале пульт с индикаторами. Пока в зале тихо — индикаторы на нулях. Начинается галдеж, двигание стульев, ходьба — индикаторы поднимаются процентов на 10-15-20. Когда тишина и говорит выступающий — поднимаются на 40-50-70 и выше.
Это зависит от того, какой зал, какие акустические характеристики помещения, ходит ли рядом транспорт и т.п. Т.к. низкие частоты чаще всего имеют самую большую апмплитуду и лучше передаются на расстояние, они могут быть ошибочно идентифицированы как наличие голоса. Это мы его плохо слышим (посмотрите график порога слышимости человека), а если микрофон чувствительный, то этот гул будет заригистрирован. Как, в прочем, и шелест листов бумаги, движение стульев и т.д — они дают сильные пики. А вот амплитуда средних частот небольшая, но диапазон 1-3 КГц человек слышит лучше всего.
А как устроен ваш регистрирующий прибор, я не знаю.
E>Если бы по условиям задачи требовалось непрерывно отслеживать, имеются ли в зале посторонние шумы, помимо голоса выступающего — тогда только и имеет смысл привлекать Фурье и прочие сложные виды анализа...
По той картине, которую нам поведал msorc, определить, что именно надо, у меня не сильно получается. Надо ли регистрировать только разговор оратора, или надо записывать даже если кто-то рядом храпит, или надо записывать, пока вообще все не притихнут или не покинут зал...
Здравствуйте, Tharnum, Вы писали:
T>>> А что даст среднее арифметическое сигнала? Да-да, получатся значения, стремящиеся к нулю... E>>Да, если без головы суммировать — так и будет А если голову включить, и догадаться выпрямить (получить абсолютное значение) — все чудесным образом исправляется T>Сгенерируйте "коричневый" шум и посмотрите, какой уровень будет. Но коричневый шум — не признак того, что кто-то общается, хотя ваш метод именно об этом и будет говорить. А обычно гул, присутствующий в зале, очень его напоминает, а тем более, когда паршивый микрофон.
Какая действительно может быть проблема, та это чувствительный микрофон и наличие ветра в зале. Ветер может создать высокие амплитуды, а всё остальное маловероятно. Так что отрезав рекурсивным фильтром низкие частототы можно вполне по пиковым данным судить, говорит кто в микрофон или нет.
А преобразование фурье породит только массу лишней головной боли, имхо.
Здравствуйте, Dimonka, Вы писали:
D>Какая действительно может быть проблема, та это чувствительный микрофон и наличие ветра в зале. Ветер может создать высокие амплитуды, а всё остальное маловероятно. Так что отрезав рекурсивным фильтром низкие частототы можно вполне по пиковым данным судить, говорит кто в микрофон или нет. D>А преобразование фурье породит только массу лишней головной боли, имхо.
Думаю, реализация фурье (строк 30, наверное) гораздо проще, чем синтез фильтра и реализация получения среднего. Фурье-образ одобен для анализа, по скорости БПФ ни чуть не проигрывает фильтрации и обсчету средней аплитуды и есть масса исходных кодов — даже на бейсике =)
Re[7]: Как измерять уровень звука из PCM?
От:
Аноним
Дата:
28.02.06 09:58
Оценка:
Здравствуйте, Dimonka, Вы писали:
D>Здравствуйте, Tharnum, Вы писали:
D>Какая действительно может быть проблема, та это чувствительный микрофон и наличие ветра в зале. Ветер может создать высокие амплитуды, а всё остальное маловероятно. Так что отрезав рекурсивным фильтром низкие частототы можно вполне по пиковым данным судить, говорит кто в микрофон или нет. D>А преобразование фурье породит только массу лишней головной боли, имхо.
В Google есть хорошая статья об удалении шума из речевого сигнала. Называется A Noise Estimator with Rapid Adaptation in Variable-Level Noisy Environments. Ну а про метод спектрального вычитания там статей вообще выше крыши.