STM32, первые впечатления.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
НЧ фильтр с постоянной времени 0.001 c. Выборка 50кГц.
Прога в микробейсике.
program filtr
dim akk as longword
dim Vout as word
dim Vin as word
main:
ADC1_Init()
ADC_Set_Input_Channel(6)
GPIO_Digital_Output(@GPIOB_BASE, _GPIO_PINMASK_ALL)
while TRUE
Vin = ADC1_Read(6)
akk = akk + Vin - Vout
Vout = akk / 50
GPIOB_ODR = Vout
wend
end.
Сигнал на выходе ЦАПа из резисторов. На входе меандр 240 Гц.
Прога в микробейсике.
program filtr
dim akk as longword
dim Vout as word
dim Vin as word
main:
ADC1_Init()
ADC_Set_Input_Channel(6)
GPIO_Digital_Output(@GPIOB_BASE, _GPIO_PINMASK_ALL)
while TRUE
Vin = ADC1_Read(6)
akk = akk + Vin - Vout
Vout = akk / 50
GPIOB_ODR = Vout
wend
end.
Сигнал на выходе ЦАПа из резисторов. На входе меандр 240 Гц.
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32, первые впечатления.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3884266#p3884266"]НЧ фильтр с постоянной времени 0.001 c. Выборка 50кГц.[/uquote]
Из приведенной программы следует, что реализован IIR LPF первого порядка в узких кругах именуемый ЭКСПОНЕНЦИАЛЬНЫМ ФИЛЬТРОМ СГЛАЖИВАНИЯ имеющим простейшую математику вида:
Uout [i+1]=(1-b)*Uout+b*Uin[i+1], где b<1.
Реализован коэффициент фильтра b=0,02.
Из той же программы совершенно не следует, что частота выборок равна 50 кГц, как не следует и соответствие фильтра этой частоте....
Экспоненциальные фильтры обычно применяют не для фильтрации сигналов, а для сглаживания пульсаций. Это канешна тоже фильтрация, но самая примитивная.
Странно ее реализовывать на АРМах. Такой фильтр на предложенной частоте дискретизации может переварить и восьмибитник...
И уж тем более, для его расчета не требуется никакая программа.
Из приведенной программы следует, что реализован IIR LPF первого порядка в узких кругах именуемый ЭКСПОНЕНЦИАЛЬНЫМ ФИЛЬТРОМ СГЛАЖИВАНИЯ имеющим простейшую математику вида:
Uout [i+1]=(1-b)*Uout+b*Uin[i+1], где b<1.
Реализован коэффициент фильтра b=0,02.
Из той же программы совершенно не следует, что частота выборок равна 50 кГц, как не следует и соответствие фильтра этой частоте....
Экспоненциальные фильтры обычно применяют не для фильтрации сигналов, а для сглаживания пульсаций. Это канешна тоже фильтрация, но самая примитивная.
Странно ее реализовывать на АРМах. Такой фильтр на предложенной частоте дискретизации может переварить и восьмибитник...
И уж тем более, для его расчета не требуется никакая программа.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
КРАМ, это была проба пера, но я ценю Ваши комментарии. Прога Filter Solutions мне выдала готовый код на Си, но я с ним не разобрался. Алгоритм отрабатывал ручками в визуал бейсике. Если завтра сам не разберусь, то понадобится Ваша помощь. Если внимательно смотреть на выходной сигнал с ЦАПа, то видны некоторые дефекты, два пина PB3 и PB4 оказались нерабочими. То ли брак, то ли фаза на корпусе компа виновата. Обязательно заземляйте комп и другие сетевые приборы. Евростандарт обязывает ставить кондеры с фазы на корпус. Европейцы ружья кирпичом не чистят и имеют на вилках третий контакт заземления.
Re: STM32, первые впечатления.
Eddy_Em, не осилит. У тебя на на лице учёная дотошность написана. Для тебя осиливать- профессиональная привычка. У поколения некст терпежа хватает на новостную заметку в один экран. Не суди людей, тем более молодых, по себе.А если обладает, то почему бы ему пару книжек по цифровой обработке сигналов не осилить?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32, первые впечатления.
tonyk, если не осилит, то пусть сливается в канализацию! Тем паче, у нас нонче "капитализм", и слабые просто вымирают. Псевдоестественный отбор...
- Реклама
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
Filter Solutions генерирует не совсем корректный код. Подправил, как сам понимаю и заработало.
Там еще все типы float и пришлось переводить в целые для быстродействия. А раз нельзя тупо копировать, то буду еще переводить на бейсик.
Там еще все типы float и пришлось переводить в целые для быстродействия. А раз нельзя тупо копировать, то буду еще переводить на бейсик.
Re: STM32, первые впечатления.
Возьмите МК с аппаратной поддержкой плавающей точки (M4, M7).linkov1959 писал(а):Там еще все типы float и пришлось переводить в целые для быстродействия.
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32, первые впечатления.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3884811#p3884811"]Там еще все типы float и пришлось переводить в целые для быстродействия[/uquote]
Рекурсивные фильтры нельзя переводить в целые. Нужен либо флоат, либо фикспойнт.
Иначе рекурсивный фильтр будет иметь порог в связи с умножением входного сигнала на коэффициент меньше 1.
Вы плавно приходите к пониманию простого факта - DSP не для школьнегов. За внешней якобы простотой кроется фундаментальная теория. И без ее понимания ничего путного получить невозможно.
Но у меня есть практический совет. Переходите на FIR. Он гораздо проще в реализации реальных фильтров с заданной АЧХ, а не эллиптического недофильтра.
Форма АЧХ в FIR определяется оконной функцией. А кроме того, можно использовать штатные DSP инструкции процессора в очень простом исполнении.
Рекурсивные фильтры нельзя переводить в целые. Нужен либо флоат, либо фикспойнт.
Иначе рекурсивный фильтр будет иметь порог в связи с умножением входного сигнала на коэффициент меньше 1.
Вы плавно приходите к пониманию простого факта - DSP не для школьнегов. За внешней якобы простотой кроется фундаментальная теория. И без ее понимания ничего путного получить невозможно.
Но у меня есть практический совет. Переходите на FIR. Он гораздо проще в реализации реальных фильтров с заданной АЧХ, а не эллиптического недофильтра.
Форма АЧХ в FIR определяется оконной функцией. А кроме того, можно использовать штатные DSP инструкции процессора в очень простом исполнении.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
КРАМ, мне реально нужен полосовой 4-го порядка до 1кГц с полосой 10-20Гц.
Я пробовал FIR в Filter Solutions, мне не понравился. В целые должно перевестись до 4-го порядка точно.
Целый час потратил, что бы расшифровать выражение [i<3?i:4-i]
Я пробовал FIR в Filter Solutions, мне не понравился. В целые должно перевестись до 4-го порядка точно.
Целый час потратил, что бы расшифровать выражение [i<3?i:4-i]
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32, первые впечатления.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3884948#p3884948"]В целые должно перевестись до 4-го порядка точно.[/uquote]
НЕТ!!!
Даже первый порядок - нет. Я объяснил почему. Только фикспойнт, как разновидность целого, но с фиксированной дробной частью.
На FIR такой проблемы нет. Там разрядность аккумулятора решает все, а числа могут быть целые и без дробной части.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3884948#p3884948"]Я пробовал FIR в Filter Solutions, мне не понравился.[/uquote]
Чем конкретно не понравился?
НЕТ!!!
Даже первый порядок - нет. Я объяснил почему. Только фикспойнт, как разновидность целого, но с фиксированной дробной частью.
На FIR такой проблемы нет. Там разрядность аккумулятора решает все, а числа могут быть целые и без дробной части.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3884948#p3884948"]Я пробовал FIR в Filter Solutions, мне не понравился.[/uquote]
Чем конкретно не понравился?
Re: STM32, первые впечатления.
Вот как раз теорию читать и не хотят. Потому и не понимают нифига. Я двумя руками "за" то, о чём говорит КРАМ. Для осознания глубины непонимания вопроса, нарисуйте схему аналоговой части своего цифрового фильтра. Нарисуете с первого раза правильно- пишите номер телефона, а я перевожу на него деньги на пиво.Вы плавно приходите к пониманию простого факта - DSP не для школьнегов. За внешней якобы простотой кроется фундаментальная теория. И без ее понимания ничего путного получить невозможно.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
КРАМ, АЧХ кривобокая и в коде сотни коэффициентов.
tonyk, Вы не в теме.
tonyk, Вы не в теме.
Re: STM32, первые впечатления.
Я-то как раз в теме, а тот кто написал, что я не в теме, не понял сути моего вопроса. И подвоха. Н-да, разберитесь с теорией для начала. С такой базой лезть в эту область не стОит.tonyk, Вы не в теме.
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32, первые впечатления.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3885064#p3885064"]КРАМ, АЧХ кривобокая и в коде сотни коэффициентов.[/uquote]
Эти "сотни коэффициентов" являются той самой оконной функцией. Длина оконной функции равна длине буфера сигнала. Форма АЧХ определяется формой оконной функции. ФЧХ абсолютно линейна. Фильтр абсолютно устойчив. Код фильтра при использовании DSP инструкций РОВНО ТРИ ИНСТРУКЦИИ. То есть фильтр - это тупо сумма произведений отсчетов в буфере на значения оконной функции с одинаковыми индексами. Ну еще нормировка после этого.
Что касается кривобокости, то полагаю, что Вы пытались задать некорректные условия реализации фильтра. БИХ при таких условиях просто возбуждается.
Открыл онлайн расчет КИХ (FIR) и за одну минуту получил вот такую АЧХ:

Стесняюсь спросить... А где тут "кривобокость?

Параметры:
Центральная частота 1кГц
Частота дискретизации 10 кГц
Полоса пропускания 100 Гц
Подавление вне полосы -80дБ
Неравномерность в полосе 1дБ.
Итого 601 тапов фильтра.
При системной частоте МК 100 МГц фильтр будет посчитан примерно за 6 мкс. При частоте дискретизации 10 кГц (период отсчетов 100 мкс) - более чем легкий режим.
http://t-filter.engineerjs.com/
[uquote="linkov1959",url="/forum/viewtopic.php?p=3885064#p3885064"]tonyk, Вы не в теме.[/uquote]
Вопрос был про антиалиасинг. Актуальный вопрос для полосового фильтра, патамушта имеет место быть противоречие с высокой частотой дискретизации - фильтр перестает быть реализуемым и потребуется два последовательных фильтра с децимацией между ними, тогда зеркальные частоты будут значительно отодвинуты от полосы пропускания фильтра и реализация антиалиасинга по входу АЦП будет простой. В предложенном выше фильтре для обеспечения подавления зеркальных частот на величину заграждения самого фильтра в антиалиасинге требования оказываются слишком высокими - примерно -35 дБ/окт.
Но ситуация с БИХ будет примерно такой же.
Эти "сотни коэффициентов" являются той самой оконной функцией. Длина оконной функции равна длине буфера сигнала. Форма АЧХ определяется формой оконной функции. ФЧХ абсолютно линейна. Фильтр абсолютно устойчив. Код фильтра при использовании DSP инструкций РОВНО ТРИ ИНСТРУКЦИИ. То есть фильтр - это тупо сумма произведений отсчетов в буфере на значения оконной функции с одинаковыми индексами. Ну еще нормировка после этого.
Что касается кривобокости, то полагаю, что Вы пытались задать некорректные условия реализации фильтра. БИХ при таких условиях просто возбуждается.
Открыл онлайн расчет КИХ (FIR) и за одну минуту получил вот такую АЧХ:
Стесняюсь спросить... А где тут "кривобокость?
Параметры:
Центральная частота 1кГц
Частота дискретизации 10 кГц
Полоса пропускания 100 Гц
Подавление вне полосы -80дБ
Неравномерность в полосе 1дБ.
Итого 601 тапов фильтра.
При системной частоте МК 100 МГц фильтр будет посчитан примерно за 6 мкс. При частоте дискретизации 10 кГц (период отсчетов 100 мкс) - более чем легкий режим.
http://t-filter.engineerjs.com/
[uquote="linkov1959",url="/forum/viewtopic.php?p=3885064#p3885064"]tonyk, Вы не в теме.[/uquote]
Вопрос был про антиалиасинг. Актуальный вопрос для полосового фильтра, патамушта имеет место быть противоречие с высокой частотой дискретизации - фильтр перестает быть реализуемым и потребуется два последовательных фильтра с децимацией между ними, тогда зеркальные частоты будут значительно отодвинуты от полосы пропускания фильтра и реализация антиалиасинга по входу АЦП будет простой. В предложенном выше фильтре для обеспечения подавления зеркальных частот на величину заграждения самого фильтра в антиалиасинге требования оказываются слишком высокими - примерно -35 дБ/окт.
Но ситуация с БИХ будет примерно такой же.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
По полосовым фильтрам 4-го порядка такой расклад выходит.
На каждую выборку приходится десяток умножений Float. Было 20мкС, стало 25.
Разогнал АЦП с 12 до 18 Мгц, работает стабильно, стало опять 20мкС.
Выходит, что максимальная частота выборки 50кГц. Ее нужно задавать таймером.
Повысить можно, если использовать stm32f401 c аппаратным Float и DMA c АЦП. Но в stm32f401 нет ни одного полного порта и придется ставить stm32f407 с внутренним ЦАП, а он дорогой, если на плате.
Прога Filter Solutions выдает код на Си. Замучился переводить в микроБейсик и поставил себе микроСи.
Почти тоже самое, легко освоился.
На каждую выборку приходится десяток умножений Float. Было 20мкС, стало 25.
Разогнал АЦП с 12 до 18 Мгц, работает стабильно, стало опять 20мкС.
Выходит, что максимальная частота выборки 50кГц. Ее нужно задавать таймером.
Повысить можно, если использовать stm32f401 c аппаратным Float и DMA c АЦП. Но в stm32f401 нет ни одного полного порта и придется ставить stm32f407 с внутренним ЦАП, а он дорогой, если на плате.
Прога Filter Solutions выдает код на Си. Замучился переводить в микроБейсик и поставил себе микроСи.
Почти тоже самое, легко освоился.
Re: STM32, первые впечатления.
Нет. В STM32F103 максимальная частота оцифровки 1 миллион выборок в секунду.linkov1959 писал(а):Выходит, что максимальная частота выборки 50кГц.
Что мешает в STM32F103 использовать таймер+АПЦ+DMA? Я об этом уже писал. https://radiokot.ru/forum/viewtopic.php ... 4#p3882554linkov1959 писал(а):Повысить можно, если использовать stm32f401 c аппаратным Float и DMA c АЦП.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
Мурик, Float вычисления тормозят. Пока мне 50кГц даже много, буду на 10-20кГц работать.
Сам по себе STM32F407 не дорогой, но придется плату самому делать, зато ЦАП внутри. Моя утюжная технология пока не справляется, но будем пробовать улучшить.
Сам по себе STM32F407 не дорогой, но придется плату самому делать, зато ЦАП внутри. Моя утюжная технология пока не справляется, но будем пробовать улучшить.
Re: STM32, первые впечатления.
Тогда можно попробовать STM32H750VBT6. Стоит примерно как STM32F407.
Аппаратно поддерживает float и double. Работает на частоте 480 МГц.
Аппаратно поддерживает float и double. Работает на частоте 480 МГц.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: STM32, первые впечатления.
Мурик, шустрый кристалл и ЦАП есть. Я с внутренним ЦАП не работал. Там аналоговый выход коммутируется на любой пин?
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32, первые впечатления.
[uquote="linkov1959",url="/forum/viewtopic.php?p=3885967#p3885967"]По полосовым фильтрам 4-го порядка такой расклад выходит.
На каждую выборку приходится десяток умножений Float. Было 20мкС, стало 25.
Разогнал АЦП с 12 до 18 Мгц, работает стабильно, стало опять 20мкС.[/uquote]Мыши кололись, плакали, но продолжали жрать кактус...
Какой то фееричный набор несуразностей...
Зачем нужно 18 МГц АЦП, если выборки 50 кГц? Впрочем, выборки 50 кГц так же ничем не обоснованы. Сигналы никак не определены от слова совсем.
Зачем применять рекурсивные фильтры в МК с практически неограниченным объемом ОЗУ для таких задач? Просто чтобы получить геморрой с флоатами?
Основная проблема с флоат без FPU не умножения, а сложения-вычитания, ибо требуется многократное приведение к нормативному виду и обратно.
Добавлено after 8 minutes 19 seconds:
[uquote="Мурик",url="/forum/viewtopic.php?p=3885976#p3885976"]Что мешает в STM32F103 использовать таймер+АЦП+DMA?[/uquote]
Ну наверное рекурсивная фильтрация...
Какой смысл в ДМА, если кольцевой буфер как таковой не нужен или он совсем короткий?
На каждую выборку приходится десяток умножений Float. Было 20мкС, стало 25.
Разогнал АЦП с 12 до 18 Мгц, работает стабильно, стало опять 20мкС.[/uquote]Мыши кололись, плакали, но продолжали жрать кактус...
Какой то фееричный набор несуразностей...
Зачем нужно 18 МГц АЦП, если выборки 50 кГц? Впрочем, выборки 50 кГц так же ничем не обоснованы. Сигналы никак не определены от слова совсем.
Зачем применять рекурсивные фильтры в МК с практически неограниченным объемом ОЗУ для таких задач? Просто чтобы получить геморрой с флоатами?
Основная проблема с флоат без FPU не умножения, а сложения-вычитания, ибо требуется многократное приведение к нормативному виду и обратно.
Добавлено after 8 minutes 19 seconds:
[uquote="Мурик",url="/forum/viewtopic.php?p=3885976#p3885976"]Что мешает в STM32F103 использовать таймер+АЦП+DMA?[/uquote]
Ну наверное рекурсивная фильтрация...


