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

 
 
> FFT на STM32
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
 
Start new topic
Ответов
Alex11
сообщение Jan 21 2018, 19:43
Сообщение #2


Гуру
******

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



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

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

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


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 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
blackfin
сообщение Jan 22 2018, 10:57
Сообщение #5


Гуру
******

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



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

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

Сообщений в этой теме
- Arlleex   FFT на STM32   Jan 20 2018, 16:39
- - _pv   если грубо, то ~100 тактов на отсчёт. причем c FPU...   Jan 20 2018, 18:09
- - x893   Проще взять 429 и живьем померять всё за день-два.   Jan 20 2018, 19:04
- - ivan24190   Попробуйте стандартную библиотеку CMSIS DSP Lib. Н...   Jan 20 2018, 19:14
- - Arlleex   Есть некоторый диссонанс в мозгу Итак, есть сигн...   Jan 21 2018, 18:11
|- - blackfin   Цитата(Alex11 @ Jan 21 2018, 22:43) Зачем...   Jan 22 2018, 04:01
|- - HardEgor   Цитата(Arlleex @ Jan 22 2018, 17:17) Ведь...   Jan 22 2018, 10:24
|- - _pv   Цитата(Arlleex @ Jan 22 2018, 17:17) Но д...   Jan 22 2018, 10:30
- - x893   И желательно померять время на БПФ (целый и плаваю...   Jan 21 2018, 21:28
- - ivan24190   CMSIS DSP Lib не поддерживает БПФ больше 4096 точе...   Jan 22 2018, 03:24
- - Arlleex   Ну да, так я и понял. Спасибо. И, думаю, последний...   Jan 22 2018, 10:53
- - Alex11   Только децимацию нужно делать по-человечески, с пр...   Jan 22 2018, 17:01
- - x893   http://stm32f4-discovery.net/2014/10/stm32f4-fft-e...   Jan 22 2018, 18:24


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

 


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


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