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

Дребезг параметра на индикаторе, как бороться?

23 минуты назад, Forger сказал:

Еще как помогает - сильно сокращает влияние каждого нового замера (отчета) на выходной результат фильтра.

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

27 минут назад, Forger сказал:

Поэтому и привел аналогию с конденсатором, как наиболее наглядную - ставим больше кондер (ширина окна скользящего), показания дергаются меньше. 

Вам надо было сказать не "конденсатор", а "RC-фильтр", тогда вашу аналогию понял бы не только программист, но и электронщик.

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


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

34 минуты назад, Forger сказал:

Ну, наконец-то! Алилуйя! А натрещали на несколько страниц. 

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

Цитата

Еще как помогает - сильно сокращает влияние каждого нового замера (отчета) на выходной результат фильтра.

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

Цитата

Поэтому и привел аналогию с конденсатором, как наиболее наглядную - ставим больше кондер (ширина окна скользящего), показания дергаются меньше.

Ага. Уменьшаем вывод на экран до "раз в минуту", и они вообще минуту не меняются. Это способ сэкономить на конденсаторах.

Цитата

Это НЕ одно и тоже.

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

Утверждается, что если результат хоть как-то синхронизируется с частотой дискретизации, то вы можете мощно сэкономить на вычислениях.

Раз эдак в 1000. Разумеется, любой нормальный инженер пойдет по пути экономии (если результат тот же, то зачем платить больше?),

а указанный вами вариант будет назван некорректным.

Из практики:

- я применяю усреднение за N отсчетов (не скользящее). Беру 8 отсчетов, считаю среднее, получаю 1 отсчет результата. Беру следующие 8 отсчетов и т.д.;

- ST для АЦП рекомендуют брать 8 отсчетов, выкидывать 2 самых маленьких и 2 самых больших, оставшиеся 4 усреднить;

- вот БИХ-вариант ФНЧ в математике с фиксированной точной
 

        y = y + (x - (y >> SNS_SHIFT)) * SNS_VALUE_NORMAL;

#define SNS_FDATA                            (0.9500f) // коэффициент фильтра ФНЧ: 0 - выключен, 0.9999 - очень тормозящий изменение показаний

#define SNS_SHIFT                            (16UL)

#define SNS_VALUE_NORMAL            ((int)((1.0f - SNS_FDATA) * (1 << SNS_SHIFT)))

y - результат
x - входные данные

 

 

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


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

26 minutes ago, adnega said:

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

Не пользовались, не знаете что это дает. Поэтому это утверждение - мимо. 

Как верно было подмечено выше - скользящее среднее это RC цепочка (не просто конденсатор). Да, банально, но крайне эффективно для подобной ерунды.

 

Quote

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

Не будут. Если конечно сравнивать с решением вообще без фильтрации.

 

Quote

Ага. Уменьшаем вывод на экран до "раз в минуту", и они вообще минуту не меняются. Это способ сэкономить на конденсаторах.

Меняются - "телепаются" раз в минуту. Наличие конденстатора RC-цепочки значительно сокращает эти телепания.

 

Quote

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

Да, это не запрещено конституцией. Или я не прав?

 

Quote

Утверждается, что если результат хоть как-то синхронизируется с частотой дискретизации, то вы можете мощно сэкономить на вычислениях.

В моих проектах как раз отсутствие такой жесткой связи между обработкой данных (фильтрацией) и их отображением мне только на плюс.

 

 

Quote

Из практики:

- я применяю усреднение за N отсчетов (не скользящее). Беру 8 отсчетов, считаю среднее, получаю 1 отсчет результата. Беру следующие 8 отсчетов и т.д.;

Но подобный "фильтр" не учитывает скачка между этим порциями.

Скажем, первая группа: 100, 100, 100, 100, 100, 100, 100, 100 - среднее =100.

Вторая: 1, 1, 1, 1, 1, 1, 1, 1 - среднее = 1.

Т.е. идет резкий скачок из 100 в 1. На индикаторе это будет видно соотв. свистопляской. Причем сильно будет зависеть то того, как совпадет частота этих скачков с частотой сбора этих "кусочков" (т.н. "биения" для внешнего периодического сигнала).

Скользящее среднее работает совсем иначе: такого резкого скачка не будет, а будет плавный переход из среднего 100 в среднее 1

Так что может более некорректным?

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

2) типовое скользящее среднее

 

У меня на работе был один деятель, который построил такой же колхозный "фильтр", но он пошел дальше - с максимально возможно скоростью собирал с АЦП порцию данных, потом ее пропускал через этот чудо фильтр, где-то там отображал, что-то рассчитывал.

А потом опять повторял все снова. Сэмплирование (если так его можно тут назвать) производилось порциями, а не равномерно. 

Деятель потом долго удивлялся, почему его "фильтр" ни черта не работает. Мои попытки объяснить, что сэмплирование нужно делать со строгой периодичностью, ни к чему не привели.

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

 

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


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

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

Поздравляю. Но подобный "фильтр" не учитывает скачка между этим порциями.

У сигнала со скачком широкий спектр. У меня сигнал с принудительным ограничением спектра перед АЦП (RC-цепочка) с частотой среза fc.

Делаю преобразование с fd >> fc. Затем усредняю и децимирую по N отсчетам, ибо fd мне очень много. Потом делаю гистерезис и вывожу на индикатор.

Сам сигнал меняется медленно, гораздо медленнее fc. Поэтому имею право.

Подавать на вход скачкообразный сигнал нельзя, т.к. это нарушает теорему Котельникова, и в общем случае будет погода на Марсе.

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


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

8 minutes ago, adnega said:

Подавать на вход скачкообразный сигнал нельзя,

Но его можно смело подать на этот ни разу не линейный фильтр скользящего среднего. Он такое прекрасно прожевывает. Отлично заменяет большую внешнюю RC-цепочку.

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

 

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


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

16 минут назад, Forger сказал:

ни разу не линейный фильтр скользящего среднего

С такими заявлениями можно нарваться еще на пару страниц матана ;) Начну.

Что для вас "линейный фильтр"?

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


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

23 минуты назад, Forger сказал:

Отлично заменяет большую внешнюю RC-цепочку.

А чем БИХ-фильтр не устроил? Считается в разы проще этого вашего скользящего среднего.

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


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

9 minutes ago, adnega said:

А чем БИХ-фильтр не устроил? Считается в разы проще этого вашего скользящего среднего.

Не в разы: скользящее каждый отчет требует одно вычитание, одно сложение и всего одно деление.

БИХ при равнозначной производительности (с соотв. порядком) катастрофически уступаел скользящему среднему, особенно если у последнего ширина окна десятки, а то и сотни отчетов.

К тому же на высоких порядках у БИХ вылезали другие неприятности. 

Один большой минус скользящего среднего - требуется много памяти, для хранения всех предыдущих отчетов ((

 

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


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

Скользящее среднее - не аналог RC цепочки. RC цепочка - фильтр БИХ. 

Если усредняете скользящим средним 10 выборок, и получаете результат после каждого усреднения, а потом выводите только 1 из 10, это то же самое, что усреднить 10 выборок и выдать результат, потом для следующих 10, и т. д. Это фильтр КИХ (как ни выдавай, каждый такт или каждый 10-й,неважно).

adnega прав, Forger нет. 

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


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

12 minutes ago, ViKo said:

Если усредняете скользящим средним 10 выборок, и получаете результат после каждого усреднения, а потом выводите только 1 из 10, это то же самое, что усреднить 10 выборок и выдать результат, потом для следующих 10, и т. д.

Нет, это разные вещи. О чем я говорил выше.

Кусочное усреднение группами по 10 и скользящее с окном 10 отчетов дают разные результаты. Разумеется, когда речь идет про изменяющийся сигнал, причем порой скачкообразно.

Сама суть скользящего среднего - постоянное "держание в уме" этого самого среднего значения. Переходя на кусочные расчеты группами всегда будет теряться накопленный результат среднего значения из предыдущей группы. У скользящего среднего такого "эффекта" нет.

Поэтому такой псевдо-фильтр вместо простого скользящего среднего будет вести себя как минимум странно, например, с периодическим сигналом с частотой, близкой частоте, деленной на число отчетов в группе такого "фильтра".

 

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


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

Если вы выдаёте только каждый 10-й (в моём примере) результат - то абсолютно одинаковый. Возьмите на бумаге прикиньте выборки и их скользящее среднее. 

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


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

11 минут назад, Forger сказал:

Нет, это разные вещи. О чем я говорил выше.

Если вы отображаете синхронно с семплированием (хоть 1:10, хоть 1:1000), то будет ровно как утверждает ViKo (ранее RobFPGA и я).

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


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

13 минут назад, Forger сказал:

У скользящего среднего такого "эффекта" нет.

Есть. Бесконечно помнит только БИХ фильтр, с обратной связью выхода на вход.

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


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

2 минуты назад, ViKo сказал:

Если вы выдаёте только каждый 10-й (в моём примере) результат - то абсолютно одинаковый. Возьмите на бумаге прикиньте выборки и их скользящее среднее. 

Он берет выборки как попало, а не каждую 10.

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


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

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

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

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

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

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

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

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

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

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