Перейти к содержанию
    

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

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

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

Изменено пользователем TAutomatic
Ошибка правописания

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, TAutomatic said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

Спасибо.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

....

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...