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

 
 
> Усрднение значений фазы
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

Сообщений в этой теме
- 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
|- - fontp   QUOTE (_4afc_ @ Aug 20 2010, 12:56) Верне...   Aug 20 2010, 10:11
||- - Oldring   Цитата(fontp @ Aug 20 2010, 14:11) первый...   Aug 20 2010, 10:43
||- - fontp   QUOTE (Oldring @ Aug 20 2010, 14:43) Чушь...   Aug 20 2010, 10:54
|- - 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 Текстовая версия Сейчас: 9th August 2025 - 05:07
Рейтинг@Mail.ru


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