AHTOXA 18 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 23 минуты назад, Forger сказал: Еще как помогает - сильно сокращает влияние каждого нового замера (отчета) на выходной результат фильтра. Получается, результат ваших нескольких десятков глубокомысленных сообщений - банальное увеличение постоянной времени фильтра? Да уж... 27 минут назад, Forger сказал: Поэтому и привел аналогию с конденсатором, как наиболее наглядную - ставим больше кондер (ширина окна скользящего), показания дергаются меньше. Вам надо было сказать не "конденсатор", а "RC-фильтр", тогда вашу аналогию понял бы не только программист, но и электронщик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 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 - входные данные Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 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) типовое скользящее среднее У меня на работе был один деятель, который построил такой же колхозный "фильтр", но он пошел дальше - с максимально возможно скоростью собирал с АЦП порцию данных, потом ее пропускал через этот чудо фильтр, где-то там отображал, что-то рассчитывал. А потом опять повторял все снова. Сэмплирование (если так его можно тут назвать) производилось порциями, а не равномерно. Деятель потом долго удивлялся, почему его "фильтр" ни черта не работает. Мои попытки объяснить, что сэмплирование нужно делать со строгой периодичностью, ни к чему не привели. Ровно до тех пор, пока этот деятель не сталь изучать хотя бы базовые основы этой области. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 1 минуту назад, Forger сказал: Поздравляю. Но подобный "фильтр" не учитывает скачка между этим порциями. У сигнала со скачком широкий спектр. У меня сигнал с принудительным ограничением спектра перед АЦП (RC-цепочка) с частотой среза fc. Делаю преобразование с fd >> fc. Затем усредняю и децимирую по N отсчетам, ибо fd мне очень много. Потом делаю гистерезис и вывожу на индикатор. Сам сигнал меняется медленно, гораздо медленнее fc. Поэтому имею право. Подавать на вход скачкообразный сигнал нельзя, т.к. это нарушает теорему Котельникова, и в общем случае будет погода на Марсе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 8 minutes ago, adnega said: Подавать на вход скачкообразный сигнал нельзя, Но его можно смело подать на этот ни разу не линейный фильтр скользящего среднего. Он такое прекрасно прожевывает. Отлично заменяет большую внешнюю RC-цепочку. Для тяжелых случаев с плохой схемотехникой можно перед этим пропустить сигнал через медианный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 16 минут назад, Forger сказал: ни разу не линейный фильтр скользящего среднего С такими заявлениями можно нарваться еще на пару страниц матана ;) Начну. Что для вас "линейный фильтр"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 2 minutes ago, adnega said: Начну. А я закончу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 23 минуты назад, Forger сказал: Отлично заменяет большую внешнюю RC-цепочку. А чем БИХ-фильтр не устроил? Считается в разы проще этого вашего скользящего среднего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 9 minutes ago, adnega said: А чем БИХ-фильтр не устроил? Считается в разы проще этого вашего скользящего среднего. Не в разы: скользящее каждый отчет требует одно вычитание, одно сложение и всего одно деление. БИХ при равнозначной производительности (с соотв. порядком) катастрофически уступаел скользящему среднему, особенно если у последнего ширина окна десятки, а то и сотни отчетов. К тому же на высоких порядках у БИХ вылезали другие неприятности. Один большой минус скользящего среднего - требуется много памяти, для хранения всех предыдущих отчетов (( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба Скользящее среднее - не аналог RC цепочки. RC цепочка - фильтр БИХ. Если усредняете скользящим средним 10 выборок, и получаете результат после каждого усреднения, а потом выводите только 1 из 10, это то же самое, что усреднить 10 выборок и выдать результат, потом для следующих 10, и т. д. Это фильтр КИХ (как ни выдавай, каждый такт или каждый 10-й,неважно). adnega прав, Forger нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 12 minutes ago, ViKo said: Если усредняете скользящим средним 10 выборок, и получаете результат после каждого усреднения, а потом выводите только 1 из 10, это то же самое, что усреднить 10 выборок и выдать результат, потом для следующих 10, и т. д. Нет, это разные вещи. О чем я говорил выше. Кусочное усреднение группами по 10 и скользящее с окном 10 отчетов дают разные результаты. Разумеется, когда речь идет про изменяющийся сигнал, причем порой скачкообразно. Сама суть скользящего среднего - постоянное "держание в уме" этого самого среднего значения. Переходя на кусочные расчеты группами всегда будет теряться накопленный результат среднего значения из предыдущей группы. У скользящего среднего такого "эффекта" нет. Поэтому такой псевдо-фильтр вместо простого скользящего среднего будет вести себя как минимум странно, например, с периодическим сигналом с частотой, близкой частоте, деленной на число отчетов в группе такого "фильтра". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба Если вы выдаёте только каждый 10-й (в моём примере) результат - то абсолютно одинаковый. Возьмите на бумаге прикиньте выборки и их скользящее среднее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 11 минут назад, Forger сказал: Нет, это разные вещи. О чем я говорил выше. Если вы отображаете синхронно с семплированием (хоть 1:10, хоть 1:1000), то будет ровно как утверждает ViKo (ранее RobFPGA и я). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 13 минут назад, Forger сказал: У скользящего среднего такого "эффекта" нет. Есть. Бесконечно помнит только БИХ фильтр, с обратной связью выхода на вход. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2019 Опубликовано 30 июня, 2019 · Жалоба 2 минуты назад, ViKo сказал: Если вы выдаёте только каждый 10-й (в моём примере) результат - то абсолютно одинаковый. Возьмите на бумаге прикиньте выборки и их скользящее среднее. Он берет выборки как попало, а не каждую 10. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться