Цитата:
Сообщение от 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-фильтр
Смотрите, сравнивайте.