LINUX.ORG.RU

Как работает анализатор звукового спектра

 ,


0

4

Привет!

Никак не пойму как работает анализатор звуковых частот (пытаюсь запилить себе подобное на Arduino). Вот есть у меня звук и микрофон, который может звук «услышать» и сказать мне о нем числом между 0 и 255. Что мне это дает? Как я могу узнать что тут был звук в 10кГц, а потом в 15, а потом в 17? Или вообще как я могу полученное число, скажем, 178 разложить по частотам и понять что у меня тут были низкие и средние частоты, а высоких не было?

Перемещено Shaman007 из talks

★★★★★

Ответ на: комментарий от Sadler

И дальше что мне с ним делать? Во всяких туториалах то на телевизор спектр выведут, то на RGB матрицу. Мне нужно, например, подключить 4 диода и разбить сигнал на 4 полосы, может мне fft и не нужен.

alozovskoy ★★★★★
() автор топика
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

Преобразование Фурье очень просто масштабируется на сколько нужно бэндов. Можно оставить всего три штуки: НЧ,СЧ,ВЧ и установить пороги для срабатывания диодов. То есть на выходе Вы получаете просто 3 float-а, обозначающие мощность по бэндам. А уж выводить можно как угодно. Если промежутки нужны какие-то особые, можно делать FFT с большим буфером, а потом усреднять результат. Только окно, пожалуйста, юзайте в таком случае.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 7)

Вот есть у меня звук и микрофон, который может звук «услышать» и сказать мне о нем числом между 0 и 255. Что мне это дает?

Ничего не даёт. Звук — это волна, одно число его практически никак не описывает. Однако, можно юзать FIR/IIR.

Sadler ★★★
()
Ответ на: комментарий от Sadler

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

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Дак FFT это и есть переход из временной в частотную область. :) Там ничего сложного, формула перехода достаточно проста. Просто реализуйте аккуратно, проверяйте результат на известных сигналах. Сразу советую посмотреть дискретное косинусное преобразование. Если Вас не интересует фаза сигнала, ДКП куда проще реализуется (не требует комплексных чисел).

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Sadler

Тут своя особенность - на детектирование низкой частоты по определению нужно больше времени, чем на высокую. Потому часто имеет смысл юзать несколько фильтров разной длины - один короткий, который быстро определяет высокую частоту, второй - длинный, который тупит, но дает хорошую точность в низких частотах. Наложение результатов фильтров - тема отдельного секса.

Да, ТС - при выводе инфы не забывай, что при выводе гистограммы тебе нужно делать на отдельной полосе 1. быстрое наростание уровня, если частота появилась и 2. медленное спадание, если она исчезла. Иначе будет неюзабельное аццкое дрожение.

И да, не уверен, что ардуина потянет FFT по скорости.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Да, ТС - при выводе инфы не забывай <...>

Да мне пока бы просто в последовательный порт выводить у какой частоты какая «громкость». Учту

И да, не уверен, что ардуина потянет FFT по скорости.

Вроде тянет, есть проекты.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Pavval

Потому часто имеет смысл юзать несколько фильтров разной длины - один короткий, который быстро определяет высокую частоту, второй - длинный, который тупит, но дает хорошую точность в низких частотах

ТСу скорее всего не критично.

Иначе будет неюзабельное аццкое дрожение.

Опять же, если не strict realtime, можно ограничиться простым усреднением по паре последних отсчётов.

И да, не уверен, что ардуина потянет FFT по скорости.

Зависит от частоты дискретизации входа и, соответственно, желаемых диапазонов частот.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от Sadler

Опять же, если не strict realtime, можно ограничиться простым усреднением по паре последних отсчётов.

Менее юзабельно. Прогони на реальном звуке - увидишь. Важно видеть, что частота X была, а это реализуется плавным спаданием. А отзывчивость - это как раз быстрый взлет. Так проф. анализаторы отображают. Заодно еще и гламурнее выходит:)

Кстати, проще экспоненту делать - она для вычисления требует хранения только предыдущего результата. Это если с наличием FPU проблем нет.

Pavval ★★★★★
()
Ответ на: комментарий от alozovskoy

И дальше что мне с ним делать? Во всяких туториалах то на телевизор спектр выведут, то на RGB матрицу. Мне нужно, например, подключить 4 диода и разбить сигнал на 4 полосы, может мне fft и не нужен.

На ардуине цветомузыку делаешь? Shaman007, верни тред взад (в толки).

anto215 ★★
()
Ответ на: комментарий от anto215

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

Вообще, кстати, разобрался с fft (нашел какую-то fixed_fft библиотеку, вроде она проще и легче).

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Pavval

не уверен, что ардуина потянет FFT по скорости

Z80 как-то тянул.

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.