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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
Arlleex
сообщение Jan 20 2018, 16:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Есть необходимость оценить производительность STM32F429 для оцифровки аналогового сигнала 400Гц. Измерение нужно производить до 40 гармоники, то есть, полоса оцифровываемых частот от 0 до 16кГц.
Как правильно оценить статические (объем требуемой памяти Flash, RAM) и динамические (частота МК, либо, что более корректно - максимальное время расчета FFT до обслуживания следующего накопленного сигнала).
До этого не писал FFT для МК, хотя и представляю как оно приблизительно работает.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 20 2018, 18:09
Сообщение #2


Гуру
******

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



если грубо, то ~100 тактов на отсчёт. причем c FPU вроде даже быстрее чем целочисленный.
то есть при 100кГц АЦП надо 5-10МГц.
память зависит от длины выборки.
и для 40 гармоник можно вообще Герцелем посчитать, ему вообще память не нужна, даже под буфер, и не особо медленнее получится, в несколько раз всего.
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 20 2018, 19:04
Сообщение #3


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Проще взять 429 и живьем померять всё за день-два.
Go to the top of the page
 
+Quote Post
ivan24190
сообщение Jan 20 2018, 19:14
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 25-08-15
Из: Рыбное
Пользователь №: 88 141



Попробуйте стандартную библиотеку CMSIS DSP Lib.
Например на stm32f373 я использовал комплексное БПФ на 4096 точек
(правда на фиксированной точке int16_t ввиду ограничения ОЗУ),
все вычисления выполнялись менее чем за 10 мс.
А по объему ОЗУ, все просто, например
для комплексного БПФ c типом данных float и длиной 1024,
получаем 2 * 4 * 1024 = 8192 байта.

Сообщение отредактировал ivan24190 - Jan 20 2018, 19:19
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 21 2018, 18:11
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Есть некоторый диссонанс в мозгу laughing.gif
Итак, есть сигнал с основной частотой 400Гц. Измерять требуется до 40-й гармоники. Итого полоса измеряемого сигнала 400Гц*40 = 16кГц.
Я хочу получить набор дискретных спектральных составляющих с частотным разрешением в 1Гц. Таким образом, время накопления сигнала должно быть равно 1с (ведь частотное разрешение зависит только от времени накопления (так ли это?)).
Количество точек (элементов в результирующем массиве спектральных составляющих (амплитуда, фаза)) равно (полоса частот/частотное разрешение) 16кГц/1Гц = 16000 точек. Действительное значение длины БПФ будет 16384 точки (согласно фундаментальным особенностям механизма БПФ), но сейчас опустим этот момент.

А вот теперь у меня непонимание: допустим я (согласно теореме Котельникова) семплирую сигнал с частотой 16кГц*2 = 32кГц, то количество отсчетов для 16000-точечного БПФ составляет 32000. Тут все ясно. Но ведь семплировать желательно с более высокой частотой, нежели Fsignal*2. Допустим, буду семплировать с частотой Fsignal*8. Соответственно, за 1с накопления у меня в буфере будет 16кГц*8 = 128000 выборок сигнала. И вот как мне их подавать на вход 16000-точечного БПФ? Ведь для 16000-точечного БПФ по определению требуется лишь 32000 отсчетов сигнала? Куда остальные (128000 - 32000) выборки девать?
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jan 21 2018, 19:43
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Цитата
Но ведь семплировать желательно с более высокой частотой, нежели Fsignal*2

Цитата
Куда остальные (128000 - 32000) выборки девать?

Вот здесь Вы сами себе противоречите. Зачем более высотая частота выборки? Если хотите спектр точнее 1 Гц - делаете более длинный FFT. Во всех остальных случаях - это лишние данные. Заниматься дополнительным усреднением перед FFT - занятие неблагодарное и приводящее к интересным артефактам. Если хотите получить более высокую точность по амплитуде спектра - не увеличивайте частоту, а сделайте больше выборок и считайте спектр с перекрытием - это позволит не пропустить изменения сигнала.
Go to the top of the page
 
+Quote Post
x893
сообщение Jan 21 2018, 21:28
Сообщение #7


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



И желательно померять время на БПФ (целый и плавающий) на 32000 точек.
Для начала можно готовыми функциями из CMSIS DSP.
Если будет < 1 сек - поставите в церкве свечку (ну или что-то другое).
Go to the top of the page
 
+Quote Post
ivan24190
сообщение Jan 22 2018, 03:24
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 25-08-15
Из: Рыбное
Пользователь №: 88 141



CMSIS DSP Lib не поддерживает БПФ больше 4096 точек.
Поэтому придется искать обходные пути.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 22 2018, 04:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Alex11 @ Jan 21 2018, 22:43) *
Зачем более высокая частота выборки?

Известно, зачем. Чтобы упростить аналоговый фильтр на входе АЦП.

Цитата(Alex11 @ Jan 21 2018, 22:43) *
Заниматься дополнительным усреднением перед FFT - занятие неблагодарное и приводящее к интересным артефактам.

Вполне благодарное занятие. У него есть даже специальное название - децимация.

Полифазный цифровой ФНЧ достаточно высокого порядка в котором делают децимацию, вместе с дешевым аналоговым ФНЧ низкого порядка на входе АЦП, позволяет в итоге получить более качественный и дешевый фильтр на входе БПФ.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 22 2018, 09:29
Сообщение #10


Гуру
******

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



Цитата(Alex11 @ Jan 22 2018, 02:43) *
Зачем более высотая частота выборки? Если хотите спектр точнее 1 Гц - делаете более длинный FFT.

чтобы иметь 1Гц разрешения спектра надо накопить 1с данных. а если в данных интересна частота 16кГц, то чтобы её нормально оцифровать и не городить очень страшные аналоговые фильтры перед АЦП, частоту АЦП придётся хотя бы раз в 5 задрать.
но сотня кГц и 1с == 100к отсчётов, можно уже легко в количество доступной памяти в МК для FFT упереться.
но если нужны именно определённые гармоники, а не весь спектр с разрешением 1Гц, то можно сначала автокорреляцией точно найти частоту основной гармоники, или вообще держать через цифровой ФАПЧ основную гармонику, а потом считать обычное небыстрое преобразование Фурье но только на заданных сорока частотах. получится немного медленнее чем через FFT, но зато и памяти для этого не надо совсем.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 22 2018, 10:17
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(_pv @ Jan 22 2018, 12:29) *
чтобы иметь 1Гц разрешения спектра надо накопить 1с данных. а если в данных интересна частота 16кГц, то чтобы её нормально оцифровать и не городить очень страшные аналоговые фильтры перед АЦП, частоту АЦП придётся хотя бы раз в 5 задрать.
но сотня кГц и 1с == 100к отсчётов, можно уже легко в количество доступной памяти в МК для FFT упереться.
но если нужны именно определённые гармоники, а не весь спектр с разрешением 1Гц, то можно сначала автокорреляцией точно найти частоту основной гармоники, или вообще держать через цифровой ФАПЧ основную гармонику, а потом считать обычное небыстрое преобразование Фурье но только на заданных сорока частотах. получится немного медленнее чем через FFT, но зато и памяти для этого не надо совсем.


Вот я о том же говорю, допустим я получил эти 100к осчетов, поставлю внешнюю SDRAM и сохраню туда. Но дальше что мне с ними делать? Ведь По расчетам FFT 16к получилось, а точек оцифровали аж 100к. Для 16к FFT надо 32к отсчетов. А у меня 100к - оверсемплинг получился. Что, децимацию делать (прореживать выборки)?
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Jan 22 2018, 10:24
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Arlleex @ Jan 22 2018, 17:17) *
Ведь По расчетам FFT 16к получилось, а точек оцифровали аж 100к. Для 16к FFT надо 32к отсчетов.

Значит считать надо спектр не до 16к, а до соответственно в 3 раза больше, лишнее потом откинете.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 22 2018, 10:30
Сообщение #13


Гуру
******

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



Цитата(Arlleex @ Jan 22 2018, 17:17) *
Но дальше что мне с ними делать? Ведь По расчетам FFT 16к получилось, а точек оцифровали аж 100к.

по каким расчётам?
если нужно разрешение 1Гц значит время накопления (неважно на какой частоте) должно быть 1с.
хотите нормально увидеть гармоники на 16кГц и чтобы aliasing не мешал, цифруйте хотя бы с 100кГц.
100кГц * 1с = 100к отсчётов, соответственно и Фурье надо делать такой же длины.
если с частотой 100кГц набрать только 16к точек (за 160мс) и сделать по ним Фурье, разрешение по частоте будет 6Гц.
если набрать 1с с частотой выборок 16к и сделать Фурье от этих 16к точек, будет разрешение 1Гц, но частоты до 8кГц.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jan 22 2018, 10:53
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Ну да, так я и понял. Спасибо.
И, думаю, последний вопрос: в тех же STM32 есть DSP-ядро, которое может помочь в расчете FFT. Те примеры, которые выпустила сама STMicroelectronics, если мне не изменят память, до 4096 FFT.
Возможно ли как-то объединить FFT 4096 для, скажем, кратного увеличения длины FFT, например, для FFT 16384?

Сообщение отредактировал Arlleex - Jan 22 2018, 10:55
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 22 2018, 10:57
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Arlleex @ Jan 22 2018, 13:17) *
Что, децимацию делать (прореживать выборки)?

Да, именно так. После децимации у вас останется 32768 вещественных(!) семпла. Делаете БПФ от 16384 комплексных(!) семплов и находите нужные вам частоты.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 17:46
Рейтинг@Mail.ru


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