Простой расчет рекурсивного фильтра 1-го порядка

ВНИМАНИЕ! Это черновая статья, в которой уважаемые коллеги нашли много недочетов. Новый вариант см. здесь.
При обработке выборок АЦП часто говорят об усреднении. И нередко — о скользящем. Что такое скользящее усреднение? Обновление результата с каждым приходящим новым отсчетом. Можно сузить задачу: накапливать предыдущие результаты негде или не хочется. Тогда однозначно речь может идти только рекурсивном фильтре первого порядка.
Конечно, вещь писанная-переписанная :) Но бывает непросто выбрать из горы литературы простые расчетные соотношения. А для новичков в цифровой обработке сигнала придется разобраться в терминологии, ограничениях и еще во многом, не очень-то и нужном для построения простого скользящего фильтра.
Постарался в этой заметке дать известный материал так, чтобы его можно было использовать даже школьнику.

ТЕРМИНОЛОГИЯ

Есть отсчеты (данные) на входе нашего фильтра, пусть это будет последовательность Х. Есть отсчеты с выхода фильтра, пусть это будет последовательность Y.
Фильтр реализует такую обработку:

Y(n) = Alfa*Y(n-1) + Beta*X(n)

То есть, очередной отсчет Y(n) получаем путем взвешенного сложения предыдущего выходного отсчета и нового входного кода (от АЦП, например). При этом обычно коэффициент «усиления» фильтра желательно иметь равным 1. Для этого нужно, чтобы выполнялось

Alfa + Beta = 1

В рамках данной заметки задача расчета цифрового рекурсивного фильтра 1-го порядка состоит в нахождении коэффициентов  Alfa иBeta с учетом удобства их использования в микроконтроллере (МК) для цифровой фильтрации отсчетов.

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Если мы работаем с МК, то очень хорошей практикой является использование целочисленной арифметики. Даже работа с 32-разрядными LONG переменными в 8-битном МК здесь выполняется намного быстрее, чем с FLOAT. Поэтому делают выбирают Alfa иBeta таким образом:

Alfa = Na
Beta = Nb
Na + Nb = 2^k

Иначе говоря, вместо дробных Alfa иBeta берут целые числа, да еще так, чтобы их сумма была равна целой степени двойки: 2, 4, 8, 16, 32, 64, 128, 256, 512 и т.д.
Вот тогда процессору работы поменьше:

Y(n) = (Na*Y(n-1) + Nb*X(n)) >> k

Умножаем 2 раза целое на целое, складываем, производим сдвиг вправо на k разрядов.
Вот и все по программной реализации. Как же рассчитать фильтр, т.е. найти правильные Na и Nb?

РАСЧЕТ ФИЛЬТРА

В нашем случае можно пойти от требуемых частотных свойств или от времени переходного процесса. Думаю, что чаще эмбеддер задается именно временнЫми параметрами. Этот случай и рассмотрим.
Предположим, что разработчик знает, как быстро фильтр должен отработать изменение входного сигнала. Как отрабатывает такой сигнал наш фильтр? Если дать скачек от нуля до некоторого значения, обозначенного 100%, то на выходе фильтра увидим нечто такое:



Как видим, на 8-м отсчете фильтр уже отработал 90% входного воздействия, на 10-м — 95%, и так далее. Обычно принято говорить о «недоработанном», т.е. о тех 10 или 5 процентах, на которые фильтр еще «врет» к какому-то отсчету. Говорят еще, что погрешность установления выходного сигнала составляет столько-то процентов. Далее я привожу формулы для погрешности установления от 5 до 0,1%. В первом случае переходной процесс закончился «на глазок», а точности 0,1% обычно достаточно для того, чтобы считать процесс полностью законченным.
Разница между этими 5%-ым и 0,1%-ым фильтрами не столь уж велика. Вычислим и запомним две константы, ограничивающие число Ntau

LN(1/5%)  = 2,996
LN(1/0,1%) = 6,908
Ntau = 2,996...6,908

Эти границы нам пригодятся уже скоро. Не забудем, что нижней границе соответствует «грубый» процесс, когда мы спешим считать отработку законченной, а верхней границе — «точный» переходной процесс.

Итак, разработчик задался временем переходного процесса Тпп, за которое фильтр отработает скачек на 95...99,9%. Что еще нужно знать? Время выборки — тот период, с которым на вход фильтра поступают выборки и с таким же темпом с фильтра уходят результаты. Назовем его просто Т.
Ясно, что за время переходного процесса будет обработано много отсчетов. Сколько?

N = Тпп / Т

И наша задача — выбрать значения Na, Nb и k так, чтобы уложиться в Тпп.
Оказывается, все очень просто. Должно выполняться условие:

Alfa < EXP(-Ntau / N)

Вот и весь расчет. Задавшись двумя граничными значениями Ntau, зная требуемое время переходного процесса и период выборки, мы находим 2 значения Alfa, соответствующие «грубому» и «точному» решениям. И выбираем реальное значения, которое находится между полученными.

ПРИМЕРЫ ДЛЯ ЦЕЛОЧИСЛЕННОЙ АРИФМЕТИКИ 

Рассмотрим таблицу с различными значениями N.



Я взял соотношение между временем переходного процесса и периодом выборки от 1 до 1000. Задался вышеназванными границами «точности» переходного процесса — 5% и 0,1%. Рассчитал соответствующие значения Alfa и Beta ( в таблице приведены именно Beta). Далее необходимо подобрать 2^k и такие Na и Nb, чтобы 

Nb = Beta / 2^k
Na = 2^k — Nb 


Например, если можно позволить себе сдвиг на целый байт, то k = 8, 2^k = 256. Возьмем, например, столбец с N = 100. Хотим «точный» переходной процесс, то есть Beta=0,0667. Тогда:

Nb = 0,0667 * 256 = 17
Na = 256 — 17 = 239
Y(n) = (239*Y(n-1) + 17*X(n)) >> 8


Если не стремиться к конкретной цифре погрешности установления, то можно попытаться выбросить одно умножение, выбрав меньшее из чисел Na и Nb равным 1. Смотрим на строку таблицы «1/Бета». Значения 1/Beta составляют от 14 до 33. Это значит, что я могу выбрать 2^k либо 16, либо 32:

Y(n) = (31*Y(n-1) + X(n)) >> 5

Y(n) = (15*Y(n-1) + X(n)) >> 4

В первом случае мы близки к «грубому» процессу, за наши 100 выборок получим около 95% от установившегося значения. Во втором случае влияние отсчетов Х значительно сильнее и за то же время мы почти войдем в зону 99,9%.
Для второго столбца возможностей выбора меньше. Единственное значение 2^k, которое можно выбрать — 2. При этом

Y(n) = (1*Y(n-1) + 1*X(n)) >> 1

и мы получаем «точный» фильтр. Если выбрать 2^k = 4, то за 10 выборок в 95% процесс не войдет (но войдет чуть позже).
Третий столбец также предполагает один простой вариант:

Y(n) = (255*Y(n-1) + 1*X(n)) >> 8

При этом мы реализуем «средний» фильтр, погрешность установления между 0,1 и 5%.

Столбец 1 требует работать с меньшим из коэффициентов — а теперь это Alfa. Определив диапазон значений 1/Alfa = 20...1000, легко реализуем фильтр, близкий к «грубому»:

Y(n) = (Y(n-1) + 31*X(n)) >> 5

или близкий к точному:

Y(n) = (Y(n-1) + 511*X(n)) >> 9

или еще более точный, чем «точный» :)

Y(n) = (Y(n-1) + 1023*X(n)) >> 10

Итак, с примерами покончено.

РЕЗЮМЕ

Первое. Зададимся временем переходного процесса, периодом выборок и вычислим, за сколько выборок процесс должен закончиться: 

N = Тпп / Т

Второе. Вычислим границы коэффициента при Y

Alfa < EXP(-Ntau / N)

где Ntau = 3...7, меньшие значения соответствуют большей погрешности установления.

Третье. Подберем целочисленные Na и Nb такие, чтобы их сумма равнялась 2^k. Тогда обработка отсчетов будет проще. Результирующая формула:

Y(n) = (Na*Y(n-1) + Nb*X(n)) >> k

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

  • +24
  • 20 августа 2012, 17:29
  • drvlas

Комментарии (177)

RSS свернуть / развернуть
Черт!
*Ушел в детский сад, так и не поняв нафига всё это*
0
Если не понял нафига — то тебе не туда :)
А если нифига не понял… То другое дело. Я так объясняю. Ну, как могу.
0
И все же… Шутки-шутками, но хотелось дать возможность просто спроектировать простой фильтр. О скользючке говорят часто, а если чел не терся в ЦОС, то влазить в программы расчета может оказаться не легче, чем изучать основы теории. Моя задумка была такая: оперируя только привычными, как мне кажется, для электронщика понятиями, получить осязаемый результат.
Собственно, и интерес к твоей критике у меня с такой стороны: есть ли смысл улучшать (переделывать, ничего страшного) для более доходчивого изложения? Или ты считаешь, что вообще такой подход к известной задаче не нужен?
0
Желательно, конечно, показать откуда получаются формулы.

1) Нужно привести физический аналог (RC-цепь).

2) Нужно составить дифф-уравнение для этой цепочки (есть в Баскакове). Пояснить почему первый порядок (порядок отсчитывается по количеству независимых реактивных элементов в цепи). Если одна ёмкость, что в диффуре будет производная первого порядка, не более.

3) Нужно показать переход от непрерывного представления к дискретному. Так появляется разностное уравнение. Показать связь коэффициентов в исходном уравнении (RC) с коэффициентами получившегося разностного уравнения. Оцифровка непрерывного описания цепи может происходить несколькими способами (метод Тастина, Рагазини-Бергена, Ципкина-Гольденберга, ...). Для каждого из методов нужно разное значение dt, чтобы дискретная цепь воспроизводила непрерывную.

4) Выписать формулы для коэффициентов передачи, импульсной и переходной характеристикам для непрерывного и дискретного случаев.

5) Показать кучу графиков: АЧХ, КЧХ, имп. хар-ку, перех. хар-ку. Промоделировать цепь в MicroCAP или аналоге и сравнить результат с цифровым моделированием. «Цифровое» моделирование можно сделать при помощи операционных усилителей, примеры есть у Карлащука в книжке «Электронная лаборатория на IBM PC» (в первых изданиях). Там будет один сумматор и один дифф-р в обратной связи, нужно только коэфф-ты в обвязке ОУ пересчитать в зависимости от RC или альфа/бета.

Вот примерно так делается курсовая работа по цифровому моделированию цепи 2-3 порядка где-то на 4-м курсе РтФ.
-2
Спасибо за столь развернутый ответ!
Он показал мне, какие же различные подходы могут быть в изложении «затоптанного» вопроса. Ибо, со всем уважением, коллега, я хочу подать данный материал не в разрезе «часть курса по ЦОС», а скорее как «не бойтесь цифрового фильтра, вы его уже почти используете». И направление моих мыслей сейчас — как упростить мою заметку, а не улучшить изложение теории. Вопрос только в том, насколько это вообще нужно — почему я и обратился к уважаемому angel5a, выразившему сомнение столь кратко и ярко, что однозначность его суждения пострадала: «нафига все это».
Имел ли он в виду цифровой фильтр или мою статью… Если второе, то хотелось бы услышать аргументы и пожелания
+2
Есть такой вариант — показать общий подход, а не частное решение. Человек, понимающий общий подход, не будет относиться к теме как магии формул. Достаточно сделать это всего один раз вместо того, чтобы складировать конкретные варианты решений.

Когда-то люди думали, что Земля — центр Мира. Они изучали движение планет Солнечной системы. Если нарисовать траектории движения планет на небосводе, то это будут сложные кривые. Человеку, который мыслит этими кривыми, трудно будет сделать вывод, что орбиты планет — это эллипсы. Человек же, который знает устройство Солнечной системы, без особого труда пояснит эти сложные кривые как результат сложения нескольких простых круговых движений.
0
А есть и другой подход. Поняв использование инструмента в простом применении, человек убъет 2-х зайцев:
1) Решит ту свою локальную задачу, ради которой он начал читать мою заметку
2) При желании освоить вопрос глубже начнет читать правильные учебники. А может не читать. Но задача 1 выполнена :)
А если бы я повторил своими примитивными словами какой-то канонический учебник — то что было бы нового?
+1
Пункт 2) на вас не сработал, судя по всему. Почему вы предлагаете его другим?
0
То есть? Пунтк 2 предлагаете Вы, по сути: «физический аналог», «дифуравнение» и т.д.
Или Вы имеете в виду, что я сам не читал теорию? Дык, читал, изучал. Давно. Оставил для пользования то, что мне лично было нужно. И простой подход к проектированию простого устройства рассказываю. Уж как — другой вопрос. Вижу, что неважнецки. Но это поправимо.
0
А я согласен с uni. Человек мыслит не цифрами, а образами, соответственно для понимания гораздо полезнее рисунки, графики, осциллограммы, чем формулы.
Поэтому нужно было сначала объяснить физику процесса, а потом уже писать формулы. Иначе, для непосвященного, получается тот самый сферический конь в вакууме, которого представить невозможно.
Именно поэтому я и задал вопрос об АЧХ. Чтобы было понятно, о чем идет речь.
0
Если теорию нельзя объяснить пятилетнему ребенку — она бесполезна. (с)А. Эйнштейн
+1
Ты здесЯ не читай, ты тудЫ ходи…
0
Не всё, что доступно пятилетнему, доступно и тебе, DIHALT.

Вот, попробуй силы:

1. У Маши не хватало для покупки букваря семи копеек, а у Миши одной копейки. Они сложились, чтобы купить один букварь на двоих, но денег все равно не хватило. Сколько стоил букварь?

Если осилишь задачку для пятилетнего, я напишу статью по практическим методам обработки сигналов на пальцах.

Литература для внеклассного чтения:

1. В. И. Арнольд, Задачи для детей от 5 до 15 лет, М., Издательство МЦНМО, 2007 г.

П.С. В ответы не подглядывай только. Я дал саму первую задачку для ребёнка из сборника. Тебе понравится. Прежде чем цитировать авторитетов, покажи на что способен сам.
0
И что там осиливать? Вот про детей задачка поинтересней.
0
На вскидку обоим по 6 лет. Если дошкольники, то 1 до 6 лет каждому (правда я в школу пошёл с 6 лет). Будем считать, что школа семилетка. Если друзья одноклассники, то они впервые увиделись с 7 лет. Где-то около того. Если младший в отца, то дети — одногодки и им либо по 6, либо по 7 лет. Думаю так.
0
Правильный ответ — 1 и 4 года
0
Интересная задачка. Видимо она решается путём переворачивания советской тетрадки в клетку, где с обратной стороны была таблица умножения. Можно было бы её решить простым перебором.
0
Задачка решается без перебора и без вычислений. Немного логических рассуждений.
0
Да, кстати, один известный в узких кругах товарищ как-то в одной лекции нарисовал блок-схему отличия логики от диалектики:

Диалектический метод

На примере решение проблем в Древнем Египте при помощи двух команд жрецов по 11 человек.

Ссылка: Величко, 2008.03.07, Познание как основа творчества

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

Тут ещё не показаны обратные связи, о которых Величко говорил в лекции.
0
да ну. а 6 голубей: 1*6 и 2*3 как же? все дошкольники, везде младший, и все младшие могут быть похожи на отца.
0
Информация «младший похож на меня» не позволяеи выбрать из этих двух вариантов правильный, тогда как по условиям задачи именно эта фраза обеспечила недостающие данные. А это значит, что было два варианта и в одном из них дети разного возраста, в другом — одинакового.
0
Не всё, что доступно пятилетнему, доступно и тебе, DIHALT.
Для иллюстрации этого утверждения разумней было взять «Сколько лепестков у розы?». Правда, задачка довольно известная.
0
Там целый сборник, одна из задач ответом имеет вообще мой день рождения (про озеро и кувшинку, насколько я помню ответ, 8-я задачка).
0
Я не люблю связываться с подобными задачками (особенно вроде Lifelover'ской и уж подавно с лепестками роз — мне было проще деобфусцировать код и подсмотреть решение в нем).
Проблема взрослых в таких задачах, как я понимаю, то, что дивергентное мышление с годами притупляется, а эти задачки ориентированы именно на поиск нестандартного решения в поле решений. Это что касается задачи про двух детей.
Задача про букварь примитивна. Если Мише не хватает одной копейки до скидывания и не хватает и после скидывания, значит у Маши денег нет вообще. Отсюда уже очевидно и сколько денег у Миши, и почем букварь.
0
Задача на двух детей исключительно на жесткую логику. Один знакомый программер до мозга костей решил ее почти махом. Тут вся проблема таких задач в грамотном описании этих задач.
0
Про копейки ведь тоже задачка на логику. Раз Мише не хватает всего копейки, и даже Маша не помогла — у Маши ни копейки нету. Маше не хватает 7 копеек — 7 копеек книжко и стоит.
0
Хм, да, вообще-то. Просто у меня такие задачки были в книжке, где вперемешку было все, в том числе и на поиск нестандартного решения. И особенно к ним относится про лепестки розы.
А задачки про абсолютно логичных существ и правда довольно схоже решаются, хоть и непривычно для тех, кто с этой логикой не знаком.
0
Да, я тоже не люблю. Считаю, что развиты должны быть оба полушария. Не люблю от того, что они не связаны с практикой. От того же я не любил задачки в институте и даже в школе.

Мне больше нравятся задачи, которые развивают кругозор. Вот, к примеру, одна из олимпиадных задач по физике. Эта задачка, которую я не смог понять 15 где-то лет назад, сидя на районной олимпиаде по физике в Нижневартовском районе. Несмотря на то, что я её не решил, я занял тогда 3-е место, а первые два не занял никто. Так тоже бывает.

«Зачем путевые проходчики простукивают колеса ж/д состава на остановках».

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

Поэтому Эйнштейн конечно не прав в этой фразе про 5-летнего ребёнка. Умение решать задачи — это не то, что свойственно от природы и дано по умолчанию. Диалектический метод работает только тогда, когда маленький человек широко развит, а для многих задач и теорий нужно понимать и их цель, назначение, иначе нельзя путём постановки наводящих вопросов прийти к искомому ответу.

Нужно научиться правильно ставить вопросы.
0
«Зачем путевые проходчики простукивают колеса ж/д состава на остановках».
Забавный вопрос, и врядли непосредственно школьные знания могут на нее дать ответ.
Полагаю, это разновидность аудиодефектоскопии.

Алсо, Эйнштейн говорил про объяснение, а не задачки. Тот же Перельман весьма неплохо демонстрировал, как можно объяснить теорию пятилетнему ребенку.
0
Ну, и что такое объяснение?
0
DIHALT чуть ниже пояснил.
0
При чем тут фраза Эйнштейна и задачи вообще? Он про теорию и принципы, а не про матописание которое нужно задаче для решения. Но без наглядного понимания принципа, на пальцах, матописание не несет никакого смысла.

Вот была у нас квантовая физика. И там втирали, что частица она же и волна. Каких то формул нагородили и несмотря на то, что физику я весьма неплохо сдал я так и не понимал что это за нахер за волна такая? Как она проявляется? Ну формулы, да вот они. И чо? Пока недавно не нашел фразу которая в голове расставила все, фразу которой нехватило нашей физичке, чтобы материал был закончен. Что волна это волна вероятности нахождения частицы в заданной области. И толку, что она нам все это горой формул расписала? Никто ничо не понял.
0
Представь, что ты что-то объясняешь ребёнку :) Тогда поймешь причём.

Решение задачи — это движение к ответу (разрешению неопределённости), путём постановки наводящих вопросов.

Объяснение решение задачи — это демонстрация постановки правильных вопросов для достижения цели — разрешения неопределённости.

Если знать кое-что о механизме в человеке, который ставит вопросы (см. картинку ниже), то становится ясно, что пятилетнему ребёнку нельзя объяснить теории, которые выходят за его рамки различения, внимания, памяти, нравственности и интеллекта. Но это вовсе не означает, что если это нельзя объяснить ребёнку сейчас, то он не поймёт это позже. И глупо отбрасывать теории, которые не понимают дети.

На эту фразу есть другая фраза: "Всё должно быть сделано настолько простым, насколько это возможно, но не проще."
0
Обобщенно и понятно можно обьяснить все, что угодно. Даже теорию струн. Главное подобрать подходящую аналогию и модель вписывающуюся в осознаваемые ребеноком рамки.
+2
Вот одно из самых простых объяснений того как вывернуть на изнанку сферу в 3D:

Как вывернуть сферу наизнанку? (1/2)

Нужно показать ребёнку и спросить насколько он это понял.

Я читал про теорию струн, но у меня большие сомнения, что можно подобрать аналогию того, что выходит за рамки образов пятилетнего ребёнка, этими же его образами. Есть такая теорема Гёделя о неполноте, которая говорит как раз об этом. Если вкратце, то там говорится, то во всякой замкнутой системе всегда найдётся утверждение, которое нельзя вывести в рамках этой системы.

С точки зрения теоремы Гёделя, миропонимание ребёнка можно считать такой системой. Поэтому по этой теореме у ребёнка всегда найдётся утверждение, которое нельзя объяснить на его уровне миропонимания, т.е. при помощи понятных ему аналогий. Для этого в систему нужно ввести новые понятия, взятые из системы более высокого уровня. Тогда произойдёт разрешение неопределённости, утверждение будет доказано, задача решена, ответ найден, смысл понят.

Понятнее эту теорему о неполноте можно попытаться пояснить простой задачкой:

Как из шести одинаковых спичек сделать 4 равносторонних треугольников одинаковых размеров?
0
Если у тебя сомнения, значит ты ее не понял :) Вообще бытует мнение, что эта теория настолько ушла в математические дебри, что уже сами идеологи и создатели потеряли в ней все ориентиры. И тут возникает исходный вопрос, а имеет ли смысл эта теория если никто уже толком не понимает в чем ее суть?

Сложить из них звезду Давида. Задачка боян. Но причем тут она и теорема о неполноте?
+1
Притом, что существует 2 решения. Если твоё миропонимание замкнуто в плоскости, то выдашь одно решение, но если повысить размерность на единицу, то ты увидишь ещё одно решение:



Плоскость — это система с размерностью n, пространство — (n + 1), как я показал ранее с выкручиванием сферу наружу, не всё, что можно в пространстве, возможно и на плоскости.

Если я добавлю условие: сторона треугольника должна быть равна длине спички, то возникнет небольшой ступор. Задача утверждает, что можно составить такую фигуру, но мышление ограничено плоскостью и не может разрешить неопределённость. Если же мы добавляем ещё одну пространственную координату, то решение находится, неопределённость разрешается.

Вот причём тут теорема о неполноте. Мышление ребёнка можно представить кучей образов, которое ограничено его миропониманием. Нельзя ему объяснить что-то, что выходит за эти рамки, основываясь только его уровнем. И вообще, это относится ко всем людям.

Зная это, можно ограничить мышление людей, усекая их язык. Если нет терминов, нет и образов, то нет и решения некоторых задач. Это можно увидеть в сравнении, например, описания математических задач 1000 лет назад и сейчас. Информационная ёмкость описания таковых задач совершенно отлична. Есть такая книжка «История математики», там есть примеры таковых описаний.
0
Ы, я первым делом сложил трехмерную пирамидку, но почему то насчитал у ней всего 3 треугольника :))) и отбросил. И подумал, что тут надо в четырехмерное пространство переходить. Надо больше спать. Пятый час ужо…
0
Посмотри на схему внизу. Там показан путь разрешения неопределённости.
Одним из квадратиков там — «Внимание».
0
Хм.

X+7 = P
Y+1 = P
X+Y < P

Получаем P<8 т.к. копейки целые и не делится, то следующее число меньше 8 это 7. Отрицательных копеек тоже не бывает. (вариант, что дети кому то крупно должны отбрасываем как бредовый :) )

Соответственно
Х + 7 = 7 т.е. у Маши вообще денег нет.
Y + 1 = 7 А у Миши тогда всего 6 копеек на руках.

Букварь стоит 7 копеек.
0
Ну что же, будет статья, в которой я опишу кое-что из книжки японского автора С. Минами, «Обработка экспериментальных данных с использованием компьютера», «Радио и связь», М., 1999 г.

И раз ты выбрал способом объяснения пятилетнему ребёнку — систему неравенств, то и у меня будут иксы и игрики :), и даже сигмы.
0
Не увиливай. Обещал на пальцах — валяй :) С системой неравенств и я могу из книжки копипасту сделать. Только толку то? Кому это надо?
0
Я не увиливаю. Есть такая книжка «Тензорное исчисление», Корнеев (есть на bookfi.org), там на стр. 7 в предисловии автора есть такой вот абзац:

Вероятно, сейчас ни у кого нет сомнений в пользе и удобстве векторного исчисления. Однако, не всегда было так. В своё время у векторного исчисления были весьма авторитетные противники. один из них, известный английский физик лорд Кельвин, говорил: что векторное исчисление сберегает мел, но расходует мозг. «Когда вы выписываете какую-нибудь систему координатных равенств, то, написав первое равенство, остальные вы получаете простыми перестановками координат; вы расходуете много мела, но ваш мозг в это время отдыхает. Берегите мозги и расходуйте мел!» — говорил он.

DIHALT, твой мозг израсходован? :)
0
При чем тут замена одной математической абстракции на другую?
0
При том, что человек ограничен в восприятии. «Объяснение на пальцах» или по-рабоче-крестьянски может быть понятным, но в написанном виде слишком долгим и утомительным для читающего. С другой стороны, математическое объяснение может быть вообще непонятно, хотя кратко.

Встаёт вопрос о том как преподносить материал. Одни этому учатся десятилетиями, обкатывая навыки на студентах. Некоторые другие пишут вот такие книжки: «Психбольница в руках пациентов» :) Почитай.

Там есть такая фраза:

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

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

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

Сначала я хотел показать одну свою курсовую работу, выполненную в Mathcad, которую я сделал где-то на 4-м курсе по цифровому моделированию. Её даже наш препод не очень понял тогда. Но сейчас я передумал, поскольку вижу уровень владения теорией в этой области. Хотя там моделируется не сложная пассивная цепочка третьего порядка и подробно разжевывается откуда берутся формулы, к сожалению, не всем тут это будет понятно.

Я пока думаю как показать по-проще откуда получаются альфы и беты, рекуррентный формулы и вообще вся эта теория, а основано всё на принципе суперпозиции, с которой обычно всё и начинается.
0
Сначала я хотел показать одну свою курсовую работу, выполненную в Mathcad, которую я сделал где-то на 4-м курсе по цифровому моделированию. Её даже наш препод не очень понял тогда.
Заинтересовал. Покажи.
0
Я её переделаю с учётом местных требований. Там будут разные аналогии, в том числе, как решать диффуры при помощи ОУ. Т.е. сначала есть схема электрическая принципиальная, потом на её основе составляется диффур, это не сложно, а вот как его решать? Есть один достаточно не сложный способ показать эквивалентную схему диффура на операционниках, как делали раньше, до появления цифровых ЭВМ.
Потом показывается переход от диффура к разностным уравнениям, потом непосредственно к программированию уже. В результате чего мы можем увидеть как какая-то электрическая схема выглядит в виде операторов на каком-нить языке программирования.

Результаты сравниваются. Я покажу результаты в MicroCAP, EWB, Mathcad и, возможно, в SMath Studio. Только вот эффекты квантования нужно будет показывать в Proteus, т.к. в любом другом пакете сложно найти эквивалент, допустим, типу байт. Такие вещи нужно показывать непосредственно на испытуемом.
0
Нет, меня не интересует переделанная. Меня интересует именно такая, какую ты сдавал и которую препод не понял.
Если не хочешь светить — можешь в личку кинуть.
0
К сожалению, она у меня находится пока только в тетрадке по курсу. В своё время мне не отдали мою работу на кафедре, т.к. она там должна храниться какое-то время. А оригинал документа Mathcad, увы, пропал, когда у меня посыпался жёсткий диск. Так что придётся подождать. Я давно хотел ту курсовую восстановить, да пока повода не было.

Я хотел забрать работу с каферды, т.к. препод хоть и поставил пятёрку, но разбираться в ней не стал. В то время (10 лет назад) она не вся была в электронном виде.

В качестве утешения могу дать другую пока работу, но в черновом варианте: «Проектрирование оптимального КИХ фильтра по алгоритму Ремеза». Тоже в Mathcad, но это по теме.

Ссылка: Designing minimax FIR filters.zip
0
Восприятие на пальцах не обязано быть полным решением. Там это и не нужно. Оно должно дать базовую основу, грубый кирпич который потом можно обмазать штукатуркой математики, если задача того потребует. Но без него это будет намазывание штукатурки на пустоту. Не более чем теоретические изыскания которые далеки от реального применения.

Байка в тему, подглядел где то в мемуарах физиков ядерщиков.
В общем весь цвет советской физики на какой то вылазке в Ялте, пошел после бурного обсуждения получения очередной ядерной бомбы пошел на пляж, взяв с собой какое то бухло. Бухло было закрыто пластиковой пробкой, а ни ножа, ни штопора с собой у них не было. Зато на берегу сидел какой то бухарик. Ну они его спросили, мол а штопора не найдется. Тот глянул на бутылку. Спросил зажигалку, нагрел крышку и сорвал ее рукой. Добавив, что мол пластик от нагрева размягчается, учити физику, бездари.

Примерно такие же приколы были и у Фейнмана в его книге.
0
В свое время я разъяснял своим студентам работу электроцепей в динамике не используя ни одной формулы, более того, не применяя ни одной электрической величины. Используя привычные с детства и осязаемые на уровне спинного мозга понятия скорости, массы, инерции, количества жидкости и ее потока.

Мог бы таким образом рассказать и про ЦОС, если бы понимал саму эту цифровую обработку сигналов. Но, увы, для меня она (а также львиная доля ТАУ) осталась не более чем странными формулами в конспектах которую я не знаю куда применить в реальной задаче т.к. не могу представить визуально.
+1
Да, когда начали создавать САПРы для расчёта водопроводных сетей, то применяли законы Кирхгофа.
Но сила тяжести там очень влияет на результат и не все аналогии можно брать из анализа потоков жидкостей.

Хотя, в одной очень хорошей книжке по АЦП «Мир электроники. Аналого-цифровое преобразование. Редактор Уолт Кеслер», Техносфера, М., 2007 г., 1015 с. (это книга от Analog Devices) есть упоминание о самом первом бинарном ЦАП, известным авторам книги. Это гидравлический ЦАП, а не электронный (см. на стр. 11, 1.1 Ранняя история).

В копилку аналогий.
0
Как минимум модель должна дать общее понимание процесса, а уж на него намазывать подробности, увязывая их с математикой. Тогда это будет понятно, умозрительно и формулы перестанут быть непонятной математической херней.
0
Э, а где там ответы? Без них неинтересно. Сиди и гадай, правильно решил или облажался.
0
Да, странно, что-то их нет. Хотя вроде бы я видел ответы :)

У меня эта книжка где-то была, надо будет взглянуть на оригинал. Но, думаю, что в рунете можно найти дискуссии на тему ответов.
0
Еще по Резюме.
Первое: Кужда суют расчитанную N?
Второе: Зачем считали Alfa? куда её сувать? погрешность только абстрактная?
Третье: Ну тут всё понятно, с потолка взяли Na и Nb такие что бы в сумме было 2^k (k — так же с потолка), и посчитали. Только почему у меня работает не так как были условия?
0
Да, я чуствую, что коряво изложил. Еще немного пособираю мнений — и буду править.
А что именно не так работает? Можете свой пример привести? Какие коэффициенты выбраны и что хотелось иметь?
0
Хотя бы названные одинакого :)
Та же взаимосвязь N и k не описана (она описана в теле, но вы же резюмируете все сказанное). Alfa и Na тоже не связаны. Получился набор из трех несвязанных функций. Вы скачите от отсчетов, к некоторой «аналоговой велечине», возвращаясь к формуле с отсчетами, и они вообще не пересекаются все три формулы.
То есть отдельно этот участок не дает понять о чем речь. Раздел терминологии естественно необходим для понимания резюме и имеет полное право и должен быть отдельным, только вот терминология не дает пояснения используемым в резюме величинам.
Если же мы начинает читать тело поста, но опять же из-за слабой связанности и отсутствия явного разделения блоков получаем снова кашу, из которой получаем неправильный ответ, снова слобо связанный с постановкой задачи и резюме.
0
Ну, если вы собираете мнения, позволю высказаться.

Я думаю, что тон статьи выбран правильно, то что предлагает uni ( АЧХ, КЧХ, имп. хар-ку, перех. хар-ку) тоже хорошо, но это взорвет мозг начинающего эмбеддера :)

Единственное, ИМХО, вы слишком быстро перешли к реализации (оптимизированной реализации), она не так наглядна как мат. модель фильтра. Как по мне, теорию и расчет лучше показывать на базовой мат. модели, а потом показать как можно оптимизировать реализацию (избавиться от операций с плавающей точкой, заменить деление сдвигом).

Это сугубо мое мнение, не сочтите за критику :)
+1
Ну, так мнения и важны. Так же как и вы. коллеги, не сочтите за обиду, если в результате их анализа не все будут учтены :)
А уважаемого angel5a уже можно брать в соавторы будущей статьи. Я без иронии
0
Не надо меня в соавторы, я напишу только хуже. Мой поток бреда вполне можно увидеть в моих постах. А вот покритиковать, это мы свегда пожалуйста :)
0
Сейчас попробую сформулировать.
Вся статья свеась к тому, что берёте любое число 2^N, и когда вам нужно значение ацп, берёте не само значение, а вычисляемое по формуле val = (val + (2^N — 1) * adc) / 2^N. Чем больше N тем быстрее оно реагирует.
По сути это всё что удалось вынести из статьи. Тепрь допустим что я слышал:
При обработке выборок АЦП часто говорят об усреднении. И нередко — о скользящем.
Что-то почитал и теоретически понял, что скользящее среднее нужно для размазывания этого единичного выброса по всем отсчетам усреднения. Давить помеху, поще говоря. После этого смотрю вашу формулу и вижу что с такой формулой гарантировано получу 95% от отсчета, то есть от помехи. Зачем мне это? Моя же задача избавится от помех.
То есть статья, предлагая заменить известный мне метод, предлагает мне вообще отказаться от того, зачем заменяемый метод был добавлен.
0
Спасибо, что откликнулся! «Ваш звонок очень важен для нашенй компании» :)
На самом деле, именно так и работает цифровой рекурсивный фильтр первого порядка. Смысл статьи был в том, чтобы показать, как просто это реализуется.
Но о подавлении помехи Вы поняли неверно. Промоделируйте поступление на вход единичного импульса длиной один отсчет. Вы будете удивлены, как хорошо его можно размазать. Например, возьмите фильтр:
val = (M*val + (2^N — M) * adc) / 2^N
при N=4 и изменяйте М от 8 до 15. Скажете, когда Вам понравится степень размазывания :)
0
0
Не, меня не надо учить ЦОС, хватит с меня, отучился своё. :)
Как оно работает ещё помню. Но вот отбросив все знания в области ЦОС, становится как-то не понятно «кого? куда? зачем? почему?». Статье ориентирована на «простых смертных» (тем кто в вомментах она явно лишняя), но ей не хватает связки терминов простого смертного и этих альфабет.
Так же пример с расчетом, где получили Y(n) = (239*Y(n-1) + 17*X(n)) >> 8следует отделить от последующих примеров с единичкой. Без такого разделителя конечными воспринимаются именно строки с единичным коэффициентом. Когда много формул они плохо воспринимаются, и обычно его всё пролистывают подсознательно, как сейчас модно говорить, до последней.
0
А если поставить вопрос так: сигнал, который оцифровывается, имеет шумовую составляющую уровень которой известен (скажем, 1% от максимального размаха). Как прикинуть (посчитать) степень сглаживания, что бы подавить этот шум до уровня, скажем, 1ед. младшего разряда?
0
Ну, давай считать, заодно уточняя ТЗ :)
1% и 1 единица — каково соотношение? Допустим, это К. Значит, нужно в К раз подавить шум.
Каково соотношение частоты помехи и частоты выборок (дискретизации)? Допустим, помеха на 50 Гц, а частота выборок 200 Гц (от балды). Ага, говорю я, значит цифровым фильтром в принципе можно давить. Ибо при обратном соотношении — херушки :)
Теперь нужно сделать звено 1-го порядка (предмет статьи все же простейший фильтр) с такой частотой среза, чтобы давить в К раз частоту помехи Fп. ОК, тогда чатота среза примерно Fп/К. Считаем к-ты Алфа и Бета для такого (с учетом частоты дискретизации). И все. Задача решена. Исследуем временнЫе характеристики и убеждаемсяч, что они нас устраивают. Или не устраивают — тогда крутим порядок фильтра вверх.
Ты спросишь, как же расчитать те самые Алфа и Бета? Я пока не знаю. Я с БИХами такого не делал. Но когда разберусь — доложусь. Это дополнит статью расчетом с другого (не временнОго) конца.
0
1% и 1 единица — каково соотношение?
Можно совсем конкретно. Полный размах 5В, АЦП — 12 разрядов. Шум широкополосный, спектр сигнала ограничен, ну скажем 10кГц. Частота выборок 50кГц.

Хотя в принципе идея понятна, попробую сам посчитать.
0
По тому я и отправляюсь в детсад, что понять это из статьи как-то сложно. Есть формула, есть какая-то таблица. есть какие-то проценты, а что и с какой целью выбирается — расписано скудно. Но есть много примеров, которые работают не так как надо.
Может конечно я перегибаю, но как-то так. Открыв статью и бегло взглянув получаешь не тот результат, что обещали. Для детального прочтения с тем же успехом можно читать «умную книжку».
0
Забавно, но я все понял. Видимо потому, что и так несколько знаком с темой)
0
Будучи
несколько знаком с темой
я понимаю кто на что влияет и с книжкой по ЦОС разобраться не проблема. Но тогда зачем статья, если есть книга?
Я за то что бы статье быть, но требуется доработка напильником.
0
Ну, ЦОС я основательно подзабыл. Статья освежает в памяти некоторые темы. Но в целом твою критику я понял, и поддерживаю.
0
Не забываем, друзья, что здесь практически не представлены те, для кого статья писалась. Вы все понимаете много больше, чем тот эмбеддер, на которого я старался. И это нормально. Но, слушая ваши замечания, я все же буду переделывать статью именно для тех, кто книг по ЦОС не читал и не хочет (пока) читать.
0
Как по мне, так статья «на простом языке» не мение ценна чем подробный вывод формул. Когда работаешь в течение всего дня и мозги уже кипят, открывать книгу толку мало. А вот прочитать легкую в понимание статью гораздо лучше: и мозги отдохнут, и освежишь в памяти то что требуется.
Отсюда и такая резкая критика с моей стороны :)
А за статью спасибо.
0
Ну да, это уже ясно. Но теперь, ты уж прости, я все же поправлю твои слова: не «нафига это нужно», а «нифига не понятно». Это вдохновляет на переделку статьи. И именно в направлении упрощения, а не в сторону академизма.
0
Только 2 «но»:
1) Подожду все же больше критики
2) Наверное размещу ее отдельно. Как-то старнно получится, когда статья будет на 90% иная, а мы тут ЧИВОЙТО обсуждали :)
0
Позволю всё же первую свою формулировку. Из статьи, при прочтении, делается неверный вывод, из-за этого не понядно именно зачем.
0
аналог интегрирующей RC цепочки, только в цифре (АЧХ такое же), для простейшей фильтрации значений АЦП например.
можно написать в виде:
Y[i+1] = Y[i] + (X[i] — Y[i]) * K, где K [0..1]. эффективное время (tau = RC) этого фильтра примерно равно dt/K.

если упростить и забить на точность то сводится к одной строчке на С:
y += (ADC_value — y) >> N;
0
ИМХО, первый порядок фильтра уж больно плох в плане фильтрации… Проще в таком случае заменить его RC цепью. Применение — если только для общего развития…
0
Ну уж нет! Хотя бы потому, что параметры фильтра могут потребовать огромных номиналов RC. Или может потребоваться динамически изменять параметры по работе. Как-то мы делали установку для контроля параметров (советских) видеомагнитофонов. Там у меня был БИХ-фильтр, выделяющий какой-то рокот. Уж не помню цифры, но частота среза была очень низкой. И обработку нужно было делать с сигналом, который уже был продуктом цифровой обработки.
Другой пример посвежее. У меня сейчас работают модули преобразования сигнала с тензодатчика. И там программно переключаемый БИХ-фильтр первого порядка. Я сделал так, что по номеру выбранного фильтра примерно можно судить о времени переходного процесса в секундах. Удобно, фильтры от 0 до 15 (в последней версии до 9, дадьше нет смысла). И, опять-таки, обрабатываются уже интегральные выборки АЦП, цифровой сигнал. Я же не буду его ЦАПить для применения RC-фильтра :)
Так что есть применения.
0
Ну эт понятно, есть применения где целесообразно его засунуть в цифру, те же очень низкие частоты. Но как правило подобную простую фильтрацию на мой взгляд, если это какие то не особые случаи которые вы упомянули проще сделать на RC элементах.

А вот если надо больший порядок тогда уже лучше юзать ЦФ.
0
Я уже второй, которому RC элементы ну никак ни к месту. Задача — детектирование и формирование огибающей периодического сигнала. Динамически задаю пораметры и т.п… На RC элементах это будет ого-го! Так что если появится третий, то это тенденция… Или повод выпить :)
И кажется мне, любую фильтрацию делать ЦОС (если вы в цифре) Вопрос токмо реализации…
0
*любую фильтрацию проще делать ЦОС*
0
Если не разбираться в теории, то там можно такого «надетектировать», чего нет в реальном сигнале.
0
кто ж спорит…
0
Как и везде: нужно смотреть. Есть случаи бесспорные (например, когда обрабатывается сигнал, не существующий в аналоговом виде, т.е. уже продукт цифры), а есть и спорные (да те же высокие частоты). Наотмашь лучше не заявлять.
0
хз-хз. А мне надо полосовик с полосой пропускания 14.100 — 14.400 Мгц, затухание в полосе подавления более 60 дб. Реализуешь? :) Не скажу что не реально, но стоить он будет не просто в разы а на порядки больше чем аналоговый.
0
ну радость цифровых фильтров в возможности поменять коэффициенты на лету и перестроить фильтр на любую частоту, а также если нужен большой перепад пропускания/подавления при небольшой разнице частот, в аналоге может быть вообще нереализуемо.

давайте попробуем сравнить, с вас аналоговая реализация, я прикину что надо для цифры,
только вот полоса подавления откуда начинается?
0
в данном случае фильтрик прост, достаточно фильтра 5-го порядка. т.е. 5 индуктивностей и 5 кондеров

полосы подавления 0-13.5, 15 — 80 мгц
Смысл сравнивать, 1 только 12 битовый АЦП будет стоить за килорубль или близко к этому.
0
не, ну если обработка сигнала дальше исключительно аналоговая то ради фильтрации делать АЦ->фильтр->ЦА, при условии что фильтр фиксированный, конечно не стоит.
но и городить фильтры, кроме anti-alias, при условии что сигнал в конце концов всё равно попадёт в АЦП тоже странно.

правда как-то раз сталкивался со случаем когда пара полосовых фильтров для НЧ сигнала на очень маложорких операционниках была по потреблению выгоднее чем те же простые фильтры сделанные внутри МК в цифре после АЦП.
0
Я имел ввиду то, что надо очень большие аппаратные ресурсы на подобные фильтры. Никакие мк тут не справятся по определению. Проще и дешевле это выполняется в аналоговом виде.
Че странного? А эффект забития вам известен? Если необходим только этот участок диапазона, а помеха может быть где нить на 7 мгц такой амплитудой что АЦП входит в ограничение.
0
RC цепью нельзя срезать шум АЦП. А он зачастую вносит достаточно заметный вклад.
0
Срежешь шум, добавишь еще один — ошибки округления, а он зачастую не сколько не меньше… тут палка о двух концах. С плавающей точкой не каждый отважится делать фильтр… подобное пожалуй в плисках только лучше получается.
0
Забавно, но только что читал кинутую uni pdf'ку про то, как улучшить характеристики АЦП, подавая на вход смесь сигнала с шумом (в большинстве случаев хватает уже имеющегося) и фильтруя результат.
0
Это так называемый дизеринг, он улучшает точность а не шумовые свойства. Обычно шум имеет спектр за полосой пропускания фильтра основной селекции и в общий шум системы вносит не значительные изменения. Я такую фигню в цифровом приемнике делал.
0
Кстати к слову, в современных быстродействующих ацп от линеар технолоджи дизеринг встроен в саму ацп :)
0
Да, известная идея. Главное, чтобы шум не смещал код, т.е. был симметричным. И тогда реально погрешность квантования уменьшается. На стареньких советских АЦП поразрядного уравновешивания такое делали. Но там быстро выявляется нелинейность (а у этих еще и дифференциальная, которую трудно побороть). Т.е. для грубого но линейного АЦП — самое то. Что и поняли создатели сигма-дельта АЦП ;)
0
Спасибо, хорошая статья. А главное — вовремя (я как раз с такими делами вожусь).

P.S. еще бы прикинуть как задержка вызванная фильтрацией повлияет на PID-регулятор работающий по фильтрованному сигналу от датчика…
0
  • avatar
  • evsi
  • 20 августа 2012, 18:06
Ну, так есть же ТАУ (как наука). Нужно задаваться динамическими х-ками всего тракта. Или этот фильтр — самое инерционное звено? В любом случае, описать его можно как эквивалентый аналоговый блок.
0
Увы, я ТАУ не изучал, а того, что сам разбирался — маловато. Во всяком случае для того, что бы построить эквивалентную модель и посчитать ее по всем правилам.

P.S. Да, фильтр самое инерционное звено. Объект регулирования синхронный преобразователь с частотой PWM значительно выше скорости считывания АЦП и инерционности датчика тока (который этим самым АЦП оцифровывается). Параметры PID-а я подобрал моделируя это хозяйство в электронной таблице. Правда, D у меня получился равным нулю (и практическая проверка показала, что реальной поведение очень хорошо соответствует модели). Но в той же модели, если добавить хоть небольшую задержку, появляются выбросы и как это побороть я так и не придумал, хотя прекрасно понимаю, что с инерционными объектами PID вполне может работать.
0
Я так понимаю, речь идет о источнике тока для гальваники?

Если да, то зачем вам такие жесткие требования к регулятору (в частности, ко времени переходного процесса)? На сколько я понимаю, при гальванике внешние воздействия минимальны. Или я ошибаюсь?
0
В некоторых импульсных режимах осаждения длительность импульса может быть всего 1мс. Для получения хорошей формы тока (а там это критично) время установления должно быть минимальным.
0
Понял. Я забыл о импульсном режиме.
0
Не понял, почему Д равно нулю? Именно Д делает добавку к управлению на подходе к целевой точке, чтобы начать `тормозить раньше`. Только из-за шума будет непросто получить диффернциальный сигнал.

И кажется вы слишком усложняете задачу, можно снизить быстродействие, разомкнутая система устойчива, это же всего лишь RL цепь?
0
Я ж говорю — так получилось в результате моделирования. Любое D отличное от нуля дает выброс. С нулевым D регулятор реагирует как фильтр первого порядка и весьма быстро (заданный ток устанавливается в течении 3-4 тактов).
0
А модель это апериодическое звено (RL цепь) или все же второй порядок с учетом задержки?
0
Модель там предельно простая: столбик входных данных и столбик посчитанных результатов после PID регулятора. Столбик входных данных представляет собой исходное значение (0), а каждое последующее значение вычисляется из того, что насчитал регулятор на предыдущем шаге. Все это практически в точности соответствует тому, как оно работает на реальном железе. Я пробовал добавлять шум (что бы еще больше приблизить к реальности), но на итог это влияет мало даже при значительной амплитуде шума.
0
Ну, это не модель, это симуляция работы ПИД на некой, очень идеализированной, системе. Я так понял, что роль системы у вас выполняет сумматор, который складывает все управляющие воздействия с ПИД, и эта сумма считается текущим состоянием системы. Но на практике таких систем практически не существует (например, в вашей схеме присутствует индуктивность, только за счет которой, система будет вести себя по-другому).

Но даже при такой симуляции, у вас как-то странно ПИД реагирует на коэффициент Д. Как правильно заметил amaora, дифф. составляющая «тормозит» управляющее воздействие при выходе на рабочий режим, она наоборот должна бороться с перерегулированием.

Вот смотрите, для дискретных регуляторов дифф составляющую вычисляют как Kd(E(n) – E(n – 1)).

E(n) – текущее значение рассогласования (ошибки), E(n – 1) – значение рассогласования на предыдущем шаге. Когда регулятор выводит систему на заданный режим, с каждым шагом рассогласование уменьшается. То есть E(n) < E(n – 1) и соответственно разность (E(n) – E(n – 1)) будет отрицательной. Соответственно, вклад дифф. составляющей в управляющее воздействие тоже будет отрицательной (в таком режиме дифф. составляющая уменьшает выходное воздействие, «тормозит» регулятор и помогает избежать перерегулирования).

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

А вы, часом, в реализации ПИД E(n) и E(n – 1) местами не перепутали?
0
Ну, это не модель, это симуляция работы ПИД на некой, очень идеализированной, системе.
Да, точно.
Я так понял, что роль системы у вас выполняет сумматор, который складывает все управляющие воздействия с ПИД, и эта сумма считается текущим состоянием системы.
Не совсем. Данные с АЦП нормализуются, запихиваются в ПИД, а то, что он вернул масштабируется и выставляется ШИМ. Все переходные процессы и задержки вызванные наличием реактивных компонентов в сумме значительно меньше, чем время до получения очередного отсчета с АЦП, так что с этой точки зрения систему можно считать безинерционной.
А вы, часом, в реализации ПИД E(n) и E(n – 1) местами не перепутали?
Вроде нет, но доберусь до дома проверю еще раз.

P.S. спасибо за разъяснение, буду ковырять дальше.
0
Возможно надо не ПИД а вот так.

e = I_adc — I_ctl
PWM = K * I_ctl
K += K2 * e

Если нагрузку можно считать активной, то должно работать хорошо. K2 долно быть маленькое.
0
Надо попробовать.

P.S. кстати, по поводу сервы и замера тока: ADS-ки шумят, это да, но не факт, что с токоизмерительным резистором получится лучше. И применительно к серве лучше использовать ADS-ку с малым диапазоном (5А, например), у них соотношение сигнал/шум получше. Если мне память не изменяет, то минимальный ток который можно с их помощью измерить можно прикинуть как шум (мВ)/чувствительность (мВ/А). У 30-к это около 0.1А.
0
еще бы прикинуть как задержка вызванная фильтрацией повлияет на PID-регулятор
Насколько я понимаю, ничего страшного не будет, в том случае, ели задержка в обратной связи намного меньше времени переходного процесса (естественно эту задержку нужно учитывать при синтезе регулятора).

На практике, такая задержка встречается достаточно часто, например реальные термодатчики обладют «тепловой инерционностью» и вносят задержку в обратную связь.

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

ТАУ я изучал достаточно давно, так что могу ошибаться.
0
Грустно смотреть на эти предикторы, те что видел по крайней мере. Множество контуров, несколько моделей, с задержкой, без задержки. Лучше налюдатель добавить, проще. Или даже изменения коэффициентов ПИД будет достаточно. Мое мнение, тоже могу ошибаться, мне всегда нравились более общие методы, а свести их к частным никогда не поздно.
0
Или даже изменения коэффициентов ПИД будет достаточно

Изменение коефициентов ПИД – саамы простой вариант, но он не всегда возможен. С аналогичной проблемой я столкнулся на коптере. Из-за низкочастотных шумов получаемых с акселерометра (вызванных, в свою очередь, вибрацией двигателей и резонансом конструкции) данные приходится сильно фильтровать. Это, в свою очередь, вносит большую задержку в обратную связь. Задержка проявляется как перерегулирование.

Если уменьшать коэффициенты регулятора (увеличивать время переходного процесса) то коптер становится нестабильным, и с большой вероятностью столкнется с землей раньше, чем регулятор сможет его выровнять.
0
Коптер система не стабильная, неудержимо наращивать задержку а потом пытаться решить проблему нельзя. Точности в итоге не хватит, чтобы по выходу понять, что происходит внутри.

Не пробовали делать фильтры немного иначе? Смешивать не со старым значением а с преобразованным старым?

x(n) = a*x(n-1) + b*u

заменяется на,

x(n) = a*f(x(n-1)) + b*u

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

Без этого получается, что априорно предполагается, что коптер всегда неподвижен. И лишь большая разница наших предположений и показаний датчиков заставляет нас увидеть происходяшее.
0
Спасибо за совет.

Но пока у меня проблема в другом — я не могу избавиться от низкочастотных шумов с акселерометра. Из-за этих шумов (b*u) вносит погрешность в расчетное значение угла (порядка 3 градусов).

То есть, на неподвижном (стоящем на земле) коптере, при оборотах двигателей чуть ниже взлетных, я вижу, как вычисленный угол плавает с амплитудой в 3 градуса и периодом в 0.5 – 2 сек. При выключенных двигателях точность измерения составляет порядка десятых градуса, что вполне приемлемо.

Я не могу понять, откуда этот низкочастотный шум с частой 0.5 – 2 Гц. То, что двигатели дают вибрацию – это понятно и прогнозируемо, но это вибрация высокочастотная, легко обрезается ФНЧ. А вот откуда берутся низкочастотные шумы в акселерометре – для меня загадка.
0
Дык… эта, механические узлы не могут своими резонансами давать модуляцию сигнала? Мож там какие «ухудшители резонансов» приклеить?
А вырезать этот шум еще более низкочастотным фильтром нельзя?
Я вообще-то в этой технике ни бум-бум. Но раз уж на моей территории, то поддерживаю разговор :)
0
Не похоже на резонанс, слишком низкая частота, чтобы конструкция на ней резонировала. Бороться с вибрацией «механическими» методами можно, но я пока хочу выжать максимум из мат. обработки сигнала.

А вырезать этот шум еще более низкочастотным фильтром нельзя?

Более низкочастотный фильтр даст большую задержку в канале обратной связи – а это плохо.
0
Нейросетями её нейросетями… Свят, свят, свят… :)
0
Может я что-то пропустил, но как нейросети помогут решить данную проблему?
0
Чисто умозрительно: на вход подать исходные переменные, на выходе получить их скорректированные значения. Путем обучения теоретически можно ее приспособить правильно реагировать на описанную выше ситуацию (и не только).
0
Боюсь, что ничего не получится. Алгоритмы, которые используют нейросети, предполагают, что между входом и выходом есть некая зависимость.

Например, классическое использование нейросети – классификатор. Например, распознавание отдельных букв на изображении. На вход подается изображение, на выходе учитель говорит, какой букве алфавита оно соответствует. Алгоритм обучение пересчитывает веса связей внутри сети, и таким образом внутри сети формируется «правило», для классификации данного изображения. Между входом (изображением) и выходом (букой алфавита) есть четкая взаимосвязь, мы не можем ее описать математически, но она есть, и нейросеть в процессе обучения «находит» эту связь и «запоминает» ее в виде передаточных коэффициентов внутренних связей между нейронами.

А у меня на входе случайный шум…
0
А у меня на входе случайный шум…
Не совсем так. Я имел в виду использовать нейросеть для корректировки управляющих воздействий посчитанных существующей системой. Связь между входом и выходом в таком случае очевидна — есть то, что выдала существующая система и есть «правильные» воздействия, которые должны привести аппарат в желаемое состояние. Что-то вроде «умного» постфильтра. Хотя, повторюсь, это все сугубо гипотетически и вполне возможно, что я что-то упускаю.
0
По сути дела нейросеть, своего рода адаптивный фильтр. Только подбор коэффициентов выведен в определенную систему, т.н. обучение. Можно реализовать свою систему подбора коэффициентов, адаптированную под ваш случай. Но тут как всегда, глава угла — реализация…
0
Связь между входом и выходом в таком случае очевидна
А связь есть безусловно. Вот насколько она закономерна… Иначе может получиться, что система будет все время обучаться, так и не научившись летать. Вечный змий :)
0
Да, вполне может быть и такое. Тут у меня опыта маловато, что бы говорить более определенно. Из всех релевантных направлений в IT я имел дело только с маленьким кусочком data minig — tree model, но она тут, видимо не подойдет, хотя эмпирически накопленные знания она позволяет применять и весьма эффективно.
0
Ну вот, дошли до data minig :)

Тогда уж так – выкидываем все фильтры и ПИДы. Берем перцептрон, на входы подключаем датчики, на выходы – двигатели. Готово. Теперь осталось научить нейросеть летать :)
0
Ну вот, дошли до data minig :)
Да это я так, к слову упомянул.

Тогда уж так – выкидываем все фильтры и ПИДы. Берем перцептрон, на входы подключаем датчики, на выходы – двигатели. Готово. Теперь осталось научить нейросеть летать :)

Я так думаю, что это тоже вполне реально, только сеть надо будет большую и учить ее придется долго.
0
Думаю, это биения между частотами вращения двигателей. Они «плавают», немного различаясь между двигателями (аккурат 0.5…2Гц), отсюда и эффект.
Попробуйте запускать по одному движку, чтобы убедиться.
0
Хм. А это вариант. Спасибо, попробую.
0
А вот если у вас жесткие требования ко времени переходного процесса, и задержка соизмерима с этим временем – то появляются определенные проблемы. В таких случаях используют предикаторы (пытаются предсказать значение измеряемой величины).
Как раз мой случай. Ладно, буду курить учебник по ТАУ и разбираться дальше.
0
А какова АЧХ такого фильтра?
0
  • avatar
  • mzw
  • 20 августа 2012, 18:07
Для грубого оценивания фильтрации можно рассмотреть как простейший ФНЧ 1-го порядка, 20 дБ на декаду. Частота среза (омега) = 1/ТАУ. Из найденного Алфа можно оценить эту эквивалентую ТАУ, ведь Алфа = ЕХР(-Т/ТАУ), где Т — период выборок.
Но это кагбэ огибающая. Под ней провалы. И после частоты, равной половине частоты дискретизации она зеркально отображается и вновь доходит до единицы на частоте дискретизации.
Я АЧХ БИХ-фильтров не очень-то и считаю. Выбираю по быстродействию — и уж какая фильррация получится, так и слава Богу. А для КИХ — там программы нужны. Вручную непросто.
0
Но это кагбэ огибающая. Под ней провалы. И после частоты, равной половине частоты дискретизации она зеркально отображается и вновь доходит до единицы на частоте дискретизации.
тут АЧХ вроде бы без провалов должна быть как у простого RC фильтра.
это у скользящего среднего провалы на частоте соответсвующей периоду усреднения.
отражение спектра от Fs/2 всегда будет, от фильтра оно не зависит, просто следствие дискретизации по времени.
0
Мож и нет провалов. Да. Я же говорю, БИХ меня интересовал всегда как «допиливание» по частоте с основным упором на его быстродействие. Но по частоте среза, я думаю, не соврал.
0
Выглядит это так:

Работа фильтра

Фильтрация сама показана на средней картинке внизу. Для примера взята суперпозиция синусоид кратных 50 Гц. Дискретизация через 1 мсек. По спектрам сигнала видно, что в выходном каждая последующая синусоида имеет меньшую амплитуду, чем предыдущая. БПФ показывает не совсем красивый спектр, но для оценки влияния фильтра этого достаточно.

Ссылка на картинку: SimpleFilter.PNG
0
Хорошая статья, +1.

Только вот α пишется по-английски как alpha. Очень уж часто мелькает и режет глаз.
+1
  • avatar
  • _YS_
  • 20 августа 2012, 18:47
Странно, что меня еще за Бета не упрекнули :) Хотя по-украински мы так и пишем, не сдваивая многие буквы. Ведь те же англичане не говорят бет-та, а просто бета.
А вообще, я в курсах про греческий вариант ph. Но люблю, чтобы имена связанных переменных были одинакового размера.
0
А-а-а, тут причины эстетического характера. :) Понял. :)

Я обычно стараюсь всегда писать максимально корректно и грамотно. В случае сомнений лезу в гуглтранслейт. :)
+1
β, кстати, с одной t пишется, так что все ОК.
0
Хорошая статья, спасибо!
Если Вам есть еще, что рассказать по ЦОС и ТАУ для простых смертных — жду с нетерпением =)
+2
  • avatar
  • harm7
  • 20 августа 2012, 19:01
Спасибо за статью. У данного фильтра есть еще одно, «нетрадиционное» применение.
0
  • avatar
  • e_mc2
  • 20 августа 2012, 19:31
Я бы сказал, что в это еще одно применение взвешенного суммирования. То есть, если смотреть на инструменты мат.обработки как на дерево, то снизу ветка (или корень) — взвешенное суммирование, а уже от нее идут формулы фильтрации (нерекурсивная — участвуют только входные отсчеты, рекурсивная — и выходные тоже), а отдельная веточка — просто «рациональный» учет двух или более показаний для выведения некоей «уточненной» величины. Именно это я увидел в той статье. Ведь там участвуют не разнесенные во времени значения одной величины (то был бы фильтр), а одновременно существующие разные величины (угол по гироскопу и акселерометру).
Могу придумать еще пример из измерительной техники. Допустим, нас интересует напряжение, измеренное двумя приборами: точным, но медленным и грубым, но быстрым. Результат измерения можно получить как взвешенное среднее, но с ДИНАМИЧЕСКИМ ВЕСАМИ: пока показания стабильны, вес «точного» прибора больше, как только показания полетели — увеличиваем вес «грубого» быстрого прибора.
Пример придумал на ходу. Но в электронике такое используется, например, в создании многоканальных усилителей.
+1
Ведь там участвуют не разнесенные во времени значения одной величины

Не совсем так. Возможно, я не понятно это описал в статье, но для внесения коррекции мы используем предыдущее значение скорректированного угла (см. шаг 4 алгоритма).
Rx = (1 — w) * Rх + w * Gx
что эквивалентно
Rx(n) = (1 — w) * Rх(n — 1) + w * Gx
0
Пардон. Не разобрался.
0
Подскажите книжку по ТАУ :):) а то матюги какие-то понаписали :)))
Не, с математикой все ок, интеграл он и в Африке интеграл… а вот «огибающая», КИХ…
0
Выглядит это так:
И 3 нижних графика тоже интересуют…
0
ЦОС уж тогда, а не ТАУ.
у analog devices есть хорошая книжка, называется
Mixed Signal and DSP Design Techniques
перевод
0
Как обычно, AD на высоте! Замечательная книга. И нашел там ссылку на программу расчета КИХ фильтром с использованием алгоритма Ремеза. Йо-майо! Я ее в начале 80-х с книжки вводил на фортране, даже нашел там ошибки, исправил и запустил. Ох и гудел М6000, пока считал! Иногда требовалось нескольок часов для расчета. Но и фильтры же получались! Это что-то! В вольтетрах СКЗ они работали великолепно.
Щас скачал ту прогу, что есть на www.mds.com/downloads. Будет время — запущу. Интерсно сравнить скорость вычислений :)
0
её еще вылечить можно, тогда она будет генерить и сохранять массивы коэффициентов сразу виде .h файлов, которые потом просто #include <myfilter.h>. очень удобно.
0
О! Считает ВААЩЕ мгновенно. А коэффициентов даже не показывает, не то что в файл. Как ее лечить, поясни, плз!
0
Вот здесь я дал ссылку.
0
Нифига не понял, уважаемый. Установил Q1000demo. Теперь вижу Q2000. Ее ставить снова? А потом заменить тот файл, что появится как экзешник, на указанный патченый файл? Или как?
0
Это готовый дистрибутив с программой. Там указана версия. Для этой версии и приложен патченный запускаемый файл. Вы можете использовать демо программу или, заменив файл, использовать исправленный. Перемешивать версии не рекомендую.
Изменение касается набора байт, который исправляется вручную при помощи WinHEX или аналога. В архиве уже это сделано, но оставлена инструкция.
+1
Большое спасибо!
Работает. И Боже мой, как быстро теперь работают компы! Я поднапрягся, вспоминая примерное ТЗ, ввел требуемые параметры — бац! Уже результат на экране.
Сам не знаю, почему так удивлен, что за 30 лет компьютеры слегка изменились :) Просто слишком запомнилось, как это было мучительно долго тогда.
0
Как я недавно обнаружил, ЦОС пересекается с ТАУ где-то в области адаптивных фильтров и методов идентификации, адаптивного наблюдения, как минимум.
0
Они не пересекаются, а имеют общий аппарат интегрального и дифференциального исчисления, на основе чего и работают. Когда основа одна, то и результаты похожие, одно из другого вытекает. ТАУ больше работало в непрерывной области, когда были аналоговые вычислительные машины, но с появлением цифровой обработки, оказалось, что можно «оцифровать» многие аналоговые формулы.
ЦОС — это ведь не только цифровые фильтры:
1. Быков В. В., Цифровое моделирование в статистической радиотехнике, 1971
2. Гадзиковский В. И., Методы цифрового моделирования радиотехнических систем, 1995
0
А, так все же ЦОС… По цос я еще книгу пока не осилил…
Но вашу от АД обязательно прочитаю, пожалуй даже первой. Спасибо!
0
Гм, а напомни, что такое БИХ- и КИХ-фильтры. И как эти аббревиатуры расшифровываются.
0
  • avatar
  • Vga
  • 21 августа 2012, 01:06
Бесконечная/Конечная Импульсная Характеристика, ЕМНИП.
0
Ну, 2 основных класса — это рекурсивные и не рекурсивные фильтры, различаются по наличию или отсутствию «обратной связи» — выходных отсчетов в уравнении преобразования:
Y(n) = A1*Y(n-1) + A2*Y(n-2) +… + B0*X(n) + B1*X(n-1) +…
Если все Аi = 0, то обратной связи нет, нерекурсивный.
А конечность импульсной характеристики — свойство несколько иного рода. Хотя Википедия и проводит равенство между БИХ и наличием обратной связи, меня учили иначе: все нерекурсивные фильтры имеют КИХ, большинство реальных рекурсивных фильтров имеют БИХ, но существуют рекурсивные КИХ-фильтры. К сожалению, я теорией не занимался уже лет 25, поэтому пруфа не смогу предоставить. Но помнить помню: при некоторых соотношениях между числителем и знаменателем передаточной функции импульсная х-ка может быть конечной и у рекурсивного фильтра. А на пальцах я это понимал так: если на входе прошел импульс и умер, то входных остчетов скоро не станет видно (конечный порядок фильтра), а выходные отсчеты могут компенсировать сами себя и умирающие остатки от входных отсчетов — если сложатся как-то правильно :)
0
Опечатка именно в выделенном: существуют рекурсивные БИХ-фильтры
Извините!
0
Эээ, ты же только что говорил, что согласно вики рекурсивные и БИХ фильтры — одно и то же. Так что выделенное как раз было правильно.
0
Нет, я смею утверждать, что Вики врет.
Все нерекурсивные = КИХ
Рекурсивные = почти все БИХ, но есть и КИХ
Еще раз: пруфить не собираюсь, мне это не важно. Но такое читал в далеком 83-м. И поверил…
0
Рекурсивные = почти все БИХ, но есть и КИХ
Опечатка именно в выделенном: существуют рекурсивные БИХ-фильтры
Итого: ошибка в исправлении, а не исправляемом)
0
Бля. Еще раз извините. Было правильно
0
Я теорию тоже когда-то лет 25 назад (а то и больше) читал, да и то для общего развития, а не по работе/учебе. Так что таких подробностей не помню (хотя интуитивно понимаю). Но расшифровка аббревиатур КИХ/БИХ в голове осталась.
0
Как раз думал о таком для измерения скорости.
0
Статья толковая и для практики полезная. По поводу замены на RC цепочку — бред.
0
drvlas, принимай плюс, статья кошерная, пиши побольше.
0
1023*X[n] = (X[n] << 10) + X[n]
0
Наверное, все-таки, минус.
0
да
0
Уважаемые колеги! Спасибо за комментарии! Я написал новый вариант этой статьи и приглашаю просмотреть его. Эту статью как-то запихнуть кудЫсь… Не знаю, как это сделать.
0
В личный блог перенести можно. Топики, при желании, поменять ещё не поздно :)
0
Ага, понял — в режиме редектирования можно выбрать куда его поместить.
А вот что ты сказал о замене топиков — не пойму. И это сдерживает великое переселение этой заметки
И да, хотелось бы от соавтора коммент на новый вариант :)
0
В том же режиме редактирования можно и топик сменить. Это так, на случай чего, если первое название не понравилось или ещё чего. Только следует учитывать, что как при перемещении в другой раздел, так и при смене названия поста будет изменятся ссылка на сам пост (когда даёшь ссылку с другого поста или с другого сайта — надо обновить).

Соавтор — громко сказано. И я там уже отметился :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.