реклама на сайте
подробности

 
 
> Усрднение значений фазы
amusin
сообщение Aug 20 2010, 06:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



Есть измерения фазы в диапазоне 0...359 градусов.
Допустим, показания болтаются около отметки 0 градусов:
половина значений в первом квадранте, половина - в четвертом.
Среднее арифметическое даст примерно 180 градусов, что неверно.

Пока видится одно решение:
сохраняем массив измерений,
доворачиваем измерения настолько, чтобы сектор "болтанки" не лежал на угле 0 градусов.
Решение не нравится тем, что надо копить данные в ОЗУ.

Есть более красивые варианты?

Сообщение отредактировал amusin - Aug 20 2010, 06:38
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_4afc_
сообщение Aug 20 2010, 07:25
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(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: Никогда не усреднял фазу, но вроде должно сработать smile.gif
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Aug 20 2010, 08:56
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(_4afc_ @ Aug 20 2010, 11:25) *
Для борьбы с накоплением ошибки - я бы добавил стекание типа F=F-F/1024;


Вернее S=S-S/1024; конечно же wink.gif

Цитата(Oldring @ Aug 20 2010, 12:17) *
Мне кажется, что если я после двух прочтений так и не понял, что именно вы хотите сделать - это всё слишком сложно, и поэтому, малореализуемо. laughing.gif


Не вижу сложностей в алгоритме, возможно вас пугает детальное описание - имелось ввиду следующее:

Я предлагаю работать не со значениями фазы, а с разницей между измеренным значением фазы (А) и значением фазы вычисленное в предыдущий момент (F) и выводимое например на индикатор.
Т.е. B=f(A,F). Функция f - не просто B=A-F. Она ещё приводит значение B в диапазон -179...+180.
Числа B усредняем скользящим окном. Накопление ошибок в скользящем окне устраняем стеканием.F - выводим на экран.
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 20 2010, 10:11
Сообщение #4


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (_4afc_ @ Aug 20 2010, 12:56) *
Вернее S=S-S/1024; конечно же wink.gif



Не вижу сложностей в алгоритме, возможно вас пугает детальное описание - имелось ввиду следующее:

Я предлагаю работать не со значениями фазы, а с разницей между измеренным значением фазы (А) и значением фазы вычисленное в предыдущий момент (F) и выводимое например на индикатор.
Т.е. B=f(A,F). Функция f - не просто B=A-F. Она ещё приводит значение B в диапазон -179...+180.
Числа B усредняем скользящим окном. Накопление ошибок в скользящем окне устраняем стеканием.F - выводим на экран.


Это последовательное восстановление каждого следующего значения фазы по предыдущим по непрерывности
"Допустим что болтаются возле 0" - допущение произвольное. Обычно нет механизма, который может гарантировать
Если есть - то конечно, достаточно привести к интервалу (-pi pi)
В самом общем случае, если фаза не в окрестности нуля а где-угодно на окружности

if (fabs(fi0-fi) > PI) {// фазовый разрыв
if (fabs(fi0-fi-2*PI) <= M_PI) {
fi += 2*PI;
}else {
fi -= 2*PI;
}
fi0 = Усреднение(fi) // например интегратором с утечкой

Это очень простой последовательный алгоритм, однако по отношению к шуму хуже чем накоплять экспоненту,
а потом уже брать угол/ Последний алгоритм Олдринга - параллельный и по-существу оптимальный по отношению к шуму (второй Олдринга, первый Олдринга в общем случае не работает , только когда фаза болтается где-то возле 0, а не где-то возле пи) "
Go to the top of the page
 
+Quote Post
Oldring
сообщение Aug 20 2010, 10:43
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(fontp @ Aug 20 2010, 14:11) *
первый Олдринга в общем случае не работает , только когда фаза болтается где-то возле 0, а не где-то возле пи) "


Чушь. Нужно только чтобы СКО было мало по сравнению с pi.
Что подразумевается, исходя из примененного автором темы термина "болтается около".

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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 20 2010, 10:54
Сообщение #6


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (Oldring @ Aug 20 2010, 14:43) *
Чушь. Нужно только чтобы СКО было мало по сравнению с pi.
Что подразумевается, исходя из примененного автором темы термина "болтается около".


допустим,
mean( unwrap( phi ) )=0, если фаза болтается в окрестности pi и около

Думаю, автор сказал, про "допустим" чтобы разобраться, а не потому, что это априорно известно.
Если априорно известно, где болтается фаза, то нет проблем, я об этом сказал
А вы Найтман, опять нахамили
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amusin   Усрднение значений фазы   Aug 20 2010, 06:38
- - Oldring   Цитата(amusin @ Aug 20 2010, 10:38) Есть ...   Aug 20 2010, 07:05
|- - amusin   Цитата(Oldring @ Aug 20 2010, 13:05) Спа...   Aug 20 2010, 07:20
- - Fat Robot   усрядняете cos(phi) и sin(phi). в конце - 4-х квад...   Aug 20 2010, 07:09
|- - Oldring   Цитата(_4afc_ @ Aug 20 2010, 11:25) Вариа...   Aug 20 2010, 08:17
|- - Oldring   Цитата(_4afc_ @ Aug 20 2010, 12:56) Не ви...   Aug 20 2010, 11:11
|- - fontp   QUOTE (Oldring @ Aug 20 2010, 15:11) CODE...   Aug 20 2010, 11:32
|- - Oldring   Цитата(fontp @ Aug 20 2010, 15:32) Посмот...   Aug 20 2010, 11:47
- - thermit   Цитатаamusin: Есть измерения фазы в диапазоне 0......   Aug 20 2010, 11:35
- - thermit   ЦитатаOldring: Это не усреднение, а фильтрация IIR...   Aug 20 2010, 11:55
|- - Oldring   Цитата(thermit @ Aug 20 2010, 15:55) Усре...   Aug 20 2010, 11:58
|- - _4afc_   Ребят. Я в научных терминах не силён. Но предложен...   Aug 20 2010, 12:28
|- - Oldring   Цитата(_4afc_ @ Aug 20 2010, 16:28) Код п...   Aug 20 2010, 12:48
|- - _4afc_   Цитата(Oldring @ Aug 20 2010, 16:48) Во-п...   Aug 20 2010, 13:13
|- - Oldring   Цитата(_4afc_ @ Aug 20 2010, 17:13) Обычн...   Aug 20 2010, 13:18
- - Stanislav   Цитата(amusin @ Aug 20 2010, 10:38) Есть ...   Aug 27 2010, 20:42


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 15:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016