Pull to refresh

Comments 17

Зачем так сложно и наукообразно про такую простую вещь?

Да, чет сложновато будет, мы студентам объясняем фильтры так.
Выход фильтра равен самому себе, плюс небольшая поправка, пропорциональная разнице входа и выхода.
y = y + 0.1*(x-y);
Коэффициент перед скобкой подбирать, чем меньше, тем сильнее фильтрует. Готово.
Когда нужно свести вместе, например, данные от гироскопа и компаса/акселерометра — похожий алгоритм применяют. yaw = (yaw + gyro_yaw) + K * compass_yaw. Гироскоп будет в приоритете (как более шустрый), но если от него и придет какая-то ошибка из-за шумов и/или низкой точности, то постепенно выровняется по более медленному компасу.

Как будете объяснять фильтры более высоких порядков?

«Если нужен фильтр более высокого порядка, поставьте две таких формулы друг за другом». Для начала так, а если кому что сложнее надо, то да, уже есть книжки с выводом через дискретную область и все такое. На практике студентам хватает первого порядка обычно (для наших задач электропривода).

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

Конечно, никто не спорит, что есть много хороших и разных фильтров, сложных и простых. Но на практике, обычно, для фильтрации измерения температуры и многих других сигналов вот той простой формулы сверху более чем достаточно. Даже высокого порядка не нужно.
Чисто на практике для фильтрации сигналоа и 12-й порядок БИХ-фильтра далеко не предел, ещё и с особыми требованиями к соотношению нулей и полюсов и особы требованиями к особенностям ФЧХ и АЧХ, а получиться фильтра 11-го фильтра — и все будут плясать от счастья.
Для фильтрации данных температурного датчика нужен ФНЧ — и Вы выше приводите реккурентную формулу ФНЧ 1-го порядка с очень фиговым хвостатым АЧХ — это тоже самое что и RC-цепочку на вход датчика повесить — прашивается, причём тут цифровая обработка сигналов?
Было бы интересно почитать общеобразовательную статью про реальные задачи, где нужен фильтр 12го порядка и какие нюасны его синтеза возникают на пути. В моей области большинство проблем решаются ФНЧ 1-го порядка, и чем формулы проще и быстрее считаются, тем лучше. RC-цепочка же проигрывает программному эквиваленту гибкостью настройки и возможностью введения/изменения фильтрации сигнала удаленной перепрошивкой.
Любая задача где нужен крутой спад АЧХ, полосовая фильтрации, малые неравномерности (риппли) — радиолокация, радиосвязь — в общем везде, где надо получить АЧХ в виде идеального прямоугольник с очень высоким подавление и ещё подумать о ГВЗ, ФЧХ и т. П. Или АЧХ очень специфический формы. Например, в той же базовой станции сотовой связи мощность TX будет 23dBm, а чувствительность RX должна быть не хуже чем -98.8 dBm при SNR порядка 5dB, а полосы у них находятся совсем рядом — это вот требования по уже устаревшему 3G стандарту (на память). В итоге у нас гигантский TX и мизерный RX, и их надо как-то разделять, причём в широкой полосе, причём ещё TX своими интермодуляциями лезет в канал приёмника.

В цифре естественно будут до последнего пытаться использовать 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, так как является нелинейной системой. Или вы что-то другое имели ввиду?

Другое. Я пытался от фильтров перейти к более попсовому примеру, ведь линейный однослойный персептрон обучаемый бэк-ппоопагейшеном — это примерно тоже самое что и адаптивный FIR фильтр обучаемый по LMS — по-моему к обоим руку приложил Уидроу в одно и тоже время(он ещё кстати живой и ведёт свой канал на Ютубе!).
Потом снова берём эту нейросеть, начинаем усложнять её топологии, добавляем обратную связь — получаем реккурентную ИНС которая… ну по факту получается терь IIR фильтр. Ну и возвращаясь к изнальному вопросу — сколько на практике в фильтрах может быть коэффициентов — ну вот у нас сейчас есть те же нейросети которые у всех на слуху, все с их помощью пытаются распознавать котиков, строить регрессионные модели курса биткоина и которые из себя представляют адаптивные IIR и FIR фильтры на стероидах — вот сколько там коэффициентов? Да до фига и нужно ещё больше.
Ну т.е. найти задачу, где нужно фильтры офигенно большого порядка, наткнуться на динамическую систему супер-высокого порядка — это вообще не проблема — таких задач полно, хоть в радиосвязи, хоть в распознавания котиков, хоть в управление роботами (шагающие двуногие фиговины тоже далеко не самые простые системы) — куча их, и все они прыгают вокруг одной математики (только разные задачи и приёмы, но суть также). А вот обратная ситуация — как уменьшить количество умножалое — ха! Это вот уже серьезная проблема.
Есть пара хороших задач, например, сглаживание медленно-меняющихся данных или компенсация постоянной составляющей сигнала, где мы можем обойтись простыми фильтрами 1-го порядка, вот только практических задач где надо использовать фильтры с двух-трехзначным порядком ещё больше!

Поэтому мне пример в котором всю фильтрацию можно раскрыть показав одну формулу — модель RC цепочки — мне не очень понравился, т.к. Надо все объяснять на фундаментальных вещах: свертки там всякие, Фурье, Лапласс и т.д. — простые формулы, простые понятия, которые можно распространить на что угодно. А куда можно распространять один специфический сглаживающий фильтр?

Вы приводами занимаетесь? Пожалуйста. Для повышения точности слежения надо было повышать "агрессивность" регулятора (иначе говоря, повышать полосу пропускания, улучшать добротность, повышать быстродействие, много синонимов). Но у механической нагрузки был резонанс, который плавал, в зависимости от внешних параметров, в диапазоне шириной 20Гц. Чтобы этот резонанс не возбуждал систему, весь диапазон вырезался band-stop фильтром 14-го порядка.

Ну кстати да. Хороший пример, причём полоса то узкая — 20Гц всего, а уже надо воротить фильтр уравнение которого уже лень в тетрадку выписывать — слишком длинное
Ой хз. Фильтры студентам объясняются через свертку, Z-преобразование и преобразование Лапласса, да всякие импульсный характеристики и передаточные функции — чай не маленькие уже, а в фильтрах нас интересует только передаточная харакиеристика, а свертку и школьник поймёт — щадерживай умножаю да складывай.
Выход фильтра равен самому себе, плюс небольшая поправка, пропорциональная разнице входа и выхода.
y = y + 0.1*(x-y);

Если честно, то нифига не понятно: где другие X, куда они потерялисись? Какой из двух Y-ов, на сколько задержан? Более того:
1) Для КИХ фильтра это вообще абсолютно неверно — он просто домнажает и складывает все свои задержанные отсчеты
2) Да и для БИХ фильтра вообще-то тоже, хоть он и рекурсивный, но что в какнонической форме, что не в какнонической формах как минимум будет вычитаться сумма задержных выходных отсчетов, помноженных каждый на свой коэффициент, а не просто вход-минус-выход — это уже какой-то странный фильтр получается…
3) неканоничный. Как буд-то бы П-контроллер набухался с фильтром (они иногда встречаются) и решил прикинуться то-ли фильтром первого порядка, то ли второго — он ещё сам не определился :)
В общем какой-то он неканоничный. На П-регулятор который минимизирует невязку — похож, а на фильтр (в прикладной смысле) — не особо, т.к. на беглый взгляд он ничего не фильтрует, зато наверное будет пытаться удерживать систему вокруг SP
Коэффициент перед скобкой подбирать, чем меньше, тем сильнее фильтрует. Готово.

Как то совсем не по инженерному. Есть же аналоговый собрат вида 1/(T*p+1), связь с приведенным в статье цифровым:
T=-ПериодВыборкиСигнала/ln(1-k).

Если кто-то решит дальше в цос, то сначала обратите внимание, как в источнике, из которого берете формулы, обозначаются коэффициенты прямой и рекурсивной ветвей фильтра. В этой части в разных книгах полный разброд. В старых книгах, типа Рабинера-Гоулда, прямая ветвь обозначается как Ak, а обратная как Bk. В более современнях (Сергиенке и матлабе например) наоборот, прямая идет как Bk, а рекурсивная как Ak. Также рекурсивная сумма может идти как 1 плюс сумма или как 1 минус сумма в знаменателе.
Если это не проследить, то применение влоб взятых формул может привести к неожиданным результатам.
Sign up to leave a comment.

Articles