Цитата(Oldring @ Aug 20 2010, 16:48)

Во-первых, на многих микроконтроллерах int 16-битный, поэтому алгоритм будет как-то работать, только если число точек в окне не превышает порядка 150. Кстати, такого буфера окна автор вопроса хотел избежать.
Прикол в том, что результат
GetPhaseDiff() уже можно фильтровать любым фильтром.
Собственно
GetPhaseDiff() и есть ответ на вопрос заданный вначале темы.
В данном случае B отлично отфильтрован 16 точечным скользящим окном.
Переменная S может быть любой разрядности, было бы желание.
Цитата(Oldring @ Aug 20 2010, 16:48)

Во-вторых, F - это кумулятивная сумма от среднего, но не само среднее. Зачем она вам вобще нужна?
Я таких умных словей как "кумулятивная сумма от среднего" не знаю.
Если окно не нужно - его можно не использовать. Тупо складывайте значения B и делите на их количество - узнаете среднее изменение фазы за всё время наблюдения.
Цитата(Oldring @ Aug 20 2010, 16:48)

В-третьих, любому программисту известно, что "стекание" будет работать только при превышении модулем S величины 65535.
Обычно S у меня с фиксированной точкой как и В. Например 16.16.
Цитата(Oldring @ Aug 20 2010, 16:48)

В-четвертых, "переполнение" S может наблюдаться только в том случае, если каким-то образом поработает немного "стекание", а иначе оно возникнуть не может.
В реальной жизни чего только не бывает, при реализации алгоритмов ЦОС на конкретном железе.
Приведённый код - показывает идею, и как использовать результат GetPhaseDiff().