Показать сообщение отдельно
Старый 11.10.2015, 07:32   #41
tvf
Senior Member
 
Регистрация: Dec 2011
Сообщения: 741
Благодарил(а): 1 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: Обмениваемся своими макросами

Цитата
Сообщение от oboldeus Посмотреть сообщение
Может кому пригодится - макрос реализует альф-бета фильтр.
1. За идею спасибо.
2. Реализация фильтра кривая. Почитал статью, посмотрел макрос, выложенный ATS в версии 3.25. Автор макроса не только не понял самой идеи альфа-бета фильтра, но очень свободно отнесся к синтаксису языка Си.
3. Идея альфа-бета фильтра заключается в том, что фильтруемому параметру соответствуют 2 переменные: значение параметра и скорость изменения параметра. На основании этих 2 переменных, вычисленных в предыдущем такте, делается прогноз состояния параметра в текущем такте:

xk = xk_1 + ( vk_1 * dt ), где

xk - прогнозируемое значение параметра в текущем такте
xk_1 - значение параметра в предыдущем такте
vk_1 - скорость изменения параметра в предыдущем такте
dt - длительность такта

Скорость изменения в текущем такте приравнивается к скорости изменения в предыдущем такте:

vk = vk_1, где

vk_1 - скорость изменения параметра в предыдущем такте
vk - скорость изменения параметра в текущем такте

Далее находится невязка между текущим значением параметра и прогнозируемым значением параметра, вычисленным по значению и скорости параметра из предыдущего такта:

rk = xm - xk;где

xk - прогнозируемое значение параметра в текущем такте
xm - значение параметра в текущем такте
rk - невязка

Далее прогнозируемые значения параметра и скорости параметра корректируются в соответствии со значениями a и b:

xk += a*rk что эквивалентно записи xk1= xk + a*rk
vk += (b*rk )/dt что эквивалентно записи vk1=vk + (b*rk )/dt, где

xk1 - уже значение на выходе фильтра
vk1 - значение скорости изменения

Далее вычисленные значения запоминаются, для использования в следующем такте:

xk_1 = xk1 и vk_1 = vk1

4. Если мы положим параметр b =0, то получим обычный RC-фильтр.
5. В принципе, альфа-бета фильтр может дать лучшие результаты, чем RC-фильтр. Но тут все зависит от правильности выбора альфа-бета от установленного тика контроллера, параметров самого сигнала и параметров наложенного на него шума. Вычисления оптимальных альфа-бета это отдельная тема и здесь не рассматривается.
6. При неоптимальных альфа-бета от фильтра больше вреда чем пользы: пульсации на переходной характеристике, дребезг в установившемся режиме, зависимость результатов от времени тика при неизменных альфа-бета. Так что в нашем случае обычный RC-фильтр предпочтительней. Если не хватает степени фильтрации - ставьте последовательно 2-3 RC-фильтра.
7. Что бы не быть голословным, сделал тестовый проект, где можно посмотреть поведение фильтров:

альфа-бета-фильтр (ATS)
альфа-бета-фильтр (TVF)
RC-фильтр

Смотрите, сравнивайте.
Вложения
Тип файла: psl alpha-beta_tvf.psl (51.4 Кбайт, 149 просмотров)


__________________
Нет абсолютно бездарных людей. Каждый бездарен в своей области.
tvf вне форума   Ответить с цитированием