реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Спектральный анализ 44kHz stereo на STM32Fxxx..., Возможность и современный опыт сообщества?
KnightIgor
сообщение Feb 22 2017, 16:49
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Привет всем.

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

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

Спасибо за внимание.
Go to the top of the page
 
+Quote Post
_pv
сообщение Feb 22 2017, 17:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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 вполне справится.

ну и если надо просто некую "среднюю" частоту сигнала найти, то отношение среднеквадратичного значения производной к среднеквадратичному значению сигнала можно хоть на калькуляторе руками успеть посчитать sm.gif
Go to the top of the page
 
+Quote Post
Obam
сообщение Feb 22 2017, 18:26
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



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


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 22 2017, 19:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Берите семерки STM32F746 или STM32F769 - там и с аудиоинтерфейсом все наконец в порядке, и памяти много ( внешняя) и FPU на борту. Впихнуть то можно и более слабые камни, но это будет именно впихивание. Фурье то работать будет, но или с памятью начнуться проблемы или небудем успевать всякий сервис крутить. С тактированием I2S тоже у младших STM32 были неудобные проблемы.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 22 2017, 20:57
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(_pv @ Feb 22 2017, 19:09) *
STM32 абсолютно любой, даже M0, у которого на FFT десять раз больше времени уйдёт, если ему данные малость проредить (зачем ему 44кГц для определения частоты в районе 1кГц) то и F0 вполне справится.

Спасибо за расчеты. На плате имеется F103, но сделана так, что можно поставить до F4xx. Попробую сначала на F103.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Feb 22 2017, 21:19
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Тогда точно придется утаптывать в целочисленку... На DSP операциях 746 от 429 примерно в полтора-два раза шустрее. 429 с его 168 МГц просто быстрее чем 103 с 72... Зачем себя загонять? Отладитесь, потом впихивать-утаптывать будете...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Feb 23 2017, 05:10
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 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 использовать можно.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 23 2017, 09:20
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 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 за подсказку.
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 23 2017, 10:04
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



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

Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 23 2017, 10:21
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 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 как выходом - альтернативно-работающие объекты.
Go to the top of the page
 
+Quote Post
_pv
сообщение Feb 23 2017, 11:13
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(KnightIgor @ Feb 23 2017, 16:21) *
Может замутить, скажем, 12*N отдельных цифровых фильтра, где N - количество перекрываемых октав? Думаю, трех - малой, первой и второй, - будет достаточно. Это получается от 131Hz "до" малой до 1047Hz "си" второй. Какова оценка необходимой производительности будет?

Герцелю надо лишь умножение и сложение на отсчёт, но в результате 5-10 тактов на отсчёт набежит, соответственно если надо посчитать спектр на отдельных 10-20 частотах, то Герцель будет быстрее, плюс сетка частот произвольная, но если больше 20, то ФФТ хоть и для всего спектра будет быстрее.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 23 2017, 11:33
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 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 точек. Так? Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата?
Go to the top of the page
 
+Quote Post
_pv
сообщение Feb 23 2017, 12:21
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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) *
Для анализа наличия нот надо будет просто выбрать подходящие близкие бины из результата?

полученный спектр можно тоже интерполировать и брать значение на нужной частоте. хотя и интерполяция "ближайшим соседом" возможно тоже подойдёт.
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 23 2017, 12:22
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(KnightIgor @ Feb 23 2017, 14:33) *
но вопрос остается, как "попасть" на нотный стан отсчетами FFT

Ненадо попадать- интерполяция по нескольким соседним отсчетам около максимума даст и точную частоту, и точную амплитуду. http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 23 2017, 16:56
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(_pv @ Feb 23 2017, 14:21) *
Нет, 230 точек на 44кГц дадут разрешение по частоте 190Гц.

Хочу поток 44kHz проредить в 10 раз, до 4410Hz, и уже это все проанализировать. Пока ковыряю Görzel.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th August 2025 - 09:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016