Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Округление результатов измерения
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
=AK=
Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить" их (или, скажем, представить в виде чисел с фиксированной запятой). "Округление" надо произвести таким образом, чтобы относительное расположение результирующих точек изменилось как можно меньше. Абсолютная погрешность "окрyгления" роли не играет.

Например, возьмем 3 значения:
1.4
1.6
3.6

Обычное округление даст результат
1
2
4

Однако если я "округлю" 1.4 до 2, то результат будет
2
2
4

что гораздо точнее, поскольку "расстояние" между точками 1.4 и 1.6 равно всего 0.2, поэтомy их правильнее округлить до одного и того же значения 2, а не до 1 и 2.
Tanya
Цитата(=AK= @ Jan 19 2007, 09:19) *
Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить" их (или, скажем, представить в виде чисел с фиксированной запятой). "Округление" надо произвести таким образом, чтобы относительное расположение результирующих точек изменилось как можно меньше. Абсолютная погрешность "окрегления" роли не играет.

Например, возьмем 3 значения:
1.4
1.6
3.6

Обычное округление даст результат
1
2
4

Однако если я "округлю" 1.4 до 2, то результат будет
2
2
4

что гораздо точнее, поскольку "расстояние" между точками 1.4 и 1.6 равно всего 0.2, поэтоме их правильнее округлить до одного и того же значения 2, а не до 1 и 2.

Не очень понятно, что Вы хотите получить...
Вот если к Вашему набору (или это последовательность?) добавить в начало(или в конец) еще 1.3, то что Вы желаете иметь?
=AK=
Цитата(Tanya @ Jan 19 2007, 16:04) *
Вот если к Вашему набору (или это последовательность?) добавить в начало(или в конец) еще 1.3, то что Вы желаете иметь?

Тогда бы я "округлил" так
1.3 - 1
1.4 - 1
1.6 - 1
3.6 - 3
1.3 - 1

Примерная аналогия с такой задачей. Представьте, что вы нарисовали на листочке бумаги в клетку какую-то геометрическую фигуру, скажем, треугольник. Теперь надо перерисовать его так, чтобы все вершины оказались на сетке клетчатой бумаги, а результирующая фигура была максимально подобна исходной.
NickNich
Цитата(=AK= @ Jan 19 2007, 09:19) *
Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить"


Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени? От этих условий зависит насколько качество округления удовлетворяет Вашему правилу.

Если обрабатываются накопленные данные, то здесь можно применить какой-нить интегральный критерий качества, удовлетворения которому добиваются прямым перебором. Например - минимизируется сумма расстояний от истинных значений до их округленных версий.

Если реч идет о нелинейной фильтрации - тут возможны варианты. Качество результата будет зависеть от размера скользящего окна, в котором выполняется округление. Известный аналог такой процедуры - медианная вильтрация.
=AK=
Цитата(NickNich @ Jan 19 2007, 16:26) *
Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени?

По конечному массиву накопленных данных.

Перебором трудно, точек может быть много.
Tanya
Цитата(=AK= @ Jan 19 2007, 10:03) *
Цитата(NickNich @ Jan 19 2007, 16:26) *

Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени?

По конечному массиву накопленных данных.

Перебором трудно, точек может быть много.

Тогда находите среднее (или центр масс, если абсолютная погрешность одинаковая), смещаете на это значение, округляете, смещаете назад. Кажется, Вы этого хотите...
NickNich
Цитата(=AK= @ Jan 19 2007, 09:54) *
Тогда бы я "округлил" так
1.3 - 1
1.4 - 1
1.6 - 1
3.6 - 3
1.3 - 1

А если такая последовательность задана:
1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 и так далее с увеличением на 0.1
До какого числа их нужно округлять?
=AK=
Цитата(NickNich @ Jan 19 2007, 17:08) *
А если такая последовательность задана:
1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 и так далее с увеличением на 0.1
До какого числа их нужно округлять?

В этом случае можно использовать обычное округление, т.к. с такими данными все равно как округлять - ничего "выгадать" не удастся. Выгадывать удается если числа как-то коррелируют с сеткой, до которой их округляют.
NickNich
Цитата(=AK= @ Jan 19 2007, 10:57) *
Выгадывать удается если числа как-то коррелируют с сеткой, до которой их округляют.

Тут нужно определиться с терминами.
Изначально термин корреляция обозначаль количественную меру статистической связи между двумя случайными величинами. Далее, этим термином стали определять вообще любую связь двх любых понятий. В этом смысле любой набор чисел "коррелирует" с сеткой, до которой эти числа округляют, если задано единое правило округления.

Для того, чтобы не блуждать внаглядных примерах, просто напишите конечную цель, которой Вы добиваетесь обрабатывая массив данных.
=AK=
Цитата(NickNich @ Jan 19 2007, 19:29) *
Для того, чтобы не блуждать внаглядных примерах, просто напишите конечную цель, которой Вы добиваетесь обрабатывая массив данных.

Есть N выходов от устройства, способного генерировать произвольную последовательность цифровых сигналов (pattern генератор). Выходы соединены с нагрузками при помощи коаксиальных кабелей разной длины. Для компенсации разницы задержек распространения в кабелях на каждом выходе генератора стоит сдвиговый регистр - в качестве линии задержки. Сдвиговые регистры тактируется некой тактовой частотой, для определенности - с периодом 10 нс.

В состав устройства включен измеритель времени задержки распространения сигнала в коакс. кабеле, он измеряет время задержки довольно точно, для определенности - с точностью 0.1 нс.

После того, как измерены времена задержки всех кабелей, необходимо выставить оптимальное время для каждой линии задержки таким образом, чтобы сигнал, одновременно поданный на все выходы ЛЗ, дошел бы до каждого приемника "одновременно". То есть, чтобы разница во времени между самым ранним и самым поздним дошедшим сигналом была минимальна.
NickNich
Цитата(=AK= @ Jan 19 2007, 13:16) *
То есть, чтобы разница во времени между самым ранним и самым поздним дошедшим сигналом была минимальна.

Например так - выставляете для самого медленного кабеля (с самой длинной задержкой) один дискретный элемент задержки. Округлить физическую задержку в кабеле Вы все арвно не сможете. Задержки в остальных каналах выбираете так, чтобы сумма собственной задержки кабеля и задержки в наборе элементов наименьшим образом отличалась (в любую сторону)от суммарной задержки самого медленного кабеля.

Для каждого кабеля всего два варианта - если ni-число элеиментов при котором суммарная задержка в i-том кабеле меньше суммарной задержки медленного кабеля, а при ni+1 - больше суммарной задержки медленного кабеля, то выбирается такое ni или ni+1, которое меньше всего отличается от суммарной задержки медленного кабеля
=AK=
Цитата(NickNich @ Jan 19 2007, 20:22) *
Задержки в остальных каналах выбираете так, чтобы сумма собственной задержки кабеля и задержки в наборе элементов наименьшим образом отличалась (в любую сторону)от суммарной задержки самого медленного кабеля.

"Настроить" задержку для каждого кабеля надо так, чтобы разность между макс и мин задержкой для всех кабелей была минимальна. Поэтому не получится брать за основу какой-то один кабель. Такой пример:
- самый длинный кабель 90 нс
- второй кабель 84 нс
- третий кабель 86 нс

Если настраивать задержки так, как Вы предлагаете:
- к длинному добавили 10 нс, в сумме 100 нс
- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс
- к третьему добавили 10 нс, в сумме 96 нс, разница с "длинным" 4 нс
Суммарная разница в группе 104 - 96 = 8 нс

Очевидно, что можно настроить лучше:
- к длинному добавили 10 нс, в сумме 100 нс
- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс
- к третьему добавили 20 нс, в сумме 106 нс, разница с "длинным" 6 нс
Суммарная разница в группе 106 - 100 = 6 нс, разброс получился на 2 нс меньше.
InvisibleFed
В книжках по регрессионно-корреляционному анализу сие должно быть. Я копал бы в сторону мат. ожидания и среднеквадратического отклонения. Вся проблема правильно расставить веса. Если не получиться - вместо мат ождания можно поработать со средним геометрическим. Задача про треугольник наверняка классическая. Если меня не опередять - чуть разгружусь - попробую выдумать.
Tanya
Цитата(=AK= @ Jan 20 2007, 03:33) *
Цитата(NickNich @ Jan 19 2007, 20:22) *

Задержки в остальных каналах выбираете так, чтобы сумма собственной задержки кабеля и задержки в наборе элементов наименьшим образом отличалась (в любую сторону)от суммарной задержки самого медленного кабеля.

"Настроить" задержку для каждого кабеля надо так, чтобы разность между макс и мин задержкой для всех кабелей была минимальна. Поэтому не получится брать за основу какой-то один кабель. Такой пример:
- самый длинный кабель 90 нс
- второй кабель 84 нс
- третий кабель 86 нс

Если настраивать задержки так, как Вы предлагаете:
- к длинному добавили 10 нс, в сумме 100 нс
- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс
- к третьему добавили 10 нс, в сумме 96 нс, разница с "длинным" 4 нс
Суммарная разница в группе 104 - 96 = 8 нс

Очевидно, что можно настроить лучше:
- к длинному добавили 10 нс, в сумме 100 нс
- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс
- к третьему добавили 20 нс, в сумме 106 нс, разница с "длинным" 6 нс
Суммарная разница в группе 106 - 100 = 6 нс, разброс получился на 2 нс меньше.

Алгоритм.
1. Сначала все точки сводятся в интервал (X, X+10)
2. Находится левая крайняя. Сдвигается вправо на 10. Успех - повтор. Нет первого успеха - 3.
3. Находим правую крайнюю сдвигаем влево на 10. Успех - повтор. Нет успеха - выход.
=AK=
Цитата(Tanya @ Jan 20 2007, 20:56) *
Алгоритм.
1. Сначала все точки сводятся в интервал (X, X+10)
2. Находится левая крайняя. Сдвигается вправо на 10. Успех - повтор. Нет первого успеха - 3.
3. Находим правую крайнюю сдвигаем влево на 10. Успех - повтор. Нет успеха - выход.

Мне кажется, это не будет работать при определенных наборах. Например, возьмем такой набор:
1
1.1
9
9.1
Разница макс-мин 9.1-1=8.1 нс

Понятно, что оптимальный результат должен быть
11
11.1
9
9.1
Это даст разницу макс-мин всего в 2.1 нс

Если использовать Ваш алгоритм, то исходный набор не удастся привести к оптимальному, т.к. при сдвиге "левой крайней" точки 1 вправо на 10 получится "неуспех":
11
1.1
9
9.1
Получается макс-мин=11-1.1=9.9 нс, что хуже, чем исходные 8.1 нс
Если сдвинуть самую правую точку 9.1 влево на 10, то опять получится макс-мин=9.9 нс.
Tanya
Цитата(=AK= @ Jan 20 2007, 14:57) *
Цитата(Tanya @ Jan 20 2007, 20:56) *

Алгоритм.
1. Сначала все точки сводятся в интервал (X, X+10)
2. Находится левая крайняя. Сдвигается вправо на 10. Успех - повтор. Нет первого успеха - 3.
3. Находим правую крайнюю сдвигаем влево на 10. Успех - повтор. Нет успеха - выход.

Мне кажется, это не будет работать при определенных наборах. Например, возьмем такой набор:
1
1.1
9
9.1
Разница макс-мин 9.1-1=8.1 нс

Понятно, что оптимальный результат должен быть
11
11.1
9
9.1
Это даст разницу макс-мин всего в 2.1 нс

Если использовать Ваш алгоритм, то исходный набор не удастся привести к оптимальному, т.к. при сдвиге "левой крайней" точки 1 вправо на 10 получится "неуспех":
11
1.1
9
9.1
Получается макс-мин=11-1.1=9.9 нс, что хуже, чем исходные 8.1 нс
Если сдвинуть самую правую точку 9.1 влево на 10, то опять получится макс-мин=9.9 нс.

Да. Ошибочка вышла.
Однако, ларчик просто открывался.
Сводим на вышеупомянутый интервал.
Вычисляем 10 - (Xmax - Xmin) =A
Находим максимальное расстояние между ближайшими соседями. Если оно больше A, то переносим все, что левее вправо. Или наоборот... Если нет такого расстояния, то все уже в порядке.
Объяснение (задача для младших классов, поэтому не будем вводить термин диаметр множества.) в аллегорической форме.
Представим себе полимерную цепь на вышеупомянутом интервале. Можно еще представить для наглядности, что по краям торчат палки до 0 и 10. Произведем ее сечение, а затем пришьем левый кусок справа к правому. Получится цепь укороченная на длину разрезанной связи и удлиненная на A.
Отсюда вытекает решение. Примечание. Точки с одинаковым значением считаем одной точкой.
Можно еще представить себе четки...
=AK=
Цитата(Tanya @ Jan 21 2007, 18:55) *
Сводим на вышеупомянутый интервал.
Вычисляем 10 - (Xmax - Xmin) =A
Находим максимальное расстояние между ближайшими соседями. Если оно больше A, то переносим все, что левее вправо. Или наоборот... Если нет такого расстояния, то все уже в порядке.


Спасибо. Можно еще так представить. После того, как значения приведены к интервалу 0...10 и обозначены на этом отрезке точками, сворачиваем этот интервал в кольцо. Теперь находим на кольце максимальное расстояние между соседними точками, и в этом месте разрываем кольцо, снова превращия его в отрезок. Порядок расположения точек на получившимся отрезке даст максимально "плотное округление".

А теперь такой вопрос.

Вместо описанного Вами "оптимального" алгоритма используется такой упрощенный алгоритм:
- определяется самый длинный кабель с временем Тмакс, задержка к нему добавляться не будет
- для любого кабеля с задержкой Тх определяется разность Тр=Тмакс-Тх
- полученное значение Тр самым обычным способом округляется до ближайшего кратного 10 нс, это будет добавленная задержка

Численный пример, приводившийся ранее:
1 нс
1.1 нс
9 нс
9.1 нс
Самая большая задержка 9.1 нс
для 1 нс разность 9.1-1=8.1, округляем до 10 нс, в сумме 1+10 = 11 нс
для 1.1 нс разность 9.1-1.1=8.0, округляем до 10 нс, в сумме 1.1+10 = 11.1 нс
для 9 нс разность 9.1-9=0.1, округляем до 0 нс, в сумме 9+0 = 9 нс

Получили такой же результат, какой дал бы "оптимальный" алгоритм, однако намного более простым способом.

В каких случаях этот алгоритм будет хуже "оптимального"? Вернее, насколько он будет хуже "оптимального" в самом благоприятном для "оптимального" случае?

"На глазок" он проигрывает оптимальному пренебрежимо мало.
Tanya
Цитата(=AK= @ Jan 23 2007, 13:37) *
Спасибо. Можно еще так представить. После того, как значения приведены к интервалу 0...10 и обозначены на этом отрезке точками, сворачиваем этот интервал в кольцо. Теперь находим на кольце максимальное расстояние между соседними точками, и в этом месте разрываем кольцо, снова превращия его в отрезок. Порядок расположения точек на получившимся отрезке даст максимально "плотное округление".

А теперь такой вопрос.

Вместо описанного Вами "оптимального" алгоритма используется такой упрощенный алгоритм:
- определяется самый длинный кабель с временем Тмакс, задержка к нему добавляться не будет
- для любого кабеля с задержкой Тх определяется разность Тр=Тмакс-Тх
- полученное значение Тр самым обычным способом округляется до ближайшего кратного 10 нс, это будет добавленная задержка


"На глазок" он проигрывает оптимальному пренебрежимо мало.

Вот Вы и представили себе четки.
А про Ваш алгоритм нет времени пока. Пока... Пока.
Нет, не пока, вроде на ум такое пришло, что из точек 100, 94.9 и 95.1 вы получите плохо. В два раза хуже.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.