Jump to content
    

FFT + FIR на ядре CORTEX M4

Привет сообществу.

Не знал, как описать в заголовке темы проблему в двух словах.... Честно говоря, как лаконично выкрутиться, не знаю.

Подробнее. Есть задача - анализировать спектр частот от датчиков, полоса от долей герца до нескольких килогерц. Примерно 0,5Гц - 2кГц.

Таких 8 каналов хотелось бы обрабатывать одним камнем чем-то из серии STM32F4xx. Для целей "попробовать", поскольку с ЦОС не приходилось сталкиваться наяву,

завел сигнал на одну ногу контроллера, выполняю АЦП сразу тремя доступными каналами ADC1-ADC3 с одной ноги, первый канал с медленным семплирование, но с разрешением 0,01Гц,

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

Но есть одно но. Разумеется, когда подается сигнал на вход ближе к верхнему пределу, в первой полосе с невысокой максимальной частотой выборки возникает наложение спектра. На самом деле, можно логически решить задачу и не брать в расчет первую полосу, если в третьей да и либо во второй есть четкое значение. Но хочется сделать красиво. Заводить сигнал на 3 разные ножки с целью установки на каждом своего аналогового анти-алиазингового фильтра не хочется, тогда я не смогу в одном камне разместить 8 каналов. 

Тогда я предварительно погнал массив сырых значений через КИХ- фильтр. ЗдОрово! Это решение, фильтр работает. Но появилось еще одно но. Теперь магнитуда после FFT стала медленно плавать с частотой 0,06-0,07Гц., немного, но ощутимо для измерительного прибора, что есть недопустимо.

Видимо, что то еще "не докрутил" как нужно.

Коллеги, помогите если не трудно, код прикреплю "по требованию".

Share this post


Link to post
Share on other sites

Можно разбить весь диапазон частот на зоны, для каждого определить спектр а потом склеить.

Снять сигнал с SampleRate несколько килогерц, потом перейти на половинную с помощью halfpass FIR с децимацией, и так далее много раз.

Делал что то подобное, но использовал TMS32C6XX.

Share this post


Link to post
Share on other sites

On 4/1/2024 at 11:47 AM, TAutomatic said:

Теперь магнитуда после FFT стала медленно плавать с частотой 0,06-0,07Гц, ...

Умножить сигнал на окно (Гаусса, Чебышева и т.п.) перед FFT не забыли?

Share this post


Link to post
Share on other sites

10 минут назад, blackfin сказал:

Умножить сигнал на окно (Гаусса, Чебышева и т.п.) перед FFT не забыли?

Не то что бы забыл, не знал 🙂  Я так понимаю, что оконную функцию стоит применять тогда, когда периодов сеплировано немного, что бы обрывки синусоиды не вносили искажения.

если поделитесь советом, тем не менее буду признателен.

Я делаю так. Для трех каналов буферы одинакового размера что бы проще укладывать в одну подпрограмму.

Для нижней части диапазона у меня частота выборок 40,96Гц, на буфере в 4096 семплов имею разрешающую способность 0,01Гц и 20Гц верх диапазона.

В средней части аналогично 2048Гц, 0,5Гц и 1кГц

Для верхней части 4096Гц,  1Гц и максимальная частот 2кГц

А что обозначает - склеить

Edited by TAutomatic
Ошибка правописания

Share this post


Link to post
Share on other sites

On 4/1/2024 at 12:39 PM, TAutomatic said:

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

А что мешает попробовать и сравнить результаты?

См: Сергиенко А.Б., ЦОС., стр. 342.

Share this post


Link to post
Share on other sites

3 минуты назад, blackfin сказал:

А что мешает попробовать и сравнить результаты?

См: Сергиенко А.Б., ЦОС., стр. 342.

Так то оно правильно, попробовать ничего не мешает. Но я пока не совсем понимаю цель. Само по себе без предварительного КИХ БПФ выполняется правильно. С генератора 1Гц четко опознается познается с правильным индексом в массиве, никаких побочны гармоник существенной магнитуды нет, тоже самое для других частот и диапазонов: 100Гц, 1кГц например.

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

КИХ, окно, БПФ - так?

Share this post


Link to post
Share on other sites

On 4/1/2024 at 12:52 PM, TAutomatic said:

КИХ, окно, БПФ - так?

Так, но антиалиасинговый фильтр нужно делать в аналоге. И полоса пропускания должна быть меньше половины частоты семплирования, но больше полосы входного сигнала.

Если используете оверсемплинг, то можно антиалиасинговый фильтр разбить на два: широкополосный - в аналоге, узкополосный - в цифре (напр., КИХ).

Share this post


Link to post
Share on other sites

1 минуту назад, blackfin сказал:

Так, но антиалиасинговый фильтр нужно делать в аналоге. И полоса пропускания должна быть меньше половины частоты семплирования, но больше полосы входного сигнала.

Если используете оверсемплинг, то можно антиалиасинговый фильтр разбить на два: широкополосный - в аналоге, узкополосный - в цифре (напр., КИХ).

Так в этом же и загвоздка, как я сделаю один аналоговый фильтр для всех полос? Если у меня максимальная частота 2кГц, то нужен фильтр на частоте среза 4кГц, что явно плохо для полосы 0,01-20Гц

Либо я не понимаю пока нюанса.

Share this post


Link to post
Share on other sites

5 hours ago, TAutomatic said:

Если у меня максимальная частота 2кГц

Sample rate сделайте килогерц шесть..семь.

Аналоговый фильтр на входе на 2.5 кгц

Share this post


Link to post
Share on other sites

On 4/1/2024 at 12:39 PM, TAutomatic said:

Для нижней части диапазона у меня частота выборок 40,96Гц, на буфере в 4096 семплов имею разрешающую способность 0,01Гц и 20Гц верх диапазона.

В средней части аналогично 2048Гц, 0,5Гц и 1кГц

Для верхней части 4096Гц,  1Гц и максимальная частот 2кГц

 

On 4/1/2024 at 1:09 PM, TAutomatic said:

Так в этом же и загвоздка, как я сделаю один аналоговый фильтр для всех полос? Если у меня максимальная частота 2кГц, то нужен фильтр на частоте среза 4кГц, что явно плохо для полосы 0,01-20Гц

Три банка фильтров с децимацией соединенных последовательно решат вашу проблему.
АЦП нужен один с частотой семплирования 4096 Гц (а лучше, 8192 Гц).
Аналоговый фильтр на входе тоже один с полосой пропускания 2 кГц.

 

Держите букварь:
 

multirate_article.pdf

Share this post


Link to post
Share on other sites

1 час назад, blackfin сказал:

 

Три банка фильтров с децимацией соединенных последовательно решат вашу проблему.
АЦП нужен один с частотой семплирования 4096 Гц (а лучше, 8192 Гц).
Аналоговый фильтр на входе тоже один с полосой пропускания 2 кГц.

 

Держите букварь:
 

multirate_article.pdf 2.93 МБ · 4 загрузки

Спасибо.

Ну а все таки по первичному вопросу. БПФ сигнала от образцового источника  дает постоянную магнитуду нужной частоты, при использовании КИХ начинает модулироваться синусоидальным сигналом очень низкой частоты?

Share this post


Link to post
Share on other sites

В 01.04.2024 в 20:25, TAutomatic сказал:

Спасибо.

Ну а все таки по первичному вопросу. БПФ сигнала от образцового источника  дает постоянную магнитуду нужной частоты, при использовании КИХ начинает модулироваться синусоидальным сигналом очень низкой частоты?

Это модуляция или все-таки сумма двух сигналов, один из которых с очень низкой  частотой? Если частота сигнала Fs на входе АЦП превышает Fd/2, цифровой фильтр уже не поможет.  Если сигнал узкополосный (чистый синус), то его можно и с меньшей, чем  Fs*2 частотой оцифровывать (вторая зона Найквиста и т.д.). Но если частота сигнала близка к Fd, то разностная частота попадет в первую зону и соответственно в спектр. КИХ фильтр это ФНЧ? Вот он эту частоту и приподнял.

Share this post


Link to post
Share on other sites

В 01.04.2024 в 10:47, TAutomatic сказал:

Подробнее. Есть задача - анализировать спектр частот от датчиков, полоса от долей герца до нескольких килогерц. Примерно 0,5Гц - 2кГц.

....

завел сигнал на одну ногу контроллера, выполняю АЦП сразу тремя доступными каналами ADC1-ADC3 с одной ноги, первый канал с медленным семплирование, но с разрешением 0,01Гц, второй побыстрее, третий совсем быстро ну это разумеется "быстро" относительно максимальной частоты.

А зачем разная частота семплирования?  

Я еще понимаю, чтобы динамический диапазон увеличить- подавать на два входа АЦП по-разному усиленный сигнал, и использовать для DSP ту последовательность, которая не переполняется. Но вот зачем разный семплрейт?

Кстати, про производительность- на F4 можно очень много чего, главное чтобы RAM хватило на нужные DSP.

 

Но лучше начинать с построения матмодели того, что делаете, на компьютере. Матлаб- наше все. А вот когда понравятся результаты, уже идти в железо.

Share this post


Link to post
Share on other sites

В 02.04.2024 в 21:43, komah сказал:

Это модуляция или все-таки сумма двух сигналов, один из которых с очень низкой  частотой? Если частота сигнала Fs на входе АЦП превышает Fd/2, цифровой фильтр уже не поможет.  Если сигнал узкополосный (чистый синус), то его можно и с меньшей, чем  Fs*2 частотой оцифровывать (вторая зона Найквиста и т.д.). Но если частота сигнала близка к Fd, то разностная частота попадет в первую зону и соответственно в спектр. КИХ фильтр это ФНЧ? Вот он эту частоту и приподнял.

Видится как модуляция низкочастотным сигналом. Задебажил значения за несколько десятков секунд, построил график в экселе, правильная красивая синусоида. Почему КИХ- фильтр низких частот с одной стороны красиво режет все на частоте среза, но в тоже время вносит искажение в исходный сигнал... Вот в чем вопрос да,

Share this post


Link to post
Share on other sites

Если фильтр реализован правильно, то новых спектральных составляющих он добавлять не должен. Думаю, дело не в нем. Код на Си, можно просто просто проверить на ПК, с модельным сигналом. Самый главный вопрос - соотношение между частотой сигнала и частотой дискретизации. Ну и посмотреть, нет ли ограничения при оцифровке - амплитуда слишком большая, опорное напряжение неправильное...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...