Цитата(amusin @ Aug 20 2010, 10:38)

Есть измерения фазы в диапазоне 0...359 градусов.
Допустим, показания болтаются около отметки 0 градусов:
половина значений в первом квадранте, половина - в четвертом.
Среднее арифметическое даст примерно 180 градусов, что неверно.
Пока видится одно решение:
сохраняем массив измерений,
доворачиваем измерения настолько, чтобы сектор "болтанки" не лежал на угле 0 градусов.
Решение не нравится тем, что надо копить данные в ОЗУ.
Есть более красивые варианты?
Вариант 1:
Если, по по вашему мнению, доворачивание помогает - доворачивайте сразу перед сохранением массива.
Тогда, как я понимаю массив в вашем алгоритме не понадобится.
Если бы мне нужна была точность в 1 градус - я бы завёл массив из 360 счётчиков и увеличивал их необходимое время.
Далее хоть максимумы берите, хоть распределения и дисперсии смотрите.
-----------------------------------------------------------------------------------------
Вариант 2:
2.0 заводим 3 переменных S,N,F
2.1 изменить представление диапазона с 0...359, на -179...180
2.2 за 0 принять результат предыдущего измерения фазы (F)
2.3 преобразовать измеренное значение в представление 2.1+2.2
2.4 Цикл S=S+измеренное; N++.
2.5 F=F+S/N;
Но лучше ещё добавить скользящее окно.
Тогда к этим трём переменным добавится массив длинной в окно (кольцевой буфер), а N превратится в указатель текущего отсчёта в кольцевом буфере.
Соответственно S=S+измеренное-B[N];B[N]=измеренное;(N++)%длинна окна. F=F+S/длинна окна;
Для борьбы с накоплением ошибки - я бы добавил стекание типа F=F-F/1024;
PS: Никогда не усреднял фазу, но вроде должно сработать