|
Спектральный анализ 44kHz stereo на STM32Fxxx..., Возможность и современный опыт сообщества? |
|
|
|
Feb 22 2017, 17:09
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
fft у кортексов очень грубо говоря - 100 тактов на отсчёт у M4, раза в два больше у М3. отдельные ноты неплохо бы различать, то есть корень 12й степени из 2 = 5%, от, пусть будет 200Гц. то есть 10 Гц разрешения по частоте хотя бы иметь надо, то есть ~100мс и соответственно FFT на 4k точек, даёт 4e3 * 100 / 0.1 = аж 4МГц тактовой частоты. => STM32 абсолютно любой, даже M0, у которого на FFT десять раз больше времени уйдёт, если ему данные малость проредить (зачем ему 44кГц для определения частоты в районе 1кГц) то и F0 вполне справится. ну и если надо просто некую "среднюю" частоту сигнала найти, то отношение среднеквадратичного значения производной к среднеквадратичному значению сигнала можно хоть на калькуляторе руками успеть посчитать
|
|
|
|
|
Feb 23 2017, 05:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(khach @ Feb 22 2017, 20:05)  Берите семерки STM32F746 или STM32F769 - там и с аудиоинтерфейсом все наконец в порядке, и памяти много ( внешняя) А что было не в порядке у F4? Цитата и FPU на борту. Причем с double precision, в отличие от F4! Цитата Впихнуть то можно и более слабые камни, но это будет именно впихивание. Смотря какая задача стоит, а так вообще - спектроанализатор был 30 лет назад даже на Спектруме, а там Z80 с тактовой 3.5МГц. Цитата Фурье то работать будет, но или с памятью начнуться проблемы или небудем успевать всякий сервис крутить. С тактированием I2S тоже у младших STM32 были неудобные проблемы. Какие? Я видел только одну, если нужно еще и SDIO - вход внешнего клока сидит на том-же пине, что и одна из линий данных. К счасть., не Д0, поэтому хотя бы в 1-битном режиме SDIO использовать можно.
|
|
|
|
|
Feb 23 2017, 09:20
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Allregia @ Feb 23 2017, 07:10)  Смотря какая задача стоит, а так вообще - спектроанализатор был 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 за подсказку.
|
|
|
|
|
Feb 23 2017, 10:21
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(_pv @ Feb 22 2017, 19:09)  Отдельные ноты неплохо бы различать, то есть корень 12й степени из 2 = 5%, от, пусть будет 200Гц. то есть 10 Гц разрешения по частоте хотя бы иметь надо Тут я задумался и засомневался, подходит ли FFT для анализа именно гармонии по той самой причине, что музыкальный тональный ряд нелинеен и есть степенная функция, то есть тот самый корень 12-й степени из 2 на полутон, спасибо Баху за темперирование. Может замутить, скажем, 12*N отдельных цифровых фильтра, где N - количество перекрываемых октав? Думаю, трех - малой, первой и второй, - будет достаточно. Это получается от 131Hz "до" малой до 1047Hz "си" второй. Какова оценка необходимой производительности будет? Спасибо заранее. Цитата(khach @ Feb 23 2017, 12:04)  Спектроанализатор, блютус, USB, I2S на одном камне в риалтайме? Не верю (с). Как пример - SDR радио на кортексах (любительское). Конечно без особой оптимализации, но в эпоху STM32F4 пришлось использовать два процессора с межпроцессорным взаимодействием. И только с появлением STM32F7 все "утопталось" в один камень. Не все так страшно. Во-первых, BT - отдельный модуль с I2S выходом. CPU лишь настраивает его по UART. Во-вторых, спектроанализатор с I2S как вход CPU и USB с I2S как выходом - альтернативно-работающие объекты.
|
|
|
|
|
Feb 23 2017, 11:13
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(KnightIgor @ Feb 23 2017, 16:21)  Может замутить, скажем, 12*N отдельных цифровых фильтра, где N - количество перекрываемых октав? Думаю, трех - малой, первой и второй, - будет достаточно. Это получается от 131Hz "до" малой до 1047Hz "си" второй. Какова оценка необходимой производительности будет? Герцелю надо лишь умножение и сложение на отсчёт, но в результате 5-10 тактов на отсчёт набежит, соответственно если надо посчитать спектр на отдельных 10-20 частотах, то Герцель будет быстрее, плюс сетка частот произвольная, но если больше 20, то ФФТ хоть и для всего спектра будет быстрее.
|
|
|
|
|
Feb 23 2017, 11:33
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(_pv @ Feb 23 2017, 13:13)  Герцелю надо лишь умножение и сложение на отсчёт, но в результате 5-10 тактов на отсчёт набежит, соответственно если надо посчитать спектр на отдельных 10-20 частотах, то Герцель будет быстрее, плюс сетка частот произвольная, но если больше 20, то ФФТ хоть и для всего спектра будет быстрее. Я так понимаю, что для случая 36 частот FFT будет быстрее, но вопрос остается, как "попасть" на нотный стан отсчетами FFT: шаг между частотами растет от 8Hz внизу малой октавы быстро до 55Hz в конце второй. Если взять шаг те же 8Hz, то получим (1047-131)/8=115 бинов частот, или 230 FFT точек. Так? Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата?
|
|
|
|
|
Feb 23 2017, 12:21
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(KnightIgor @ Feb 23 2017, 17:33)  Я так понимаю, что для случая 36 частот FFT будет быстрее, но вопрос остается, как "попасть" на нотный стан отсчетами FFT: шаг между частотами растет от 8Hz внизу малой октавы быстро до 55Hz в конце второй. ну будет немного быстрее, но там по быстродействию всё равно запас вроде есть. я бы попробовал Гёрцеля для начала, если не хватит скорости, тогда уже можно будет думать как ускорить. Цитата(KnightIgor @ Feb 23 2017, 17:33)  Если взять шаг те же 8Hz, то получим (1047-131)/8=115 бинов частот, или 230 FFT точек. Так? Нет, 230 точек на 44кГц дадут разрешение по частоте 190Гц. Цитата(KnightIgor @ Feb 23 2017, 17:33)  Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата? полученный спектр можно тоже интерполировать и брать значение на нужной частоте. хотя и интерполяция "ближайшим соседом" возможно тоже подойдёт.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|