Как отловить событие, когда спектр звука достиг определенной высоты, например, вызванное громким звуком событие? - PullRequest
0 голосов
/ 11 сентября 2011

У меня уже есть программа плеера, генератор формы волны, анализатор спектра, окно списка, где будет записываться время. Эти вещи работают. Теперь я хочу добавить функцию, когда вы будете воспроизводить аудиофайл, и когда он достигнет определенного порога или максимального пика спектра, время этого текущего события будет записано в поле списка. Мне удалось добавить время в поле со списком, так что теперь моя единственная проблема - как обнаружить событие. Я использовал FFT в анализаторе спектра, но я застрял на этом. Как я могу сделать это, используя мои текущие ресурсы, такие как БПФ, генератор сигналов, анализатор спектра и т. Д.

Это то, что мне нужно,

  1. Когда я проигрываю звук и звук достигает определенного порога, записывается текущее время потока.

Большое спасибо. Моя мертвая черта будет через 36 часов. Любая помощь будет оценена. Мое будущее зависит от этого. Удачи мне. :) Спасибо, парни! Пожалуйста, дайте мне образец или точную вещь, чтобы сделать. Я дам вам свои ресурсы, если вам понадобится дополнительная информация для моего проекта. Спасибо! Боже, благослови.

P.S. Этот проект требует детектора малого барабана. но у меня осталось не так много времени, поэтому я решил обнаружить не малую, а самую высокую вершину спектра, потому что большую часть времени малый барабан генерирует самый высокий пик, чем другие инструменты, такие как бас, тарелки. Спасибо, ребята!

Ответы [ 3 ]

0 голосов
/ 12 сентября 2011

Самый простой способ обнаружить малый барабан - это вычислить взаимную корреляцию между входным сигналом и записью попадания в малый барабан. Когда кросс-корреляция высока, у вас, вероятно, есть совпадение.

Это будет лучше, чем тестирование БПФ, поскольку БПФ вычисляет взаимную корреляцию входного сигнала с чистой синусоидальной волной.

Подход называется «согласованная фильтрация» , он хорошо известен в теории оптимального обнаружения.

0 голосов
/ 12 сентября 2011

Если вы просто хотите увидеть, когда сигнал становится очень мощным, вам не нужен БПФ. Вы можете использовать Теорема Парсеваля , которая связывает мощность области времени и частоты. Это позволяет создать детектор энергии скользящего окна O (1) из скользящего среднего квадрата выборок.

Кстати, это именно тот вопрос, который актуален для DSP Stack Exchange

0 голосов
/ 11 сентября 2011

Поскольку вы можете генерировать непрерывно обновляемый спектр, вам просто нужно повторять спектр после каждого обновления и проверять величины соответствующих элементов разрешения. Как правило, вы можете перекрывать каждое окно образца, например, если ваш размер FFT и размер окна сэмплов N = 1024, то вы берете первое FFT поверх сэмплов 0..1023, затем следующий блок будет 512..1535. Это 50% -ное перекрытие помогает уменьшить задержку при обнаружении (вы можете увеличить перекрытие, но если вы зайдете слишком далеко, это может привести к слишком интенсивным вычислениям).

...