Comments 21
Зачем так сложно и наукообразно про такую простую вещь?
Выход фильтра равен самому себе, плюс небольшая поправка, пропорциональная разнице входа и выхода.
y = y + 0.1*(x-y);
Коэффициент перед скобкой подбирать, чем меньше, тем сильнее фильтрует. Готово.
Как будете объяснять фильтры более высоких порядков?
Чисто занудства ради: не каждый фильтр второго порядка может быть получен как соединение двух фильтров первого порядка.
Для фильтрации данных температурного датчика нужен ФНЧ — и Вы выше приводите реккурентную формулу ФНЧ 1-го порядка с очень фиговым хвостатым АЧХ — это тоже самое что и RC-цепочку на вход датчика повесить — прашивается, причём тут цифровая обработка сигналов?
В цифре естественно будут до последнего пытаться использовать FIR, т.к. он хотя бы устойчивый, до тех пор пока умножалки на кристалле не закончаться. Для FIR фильтров порядки исчисляется десятками, сотнями и даже тысячами, IIR фильтр будет получаться поменьше, но тоже явно выше 2-го порядка.
А в аналоговой части, которая стоит дорого и занимает много места — там только IIR, ну вот например в роли дуплексеров базовых станций, про которые я упомянул, обычно используются, т.н. Cavity Filters — эт такие коробочки с полостями, внутри которых ещё и коаксиальный проводник — загуглите, у меня на первой же картинки вываливается фильтр 8-го порядка с 2-мя нулями — а это ещё фиговый фильтр и после него все равно придётся чистить и его все равно надо как-то рассчитывать.
Плюс есть отдельная область — адаптивной фильтрации, где в реальном времени адаптируется коэффициенты фильтра и их много — десятки и сотни (FIR), например, для той же echo cancelation — там задержки могут быть ого-го какими большими, а это наверное самая простая и линейная задача. Кстати нынче модная тема — нейронные сети, как раз и есть ответвление от адаптивной фильтрации — много там коэффициентов? Да до фига — линейный однослойный персептрон с n-входами — это FIR фильтр порядка n (пруфы у Хайкина), Black propagation — ну примерно тоже самое, что и LMS в адаптивнрй фильтрации, добавили обратную связь — и получили уже IIR.
Или High Order Kalman Filters (ой этих каламновских фильтров вообще до фига наплодили) — тоже можно за бих считать — они все большие и сложные, а применяются в той же навигации, ЭКГ и т.д.
Ну а Вы приводите достаточно простой пример и ещё и частный случай: там по-моему формула y[i] = a * x[i] + (1-a) * y[i-1] и там путем математических манипуляций получаем Вашу формулу: y[i] = y[i-1] + a * (x[i] — y[i-1]) — совсем частный случай, так ещё и в нестандартный форме. При этом это даже и не совсем полноценный фильтр (с утилитарной точки зрения конечно) — просто штука которая сглаживает отсчёты и добавляет немного инертности системе (что не всегда хорошо) а вот отфильтровать сигнал в полосе эдак мегагерц в 100 идеальным прямоугольник такой формулой уже не получиться. Я если честно пока Вы про температуру не написали, все никак не мог вспомнить — что это такое и куда это можно впихнуть.
Я в целом согласен, но почти полностью уверен, что адаптивный FIR c LMS настройкой не эквивалентен IIR, так как является нелинейной системой. Или вы что-то другое имели ввиду?
Потом снова берём эту нейросеть, начинаем усложнять её топологии, добавляем обратную связь — получаем реккурентную ИНС которая… ну по факту получается терь IIR фильтр. Ну и возвращаясь к изнальному вопросу — сколько на практике в фильтрах может быть коэффициентов — ну вот у нас сейчас есть те же нейросети которые у всех на слуху, все с их помощью пытаются распознавать котиков, строить регрессионные модели курса биткоина и которые из себя представляют адаптивные IIR и FIR фильтры на стероидах — вот сколько там коэффициентов? Да до фига и нужно ещё больше.
Ну т.е. найти задачу, где нужно фильтры офигенно большого порядка, наткнуться на динамическую систему супер-высокого порядка — это вообще не проблема — таких задач полно, хоть в радиосвязи, хоть в распознавания котиков, хоть в управление роботами (шагающие двуногие фиговины тоже далеко не самые простые системы) — куча их, и все они прыгают вокруг одной математики (только разные задачи и приёмы, но суть также). А вот обратная ситуация — как уменьшить количество умножалое — ха! Это вот уже серьезная проблема.
Есть пара хороших задач, например, сглаживание медленно-меняющихся данных или компенсация постоянной составляющей сигнала, где мы можем обойтись простыми фильтрами 1-го порядка, вот только практических задач где надо использовать фильтры с двух-трехзначным порядком ещё больше!
Поэтому мне пример в котором всю фильтрацию можно раскрыть показав одну формулу — модель RC цепочки — мне не очень понравился, т.к. Надо все объяснять на фундаментальных вещах: свертки там всякие, Фурье, Лапласс и т.д. — простые формулы, простые понятия, которые можно распространить на что угодно. А куда можно распространять один специфический сглаживающий фильтр?
Вы приводами занимаетесь? Пожалуйста. Для повышения точности слежения надо было повышать "агрессивность" регулятора (иначе говоря, повышать полосу пропускания, улучшать добротность, повышать быстродействие, много синонимов). Но у механической нагрузки был резонанс, который плавал, в зависимости от внешних параметров, в диапазоне шириной 20Гц. Чтобы этот резонанс не возбуждал систему, весь диапазон вырезался band-stop фильтром 14-го порядка.
Выход фильтра равен самому себе, плюс небольшая поправка, пропорциональная разнице входа и выхода.
y = y + 0.1*(x-y);
Если честно, то нифига не понятно: где другие X, куда они потерялисись? Какой из двух Y-ов, на сколько задержан? Более того:
1) Для КИХ фильтра это вообще абсолютно неверно — он просто домнажает и складывает все свои задержанные отсчеты
2) Да и для БИХ фильтра вообще-то тоже, хоть он и рекурсивный, но что в какнонической форме, что не в какнонической формах как минимум будет вычитаться сумма задержных выходных отсчетов, помноженных каждый на свой коэффициент, а не просто вход-минус-выход — это уже какой-то странный фильтр получается…
3) неканоничный. Как буд-то бы П-контроллер набухался с фильтром (они иногда встречаются) и решил прикинуться то-ли фильтром первого порядка, то ли второго — он ещё сам не определился :)
В общем какой-то он неканоничный. На П-регулятор который минимизирует невязку — похож, а на фильтр (в прикладной смысле) — не особо, т.к. на беглый взгляд он ничего не фильтрует, зато наверное будет пытаться удерживать систему вокруг SP
Коэффициент перед скобкой подбирать, чем меньше, тем сильнее фильтрует. Готово.
Как то совсем не по инженерному. Есть же аналоговый собрат вида 1/(T*p+1), связь с приведенным в статье цифровым:
T=-ПериодВыборкиСигнала/ln(1-k).
Если это не проследить, то применение влоб взятых формул может привести к неожиданным результатам.
Как рассчитать коэффициенты IIR фильтра по заданной частоте среза, частоте дискретизации и порядку цифрового фильтра? Есть ли формулы или алгоритмы для получения коэффициентов IIR фильтра?
На экране знакового жидкокристаллического дисплея отображается измеренное значение давления (при k = 1) или фильтрованное значение (при k = 2…50), и значение коэффициента фильтрации k.
Дак, какой же Вы, в конце концов, решили взять коэффициент k?
Программная реализация БИХ-фильтра в информационно-измерительном канале