Easyelectronics.ru

Электроника для всех
Текущее время: 22 июн 2018, 12:32

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 10:32 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 536
Привет.
Сгенерировал FIR фильтр в filter solutions. Фильтр будет использоваться с микросхемой HX711 тензорные весы.
Фильтр нижней частоты. Окно Hamming.
Частота дискретизации 80 Гц. Полоса пропускания 1 Гц.
Получил вот такой код:
Show

Мне не ясно как правильно использовать данную функцию.
Что за параметры invar initval setic?
Как правильно передать данные в функцию и забрать отфильтрованные.
И как проверить что данный фильтр рабочей?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 11:13 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2442
Откуда: Санкт-Петербург
Фильтр рабочий. Но он вам не нужен. Вам нужен простенький IIR невысокого порядка, на уровне y += (x-y)*0.01.

invar - очередное входное значение (фильтрует по 1 отсчёту за раз)
initval - начальное значение (как будто до вашего сигнала всё время шло это значение)
setic - если подать 1, то фильтр сбросится в исходное состояние (как будто на входе долго был initval)

Использовать - один раз позвать с setic=1, потом для каждого отсчёта звать с setic=0 и получать результат, что ещё?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 11:34 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 536
aamonster можно попросить у вас пример кода работы с данным фильтром?
У них есть возможность убрать галочку initialize capability. И получить следующий код:
Show

Я сделал обычный рекурсивный фильтр:
Show

Но данные болтает из стороны в сторону. Вот думаю о ких фильтре или бих фильтре. Но решил опробовать сначала ких.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 13:00 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2442
Откуда: Санкт-Петербург
zhilenkov, так и будет болтать. Фильтры - это не что-то чудесное, тут степень сглаживания обратно пропорциональна времени отклика, и разницу между вашим опробованным фильтром (скользящее среднее), сгенерированным софтиной КИХ и "моим" (простейший БИХ) вы даже и не заметите (во всяком случае, если чуть-чуть поиграть с параметрами, чтобы они обеспечивали одинаковую "степень сглаживания").

Конкретно для весов, скорее всего, можно сделать фильтр лучше: не просто давить выше определённой частоты, а подавить резонансы системы весы-груз. Но оно вам надо?

Пример... Какой пример? Для сгенерённого? Просто вместо вашей функции filter вызываете их DigFil.
Для "моего"? Вместо filter(x) пишете y += (x-y)*0.01 (и используете значение y). Да, где будете переменную y определять (в начале проги) - инициализируйте её каким-нибудь разумным значением, например float y=0.0;
Если слабо сглаживает - вместо 0.01 ставите значение поменьше. Если слишком медленно реагирует на вес - наоборот, побольше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 13:53 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2908
простого y+= (x-y)/K c 20дБ/дек может не хватить, если надо с полосой 1 Гц хорошо задавить какие-нибудь 50Гц или собственные резонансы на единицах/десятках Гц.
в самих АЦП внутри как правило обходятся CIC фильтрами из-за их простоты да и частоту/децимацию дополнительно можно подобрать так чтобы провалы как раз попадали куда надо, чтобы те же 50Гц полностью задавить.
https://github.com/EsonJohn/CIC-filter плюсы только убрать и динамическое выделение памяти, останется несколько строчек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:05 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 536
Прикрепил экспериментальные данные. Снимались 30 мин. Работает рекурсивный фильтр. Между отчетами 4 сек. Частота HX711 80 Гц.

Есть еще одна проблема, плывет сам датчик. Помимо того что шумит.


Вложения:
1.log [3.08 Кб]
Скачиваний: 11
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:38 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4487
Не (только) датчик плавает, а 711.
Для борьбы с шумом делайте оцифровку Чаще, желательно кратно 20 мс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:58 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2442
Откуда: Санкт-Петербург
_pv, CIC хорошо, да. Но для топикстартера может быть сложновато. Кстати, что касается резонансов - их частоты могут зависеть от массы на весах, так что фильтр для них может стать неочевидным и узкоспециализированным.

zhilenkov, ну, что плывёт - тут вы особо ничего сделать не сможете, наверное (может, это разогрев датчика, может, ещё что) - лучше смириться, понять, какая точность достижима, и выводить нужное количество значащих цифр (опционально - поборовшись с "дрожанием" показаний с помощью небольшого гистерезиса)

Кстати о "дрожании": если у вас на весах постоянный вес - есть ещё варианты, как показывать и быстро, и ровно. Например, два фильтра с разными постоянными (1 с и 10 с), и когда разница между ними мала - "прижиматься" к 10-секундному. Получится, что как поместили груз на весы - быстро показали результат "с дрожанием", а потом дрожание потихоньку ушло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 15:26 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 219
aamonster писал(а):
_pv, CIC хорошо, да. Но для топикстартера может быть сложновато. Кстати, что касается резонансов - их частоты могут зависеть от массы на весах, так что фильтр для них может стать неочевидным и узкоспециализированным.


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

В несколько похоже случае я делал так: сначала КИХ-фильтр, который отрезал все лишнее выше Fs/2 (где Fs - частота дискретизации), потом делал CIC-дециматор (который, кстати, тоже вносил свой вклад в подавление нежелательных гармоник), потом еще один БИХ-фильтр то ли 4-го, то ли 6-го порядка - не помню уже - с частотой среза где-то Fs/4, причем именно для новой Fs, пониженной. Тогда на выходе получались достаточно чистые данные. Но задержка становилась довольно-таки приличной, около 300, а то и 400 мс. Но для меня это было некритично.

Еще один вариант по сабжу - это взять сигма-дельта АЦП какой-нибудь для инструментальных измерений. В нем "по долгу службы" уже стоит цепочка из дециматоров, интерполяторов и sinc-фильтров, которая и 50 Гц помех подавит, и всяческие резонансы. Я уже забыл, какой применяли на старой работе. AD77xx какой-то. http://www.analog.com/en/parametricsear ... 0Modulator - вот в этой таблице можно выбрать какой-нибудь из АЦП с архитектура Sigma-delta.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 15:34 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4487
Для справки - 711'ый только после переключения выдает полноценный отсчет (поэтому он такой долгий). Все последующие являются частичной выборкой с усреднением. Не помню, там банальная alpha или окно на N отсчетов.
С точки зрения адекватности, полезнее делать полноценные отсчеты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 17:21 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 536
Что вы думаете о питание моста переменным напряжением как это сделано в http://www.ti.com/lit/ug/tiduac1/tiduac1.pdf ? стр. 4 пункт 2.2.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 17:36 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2908
в нормальных АЦП уже внутри всё для этого сделано: ADS1261, AD7195.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 06 июн 2018, 10:27 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 527
aamonster писал(а):
Фильтр рабочий. Но он вам не нужен. Вам нужен простенький IIR невысокого порядка, на уровне y += (x-y)*0.01.

invar - очередное входное значение (фильтрует по 1 отсчёту за раз)
initval - начальное значение (как будто до вашего сигнала всё время шло это значение)
setic - если подать 1, то фильтр сбросится в исходное состояние (как будто на входе долго был initval)

Использовать - один раз позвать с setic=1, потом для каждого отсчёта звать с setic=0 и получать результат, что ещё?

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


В защиту этих самых дятлов.... Вообще говоря программка не плохая. Хорошо считает всевозможные аналоговые и активные фильтры. Ну коэффициенты для цифровых фильтров тоже. Насчет использования ихнего кода сказать ничего не могу не использовал.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB