Перейти к содержанию
    

Спектральный анализ 44kHz stereo на STM32Fxxx...

Привет всем.

 

Первичный поиск по форуму дал мне не много результатов. Тема немного затрагивалась в 2013.

 

Вопросы:

- делал ли кто сабж,

- какой минимально возможный STM32F мог бы потянуть задачу спектрального анализа музыки 44kHz 16 бит стерео на предмет определения гармонии (скорее - доминирующего тона в каждый момент времени в медленных композициях); данные идут по I2S.

 

Спасибо за внимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

fft у кортексов очень грубо говоря - 100 тактов на отсчёт у M4, раза в два больше у М3.

отдельные ноты неплохо бы различать, то есть корень 12й степени из 2 = 5%, от, пусть будет 200Гц. то есть 10 Гц разрешения по частоте хотя бы иметь надо, то есть ~100мс и соответственно FFT на 4k точек, даёт 4e3 * 100 / 0.1 = аж 4МГц тактовой частоты. => STM32 абсолютно любой, даже M0, у которого на FFT десять раз больше времени уйдёт, если ему данные малость проредить (зачем ему 44кГц для определения частоты в районе 1кГц) то и F0 вполне справится.

 

ну и если надо просто некую "среднюю" частоту сигнала найти, то отношение среднеквадратичного значения производной к среднеквадратичному значению сигнала можно хоть на калькуляторе руками успеть посчитать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На we.easyelectronics.ru года 3 назад делали цветомузыку спектроанализом на каком-то слабеньком кортексе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Берите семерки STM32F746 или STM32F769 - там и с аудиоинтерфейсом все наконец в порядке, и памяти много ( внешняя) и FPU на борту. Впихнуть то можно и более слабые камни, но это будет именно впихивание. Фурье то работать будет, но или с памятью начнуться проблемы или небудем успевать всякий сервис крутить. С тактированием I2S тоже у младших STM32 были неудобные проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

STM32 абсолютно любой, даже M0, у которого на FFT десять раз больше времени уйдёт, если ему данные малость проредить (зачем ему 44кГц для определения частоты в районе 1кГц) то и F0 вполне справится.

Спасибо за расчеты. На плате имеется F103, но сделана так, что можно поставить до F4xx. Попробую сначала на F103.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда точно придется утаптывать в целочисленку... На DSP операциях 746 от 429 примерно в полтора-два раза шустрее. 429 с его 168 МГц просто быстрее чем 103 с 72... Зачем себя загонять? Отладитесь, потом впихивать-утаптывать будете...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Берите семерки STM32F746 или STM32F769 - там и с аудиоинтерфейсом все наконец в порядке, и памяти много ( внешняя)

 

А что было не в порядке у F4?

 

и FPU на борту.

 

Причем с double precision, в отличие от F4!

 

 

Впихнуть то можно и более слабые камни, но это будет именно впихивание.

 

 

Смотря какая задача стоит, а так вообще - спектроанализатор был 30 лет назад даже на Спектруме, а там Z80 с тактовой 3.5МГц.

 

Фурье то работать будет, но или с памятью начнуться проблемы или небудем успевать всякий сервис крутить. С тактированием I2S тоже у младших STM32 были неудобные проблемы.

 

Какие? Я видел только одну, если нужно еще и SDIO - вход внешнего клока сидит на том-же пине, что и одна из линий данных. К счасть., не Д0, поэтому хотя бы в 1-битном режиме SDIO использовать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотря какая задача стоит, а так вообще - спектроанализатор был 30 лет назад даже на Спектруме, а там Z80 с тактовой 3.5МГц.

Какие? Я видел только одну, если нужно еще и SDIO - вход внешнего клока сидит на том-же пине, что и одна из линий данных. К счасть., не Д0, поэтому хотя бы в 1-битном режиме SDIO использовать можно.

Я тоже всегда вспоминаю мой первый собственный ПК на урезаном 486 с 25MHz. Была машина-зверь после Синклера или PDP-11 на кафедре. Нынешние Cortex-Mx зачастую имеют внутренней памяти больше, чем тогда в ПК. Так что надежда осилить задачу есть. M7 лежит на полке, но он - явно пушка по воробьям.

 

Плата уже давно готова. Все требуемые интерфейсы разведены. С этой стороны проблем нет. Задачи у процессора скорее административного плана: управление BT модулем по UART и усилителем класса D по I2C, поэтому загрузка небольшая. Есть еще режим USB громкоговорителя, I2S на выход работает по DMA. Теперь стоит задача >альтернативно< использовать I2S как вход и анализировать поток от BT модуля на лету и управлять LED в зависимости от доминирующего тона. Почти светомузыка, но гораздо спокойнее и с другой целью, чем затуманивать девушкам мозги.

 

Я нашел проект на easyelectronics.ru. Спасибо Obam за подсказку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спектроанализатор, блютус, USB, I2S на одном камне в риалтайме? Не верю (с). Как пример - SDR радио на кортексах (любительское). Конечно без особой оптимализации, но в эпоху STM32F4 пришлось использовать два процессора с межпроцессорным взаимодействием. И только с появлением STM32F7 все "утопталось" в один камень.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отдельные ноты неплохо бы различать, то есть корень 12й степени из 2 = 5%, от, пусть будет 200Гц. то есть 10 Гц разрешения по частоте хотя бы иметь надо

Тут я задумался и засомневался, подходит ли FFT для анализа именно гармонии по той самой причине, что музыкальный тональный ряд нелинеен и есть степенная функция, то есть тот самый корень 12-й степени из 2 на полутон, спасибо Баху за темперирование. Может замутить, скажем, 12*N отдельных цифровых фильтра, где N - количество перекрываемых октав? Думаю, трех - малой, первой и второй, - будет достаточно. Это получается от 131Hz "до" малой до 1047Hz "си" второй. Какова оценка необходимой производительности будет?

 

Спасибо заранее.

 

Спектроанализатор, блютус, USB, I2S на одном камне в риалтайме? Не верю (с). Как пример - SDR радио на кортексах (любительское). Конечно без особой оптимализации, но в эпоху STM32F4 пришлось использовать два процессора с межпроцессорным взаимодействием. И только с появлением STM32F7 все "утопталось" в один камень.

Не все так страшно. Во-первых, BT - отдельный модуль с I2S выходом. CPU лишь настраивает его по UART. Во-вторых, спектроанализатор с I2S как вход CPU и USB с I2S как выходом - альтернативно-работающие объекты.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может замутить, скажем, 12*N отдельных цифровых фильтра, где N - количество перекрываемых октав? Думаю, трех - малой, первой и второй, - будет достаточно. Это получается от 131Hz "до" малой до 1047Hz "си" второй. Какова оценка необходимой производительности будет?

Герцелю надо лишь умножение и сложение на отсчёт, но в результате 5-10 тактов на отсчёт набежит, соответственно если надо посчитать спектр на отдельных 10-20 частотах, то Герцель будет быстрее, плюс сетка частот произвольная, но если больше 20, то ФФТ хоть и для всего спектра будет быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Герцелю надо лишь умножение и сложение на отсчёт, но в результате 5-10 тактов на отсчёт набежит, соответственно если надо посчитать спектр на отдельных 10-20 частотах, то Герцель будет быстрее, плюс сетка частот произвольная, но если больше 20, то ФФТ хоть и для всего спектра будет быстрее.

Я так понимаю, что для случая 36 частот FFT будет быстрее, но вопрос остается, как "попасть" на нотный стан отсчетами FFT: шаг между частотами растет от 8Hz внизу малой октавы быстро до 55Hz в конце второй. Если взять шаг те же 8Hz, то получим (1047-131)/8=115 бинов частот, или 230 FFT точек. Так? Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю, что для случая 36 частот FFT будет быстрее, но вопрос остается, как "попасть" на нотный стан отсчетами FFT: шаг между частотами растет от 8Hz внизу малой октавы быстро до 55Hz в конце второй.

ну будет немного быстрее, но там по быстродействию всё равно запас вроде есть.

я бы попробовал Гёрцеля для начала, если не хватит скорости, тогда уже можно будет думать как ускорить.

 

Если взять шаг те же 8Hz, то получим (1047-131)/8=115 бинов частот, или 230 FFT точек. Так?

Нет, 230 точек на 44кГц дадут разрешение по частоте 190Гц.

 

Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата?

полученный спектр можно тоже интерполировать и брать значение на нужной частоте. хотя и интерполяция "ближайшим соседом" возможно тоже подойдёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но вопрос остается, как "попасть" на нотный стан отсчетами FFT

Ненадо попадать- интерполяция по нескольким соседним отсчетам около максимума даст и точную частоту, и точную амплитуду. http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, 230 точек на 44кГц дадут разрешение по частоте 190Гц.

Хочу поток 44kHz проредить в 10 раз, до 4410Hz, и уже это все проанализировать. Пока ковыряю Görzel.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...